Prometheus リモートストレージ (InfluxDB v2編)

スポンサーリンク

Prometheusは監視結果を時系列データベースに格納します。時系列データベースはPrometheus同梱のローカルストレージを利用する事もサードパーティ製を利用する事もできます。このページではリモートストレージとしてInfluxDB v2を使用する方法を説明します。

InfluxDB v1とInfluxDB v2は大きく仕様が異なります。このページはInfluxDB v2の説明である事に注意ください。

前提

参照資料

動作確認済環境

  • Rocky Linux 8.6
  • Prometheus 2.36.2
  • telegraf 1.23.2
  • influxdb2 2.3.0

構成図

1台の仮想マシンで動作確認をしますが、prometheus, telegraf, influxdb2の3つのコンポーネントを動作させます。これらのデータフローを以下に示します。

+------------+            +----------+            +-----------+
|            |  tcp1234   |          |  tcp8086   |           |
| prometheus | ---------> | telegraf | ---------> | influxdb2 |
|            |            |          |            |           |
+------------+            +----------+            +-----------+

InfluxDB v2

InfluxDB v2のインストール

Influxdata ダウンロードページ」に記載されたインストール方法を元にInfluxDB v2をインストールします。以下、インストール手順を転記します。

cat <<EOF | sudo tee /etc/yum.repos.d/influxdb.repo
[influxdb]
name = InfluxDB Repository - RHEL \$releasever
baseurl = https://repos.influxdata.com/rhel/\$releasever/\$basearch/stable
enabled = 1
gpgcheck = 1
gpgkey = https://repos.influxdata.com/influxdb.key
EOF

sudo yum install influxdb2

InfluxDB v2を起動します。

systemctl enable influxdb.service --now

InfluxDB v2の初期設定

ブラウザで「http://<IPアドレス>:8086/」を開きます。すると、以下のような画面が表示されます。「GET STARTED」を押下します。

InfluxDB v2の初期設定 01

初期ユーザ名, 初期パスワード, 初期Organization名, 初期Bucket名を定義し、「CONTINUE」を押下します。

InfluxDB v2の初期設定 02

「QUICK START」を押下します。

InfluxDB v2の初期設定 03

InfluxDB v2のAPIトークンの確認

prometheus, telegrafとinfluxdb2が連携できるようにinfluxdb2のAPIトークンを確認します。influxdb2は明示的なトークン発行操作をしなくても、初期設定の状態で1つのトークンが発行されています。

「Load Data(上矢印マーク)」「API Tokens」の順に押下します。

InfluxDB v2のAPIトークンの確認 01

ユーザ名を押下します。初期ユーザを「admin」とした場合は、「admin’s Token」を押下します。

InfluxDB v2のAPIトークンの確認 02

「COPY TO CLIPBOARD」を押下し、API tokenをメモに控えます。この値は後続のtelegraf設定で使用します。

InfluxDB v2のAPIトークンの確認 03

telegraf

telegrafのインストール

Influxdata ダウンロードページ」に記載されたインストール方法を元にtelegrafをインストールします。以下、インストール手順を転記します。

sudo yum install telegraf

telegrafを起動します。

systemctl enable telegraf.service --now

telegrafのinputプラグイン

prometheusからのデータを受け取れるようにinputプラグインを定義します。設定例は以下の通りです。

cat << EOF > /etc/telegraf/telegraf.d/inputs.http_listener_v2.conf 
[[inputs.http_listener_v2]]
 ## Address and port to host HTTP listener on
 service_address = ":1234"
 ## Path to listen to.
 path = "/receive"
 ## Data format to consume.
 data_format = "prometheusremotewrite"
EOF

telegrafを再起動し設定を反映させます。

systemctl restart telegraf.service

telegrafのoutputプラグイン

prometheusから受け取ったデータをinfluxdb2へ転送できるようにoutputプラグインを定義します。設定例は以下の通りです。token, organization, bucketは適宜の変更をお願いします。

cat << EOF > /etc/telegraf/telegraf.d/outputs.influxdb_v2.conf 
[[outputs.influxdb_v2]]
  urls = ["http://localhost:8086/"]
  token = "H5ZrAj5d3lMjdWe_4NcefZJG3yw6a-110qSdvqY9Ez9PyurXNGdclo6Bx5agKjXeA9uxEcozdUdIpT5MKE0fyA=="
  organization = "org01"
  bucket = "bucket01"
EOF

telegrafを再起動し設定を反映させます。

systemctl restart telegraf.service

Prometheus

Prometheusの設定例

prometheus.ymlを以下のように定義します。

cat << EOF > /etc/prometheus/prometheus.yml
scrape_configs:
  - job_name: prometheus
    static_configs:
      - targets:
        - localhost:9090
  - job_name: node
    static_configs:
      - targets:
        - localhost:9100

remote_write:
 - url: "http://localhost:1234/receive"
EOF

prometheusを再起動し設定を反映させます。

systemctl restart prometheus.service

動作確認

Prometheus/telegraf間の疎通確認

Prometheusからtelegrafへデータが転送されているかを確認します。

デバッグ用途として一時的にfileプラグインを使用します。設定例は以下の通りです。

cat << EOF > /etc/telegraf/telegraf.d/outputs.debug.conf 
[[outputs.file]]
  ## Files to write to, "stdout" is a specially handled file.
  files = ["stdout", "/tmp/metrics.out"]

  ## Use batch serialization format instead of line based delimiting.  The
  ## batch format allows for the production of non line based output formats and
  ## may more efficiently encode and write metrics.
  # use_batch_format = false

  ## The file will be rotated after the time interval specified.  When set
  ## to 0 no time based rotation is performed.
  # rotation_interval = "0h"

  ## The logfile will be rotated when it becomes larger than the specified
  ## size.  When set to 0 no size based rotation is performed.
  # rotation_max_size = "0MB"

  ## Maximum number of rotated archives to keep, any older logs are deleted.
  ## If set to -1, no archives are removed.
  # rotation_max_archives = 5

  ## Data format to output.
  ## Each data format has its own unique set of configuration options, read
  ## more about them here:
  ## https://github.com/influxdata/telegraf/blob/master/docs/DATA_FORMATS_OUTPUT.md
  data_format = "influx"
EOF

telegrafを再起動し設定を反映させます。

systemctl restart telegraf.service

/tmp/metrics.outにprometheusから受信したデータが記録されている事を確認します。

telegrafが出力取得されるメトリックもありますので、prometheusからメトリックを受け取っている事を確認するにはprometheusでgrepします。

[root@linux010 ~]# tail -f /tmp/metrics.out | grep prometheus
prometheus_remote_write,cause=gathering,host=linux010,instance=localhost:9100,job=node promhttp_metric_handler_errors_total=0 1657788945686000000
prometheus_remote_write,host=linux010,instance=localhost:9100,job=node promhttp_metric_handler_requests_in_flight=1 1657788945686000000
prometheus_remote_write,code=200,host=linux010,instance=localhost:9100,job=node promhttp_metric_handler_requests_total=3 1657788945686000000
prometheus_remote_write,code=500,host=linux010,instance=localhost:9100,job=node promhttp_metric_handler_requests_total=0 1657788945686000000
prometheus_remote_write,code=503,host=linux010,instance=localhost:9100,job=node promhttp_metric_handler_requests_total=0 1657788945686000000
prometheus_remote_write,host=linux010,instance=localhost:9100,job=node up=1 1657788945686000000
prometheus_remote_write,host=linux010,instance=localhost:9100,job=node scrape_duration_seconds=0.0179712 1657788945686000000
prometheus_remote_write,host=linux010,instance=localhost:9100,job=node scrape_samples_scraped=509 1657788945686000000
prometheus_remote_write,host=linux010,instance=localhost:9100,job=node scrape_samples_post_metric_relabeling=509 1657788945686000000
prometheus_remote_write,host=linux010,instance=localhost:9100,job=node scrape_series_added=509 1657788945686000000

動作確認完了後、デバッグ用の設定を削除します。

rm -f /etc/telegraf/telegraf.d/outputs.debug.conf 
systemctl restart telegraf.service
rm -f /tmp/metrics.out

telegraf/influxdb2間の疎通確認

ブラウザで「http://<IPアドレス>:8086/」を開きます。「Data Exporter(グラフのようなアイコン)」を押下し、「_mesurement」フィルタの中に「prometheus_remote_write」とのチェックボックスが現れる事を確認します。選択肢が多いので検索窓に「prometheus」などと入力し、適宜の絞り込みをすると良いでしょう。

influxdb2のグラフ描画 01

「instance」などprometheusが出力するラベルによる絞り込みができる事を確認します。絞り込み後、「SUBMIT」を押下します。

influxdb2のグラフ描画 02

メトリックのグラフが描画される事を確認します。

influxdb2のグラフ描画 03

タイトルとURLをコピーしました