ファイルベースのサービスディスカバリを使用してスクレイプターゲットを検出する

Prometheus は、Kubernetes や Consul など、スクレイプターゲットを検出するためのさまざまなサービスディスカバリオプションを提供しています。現在サポートされていないサービスディスカバリシステムを使用する必要がある場合は、Prometheus のファイルベースのサービスディスカバリメカニズムが最適かもしれません。これにより、JSON ファイルでスクレイプターゲット (およびそれらのターゲットに関するメタデータ) をリストできます。

このガイドでは、次のことを行います。

  • Prometheus Node Exporterをローカルにインストールして実行する。
  • Node Exporter のホストとポート情報を指定する `targets.json` ファイルを作成する。
  • `targets.json`ファイルを使用してNode Exporterを検出するように設定されたPrometheusインスタンスをインストールして実行します。

Node Exporterのインストールと実行

Node Exporter で Linux ホストメトリクスを監視するガイドのこのセクションを参照してください。Node Exporter はポート 9100 で実行されます。Node Exporter がメトリクスを公開していることを確認するには

curl https://:9100/metrics

メトリック出力は次のようになります

# HELP go_gc_duration_seconds A summary of the GC invocation durations.
# TYPE go_gc_duration_seconds summary
go_gc_duration_seconds{quantile="0"} 0
go_gc_duration_seconds{quantile="0.25"} 0
go_gc_duration_seconds{quantile="0.5"} 0
...

Prometheusのインストール、設定、および実行

Node Exporter と同様に、Prometheus は tarball 経由でインストールできる単一の静的バイナリです。お使いのプラットフォームの最新リリースをダウンロードし、展開してください。

wget https://github.com/prometheus/prometheus/releases/download/v*/prometheus-*.*-amd64.tar.gz
tar xvf prometheus-*.*-amd64.tar.gz
cd prometheus-*.*

展開されたディレクトリには`prometheus.yml`設定ファイルが含まれています。このファイルの現在の内容をこれに置き換えてください。

scrape_configs:
- job_name: 'node'
  file_sd_configs:
  - files:
    - 'targets.json'

この設定は、`node`というジョブ(Node Exporter用)があり、Node Exporterインスタンスのホストとポート情報を`targets.json`ファイルから取得することを指定しています。

それでは、`targets.json` ファイルを作成し、この内容を追加してください。

[
  {
    "labels": {
      "job": "node"
    },
    "targets": [
      "localhost:9100"
    ]
  }
]
注記このガイドでは、簡潔にするためにJSONサービスディスカバリ設定を手動で扱います。しかし、一般的には、何らかのJSON生成プロセスまたはツールを使用することをお勧めします。

この設定は、ターゲットが1つ(`localhost:9100`)の`node`ジョブがあることを指定しています。

これでPrometheusを起動できます

./prometheus

Prometheusが正常に起動した場合、ログに次のような行が表示されるはずです。

level=info ts=2018-08-13T20:39:24.905651509Z caller=main.go:500 msg="Server is ready to receive web requests."

検出されたサービスのメトリックを探索する

Prometheusが起動して実行されている状態で、Prometheusの式ブラウザを使用して、`node`サービスによって公開されているメトリックを探索できます。たとえば、`up{job="node"}`メトリックを探索すると、Node Exporterが適切に検出されていることがわかります。

ターゲットリストの動的な変更

Prometheusのファイルベースのサービスディスカバリメカニズムを使用する場合、Prometheusインスタンスはファイルの変更をリッスンし、インスタンスの再起動を必要とせずにスクレイプターゲットリストを自動的に更新します。これを実演するために、ポート9200で2番目のNode Exporterインスタンスを起動します。まず、Node Exporterバイナリを含むディレクトリに移動し、新しいターミナルウィンドウでこのコマンドを実行します。

./node_exporter --web.listen-address=":9200"

次に、新しいNode Exporterのエントリを追加して、`targets.json` の設定を変更します。

[
  {
    "targets": [
      "localhost:9100"
    ],
    "labels": {
      "job": "node"
    }
  },
  {
    "targets": [
      "localhost:9200"
    ],
    "labels": {
      "job": "node"
    }
  }
]

変更を保存すると、Prometheus に新しいターゲットリストが自動的に通知されます。`up{job="node"}`メトリックには、`instance` ラベルが `localhost:9100` と `localhost:9200` の2つのインスタンスが表示されるはずです。

まとめ

このガイドでは、Prometheus Node Exporter をインストールして実行し、ファイルベースのサービスディスカバリを使用して Node Exporter からメトリクスを検出し、スクレイピングするように Prometheus を設定しました。

このページの内容