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 のエンドポイントと、そこから収集する必要があるメトリクスを、正規表現を使用して指定します。 詳しくは、「 構成 」セクションを参照してください。
「 Micrometer 」というトピックでは、 Micrometer のメトリクスを収集する方法について説明しています。
「 Prometheus -java-client」 のトピックでは、 Prometheus Java client ライブラリ、または Micrometer の Prometheus メトリクスレジストリからメトリクスを収集する方法について説明しています。
「Jmx」 のトピックでは、 JMX のBeanからカスタムメトリクスを収集する方法について説明しています。
の構成
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 センサーには、グローバル・レベル (すべてのエンドポイント) またはエンドポイントごとに定義できる基本認証サポートがあります。
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 の暗号化を有効にする」 を参照してください。
インフラストラクチャー相関
Linux ホストにおけるインフラストラクチャの相関関係については、 エージェントの HTTP API エンドポイントを参照してください。
差分カウンター
カウンタの増加分は、前回の値と比較することで測定できます。 ただし、このような測定に適した Prometheus のUIにおける集計 increase 機能は、同じバケット内でカウンターがリセットされた直後に発生した増加分を無視してしまうため、誤った結果をもたらす可能性があります。 の詳細については Counter、『 Prometheus 』のドキュメントを参照してください。
Delta counters この問題に対処するには、カウンターのリセットを許容しつつ、値の増加を正確に測定する必要があります。 各カウンターメトリクスに対して、対応するデルタカウンターメトリクスが生成されます。 たとえば、 Prometheusfoo エンドポイントからのカウンターメトリクスでは、以下の2つのメトリクスが生成されます:
metrics.counters.foometrics.delta_counters.foo
これらのメトリクスの生成は、設定ファイルで設定可能です configuration.yaml:
com.instana.plugin.prometheus:
---
sendCounterMetrics: true
sendDeltaCounterMetrics: true
と Counters は、どちらも Delta counters デフォルトで有効になっています。 Delta countersのみが必要な場合は、以下のパラメータを設定することでを無効 Counters にできます:
sendCounterMetrics: false
メトリックの表示
メトリックを表示するには、以下のステップを実行します。
- Instana のUIのサイドバーで、 「インフラストラクチャ」 を選択します。
- 特定のモニター対象ホストをクリックします。
その後、収集されたすべてのメトリックとモニター対象プロセスを含むホスト・ダッシュボードを表示できます。
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 ] をクリックします。

Instana このアラートチャネルを通じて、 HTTP POST 形式のリクエストを、設定済みの Prometheus Alertmanager Webhook レシーバー (例: Alert Snitch や SNMP 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 」通知機能を実行する
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}アラートを 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 エンドポイントを修正します。