Prometheus

Prometheus を使用したメトリック・データの収集がますます一般的になっています。 Instana を使用すれば、 Prometheus のメトリクスを簡単に収集し、豊富なナレッジグラフを活用して相関関係を分析することができます。 代表的な例として、カスタム・ビジネス・メトリックがあります。

Instana ホストエージェントをインストールすると、 Instana の Prometheus センサーが自動的にインストールされますが、 「設定 」セクションの手順に従って、このセンサーを設定する必要があります。 その後、 Instana のUIで、 Prometheus に関連するメトリクスを確認できます。

Instana、 Prometheus Alertmanager Webhook のペイロード形式で HTTP POST リクエストを送信するための Prometheus Alertmanager Webhook アラートチャネルを提供します。これは、 Prometheus Alertmanager Webhook レシーバー構成で説明されています。

Instana から Prometheus へリアルタイムでアラート通知を送信するには、 Instana のUIで 「 Prometheus Alertmanager Webhook 」アラートチャネルを作成してください。 すると、 HTTP POST へのリクエストは Prometheus に転送されます。

概要

Instana Prometheus センサーは Prometheus サーバーを必要としません。 このセンサーはモニター対象システムが公開しているエンドポイントからメトリックを直接収集します。

Instana の各ホストエージェントについて、ポーリングする Prometheus のエンドポイントと、そこから収集する必要があるメトリクスを、正規表現を使用して指定します。 詳しくは、「 構成 」セクションを参照してください。

注: メトリクスが Java ライブラリ( MicrometerPrometheus Java client ライブラリ、または jmx_exporter など)によって公開されている場合、 Instana の Java プラグインがこれらのライブラリから直接メトリクスを収集できるため、 HTTP を通じて公開する必要はありません:

の構成

Kubernetes 環境の設定

エンドポイントのリストとして、ホスト・エージェント構成ファイル configuration.yaml にメトリック・ソースを定義する必要があります。 Instana のホストエージェントが Kubernetes 環境で実行されると、エージェントは実行中のポッドからIPアドレスとコンテナポートを自動的に認識し、収集します。 Kubernetes 環境では、この設定を 値 agent.configuration_yaml を通じてエージェントに渡す必要があります。 オペレーターを使用してエージェントをインストールする場合は、 YAMLinstana-agent.customresource.yamlspec.agent.configuration_yaml ディレクトリ内のカスタムリソースファイルに設定を追加してください。 Helm チャートを使用してエージェントをインストールする場合は、設定をフラグで渡してください --set agent.configuration_yaml=<config>。 あるいは、コンフィギュレーションをvalues.yamlファイルに設定し、-fフラグを使用してhelm installコマンドに渡す。

次の構成例を参照してください。

com.instana.plugin.prometheus:
  poll_rate: 15                              # Global polling interval in seconds (optional, default is 1 second)
  username: ''                               # Global (all) endpoints username/password configuration (optional)
  password: ''
  podConnectTimeout: 750                     # discovery TCP connect timeout in ms used during discovery request (optional, default is 750ms)
  podReadTimeout: 2500                       # discovery TCP read timeout in ms used during discovery request (optional, default is 2500ms)
  customMetricSources:
  - url: '/prometheus/endpoint/1'            # metrics endpoint, the IP and port are auto-discovered
    metricNameIncludeRegex: '^.'             # regular expression to filter metrics
    username: ''                             # endpoint specific username/password configuration
    password: ''
  - url: '/prometheus/endpoint/2'
    metricNameIncludeRegex: '^.'
  - url: '/metrics'                          # metrics endpoint, the IP and port are auto-discovered
    metricNameIncludeRegex: '^.'             # regular expression to filter metrics
    labels:                                  # labels are used to limit discovery with pods that match. labels are treated as a boolean AND
      planet: "mars"
      app: "rover"
 

`prometheus-annotations`、`prometheus-annotations-name prometheus.io/path`、`prometheus-annotations-value` prometheus.io/portprometheus.io/scrape などの Prometheus アノテーションを含む Kubernetes リソースをスクレイピングする場合、Prometheus の設定で ` strict prometheus-annotations-name` prometheusAnnotations フィールドを `true` に設定しておけば、そのリソースに対して `prometheus-annotations` customMetricsSources セクションを使用する必要はありません。 例:

com.instana.plugin.prometheus:
  podConnectTimeout: 750                     # discovery TCP connect timeout in ms used during discovery request (optional, default is 750ms)
  podReadTimeout: 2500                       # discovery TCP read timeout in ms used during discovery request (optional, default is 2500ms)
  prometheusAnnotations: strict              # use prometheus annotations as defined, no metric source is required
 

注:

  • Kubernetes 環境の場合、フィールド url にホスト名やポート番号を追加せず、メトリクスエンドポイント URL のみを追加してください(例: /prometheus/endpoint/metrics)。 Prometheus センサーは、. https://prod-myapp.server.com/prometheus/metricsのような完全なURLとして指定されたエンドポイントを監視していません。

  • prometheusアノテーションを使用していない場合、Kubernetesポッド・デプロイメント仕様のコンテナ・ポート(containerPort)定義が、メトリクス・エンドポイント・ポートを決定するために使用されます。

  • metricNameIncludeRegex フィールドで正規表現を使用することにより、特定のメトリック・エンドポイントについてキャプチャーするメトリックを定義できます。

  • Prometheus センサーには、グローバル・レベル (すべてのエンドポイント) またはエンドポイントごとに定義できる基本認証サポートがあります。

注:Prometheus 連携を使用する場合は、監視やトラブルシューティングに必要なメトリクスのみを取り込んでください。 スクレイピング対象、メトリクスの選択、および収集間隔を慎重に設定し、データ量を管理するとともに、他の Instana センサーによって収集されたメトリクスとの重複を防ぐようにしてください。 選択的な取り込みにより、可観測性の要件とリソースの効率的な利用とのバランスが取れます。 Prometheus 環境におけるデータ収集の調整および取り込み量の管理に関する詳細については、 『 Instana 』の「データ取り込みの最適化」 を参照してください。

Kubernetes 以外の環境における静的設定

静的構成は、Kubernetes 以外の環境で使用されます。 Kubernetes 以外の環境のローカル・エンドポイントまたはリモート・エンドポイントから Prometheus メトリックをキャプチャーする場合は、 <agent_install_dir>/etc/instana/configuration.yaml ファイルの customMetricSources セクションを以下のように構成します。

com.instana.plugin.prometheus:
  # Global polling interval in seconds (optional)
  poll_rate: 15                              # Default is 1 second
  username: ''                               # Global (all) endpoints username/password configuration (optional)
  password: ''
  customMetricSources:
  - url: 'http://localhost:8080/metrics'
    username: ''                             # endpoint specific username/password configuration
    password: ''
    metricNameIncludeRegex: '^sample_app_request'
  - url: 'http://223.58.1.10:9100/prometheus'
    metricNameIncludeRegex: '^sample_app_request'
    labels:                                  # labels are used to limit discovery with pods that match. labels are treated as a boolean AND
      planet: "mars"
      app: "rover"

 
注:metricNameIncludeRegex 定義されていない場合、 Prometheus センサーは、メトリックタイプごとに最大600件という定義された上限まで、 すべてのメトリックタイプを収集します。

リモート書き込み

Instana のホストエージェントバンドル 1.1.587 以降、ホストエージェントはエンド remote_write ポイントのサポートが含まれています。つまり、メトリクスの取り込みが可能となり、これらのメトリクスは Prometheus エンティティとして、あるいは「プロセス カスタム メトリクス」の一部として表示されます。

remote_write エンドポイントを有効にするには、以下のように <agent_install_dir>/etc/instana/configuration.yaml ファイルを構成します。

com.instana.plugin.prometheus:
  remote_write:
    enabled: true
 

注:

  • Prometheus のremote_write に関するドキュメントに従って、送信元(メトリクスを送信するコンポーネント)を設定してください。

  • remote_write エンドポイントは、/prometheus/v1/receive パスにあるポート 42699 で使用可能です。 したがって、 Prometheus の設定で設定する必要がある URL は、以下の通りです http://<agent_ip>:42699/prometheus/v1/receive

  • Instana がメトリクスを正しく解析できるようにするには、送信者がメタデータを送信する必要があります。 Prometheus では送信者がデフォルト設定となっているため、この機能を無効にしないようご注意ください。

  • 「 Instana 」エージェントの「 Helm 」チャートを使用して「 Kubernetes 」上で提供されるオプションの 「 Instana 」エージェントサービスは、「 API 」 remote_write と組み合わせて利用すると非常に便利です。 Instana エージェントサービスを使用することで、データは同じ Kubernetes ノード上で実行されている Instana エージェントにプッシュされ、その結果、 Instana エージェントがインフラストラクチャの相関データを正しく入力できるようになります。

  • 現在、認証は remote_write エンドポイントではサポートされていないため、送信側で Prometheus の basic_auth オプションと bearer_token オプション ( bearer_token_fileを含む) を構成しないでください。

リモート書き込みのための TLS 暗号化

ホストエージェントで TLS の暗号化を有効にできます。 その後、エンド remote_write ポイントに送信されるすべてのデータは、 TLS で暗号化されます。

TLS の暗号化設定方法の詳細については、 「 TLS の暗号化を有効にする」 を参照してください。

差分カウンター

カウンタの増加分は、前回の値と比較することで測定できます。 ただし、このような測定に適した Prometheus のUIにおける集計 increase 機能は、同じバケット内でカウンターがリセットされた直後に発生した増加分を無視してしまうため、誤った結果をもたらす可能性があります。 の詳細については Counter、『 Prometheus 』のドキュメントを参照してください。

Delta counters この問題に対処するには、カウンターのリセットを許容しつつ、値の増加を正確に測定する必要があります。 各カウンターメトリクスに対して、対応するデルタカウンターメトリクスが生成されます。 たとえば、 Prometheusfoo エンドポイントからのカウンターメトリクスでは、以下の2つのメトリクスが生成されます:

  • metrics.counters.foo
  • metrics.delta_counters.foo

これらのメトリクスの生成は、設定ファイルで設定可能です configuration.yaml

com.instana.plugin.prometheus:
---
sendCounterMetrics: true
sendDeltaCounterMetrics: true
 

Counters は、どちらも Delta counters デフォルトで有効になっています。 Delta countersのみが必要な場合は、以下のパラメータを設定することでを無効 Counters にできます:

sendCounterMetrics: false

メトリックの表示

メトリックを表示するには、以下のステップを実行します。

  1. Instana のUIのサイドバーで、 「インフラストラクチャ」 を選択します。
  2. 特定のモニター対象ホストをクリックします。

その後、収集されたすべてのメトリックとモニター対象プロセスを含むホスト・ダッシュボードを表示できます。

Prometheus のメトリックは、収集元のホストまたはプロセスに関連付けられている「Prometheus アプリケーション」として表示されます (remote_write エンドポイントを使用している場合)。 「Dynamic Focus」、「Event and Alerts」、および「 Grafana 」プラグインを使用して entity.type:prometheus、 Prometheus のカスタムメトリクスを照会できます。

Prometheus センサーは、すべてのコア・メトリック・タイプ (タイプごとに最大 600 個のメトリック) を収集します。

  • カウンター
  • ゲージ
  • ヒストグラム
  • サマリー
  • タイプ未定義

アラート

Prometheus 用Alertmanagerの「 Webhook 」アラートチャネルの作成

Prometheus のAlertmanager Webhook アラートチャネルを作成するには、 Instana のUIで [設定 ] > [グローバル設定 ] > [イベントとアラート ] > [アラートチャネル ] > [アラートチャネルの追加] の順にクリックし、[ Prometheus Alertmanager Webhook ] をクリックします。

スクリーンショット: Prometheus Alertmanager Webhook

Instana このアラートチャネルを通じて、 HTTP POST 形式のリクエストを、設定済みの Prometheus Alertmanager Webhook レシーバー (例: Alert SnitchSNMP Notifier )に送信します。

SNMP Notifier

SNMP Notifier プロジェクトは、 Prometheus のアラートを SNMP トラップとして、設定された任意の SNMP 受信先に転送します。

Instana Instana のイメージレジストリには、 SNMP 通知機能用のイメージが提供されていません。 詳細については、 SNMP Notifier の説明に従ってください。 SNMP 通知機能のインストール例については、「 Kubernetes で SNMP 通知機能を実行する 」のセクションを参照してください。

アラート・チャネル構成

作成した Prometheus Alertmanager Webhook アラートチャネルを設定し、 Prometheus Alertmanager Webhook の「Receiver URL 」フィールドを「 http://{SNMP-Notifier-Host}:9464/alerts.」に設定する必要があります。 SNMP 通知モジュールが、 Instana バックエンドと同じクラスタ内の「 snmp-notifier」というネームスペースにインストールされている場合、 Prometheus Alertmanager Webhook Receiver URL の構成は次のようになります http://snmp-notifier-alertmanager-snmp-notifier.snmp-notifier.svc:9464/alerts

例: Kubernetes で「 SNMP 」通知機能を実行する

  1. Docker ハブの認証情報を使用して、 SNMP Notifier用のネームスペースと、パブリックな Docker レジストリ用のシークレットを作成します:

    kubectl create namespace snmp-notifier
    
    kubectl -n snmp-notifier create secret docker-registry image-pull-secret \
     --docker-server=docker.io \
     --docker-username=${YOUR_USERNAME} \
     --docker-password=${YOUR_PASSWORD}
     
  2. アラートを SNMP トラップとして受信するサーバーのIPアドレスを使用して、 SNMP 通知機能をインストールします:

    helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
    
    helm install snmp-notifier prometheus-community/alertmanager-snmp-notifier \
       -n snmp-notifier \
       --set 'imagePullSecrets={image-pull-secret}' \
       --set 'snmpNotifier.snmpDestinations={IP_ADDRESS_OF_SNMP_TRAP_RECEIVER_SERVER:162}'
     

SNMP の通知機能の設定に関する詳細については、 「 SNMP の通知機能」 を参照してください。 サポートされているすべてのチャートパラメータとデフォルト値については、 values.yaml を参照してください。

トラブルシューティング

リモート書き込みでのメトリック遅延が大きい

監視対象の種類: prometheus_remote_write_high_delay

remote_write エンドポイントから取り込まれている Prometheus メトリックで、受信に大きな遅れが出ています。 この問題により、アラートが遅延する可能性があり、他のソースからの相関メトリックがより困難になります。

Prometheus remote_write 構成を調整します。 具体的には、次のように batch_send_deadline パラメーターを追加します。これにより、遅延が 1 秒に制限されます。

remote_write:
  - url: "http://xxx.xxx.xxx.xxx:42699/prometheus/v1/receive"
    queue_config:
      batch_send_deadline: 1s
 

その他の構成オプションについては、 Prometheus マニュアルを参照してください。

Prometheus メトリック解析エラー

監視対象の種類: prometheus_metric_parse_error

Prometheusエンドポイントから取得されるメトリックには、Prometheus メトリック仕様に準拠していない情報が含まれています。 この問題により、エンドポイントからの一部の Prometheus メトリックが処理されない可能性があります。 監視の問題情報を使用して問題の原因を特定し、Prometheus エンドポイントを修正します。