新しい IBM Developer JP サイトへようこそ!サイトのデザインが一新され、旧 developerWorks のコンテンツも統合されました。 詳細はこちら

Prometheus と Grafana を使用して、カスタム・メトリック・サーバーを Cloud Foundry 上にデプロイする

オープンソース・モニタリング・ツールの GrafanaPrometheus を組み合わせると、メトリックの収集、保管、視覚化のすべてに対処できる包括的なソリューションになります。Prometheus はデータベースなので、本番環境で使用する場合、Cloud Foundry 上にデプロイするのは理想的なソリューションとは言えません。けれども開発やテストの際は、Cloud Foundry を使用するとデプロイ・プロセスが容易になります。

このチュートリアルでは、マネージド Prometheus データベースと Grafana Web アプリケーションを IBM Cloud 上の Cloud Foundry 環境にデプロイする方法を説明します。Cloud Foundry は、インフラストラクチャーとなり、HTTP に使用する SSL 証明書を提供し、容易な管理とリソース管理を行うことができます。

このチュートリアルで説明する Grafana デプロイメント構成は開発を目的としたものですが、Cloud Foundry 上での Grafana デプロイメントを本番環境対応にすることもできます。それには構成を変更して、本番環境でのデプロイメントに合わせて調整すればよいだけです。

所要時間

このチュートリアルの所要時間は約 30 分です。

前提条件

  1. 無料の IBM Cloud アカウントを作成します。
  2. IBM Cloud CLI をインストールします。スタンドアロンの IBM Cloud CLI をダウンロードすることもできます。

ステップ 1. ターミナルから CLI を使用して IBM Cloud にログインする

  1. e-メール・アドレスとパスワードを入力して IBM Cloud アカウントにログインします。

    複数のアカウントをお持ちの場合、クライアントから、接続するアカウントを選択するよう求められます。その場合は、アカウント番号を入力して Enter キーを押します。クライアントからリージョンを選択するよう求められたら、組織が配置されているリージョンを選択してください。次のような選択項目が表示されるはずです。

    画像

    次のような出力が表示されます。

    画像

  2. ibmcloud client をデフォルトのユーザー・グループに設定します。

    ibmcloud target -g Default

  3. リソース・グループを設定すると、ターゲットとする IBM Cloud Foundry の組織とスペースを指定できるようになります。

    ibmcloud target --cf

  4. ステップ 1 から 3 までを完了すると、次の画像に示すような出力が表示されます。

    画像

ステップ 2. Prometheus サーバーをデプロイする

Prometheus を Cloud Foundry 上にデプロイするには、次の 3 つが必要です。

  1. Prometheus バイナリー
  2. Prometheus 構成ファイル
  3. Cloud Foundry マニフェスト・ファイルとコマンド

Cloud Foundry には、アプリのフレームワークとランタイムをサポートするビルドパックを取り込む必要があります。ビルドパックによって、ダウンロードする依存関係と、アプリとそのバインド先のサービスとの通信を構成する方法が決まります。ビルドパックとその機能についての詳細は、Cloud Foundry ビルドパックのドキュメントを参照してください。

このチュートリアルでは Cloud Foundry 上で Prometheus を実行するために、このバイナリー・ビルドパックを取り込みます。次に、Prometheus 構成ファイルを編集して、デプロイメントのマニフェスト・ファイルを作成します。以降のステップで、この一連の方法を説明します。

Prometheus サーバー・バイナリーをダウンロードする

Prometheus のインストールには、次の 3 つの方法があります。

  1. プリコンパイルされたバイナリーを使用する
  2. Prometheus コンポーネントをソースからビルドする
  3. Docker 上で Prometheus を実行する

このデプロイメントではプリコンパイルされたバイナリーを使用します。デプロイする前に、最新バージョンの Prometheus をダウンロードしてください。「Prometheus」セクションにナビゲートして、Linux オペレーティング・システムをターゲットとするバイナリーをダウンロードします。以下の図に示すように、オペレーティング・システムをフィルタリングできます。

画像

prometheus-\.\-\.tar.gz 」をクリックして、このバイナリーをダウンロードします。

この tar ファイルを解凍するには、ダブルクリックして抽出プログラムを使用するか、UNIX システム上で tar xzf <filename> コマンドを実行します。

Prometheus 構成ファイルを編集する

抽出されたフォルダー内に、prometheus.yml という名前の構成ファイルがあるはずです。以下に、このファイル内で Cloud Foundry 用に構成した部分を抜粋します。ここに示されているように、最後の行 - targets: ['localhost:9090'] を Cloud Foundry ネットワークの要件に合わせて編集して、ポートを 9090 から 8080 に変更する必要があります。

Cloud Foundry に有効な構成ファイルの内容は次のようになります。

# my global config
global:
  scrape_interval:     15s # Set the scrape interval to every 15 seconds. Default is every 1 minute.
  evaluation_interval: 15s # Evaluate rules every 15 seconds. The default is every 1 minute.
  # scrape_timeout is set to the global default (10s).

# Alertmanager configuration
alerting:
  alertmanagers:
  - static_configs:
    - targets:
      # - alertmanager:9093

# Load rules once and periodically evaluate them according to the global 'evaluation_interval'.
rule_files:
  # - "first_rules.yml"
  # - "second_rules.yml"

# A scrape configuration containing exactly one endpoint to scrape:
# Here it's Prometheus itself.
scrape_configs:
  # The job name is added as a label `job=<job_name>` to any timeseries scraped from this config.
  - job_name: 'prometheus'

    # metrics_path defaults to '/metrics'
    # scheme defaults to 'http'.

    static_configs:
    - targets: ['localhost:8080'] # this field is configured

Prometheus 用の Cloud Foundry マニフェスト・ファイルを作成する

マニフェストを使用して一貫性と再現性を確保することで、アプリのデプロイを自動化できます。マニフェストとコマンド・ラインのオプションの両方を使用することで、ibmcloud cf push のデフォルトの属性値をオーバーライドできます。マニフェスト・ファイルについて詳しくは、このマニフェストのドキュメントを参照してください。

このチュートリアルでは Prometheus サーバーをデプロイする際に、以下に記載する manifest.yml を使用します。manifest.yml ファイルは、prometheus 実行可能ファイルが置かれているフォルダー内に作成する必要があります。

---
applications:
- name: prometheus-test
  instances: 1
  buildpack: https://github.com/cloudfoundry/binary-buildpack.git
  command: ./prometheus --config.file=prometheus.yml --web.listen-address=:8080
  memory: 256M
  random-route: true

上記のコードで使用されている各要素の意味を説明しましょう。

  • 3 つ続けたダッシュ記号 (- – -) は、YAML ファイルの開始を示します。
  • applications は YAML 配列です。配列に含まれる各項目が Cloud Foundry アプリケーションを定義します。
  • name は、Cloud Foundry アプリケーションの名前です。
  • instances は、このアプリケーションのインスタンスをいくつ実行するかを定義します。
  • buildpack には、このアプリケーションに使用するビルドバックとして binary-buildpack を設定します。
  • command は、デプロイメントの準備ができたときに Cloud Foundry が実行するコマンドで、次の要素からなります。
    • prometheus は、デプロイメントに使用するバイナリー・ファイルです。
    • config.file は、編集した Prometheus 構成ファイルを設定する引数です。
    • web.listen-address は、ネットワーク IP とアドレスを設定する引数です。:8080 は、Prometheus サーバーがポート 8080 を listen することを意味します。デフォルトのポートは 9090 ですが、Cloud Foundry はデフォルトでポート 8080 上で動作します。
  • memory は、Cloud Foundry アプリケーションで使用するメモリーを設定するフィールドです。
  • random-route は、IBM Cloud 上のランダム・ルートを設定します。開発やテストの際には、このパラメーターを true に設定すると役立ちます。 これにより、TLS 暗号化が構成されたランダム・ドメイン名を使用できるようになります。

これで、このマニフェスト・ファイルを使用して、Prometheus サーバーをデプロイする準備ができました。

Prometheus サーバーを IBM Cloud 上にデプロイする

カレント・ディレクトリーを、prometheusprometheus.ymlmanifest.yml が格納されているフォルダーに変更します。フォルダー構造は例えば次のようになっているはずです。

画像

カレント・ディレクトリーをこのフォルダーに変更したら、次のコマンドを実行して Prometheus サーバーを IBM Cloud 上にデプロイします。

ibmcloud cf push

アプリケーションが実行中であることを確認するには、IBM Cloud ダッシュボードで以下の手順に従います。

  1. IBM Cloud アカウントにログインしていることを確認します。
  2. 左上隅にあるナビゲーション・メニュー ・アイコンをクリックします
  3. Resource List (リソース・リスト) 」をクリックします。
  4. Cloud Foundry apps (Cloud Foundry アプリ) 」の下に、Prometheus サーバー・アプリケーションが示されていることを確認します。その名前をクリックして、このサービスのページを表示します。
  5. アプリケーション名の右側に、緑色のドット付きで「Running (実行中) 」というラベルが示されているはずです。これは、アプリケーションが稼働中であることを意味します!
  6. 最後に、「Running (実行中)」ラベルの右側にある「Visit app URL (アプリの URL にアクセス) 」リンクをクリックします。これで、Prometheus ダッシュボードが開くはずです。

ステップ 3. Grafana クライアントをデプロイする

Grafana は、対象のメトリックがどこに保管されているかを問わず、メトリックを理解するために利用できる優れたツールです。

Grafana クライアントをデプロイするために、Prometheus サーバーをデプロイするときに使用した方法を使用します。つまり、次の作業を行います。

  1. Grafana バイナリーをダウンロードする
  2. 構成ファイルを編集する
  3. マニフェスト・ファイルを作成する

Grafana バイナリーをダウンロードする

Grafana ダウンロード・ページにナビゲートして、「Standalone Linux Binaries (スタンドアロン Linux バイナリー) 」セクションを見つけます。そこに記載されているコマンドをコピーして実行します。例として、バージョン 6.5.2 の場合のコマンドは次のとおりです。

wget https://dl.grafana.com/oss/release/grafana-6.5.2.linux-amd64.tar.gz
tar -zxvf grafana-6.5.2.linux-amd64.tar.gz

Grafana バイナリーがファイル・パスに追加されました!

Grafana 構成ファイルを編集する

configuration フォルダー内に Grafana の構成ファイルがあります。この defaults.ini という名前のファイルが、メインの構成ファイルです。行数が 700 を超える大きなファイルですが、ここで対象とするのは 38 行目の次の設定だけです。

http_port=3000

次のステップに進む前に、このポートを 3000 から 8080 に変更する必要があります。

Grafana 用の Cloud Foundry マニフェスト・ファイルを作成する

Grafana フォルダー内に manifest.yml ファイルを作成するには、次のコマンドを使用します。

applications:
- name: grafana
  buildpack: binary_buildpack
  memory: 128m
  command: './bin/grafana-server web'
  random-route: true

Grafana を IBM Cloud 上にデプロイする

アプリケーションを IBM Cloud にプッシュする準備が整いました。Grafana フォルダー内で次のコマンドを入力すると、アプリケーションが IBM Cloud にプッシュされます。

ibmcloud cf push

アプリケーションが実行中であることを確認するには、前掲と同じく IBM Cloud ダッシュボードにナビゲートする手順に従います。Prometheus ダッシュボードを開いたら、資格情報として admin/admin を使ってログインします。

まとめ

お疲れさまでした!Cloud Foundry を使用して Prometheus によるメトリックを自動的に収集する環境を構成することができました。Platform-as-a-Service (PaaS) ソリューションを基礎として使用すれば、このような環境を構成する作業が最小限に減ることになります。より堅牢なアプリケーションを開発することにフォーカスしたいとしたら、アプリケーションのメトリックを視覚化すると大いに役立つはずです。

Prometheus についての詳細は、「Monitoring your apps in Kubernetes with Prometheus and Spring Boot」を参照してください。この優れたチュートリアルに従うと、Docker と Helm を使用した Spring Boot アプリケーションのモニタリングについて詳しく学ぶことができます。