Prometheus の Exporter について

こんにちは。サイオステクノロジー OSS サポート担当 山本 です。

今回は以前紹介した監視ツール Prometheus が収集するためのデータを出力するツール Exporter について、いくつかの Exporter を例にして導入手順を確認してみたいと思います。

Prometheus の概要については、過去記事 を参照してください。

■Exporter について

Exporter について少しおさらいしておきます。

Exporter は特定の URL にアクセスされた時に、導入したマシンで収集したデータ群 metrics を出力するツールです。Prometheus の本体でこの metrics のデータを収集・蓄積する形で、Prometheus は監視を行います。

つまり、Exporter の出力する metrics の内容がそのまま Prometheus の監視内容となります。

出力される metrics の内容はその Exporter の実装に依存するため、Exporter ごとにその metrics は全く異なります。
このため、目的に応じて様々な Exporter が公式・非公式問わず開発されています。
Exporter は開発することも可能ですが、目的に合致した metrics を出力する Exporter が存在していれば開発にかかるコストが大幅に削減でき、Prometheus の監視を始めるハードルはぐっと下がります。

ところで、Prometheus の公式ページ にも非常に多種の Exporter が紹介されていますが、Exporter ごとに使い方は異なっています。

今回は数種の Exporter で最低限監視するまでの手順を例にして、Exporter の使用方法は Exporter 毎に異なる、ということを確認していこうと思います。

■memcached_exporter

memcached_exporter は、memcached 向けの Exporter です。

ソースからコンパイルしてもよいですが、prometheus のダウンロードページgithub の release ページからバイナリ版をダウンロードすることもできます。
今回はバイナリ版を使って監視を始めるまでの手順を見ていきます。

1. バイナリ版 memcached_exporter をダウンロード・解凍します。

2. 作成された memcached_exporter のディレクトリに移動し、以下のコマンドで memcached_exporter を起動します。

# ./memcached_exporter

上記コマンドには以下などのオプションがあります。特に、”–memcached.address” は memcached のポートを変更していたり、別サーバの memcached を監視させたい場合には必須となります。

–memcached.address <memcached ホストのアドレス:port> 監視対象の memcached が動作しているホストのアドレスとポートを指定します。デフォルト値: localhost:11211
–memcached.pid-file <pid ファイルへのパス> 使用中のファイルディスクリプタ数など、いくつかの情報が追加で出力されるようになります。(RHEL/CentOS 同梱版 memcached は pid ファイルを使用しないため、通常このオプションは使用できません。)

3. https://<ホスト名 or IP アドレス>:9150/metrics
にアクセスし、metrics が出力されていることを確認します。

4. prometheus.yml の scrape_configs に以下の設定を追加します。

scrape_configs:
         :
         :
  - job_name: 'memcached'
    static_configs:
    - targets: ['localhost:9150']

5. prometheus を再起動、または設定の再読み込みを行い、
prometheus から memcached_exporter の情報を取得できることを確認します。

# killall -HUP prometheus

以上で memcached_exporter の監視設定は完了です。

■mysqld_exporter

mysqld_exporter は、MySQL 向けの Exporter です。
MariaDB も扱うことができます。

ソースからコンパイルしてもよいですが、prometheus のダウンロードページgithub の release ページからバイナリ版をダウンロードすることもできます。
こちらもバイナリ版を使って監視を始めるまでの手順を見ていきます。

1. バイナリ版 mysqld_exporter をダウンロード・解凍します。

2. MySQL (MariaDB) に接続し、監視で使用するユーザの作成と権限の付与を行います。

> CREATE USER '<ユーザ名>'@'localhost' IDENTIFIED BY '<パスワード>' WITH MAX_USER_CONNECTIONS 3;
> GRANT PROCESS, REPLICATION CLIENT, SELECT ON *.* TO '<ユーザ名>'@'localhost';

3. mysqld_exporter が MySQL (MariaDB) に接続できるように、以下の a か b いずれかの設定を行います。

 a. ~/.my.cnf に設定を追加します。
(~/.my.cnf 以外の設定ファイルを使用する場合、4. での起動時に “–config.my-cnf=<.my.conf のパス>” オプションを追加します。)

例:

[client]
user=<ユーザ名>
password=<パスワード>

 b. 環境変数 “DATA_SOURCE_NAME” を設定します。(参考:Data Source Name)

例:

 # export DATA_SOURCE_NAME='<ユーザ名>:<パスワード>@(localhost:3306)/'

4. 作成された mysqld_exporter のディレクトリに移動し、以下のコマンドで mysqld_exporter を起動します。この時、監視したい内容に合わせて起動オプションを指定します。

# ./mysqld_exporter

mysqld_exporter では collector という単位で収集する情報を制御することができます。collector の一覧はこちら
なお、有効になっている collector は mysqld_exporter 起動時にダイアログに出力されます。

  :
INFO[0000] Enabled scrapers:                             source="mysqld_exporter.go:269"
INFO[0000]  --collect.global_status                      source="mysqld_exporter.go:273"
INFO[0000]  --collect.global_variables                   source="mysqld_exporter.go:273"
INFO[0000]  --collect.slave_status                       source="mysqld_exporter.go:273"
INFO[0000]  --collect.info_schema.innodb_cmp             source="mysqld_exporter.go:273"
INFO[0000]  --collect.info_schema.innodb_cmpmem          source="mysqld_exporter.go:273"
INFO[0000]  --collect.info_schema.query_response_time    source="mysqld_exporter.go:273"
INFO[0000] Listening on :9104                            source="mysqld_exporter.go:283"

例えば、”collect.binlog_size” という collector を有効にしたい場合は、以下のようにして起動します。

# ./mysqld_exporter --collect.binlog_size

逆に、デフォルトで有効な “collect.global_status” という collector を無効にする場合には、以下のように collector の名前の前に “no-” を追加したオプションを指定して、以下のように起動します。

# ./mysqld_exporter --no-collect.global_status

5. https://<ホスト名 or IP アドレス>:9104/metrics
にアクセスし、metrics が出力されていることを確認します。

6. prometheus.yml の scrape_configs に以下の設定を追加します。

scrape_configs:
         :
         :
  - job_name: 'mysqld'
    static_configs:
    - targets: ['localhost:9104']

7. prometheus を再起動、または設定の再読み込みを行い、
prometheus から mysqld_exporter の情報を取得できることを確認します。

# killall -HUP prometheus

以上で mysqld_exporter での監視を行えるようになります。

■snmp_exporter

snmp_exporter は、SNMP で収集された情報を扱う exporter です。
「snmp_exporter を導入したサーバが SNMP で収集する情報」を監視対象にしているので、結果的に exporter を導入したサーバではないサーバも監視することができる、少し変わった Exporter です。

snmp_exporter も、バイナリ版は github の release ページからダウンロード可能です。
また、snmp_exporter では設定ファイルを作成するために別途 generator というツールが用意されています。

まずは snmp_exporter を使って監視を行う設定を見ていきます。

1. バイナリ版 snmp_exporter をダウンロード・解凍します。

2. 作成された snmp_exporter のディレクトリに移動し、以下のコマンドで snmp_exporter を起動します。

# ./snmp_exporter

3. https://<ホスト名 or IP アドレス>:9116/snmp?target=<SNMP で情報を収集する対象の IP アドレス>
にアクセスし、metrics が出力されていることを確認します。
※ URL がこれまでに紹介した Exporter とは大きく異なるので、注意してください。
/metrics にも exporter 自体の基本情報は出力されますが、SNMP で収集された情報は出力されません

4. prometheus.yml の scrape_configs に以下の設定を追加します。
情報を取得するアドレスが /metrics ではないことや URL パラメータの設定が必要なこと、prometheus.yml の仕様などから、設定内容は複雑になってしまいます。

scrape_configs:
         :
         :
  - job_name: 'snmp'
    metrics_path: /snmp
    static_configs:
    - targets:
      - 
    params:
      module: [if_mib]

 # ここまでの設定で、'snmp' ジョブが metrics を取得するアドレスは "https://:80/snmp?module=if_mib"
 
    relabel_configs:
 # URL パラメータに、「target=」を追加します。
      - source_labels: [__address__]
        target_label: __param_target

 # Prometheus UI などで確認できる label のうち、"instance" という名前のものを URL パラメータ "target" (=) に書き換えます。
      - source_labels: [__param_target]
        target_label: instance

 # 情報を取得する exporter のアドレスを "localhost:9116" に書き換えます。
      - target_label: __address__
        replacement: localhost:9116

 # この設定で最終的に、'snmp' ジョブが metrics を取得するアドレスは "https://localhost:9116/snmp?module=if_mib&target="

5. prometheus を再起動、または設定の再読み込みを行い、
prometheus から snmp_exporter の情報を取得できることを確認します。

# killall -HUP prometheus

以上で snmp_exporter の導入と、prometheus との連携設定は OK です。

ところで、snmp_exporter がどのような情報を SNMP で収集するかは、snmp_exporter を展開したディレクトリに存在する “snmp.yml” という設定ファイルによって決まります。
このファイルは手動で変更することもできなくはないと思いますが、generator というツールで作成することが推奨されています。

generator の最低限の使い方も確認していきます。

1. 以下のコマンドを実行し、必要なパッケージをインストールします。※環境毎の Net-SNMP に依存するように作られているためか、バイナリ版は提供されていません。

# yum install gcc gcc-c++ make net-snmp net-snmp-utils net-snmp-libs net-snmp-devel golang

2. 以下のコマンドを実行し、generator をダウンロード・ビルドします。

# go get github.com/prometheus/snmp_exporter/generator
# cd ${GOPATH-$HOME/go}/src/github.com/prometheus/snmp_exporter/generator
# go build

また、generator のデフォルト設定を使用する場合、以下のコマンドを実行し必要な MIB ファイルをダウンロードします。
※ generator では収集する情報についての説明などを作成するために MIB ファイルの情報が必要になりますが、net-snmp-libs の /usr/share/snmp/mibs/ 配下の各ファイルも別途参照されるので、/usr/share/snmp/mibs/ 内の MIB だけ監視する設定に変更するのであれば、このコマンドは必要ありません。

make mibs

3. 設定ファイル generator.yml を編集し、監視する内容を設定します。
以下は「moduleA」という名前で監視内容のセットであるモジュールを設定する例です。

modules:
  moduleA:
    walk:
      - <監視したい MIB または OID>
      - <監視したい MIB または OID>
             :
  <モジュール名>:
             :

設定する際は、予め監視対象となるマシンから監視したい MIB の情報が取得できることを確認してください。

また、上記は generator を動作させるのに必要な最低限の設定です。
詳細な書式設定やサンプル等は、公式ページまたはデフォルトの generator.yml などを参照してください。

4. 以下のコマンドを実行して snmp_exporter の設定ファイル snmp.yml を生成します。

./generator generate

5. 作成された snmp.yml を snmp_exporter のディレクトリに移動させます。
その後、以下のコマンドを実行し、snmp_exporter の設定の再読み込み (または再起動) を行います。

# killall -HUP snmp_exporter

6. https://<ホスト名 or IP アドレス>:9116/snmp?target=<SNMP で情報を収集する対象の IP アドレス>&module=<今回設定したモジュール名>
にアクセスし、設定した MIB の情報が取得できるようになっていることを確認します。

7. prometheus.yml の scrape_configs の設定のうち、”params: module” に今回作成したモジュールの名前を設定します。

scrape_configs:
         :
         :
  - job_name: 'snmp'
    metrics_path: /snmp
    static_configs:
    - targets:
      - 
    params:
      module: [moduleA]
         :
         :

8. prometheus の設定の再読み込み (または再起動) を行い、
prometheus から snmp_exporter で、設定した MIB の情報が取得できていることを確認します。

# killall -HUP prometheus

generator を使用して snmp_exporter の取得内容を変更し、変更に合わせて prometheus の監視設定を更新する手順は以上となります。

■最後に

今回は Prometheus の Exporter 3種の導入手順を見てきました。

このように、Exporter 毎に設定箇所や方法などはかなり異なります。
Exporter という同じ分類のものなんだし、と確認せずに適当に設定してしまうと、後々逆に苦労することになりかねません。
新しく Exporter を導入する際にはドキュメントを確認したり、動作確認や場合によっては動作検証などを行なっておくことが大事でしょう。

ご覧いただきありがとうございます! この投稿はお役に立ちましたか?

役に立った 役に立たなかった

1人がこの投稿は役に立ったと言っています。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です