0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

ゼロからZabbix6.4を起動して、Prometheus形式のメトリクスを取得する

Last updated at Posted at 2023-07-11

Zabbixを触ったことない人間が、ZabbixからPrometheusのメトリクスが取れると聞いて、どんな感じで取れるかを確認した時のメモ。
素人のメモなのでツッコミどころが多そうだが、記録として残しておく。

検証環境

以下の環境で確認した。

  • Ubuntu 20.04.6
  • docker 24.0.2

Zabbixの起動

docker-composeだと簡単に構築できるため、こちらを採用した。
Zabbixのdocker-composeによる起動は公式サイトでもサポートされている
公式ドキュメントでは5.4がサポートされていると書いているが、GitHubのリポジトリを見るとv6.4.4に対応している。今回は6.4.4で起動する。
docker-composeのファイルによって構成が変わるようだが、今回はUbuntu上にZabbixとMySQLを立てる、docker-compose_v3_ubuntu_mysql_latest.yamlを使って構築する。

公式手順によると、git cloneしてからdocker compose upする手順となっていたので、以下のような感じで実行する。

git clone https://github.com/zabbix/zabbix-docker.git
cd zabbix-docker/
docker compose -f ./docker-compose_v3_ubuntu_mysql_latest.yaml up -d

実際は利用Portが被ったため、801ポートで待つよう修正したdocker-compose.ymlを利用した。

 zabbix-web-nginx-mysql:
  image: zabbix/zabbix-web-nginx-mysql:ubuntu-6.4-latest
  ports:
   - "801:8080"
   - "443:8443"

Node Exporterの起動

Prometheus形式のメトリクスであれば何でもよかったので、ここでは手っ取り早く、踏み台環境にそのままNode Exporterを立ててメトリクスを公開する。
こちらで公開されているdocker-compose.ymlに公開用ポートを足して起動する。

cat << EOF > ./docker-compose.yml
version: '3.8'

services:
  node_exporter:
    image: quay.io/prometheus/node-exporter:latest
    ports:
      - 9100:9100
    container_name: node_exporter
    command:
      - '--path.rootfs=/host'
    network_mode: host
    pid: host
    restart: unless-stopped
    volumes:
      - '/:/host:ro,rslave'
EOF
docker compose up -d

起動したらメトリクスが取得できるか確認しておく。

$ curl -s 10.41.79.87:9100/metrics
# HELP go_gc_duration_seconds A summary of the pause duration of garbage collection cycles.
# TYPE go_gc_duration_seconds summary
go_gc_duration_seconds{quantile="0"} 2.0534e-05
 :(省略)

Zabbixからメトリクスを取得する

<ホストのIP>:<待ち受けポート>でアクセスすると、アカウント情報を聞かれるので、Admin/zabbixでログインする。ログイン後の画面は以下のような感じになる。
1689045001575.png

Data collection -> Hostsから右上のCreate hostをクリックする。
クリックすると以下のような画面が出るので適当に入力してAddをクリックして登録する。
1689049253999.png

追加したホストが表示されているはずなので、そのホスト名の列のItemsをクリックし、右上のCreate Itemをクリックする。
ここでは、親となるメトリクスのエンドポイントの情報を入力する。
1689049860284.png

入力する値は以下となる。

  • Name: node-exporter
  • Type: HTTP agent
  • Key: node-exporter
  • Type of information: Charactor
  • URL: http://Node ExporterのホストのIP:9100/metrics

おそらくNameとKeyは何でもよい。
この状態でTestをクリックし、Get value and testをクリックすると、以下のようにResultのところにcurlした結果と同じような文字列が取得できることが確認できる。

1689072348263.png

この状態でAddを押して追加する。
次にメトリクスを追加する。
どうも調べている感じだと、特定のエンドポイント(Node Exporter等)のメトリクスはまとめてZabbix側で取れるようだが、任意のメトリクス(例えば自作のアプリケーションなど)は1個1個メトリクスを指定しないと取れないように見えている。
そのため、ここでは1つ1つ指定していく。
Data collection -> Hosts->対象ホストのItemsから右上のCreate itemを再度選択し、メトリクスを追加する。
1689072877903.png
入力する値は以下となる。

  • Name: <対象メトリクス名>
  • Type: Dependent item
  • Key: <対象メトリクス名>
  • Type of information: Numeric (unsigned) ※データの種類によって変える必要あり
  • Master item: <先程作成したエンドポイントのitem>

また、Processingのタブを開いてZabbixがサポートするクエリを設定する。
1689072974238.png
入力する値は以下となる。

  • Name: Prometheus pattern
  • Parameters: <クエリ> ※ここではpromhttp_metric_handler_requests_total{code="200"}とした

これで保存すると、しばらくすると問題なければStatusがEnabledに変化する。

1689073305259.png

Itemsをクリックして、Latest dataをクリックすると、データが取れていることが確認できる。
1689073379808.png

グラフも表示可能。
1689073413885.png

一応ZabbixからPrometheus形式のメトリクスが読めることが確認できた。

残課題

以下調査不足なのか仕様なのか課題が残っている。

  • 任意のアプリケーションに対して個々のメトリクスを指定せずにまとめて取る方法(要は普通のPrometheus的なスクレイプ方法)が分からない

識者の方、対策ご存知だったら教えてください。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?