監視対象検出のためのファイルベースサービスディスカバリーの利用 - Prometheusドキュメント

このページはPrometheus公式ドキュメント和訳+αの一部です。

Prometheusは、監視対象を検出するための様々なサービスディスカバリーの選択肢KubernetesConsul、その他)を提供している。 現在サポートされていないサービスディスカバリーを利用する必要がある場合には、Prometheusのファイルベースのサービスディスカバリーが最も役立つであろう。 ファイルベースのサービスディスカバリーによって、JSONファイルで監視対象をメタデータと共にリストすることが可能になる。

このガイドでは、

  • ローカルでPrometheus Node Exporterをインストール、実行する
  • そのNode Exporterのホストとポートを指定するtargets.jsonを作成する
  • そのtargets.jsonを使ってNode Exporterを検出するように設定されたPrometheusインスタンスをインストール、実行する

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

Node Exporterを用いたLinuxホストのメトリクス監視の「Node Exporterのインストールと実行」の部分を参照して行う。 Node Exporterがメトリクスをexposeしていることを確認するためには、下記のコマンドを実行する。

curl http://localhost: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のため)のジョブがあり、そのジョブが、targets.jsonというファイルからNode Exporterインスタンスのホストとポートの情報を取得するように指定している。

targets.jsonというファイルを作成し、以下の内容を追加する。

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

注意: このガイドでは、簡潔にするために、サービスディスカバリーの設定のJSONを手動で編集しているが、JSONを生成するプロセスやツールを代わりに使うことを推奨する

この設定は、一つの対象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によって、nodeサービスでexposeされたメトリクスをexpression browserを使って調査することが出来る。 例えば、up{job="node"}というメトリックを調査すると、Node Exporterが適切に検出されていることが分かる。

監視対象リストの動的な変更

Prometheusのファイルベースのサービスディスカバリーを利用しているときには、Prometheusはファイルの変更をリッスンしており、再起動を必要とすることなく、監視対象リストを自動的に更新する。 この説明のために、二つ目のNode Exporterを9200ポートで起動する。 まず、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"}は、ラベルinstancelocalhost:9100localhost:9200の二つのインスタンスを表示するはずである。

まとめ

このガイドでは、Node Exporterをインストール、実行し、ファイルベースのサービスディスカバリーでそのNode Exporterを検出しメトリクスを取得するように、Prometheusを設定した。

参考リンク

おすすめ書籍

入門 Prometheus ―インフラとアプリケーションのパフォーマンスモニタリング

入門 Prometheus ―インフラとアプリケーションのパフォーマンスモニタリング

入門 監視 ―モダンなモニタリングのためのデザインパターン

入門 監視 ―モダンなモニタリングのためのデザインパターン

SRE サイトリライアビリティエンジニアリング ―Googleの信頼性を支えるエンジニアリングチーム

SRE サイトリライアビリティエンジニアリング ―Googleの信頼性を支えるエンジニアリングチーム

和訳活動の支援

Prometheusドキュメント和訳が役に立った方は、以下QRコードからPayPayで活動を支援して頂けるとありがたいです。

PayPayによる支援用QRコード
上のQRコードからPayPayによる支援