Prometheusは監視結果を時系列データベースに格納します。時系列データベースはPrometheus同梱のローカルストレージを利用する事もサードパーティ製を利用する事もできます。このページではリモートストレージとしてInfluxDB v2を使用する方法を説明します。
InfluxDB v1とInfluxDB v2は大きく仕様が異なります。このページはInfluxDB v2の説明である事に注意ください。
前提
参照資料
- Influxdata 公式マニュアル – Install InfluxDB
- Influxdata ダウンロードページ
- Influxdata 公式ブログ – Prometheus Remote Write Support with InfluxDB 2.0
動作確認済環境
- 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」を押下します。
初期ユーザ名, 初期パスワード, 初期Organization名, 初期Bucket名を定義し、「CONTINUE」を押下します。
「QUICK START」を押下します。
InfluxDB v2のAPIトークンの確認
prometheus, telegrafとinfluxdb2が連携できるようにinfluxdb2のAPIトークンを確認します。influxdb2は明示的なトークン発行操作をしなくても、初期設定の状態で1つのトークンが発行されています。
「Load Data(上矢印マーク)」「API Tokens」の順に押下します。
ユーザ名を押下します。初期ユーザを「admin」とした場合は、「admin’s Token」を押下します。
「COPY TO CLIPBOARD」を押下し、API tokenをメモに控えます。この値は後続のtelegraf設定で使用します。
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」などと入力し、適宜の絞り込みをすると良いでしょう。
「instance」などprometheusが出力するラベルによる絞り込みができる事を確認します。絞り込み後、「SUBMIT」を押下します。
メトリックのグラフが描画される事を確認します。