第5章 Prometheus を使用した Fuse アプリケーションの監視


Prometheus を使用して Fuse on OpenShift のデータを監視および保存するには、エンドポイントを Fuse アプリケーションのデータとともに Prometheus 形式で公開します。Prometheus はデータを保存するため、Grafana などのグラフィカルツールを使用してデータを視覚化し、クエリーを実行することができます。

Prometheus を使用して、Minishift や Red Hat Container Development Kit などのオンプレミス OpenShift クラスターや単一ノードのクラスターで実行している Fuse アプリケーションを監視できます。

Red Hat Fuse on OpenShift でインストールおよび開発を行うための情報は、Fuse on OpenShift Guide を参照してください。

以下のセクションでは、Prometheus へのアクセス方法を説明します。

注記

Prometheus を使用して OpenShift Online 上の Fuse アプリケーションを監視することはサポートされません。

5.1. Prometheus の設定

Prometheus を設定するには、クラスターに Prometheus Operator のカスタムリソース定義をインストールし、Prometheus を Fuse アプリケーションが含まれる OpenShift プロジェクトに追加します。

前提条件

  • OpenShift クラスターへのシステム管理者アクセス権限が必要です。
  • 『Fuse on OpenShift Guide』の説明にしたがって、Fuse on OpenShift イメージおよびテンプレートをインストールして OpenShift クラスターが準備されている必要があります。
  • クラスターで OpenShift プロジェクトを作成し、Fuse アプリケーションをそのプロジェクトに追加されている必要があります。

手順

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

    $ oc login -u system:admin
  2. Prometheus Operator の実行に必要なカスタムリソース定義をインストールします。ここで、{$templates-base-url} は Fuse on OpenShift テンプレートファイルの場所になります。

    $ oc create -f {$templates-base-url}\fuse-prometheus-crd.yml

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

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

    $ oc process -f {$templates-base-url}/fuse-prometheus-operator.yml -p NAMESPACE=<YOUR NAMESPACE> | oc create -f -

    たとえば、myproject という名前のプロジェクト (namespace) には、以下のコマンドを使用します。

    oc process -f {$templates-base-url}/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 {$templates-base-url}/fuse-servicemonitor.yml -p NAMESPACE=<YOUR NAMESPACE> FUSE_SERVICE_NAME=<YOUR FUSE SERVICE> | oc apply -f -

    たとえば、myfuseapp という名前の Fuse アプリケーションが含まれる myproject という名前の OpenShift プロジェクト (namespace) には、次のコマンドを使用します。

    oc process -f {$templates-base-url}/fuse-servicemonitor.yml -p NAMESPACE=myproject FUSE_SERVICE_NAME=myfuseapp | oc apply -f -
  5. Prometheus ダッシュボードを開くには、以下を実行します。

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

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

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

5.2. Prometheus の設定

以下のセクションでは、Prometheus の設定方法を説明します。

5.2.1. OpenShift 環境変数の設定

アプリケーションの Prometheus インスタンスを設定する場合は、以下の環境変数を OpenShift に設定できます。

表5.1 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) を参照してください。

5.2.2. 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.ymlhttps://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. アプリケーションの再構築およびデプロイ

5.2.3. アラートの生成

OpenShift に Prometheus を使用してアラートを生成する例は、Red Hat Cloud Forms の『モニタリング、アラート、およびレポーティング』を参照してください。

https://access.redhat.com/documentation/en-us/red_hat_cloudforms/4.6/html/monitoring_alerts_and_reporting/integrating_prometheus_alerts

5.2.4. Fuse Online インテグレーションアプリケーションを監視するよう外部 Prometheus インスタンスを設定

OpenShift Container Platform に Fuse Online をインストールする場合、デフォルトで syndesis-prometheus が含まれます。Fuse Online を OpenShift Container Platform にインストールする方法の詳細は、『Integrating Applications with Fuse Online』を参照してください。

外部の Prometheus インスタンスがすでに存在する場合、その外部のインスタンスを設定して、OpenShift Container Platform にデプロイされた Fuse Online インテグレーションアプリケーションを監視することもできます。

手順は、Prometheus Operator を使用して外部の Prometheus インスタンスをインストールしたかどうかによって異なります。

5.2.4.1. Prometheus インスタンスの設定 (Prometheus Operator を使用)

Prometheus Operator を使用して Prometheus インスタンスをインストールした場合、外部 Prometheus 設定を更新して Fuse Online インテグレーションを監視するのに、サービスモニターの追加および編集が必要になります。

前提条件

「Prometheus の設定」 の説明どおりに Prometheus がインストールされている必要があります。

手順

  1. ターミナルウインドウで、サービスモニターを Prometheus がインストールされた namespace (プロジェクト) に追加します。

    oc process -f  {$templates-base-url}/fuse-servicemonitor.yml -p NAMESPACE=<YOUR-NAMESPACE> -p FUSE_SERVICE_NAME=fuseonline | oc create -f -
  2. OpenShift コンソールでプロジェクトを開き、Applications Services と選択します。
  3. fuseonline サービスをクリックし、Actions Edit YAML と選択します。
  4. エディターで、app: fuseonlinesyndesis.io/type: integration に置き換えて YAML ファイルのセレクターセクションを変更します。
  5. Save をクリックします。

Prometheus Operator が設定を更新し、Fuse Online インテグレーションをすべて監視します。

これで、Fuse Online インテグレーションを Prometheus インスタンスで表示できるようになります。以下の例は、2 つのインテグレーションを監視する Prometheus インスタンスを示しています。

mf prometheus targets

5.2.4.2. Prometheus インスタンスの設定 (Prometheus Operator を不使用)

Prometheus Operator を使用せずに Prometheus インスタンスをインストールした場合、設定を更新して Fuse Online インテグレーションを監視するのに、Prometheus 設定ファイルを編集し、Prometheus Pod 設定を更新する必要があります。

前提条件

Prometheus 設定ファイル (prometheus-config.yml) への書き込み権限が必要です。OpenShift web コンソールでは、設定ファイルは Resources Config Maps にあります。

手順

  1. Prometheus 設定ファイル (prometheus-config.yml) を以下のように編集します。

    1. スクレープ間隔を 5 秒に設定します。

      global:
              scrape_interval:     5s
              evaluation_interval: 5s
    2. 通常は syndesis namespace である ${OPENSHIFT_PROJECT} で Pod をスクレープするよう設定する Kubernetes サービス検出設定とともに integration-pod という名前のスクレープ設定ジョブを追加します。

       - job_name: integration-pods
      
                kubernetes_sd_configs:
                - role: pod
                  namespaces:
                    names:
                      - ${OPENSHIFT_PROJECT}
    3. 以下のような relabel_configs セクションを追加します。

      • prometheus.io/scrape ラベルが true に設定されたインテグレーション Pod のみをスクレープする。
      • prometheus.io/path および prometheus.io/port ラベルから値を使用して、インテグレーション Pod で JMX エクスポーターをスクレープするのに使用される metrics_path および address ラベルを設定する。
      • Pod ラベルおよびアノテーションを Prometheus レベルとして追加する。
      • kubernetes_namespace および kubernetes_pod_name ラベルを作成する。

        以下は、relabel_configs セクションの例です。

        relabel_configs:
                  - source_labels: [__meta_kubernetes_pod_annotation_prometheus_io_scrape]
                    action: keep
                    regex: true
                  - source_labels: [__meta_kubernetes_pod_annotation_prometheus_io_path]
                    action: replace
                    target_label: __metrics_path__
                    regex: (.+)
                  - source_labels: [__address__, __meta_kubernetes_pod_annotation_prometheus_io_port]
                    action: replace
                    regex: ([^:]+)(?::\d+)?;(\d+)
                    replacement: $1:$2
                    target_label: __address__
                  - action: labelmap
                    regex: __meta_kubernetes_pod_label_(.+)
                  - action: labelmap
                    regex: __meta_kubernetes_pod_annotation_(syndesis.+)
                  - source_labels: [__meta_kubernetes_namespace]
                    action: replace
                    target_label: kubernetes_namespace
                  - source_labels: [__meta_kubernetes_pod_name]
                    action: replace
                    target_label: kubernetes_pod_name
    4. Fuse Online インテグレーションは、JVM、Camel、および CXF から多数のメトリクスを公開します。メトリクスに必要なストレージの量を削減するには、以下の metric_relabel_configs セクションを追加し、Fuse Online コンソールに表示されないメトリクスを除外します。

       metric_relabel_configs:
                - source_labels: [__name__]
                  regex: jmx_(.+)
                  action: drop
                - source_labels: [__name__]
                  regex: jvm_(.+)
                  action: drop
                - source_labels: [__name__]
                  regex: process_(.+)
                  action: drop
                - source_labels: [type, __name__]
                  separator: ':'
                  regex: context:(org_apache_camel_ExchangesTotal|org_apache_camel_ExchangesFailed|io_syndesis_camel_StartTimestamp|io_syndesis_camel_LastExchangeCompletedTimestamp|io_syndesis_camel_LastExchangeFailureTimestamp)
                  action: keep
      注記

      最後の設定行は、Fuse Online web コンソールに表示される統計に不可欠な Prometheus メトリクスストアに追加するメトリクスを明示的にリストしています。Prometheus インスタンスは、他のメトリクスが除外された場合にこれらのメトリクスの収集を明示的に許可する必要があります

  2. 以下のように、Prometheus Pod 設定が 30 日分のメトリクスを保存するよう更新します。

    args:
                - '--config.file=/etc/prometheus/prometheus.yml'
                - '--storage.tsdb.retention=30d'
Red Hat logoGithubRedditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

© 2024 Red Hat, Inc.