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 アプリケーションをそのプロジェクトに追加されている必要があります。

手順

  1. 管理者権限で OpenShift にログインします。

    oc login -u system:admin
  2. Prometheus operator の実行に必要なカスタムリソース定義をインストールします。

    oc create -f https://raw.githubusercontent.com/jboss-fuse/application-templates/application-templates-2.1.0.fuse-sb2-780019-redhat-00005/openshift3/fuse-prometheus-crd.yml

    Prometheus Operator がクラスターのすべての namespace で利用できるようになります。

  3. 以下のコマンド構文を使用して、Prometheus Operator を namespace にインストールします。

    oc process -f https://raw.githubusercontent.com/jboss-fuse/application-templates/application-templates-2.1.0.fuse-sb2-780019-redhat-00005/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-780019-redhat-00005/openshift3/fuse-prometheus-operator.yml -p NAMESPACE=myproject | oc create -f -
    注記

    Prometheus Operator を namespace に初めてインストールする場合、Prometheus リソース Pod が起動するまでに数分の時間がかかる場合があります。その後、Prometheus Operator をクラスターの他の namespace にインストールすると、Prometheus リソース Pod の起動ははるかに速くなります。

  4. 以下のコマンド構文を使用して、Prometheus Operator を指示し、プロジェクトの Fuse アプリケーションを監視します。

    oc process -f https://raw.githubusercontent.com/jboss-fuse/application-templates/application-templates-2.1.0.fuse-sb2-780019-redhat-00005/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-780019-redhat-00005/openshift3/fuse-servicemonitor.yml -p NAMESPACE=myproject -p FUSE_SERVICE_NAME=myfuseapp | oc apply -f -
  5. Prometheus ダッシュボードを開くには、以下を実行します。

    1. OpenShift コンソールにログインします。
    2. Prometheus を追加したプロジェクトを開きます。
    3. 左側のペインで、Applications -> Routes と選択します。

      prometheus route

    4. Prometheus Hostname URL をクリックし、新しいブラウザータブまたはウインドウで Prometheus ダッシュボードを開きます。

      prometheus dashboard

    5. Prometheus を初めて使用する場合は、https://prometheus.io/docs/prometheus/latest/getting_started/ を参照してください。

2.5.3. OpenShift 環境変数

アプリケーションの Prometheus インスタンスを設定するには、表2.2「Prometheus 環境変数」にリストされている OpenShift 環境変数を設定します。

表2.2 Prometheus 環境変数

環境変数説明デフォルト

AB_PROMETHEUS_HOST

バインドするホストアドレス。

0.0.0.0

AB_PROMETHEUS_OFF

設定されている場合、Prometheus のアクティベートを無効にします (空の値をエコーします)。

Prometheus が有効。

AB_PROMETHEUS_PORT

使用するポート。

9779

AB_JMX_EXPORTER_CONFIG

ファイル (パスを含む) を Prometheus 設定ファイルとして使用します。

Camel メトリックが含まれる /opt/prometheus/prometheus-config.yml ファイル。

AB_JMX_EXPORTER_OPTS

JMX エクスポーター設定に追加する追加オプション。

該当なし

関連情報

Pod の環境変数の設定に関する詳細は、OpenShift 開発者ガイド (https://access.redhat.com/documentation/ja-jp/openshift_container_platform/3.11/html/developer_guide/index) を参照してください。

2.5.4. Prometheus が監視および収集するメトリックの制御

デフォルトでは、Prometheus は Camel によって公開される可能性のあるすべてのメトリックが含まれる設定ファイル (https://raw.githubusercontent.com/jboss-fuse/application-templates/master/prometheus/prometheus-config.yml) を使用します。

Prometheus が監視および収集するアプリケーション内にカスタムメトリックがある場合 (アプリケーションプロセスを実行するオーダーの数など)、独自の設定ファイルを使用できます。識別できるメトリックは、JMX で提供されるメトリックに限定されるため注意してください。

手順

カスタム設定ファイルを使用して、デフォルトの Prometheus 設定では対応されない JMX Bean を公開するには、以下の手順に従います。

  1. カスタム Prometheus 設定ファイルを作成します。デフォルトファイルのコンテンツ (prometheus-config.yml https://raw.githubusercontent.com/jboss-fuse/application-templates/master/prometheus/prometheus-config.yml) を形式の目安として使用できます。

    カスタム設定ファイルには任意の名前を使用できます (例: my-prometheus-config.yml など)。

  2. prometheus 設定ファイル (例:my-prometheus-config.yml) をアプリケーションの src/main/fabric8-includes ディレクトリーに追加します。
  3. アプリケーション内に src/main/fabric8/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 レベルでアプリケーションに適用されます。

  4. アプリケーションの再構築およびデプロイ