4
4

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 3 years have passed since last update.

Zabbixでヒストリデータがあるはずなのにitem.get APIでデータが取れなくなった話

Last updated at Posted at 2018-07-22

はじめに

業務でZabbixから監視itemのデータを元に何か動作させるプログラムを開発していたのですが、
ヒストリデータはあるはずがなぜか監視データが取れなくなったので調査した話です。
これで数時間失ったので記事として記録に残します。ダレカノヤクニタテバ嬉しいです。
zabbixは3.0系です。 

どういうことが起こったか

Zabbix api(item.get)で、とある監視データのlastvalueを取得。
監視hostを無効化したあと、しばらく取得し続けるとヒストリデータが7日の設定であるはずが、
1日後に取得できなくなりました(lastvalueの値が0となりました)。

先に結論

結果から、、ZBX_HISTORY_PERIOD設定しましょう。
Zabbix api(item.get)のlastvalueに上記パラメータがあり、これが悪さをしていた。
設定方法は defines.inc.php というphpファイルに直書きするようです。

調査

取得監視itemの設定とその取得方法

  • 取得監視itemの設定
設定名
item名 system.cpu.util[,idle]
ヒストリ 7d
トレンド 365d
ステータス Enabled

↑ この設定から最低でも7日間はデータを取得できるはずです(でもできない)。

  • 取得方法
    • Zabbix api item.get で lastvalueを見て監視itemデータを取得
    • 監視しているhostの監視状態を有効化から無効化に切り替え
    • 監視しているhostをシャットダウン
    • ちょうど1日間 監視itemデータ(lastvalue)をapiで取得し続ける

具体的には以下のような感じ

  • 取得方法詳細
curl -sS -X POST http://<zabbix_host>/api_jsonrpc.php \
    -H 'Content-Type: application/json-rpc' -d '
{
    "jsonrpc": "2.0",
    "method": "item.get",
    "params": {
        "output": ["key_", "lastvalue"],
        "hostids": "<監視するhostid>",
        "search": {
            "key_": "system.cpu.util[,idle]"
        },
        "sortfield": "name"
    },
    "auth": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
    "id": 1
}'
  • 1日流し続けた結果
{
    "id": 1,
    "jsonrpc": "2.0",
    "result": [
        {
            "itemid": "23689",
            "key_": "system.cpu.util[,idle]",
            "lastvalue": "98.3248"        ← とれてる
        }
    ]
}

:

{
    "id": 1,
    "jsonrpc": "2.0",
    "result": [
        {
            "itemid": "23689",
            "key_": "system.cpu.util[,idle]",
            "lastvalue": "98.3248"        ← とれてる
        }
    ]
}

: 監視host無効化してから1日経過

{
    "id": 1,
    "jsonrpc": "2.0",
    "result": [
        {
            "itemid": "23689",
            "key_": "system.cpu.util[,idle]",
            "lastvalue": "0"        ← ここで急に0になる
        }
    ]
}

{
    "id": 1,
    "jsonrpc": "2.0",
    "result": [
        {
            "itemid": "23689",
            "key_": "system.cpu.util[,idle]",
            "lastvalue": "0"        ← 以降0になる
        }
    ]
}

以下が被疑所となりました。

  • ヒストリデータの設定が7dだがZabbix内の何かの設定で上書きされている
  • 監視hostを無効化した場合、ヒストリ以外の他の設定でデータを残す期間が決まっている
  • housekeepingがヒストリデータを削除している(可能性低)

と調べ続けたのですが、1日後、というキーワードに引っかからず、どれも外れ。違いました。

そもそもzabbix api item.getで実は1日間しかデータを参照してくれないのでは?と疑問に思い、apiの仕様を調査して見ました。
apiのI/Fでは特に取得範囲を設定するような箇所がなかったため、ダメ元でitem.getで取得しているlastvalueについて調べてみるとどうもZBX_HISTORY_PERIODという設定値に従うことが分かりました。。
ここにたどり着くのにどれだけ時間のかかったことか。

設定方法は defines.inc.php というphpファイルに直書きです。こんな分かりにくい所に設定があるなんて・・・itemのヒストリ設定はapiによっても設定が多岐に渡るようです
これを設定して item.getで lastvalueを 1d以上 取得することができました。

以上

4
4
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
4
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?