2.5. OpenShift で Fuse アプリケーションを監視するための Prometheus の設定
2.5.1. Prometheus の概要
Prometheus は、Red Hat OpenShift 環境にデプロイされたサービスの監視に使用できる、システムおよびサービスのオープンソースの監視およびアラートツールキットです。Prometheus は、指定の間隔で設定されたサービスからメトリックを収集および保存します。さらに、ルール式の評価や結果の表示を行い、指定の条件が true になるとアラートをトリガーできます。
Prometheus に対する Red Hat のサポートは、Red Hat 製品ドキュメントに記載されているセットアップと推奨設定に限定されます。
OpenShift サービスを監視するには、エンドポイントを Prometheus 形式に公開するように各サービスを設定する必要があります。このエンドポイントは、メトリックのリストとメトリックの現在の値を提供する HTTP インターフェイスです。Prometheus は定期的にターゲット定義の各エンドポイントをスクレイピングし、収集したデータをそのデータベースに書き込みます。Prometheus は、現在実行中のセッションだけでなく、長期間にわたってデータを収集します。Prometheus は、データ上でクエリーをグラフィカルに可視化し、実行できるように、データを格納します。
2.5.1.1. Prometheus クエリー
Prometheus Web インターフェイスでは、Prometheus Query Language (PromQL) でクエリーを作成して、収集したデータを選択し、集約することができます。
たとえば、以下のクエリーを使用すると、Prometheus が直近の 5 分間に記録したすべての時系列データから、メトリック名が http_requests_total
である値をすべて選択することができます。
http_requests_total[5m]
クエリーの結果をさらに定義または絞り込むには、メトリックのラベル (key:value
ペア) を指定します。たとえば、以下のクエリーを使用すると、Prometheus が直近の 5 分間に記録したすべて時系列データから、メトリック名が http_requests_total
でかつジョブラベルが integration
に設定されている値をすべて選択することができます。
http_requests_total{job="integration"}[5m]
2.5.1.2. Prometheus データの表示オプション
Prometheus がクエリーの結果を処理する方法を指定できます。
- Prometheus データを表データとして Prometheus の式ブラウザーで表示します。
- Prometheus HTTP API 経由で外部システムで Prometheus データを消費します。
Prometheus データをグラフで表示します。
Prometheus は、収集するデータのデフォルトグラフィカルビューを提供します。Prometheus メトリックを表示するより堅牢なグラフィカルダッシュボードが必要な場合は、Grafana を選択するのが一般的です。
注記Grafana はコミュニティーがサポートする機能です。Grafana をデプロイして Red Hat の製品を監視する設定は、Red Hat の実稼働環境におけるサービスレベルアグリーメント (SLA) の対象外です。
PromQL 言語を使用して、Prometheus の Alertmanager ツール で通知を設定することもできます。
2.5.2. Prometheus の設定
Prometheus を設定するには、クラスターに Prometheus Operator のカスタムリソース定義をインストールし、Prometheus を Fuse アプリケーションが含まれる OpenShift プロジェクトに追加します。
前提条件
-
OpenShift クラスターにアクセス可能な
cluster admin
権限がある。 - Fuse on OpenShift ガイド の説明にしたがって、Fuse on OpenShift イメージおよびテンプレートをインストールして OpenShift クラスターが準備されている必要があります。
- クラスターで OpenShift プロジェクトを作成し、Fuse アプリケーションをそのプロジェクトに追加されている必要があります。
手順
管理者権限で OpenShift にログインします。
oc login --user system:admin --token=my-token --server=https://my-cluster.example.com:6443
Prometheus operator の実行に必要なカスタムリソース定義をインストールします。
oc create -f https://raw.githubusercontent.com/jboss-fuse/application-templates/application-templates-2.1.0.fuse-sb2-7_10_0-00015-redhat-00001/openshift3/fuse-prometheus-crd.yml
Prometheus Operator がクラスターのすべての namespace で利用できるようになります。
以下のコマンド構文を使用して、Prometheus Operator を namespace にインストールします。
oc process -f https://raw.githubusercontent.com/jboss-fuse/application-templates/application-templates-2.1.0.fuse-sb2-7_10_0-00015-redhat-00001/openshift3/fuse-prometheus-operator.yml -p NAMESPACE=<YOUR NAMESPACE> | oc create -f -
たとえば、myproject という名前のプロジェクト (namespace) には、以下のコマンドを使用します。
oc process -f https://raw.githubusercontent.com/jboss-fuse/application-templates/application-templates-2.1.0.fuse-sb2-7_10_0-00015-redhat-00001/openshift3/fuse-prometheus-operator.yml -p NAMESPACE=myproject | oc create -f -
注記Prometheus Operator を namespace に初めてインストールする場合、Prometheus リソース Pod が起動するまでに数分の時間がかかる場合があります。その後、Prometheus Operator をクラスターの他の namespace にインストールすると、Prometheus リソース Pod の起動ははるかに速くなります。
以下のコマンド構文を使用して、Prometheus Operator を指示し、プロジェクトの Fuse アプリケーションを監視します。
oc process -f https://raw.githubusercontent.com/jboss-fuse/application-templates/application-templates-2.1.0.fuse-sb2-7_10_0-00015-redhat-00001/openshift3/fuse-servicemonitor.yml -p NAMESPACE=<YOUR NAMESPACE> -p FUSE_SERVICE_NAME=<YOUR FUSE SERVICE> | oc apply -f -
たとえば、myfuseapp という名前の Fuse アプリケーションが含まれる myproject という名前の OpenShift プロジェクト (namespace) には、次のコマンドを使用します。
oc process -f https://raw.githubusercontent.com/jboss-fuse/application-templates/application-templates-2.1.0.fuse-sb2-7_10_0-00015-redhat-00001/openshift3/fuse-servicemonitor.yml -p NAMESPACE=myproject -p FUSE_SERVICE_NAME=myfuseapp | oc apply -f -
Prometheus ダッシュボードを開くには、以下を実行します。
- OpenShift コンソールにログインします。
- Prometheus を追加したプロジェクトを開きます。
左側のペインで、Applications -> Routes と選択します。
Prometheus Hostname URL をクリックし、新しいブラウザータブまたはウインドウで Prometheus ダッシュボードを開きます。
- Prometheus を初めて使用する場合は、https://prometheus.io/docs/prometheus/latest/getting_started/ を参照してください。
2.5.3. OpenShift 環境変数
アプリケーションの Prometheus インスタンスを設定するには、表2.2「Prometheus 環境変数」にリストされている OpenShift 環境変数を設定します。
環境変数 | 説明 | デフォルト |
---|---|---|
| バインドするホストアドレス。 |
|
| 設定されている場合、Prometheus のアクティベートを無効にします (空の値をエコーします)。 | Prometheus が有効。 |
| 使用するポート。 |
|
| ファイル (パスを含む) を Prometheus 設定ファイルとして使用します。 | Camel メトリックが含まれる /opt/prometheus/prometheus-config.yml ファイル。 |
| JMX エクスポーター設定に追加する追加オプション。 | 該当なし |
関連情報
Pod の環境変数の設定に関する詳細は、OpenShift 開発者ガイド (https://access.redhat.com/documentation/ja-jp/openshift_container_platform/3.11/html/developer_guide/) を参照してください。
2.5.4. Prometheus が監視および収集するメトリックの制御
デフォルトでは、Prometheus は Camel によって公開される可能性のあるすべてのメトリックが含まれる設定ファイル (https://raw.githubusercontent.com/jboss-fuse/application-templates/master/prometheus/prometheus-config.yml
) を使用します。
Prometheus が監視および収集するアプリケーション内にカスタムメトリックがある場合 (アプリケーションプロセスを実行するオーダーの数など)、独自の設定ファイルを使用できます。識別できるメトリックは、JMX で提供されるメトリックに限定されるため注意してください。
手順
カスタム設定ファイルを使用して、デフォルトの Prometheus 設定では対応されない JMX Bean を公開するには、以下の手順に従います。
カスタム Prometheus 設定ファイルを作成します。デフォルトファイルのコンテンツ (
prometheus-config.yml
https://raw.githubusercontent.com/jboss-fuse/application-templates/master/prometheus/prometheus-config.yml) を形式の目安として使用できます。カスタム設定ファイルには任意の名前を使用できます (例:
my-prometheus-config.yml
など)。-
prometheus 設定ファイル (例:
my-prometheus-config.yml
) をアプリケーションのsrc/main/jkube-includes
ディレクトリーに追加します。 アプリケーション内に
src/main/jkube/deployment.xml
ファイルを作成し、設定ファイルに設定された値で AB_JMX_EXPORTER_CONFIG 環境変数のエントリーを追加します。以下に例を示します。spec: template: spec: containers: - resources: requests: cpu: "0.2" limits: cpu: "1.0" env: - name: SPRING_APPLICATION_JSON value: '{"server":{"tomcat":{"max-threads":1}}}' - name: AB_JMX_EXPORTER_CONFIG value: "my-prometheus-config.yml"
この環境変数は、Pod レベルでアプリケーションに適用されます。
- アプリケーションの再構築およびデプロイ