彩り

私の作業が誰かの役に立つといいな。IT系のTech記事中心です。

zabbix_senderを使った監視データ送信

これは Zabbix Advent Calendar 2025 の16日目の記事となります。
毎年12月16日に一本ブログを書くだけのブログになっています(泣)。来年はもう少しアウトプットしたいなぁ。

はじめに

zabbix_sender って便利ですよね。私は今年色々なオプションを駆使して本コマンドには大変お世話になった1年な気がしています。

Zabbixでメトリクスを収集する際、通常はZabbix Agentがサーバー側からのポーリングに応答する形でデータを送信しますが、zabbix_senderを使うことで能動的にデータをZabbixサーバーに送信(プッシュ)することができます。これにより、スクリプトバッチ処理の結果を柔軟にZabbixに取り込むことが可能になります。

zabbix_senderとは

zabbix_senderは、Zabbix Trapperアイテムにデータを送信するためのコマンドラインユーティリティです。

主な特徴

  • プッシュ型のデータ送信: スクリプトやcronジョブから任意のタイミングでデータを送信可能
  • バッチ送信対応: 複数のメトリクスを一度に送信でき、効率的
  • 柔軟性: カスタムスクリプトの実行結果やログ解析結果など、様々なデータソースに対応
  • 軽量: Zabbix Agentのような常駐プロセスが不要

GUI設定例

  • タイプ:Zabbixトラッパーですね

基本的な使い方

コマンドフォーマット

$ zabbix_sender -z <Zabbixサーバー> -s <ホスト名> -k <アイテムキー> -o <値>
$

使用例

  • zabbix_senderが動いている自ホスト(127.0.0.1)上のZabbixServer宛にデータ送信
    • ホストキー:test-host001
    • アイテムキー:test-item001
$ zabbix_sender -z 127.0.0.1 -s "test-host001" -k "test-item001" -o 16
Response from "127.0.0.1:10051": "processed: 0; failed: 1; total: 1; seconds spent: 0.000010"
sent: 1; skipped: 0; total: 1
$

ファイル指定

zabbix_senderの便利な機能の一つが、ファイルを指定してデータを送信できることです。
-iオプションを使用します。

ファイルフォーマット

ファイルは以下の形式で記述します:

<ホスト名> <アイテムキー> <値>

例:-i オプション で指定するファイルの中身(data.txt)

test-host001 test-item001 160

使用例

$ zabbix_sender -z 127.0.0.1 -i ./data1.txt
Response from "127.0.0.1:10051": "processed: 1; failed: 0; total: 1; seconds spent: 0.000032"
sent: 1; skipped: 0; total: 1
$
  • 送信時刻はzabbix_senderがデータ送信した時刻となります

ファイル指定(時刻指定)

ファイルに時刻情報(UnixTime)を指定
-Tオプションを使用します。

ファイルフォーマット

ファイルは以下の形式で記述します

<ホスト名> <アイテムキー> <Timestamp> <値>

例:-T -i オプションで指定するファイルの中身(data2.txt)

test-host001 test-item001 1765796500 1
test-host001 test-item001 1765796510 10
test-host001 test-item001 1765796520 100

使用例

$ zabbix_sender -z 127.0.0.1 -T -i ./data2.txt
Response from "127.0.0.1:10051": "processed: 3; failed: 0; total: 3; seconds spent: 0.000023"
sent: 3; skipped: 0; total: 3
$

ファイル指定(時刻指定:秒オーダー以下)

さらに秒オーダー以下の指定(nano sec)もできちゃいます。

ファイルフォーマット

<ホスト名> <アイテムキー> <Timestamp> <ns> <値>

例:-T -N -i オプションで指定するファイルの中身(data3.txt)

test-host001 test-item001 1765796600 100 1000
test-host001 test-item001 1765796610 100200300 10000
test-host001 test-item001 1765796620 123456 100000

使用例

$ zabbix_sender -z 127.0.0.1 -T -N -i ./data3.txt
Response from "127.0.0.1:10051": "processed: 3; failed: 0; total: 3; seconds spent: 0.000025"
sent: 3; skipped: 0; total: 3
$

DB内の格納データ確認

hostidをWebUIで確認して、登録されているitemid一覧からvalue_type確認して

mysql> SELECT itemid, name, key_, hostid, value_type FROM items WHERE hostid = 10633;
+--------+--------------+--------------+--------+------------+
| itemid | name         | key_         | hostid | value_type |
+--------+--------------+--------------+--------+------------+
|  47252 | test-item001 | test-item001 |  10633 |          3 |
+--------+--------------+--------------+--------+------------+

itemid指定して、history_unitのデータ一覧取得

mysql> SELECT itemid, clock, ns, value FROM history_uint WHERE itemid = 47252 ORDER BY clock ASC LIMIT 100;
+--------+------------+-----------+--------+
| itemid | clock      | ns        | value  |
+--------+------------+-----------+--------+
|  47252 | 1765796407 | 703196215 |    160 |
|  47252 | 1765796500 |         0 |      1 |
|  47252 | 1765796510 |         1 |     10 |
|  47252 | 1765796520 |         2 |    100 |
|  47252 | 1765796600 |       100 |   1000 |
|  47252 | 1765796610 | 100200300 |  10000 |
|  47252 | 1765796620 |    123456 | 100000 |
+--------+------------+-----------+--------+

と、こんな感じで指定した値がそれぞれ格納されていますね。

所感

  • 一般的にfork/execというか、プロセスの実行は比較的コストの高い処理なのでファイル指定等で効率的にデータを送信する方法は知っておくと良い気がします。
  • とはいえ、zabbix_senderを実行する側がPython等のスクリプトの場合は、そもそも必要なデータだけを間引いて送信することで効率化が図れます。
    • 一定期間の最大値、最小値、平均値、だけを送信するとか
  • 秒オーダー以下の値を指定できるのは自分も知った時はちょっとびっくりでしたができるんですね。
  • 小ネタみたいになりましたが、誰かのお役に立てばと!
    • ちょっと調べた感じ、NanoSec指定の送信は見当たらなかったので書いてみました。

ではでは、Happy Monitoring ♪ 〜

参考リンク