highlight.js

2017年7月31日月曜日

Zabbix の vfs.dev.read / write って、Linux の場合 Agent で何してるの?

ストレージサーバーのディスクを read only でマウントする事件があり、Zabbix でディスクへの書き込みをチェックがしたくなった。
そこで、既存の vfs.dev.read / write が 使えるのか知りたくなったので調べて見た。

環境

  • CentOS release 6.8 (Final)
  • zabbix-agent-2.2.15-1.el6.x86_64

ソースコードをダウンロード

まずは、ここ(https://www.zabbix.com/download)から調べたいソースコードをダウンロード。

適当に grep しまくる

それっぽいところにたどり着く

#if defined(KERNEL_2_4)
# define INFO_FILE_NAME "/proc/partitions"
# define PARSE(line) if (sscanf(line, ZBX_FS_UI64 ZBX_FS_UI64 " %*d %s "   \
     ZBX_FS_UI64 " %*d " ZBX_FS_UI64 " %*d "   \
     ZBX_FS_UI64 " %*d " ZBX_FS_UI64 " %*d %*d %*d %*d", \
    &rdev_major,       \
    &rdev_minor,       \
    name,        \
    &ds[ZBX_DSTAT_R_OPER],      \
    &ds[ZBX_DSTAT_R_SECT],      \
    &ds[ZBX_DSTAT_W_OPER],      \
    &ds[ZBX_DSTAT_W_SECT]      \
    ) != 7) continue
#else
# define INFO_FILE_NAME "/proc/diskstats"
# define PARSE(line) if (sscanf(line, ZBX_FS_UI64 ZBX_FS_UI64 " %s "   \
     ZBX_FS_UI64 " %*d " ZBX_FS_UI64 " %*d "   \
     ZBX_FS_UI64 " %*d " ZBX_FS_UI64 " %*d %*d %*d %*d", \
    &rdev_major,       \
    &rdev_minor,       \
    name,        \
    &ds[ZBX_DSTAT_R_OPER],      \
    &ds[ZBX_DSTAT_R_SECT],      \
    &ds[ZBX_DSTAT_W_OPER],      \
    &ds[ZBX_DSTAT_W_SECT]      \
    ) != 7        \
    &&        \
    /* some disk partitions */     \
    sscanf(line, ZBX_FS_UI64 ZBX_FS_UI64 " %s "   \
     ZBX_FS_UI64 ZBX_FS_UI64     \
     ZBX_FS_UI64 ZBX_FS_UI64,    \
    &rdev_major,       \
    &rdev_minor,       \
    name,        \
    &ds[ZBX_DSTAT_R_OPER],      \
    &ds[ZBX_DSTAT_R_SECT],      \
    &ds[ZBX_DSTAT_W_OPER],      \
    &ds[ZBX_DSTAT_W_SECT]      \
    ) != 7        \
    ) continue
#endif

結論

Zabbix の vfs.dev.read / write は Linux kernel 2.6 の場合、/proc/diskstats をパースしている。
それで、/proc/diskstats というのは、「I/O statistics」つまり統計情報なので、今回監視したかったのと
は少し違った。
やっぱり、Agent で touch /tmp/write_checkする用のアイテムを作るか、リモートコマンドでサーバーから touch して戻り値をチェックする感じかな。

参考

0 件のコメント:

コメントを投稿