監視対象が動的に増減するような状況においてPrometheusで監視を行う場合、サービスティスカバリ機能が便利です。今回はその例として、Prometheusのファイルサービスディスカバリで監視対象を動的に変更する方法についてまとめます。
動作環境の構築
まずdocker-composeで最低限の環境を構築します。
次のディレクトリ構成を用意します。
docker-compose.yaml prometheus/ prometheus.yaml targets.json
docker-compose.yamlは次の通りです。prometheusとnode-exporterのdockerコンテナを用意します。
version: '3' services: prometheus: image: prom/prometheus container_name: prometheus volumes: - ./prometheus:/etc/prometheus command: "--config.file=/etc/prometheus/prometheus.yaml" ports: - 9090:9090 restart: always exporter: image: prom/node-exporter:latest container_name: node-exporter ports: - 9100:9100 restart: always
prometheus.yamlは次の通りです。
ファイルサービスディスカバリを使用する場合、scrape_configsにfile_sd_configsを指定し、その中のfilesにglob形式でターゲットファイルへのパスを記入します(今回は*.json。このyamlファイルからの相対パスで記述)
global: scrape_interval: 15s scrape_configs: - job_name: 'node' file_sd_configs: - files: - '*.json'
すると、prometheusはglob形式で指定したファイルを探し出して監視対象に加えてくれるようになります。
targets.jsonは次の通りです。
[ { "labels": { "job": "node" }, "targets": [ "node-exporter:9100" ] } ]
prometheusで最初の状態を確認する
「docker-compose up -d」でprometheusとnode-exporterを立ち上げます。
「http://【実行環境のアドレス】:9090/graph」にアクセスし、Expressionに「up{job="node"}」を入力してExecuteします。すると以下の結果が出力されます。
Element Value up{instance="node-exporter:9100",job="node"} 1
targets.jsonで指定した監視対象がTargetに加えられていることがわかります。
ターゲットファイルを追加して監視対象を変更する
次にprometheusを実行したまま監視対象を変えてみます。
targets.jsonと同じディレクトリに次のtargets2.jsonを追加します。
[ { "labels": { "job": "node" }, "targets": [ "prometheus:9090" ] } ]
再度prometheusのgraphページにアクセスし「up{job="node"}」をExecuteします。すると以下の結果が出力されます。
Element Value up{instance="node-exporter:9100",job="node"} 1 up{instance="prometheus:9090",job="node"} 1
targets2.jsonでの追加分が、監視対象に反映されていることがわかります。