Ubuntu Weekly Recipe

第562回 モニタリングツールPrometheusを使う

この記事を読むのに必要な時間:およそ 6 分

Prometheusの設定ファイルとNode_Exporterの登録

PrometheusがExporterからメトリックを取得して,時系列データベースにデータを蓄えるためにはPrometheusにExporterを収集対象として登録する必要があります。

そのため,Prometheusの設定ファイルに先程起動したNode_Exporterの設定を追加します。

その前に,Prometheusのインストール時はサンプルのものをコピーするだけであった設定ファイルであるprometheus.ymlの中身を見ておきましょう。拡張子が示すとおりにYAML形式で設定が記載されています。

# my global config
global:
  scrape_interval:     15s # Set the scrape interval to every 15 seconds. Default is every 1 minute.
  evaluation_interval: 15s # Evaluate rules every 15 seconds. The default is every 1 minute.
  # scrape_timeout is set to the global default (10s).

# Alertmanager configuration
alerting:
  alertmanagers:
  - static_configs:
    - targets:
      # - alertmanager:9093

# Load rules once and periodically evaluate them according to the global 'evaluation_interval'.
rule_files:
  # - "first_rules.yml"
  # - "second_rules.yml"

# A scrape configuration containing exactly one endpoint to scrape:
# Here it's Prometheus itself.
scrape_configs:
  # The job name is added as a label `job=<job_name>` to any timeseries scraped from this config.
  - job_name: 'prometheus'

    # metrics_path defaults to '/metrics'
    # scheme defaults to 'http'.

    static_configs:
    - targets: ['localhost:9090']

Exporterからメトリックを取得する部分にのみ着目すると,以下の設定が施されています。

  • globalのscrape_intervalでExporterから15秒周期でメトリックを取得
  • scrape_configsに'prometheus'としてPrometheus自分自身のメトリックを取得するjobを定義

PrometheusでExporterからメトリックを取得する際にはExporter(サービス)毎などのまとまりでjobを作って,それぞれのjobに対して取得対象などを定義していきます。

それでは,設定ファイルにNode_Exporterの設定を追加していきましょう。/etc/prometheus/prometheus.ymlのscrape_configsの末尾に以下を追記します。

scrape_configs:

(略)

  - job_name: 'node'

    file_sd_configs:
    - files:
       - /etc/prometheus/nodes.yml

メトリック取得対象の定義にはサービスディスカバリ機能を用います。今回はfile_sd_configを使用します。file_sd_configでは別なYAMLファイルに収集対象のリストを書き下す形式です。

なお,サンプルに記載されていた'prometheus' jobではstatic_configが使用されていて,これはprometheus.ymlに収集対象を直書きする形式です。サービスディスカバリはstatic_configやfile_sd_config以外にも KubernetesAmazon EC2Microsoft Azure と連携したサービスディスカバリや,DNSのSRVレコードを使用したもの など複数存在しています。

file_sd_configに定義した/etc/prometheus/nodes.ymlへ先程起動したNode_Exporterを登録します。基本的にはtargetsに<対象ホスト>:9100と並べ立てていくのみです。また,labelsを使用することで,メトリックに任意のラベルを付加できます。今回はroleという名前のラベルを定義し,値にprometheusを入れています。ラベルは後述のPromQLでキーとして使用できるため,複数台のホストがある時「このロールのマシンだけでデータを集計したい」ということがあるケースで効力を発揮します。

- targets:
   - localhost:9100
  labels:
    role: prometheus

設定を追加したら,promtoolのシンタックスチェック機能を使用して設定ファイルをチェックしましょう。

$ promtool check config /etc/prometheus/prometheus.yml 
Checking /etc/prometheus/prometheus.yml
  SUCCESS: 0 rule files found

問題がなければPrometheusをreloadして,ブラウザでPrometheusのダッシュボードの/targetsにアクセスしてみましょう。画面に'node'という項目とlocalhost:9100が存在しているようであればNode_Exporterの登録に成功しています図4)⁠

図4 Node_Exporter登録後のPrometuehsのダッシュボードのtarget画面

画像

著者プロフィール

上野竜一(うえのりゅういち)

Ubuntu Japanese Teamが参加するイベントに出入りしている人。パンダが好き。株式会社 創夢所属。