Redis監視するためのNagiosプラグイン作ってみた(Golang)

Nagiosの監視しようとRedisプラグイン探してみたら以下が見つかりました。

check_redis.pl - Nagios Exchange

ただ、PerlPHPが必要だったので、バイナリファイルを置くだけで動くGoでプラグインを作ってみました。

コマンドのオプション

オプション 説明
-h|-host Redisサーバのホスト名 or IP(default 127.0.0.1)
-p|-port Redisのポート番号(default 6379)
-password Redisのパスワード(設定している場合のみ)
-timeout タイムアウト(ミリ秒)
-metrics ※以下詳細

metric オプションは少し複雑ですが、以下のような設定をします。

メトリクス名1:[警告閾値]:[異常閾値]:[gt|lt],メトリクス名2:[警告閾値]:...

gt = 閾値以上の場合に警告または異常

lt = 閾値以上の場合に警告または異常

例えば以下の4項目を設定をしたい場合

  • used_memoryが1GB以上でWARNING
  • used_memoryが2GB以上でCRITICAL
  • mem_fragmentation_ratioが1.5以上でWARNING
  • mem_fragmentation_ratioが1以下でCRITICAL

このように設定します。

used_memory:1073741824:2147483648:gt,mem_fragmentation_ratio:1.5::gt,mem_fragmentation_ratio::1:lt

コマンド実行例

$ go build check_redis.go
$ ./check_redis -host localhost -port 6379 -timeout 1000 -metrics used_memory:1073741824:2147483648:gt,mem_fragmentation_ratio:1.5::gt,mem_fragmentation_ratio::1:lt
[OK]Connection and Authorization Ok
[OK]used_memory:543296.0 gt (warn1073741824.0 crit2147483648.0)
[WARN]mem_fragmentation_ratio:4.7 gt (warn1.5)
[OK]mem_fragmentation_ratio:4.7 lt (crit1.0)
$ echo $?
1 # warning

Nagios定義例

command[check_redis]=/usr/lib64/nagios/plugins/check_redis -host $ARG1$ -port $ARG2$ -timeout $ARG3$ -metrics $ARG4$
define service {
       use                  prod-service
       hostgroups           redishosts
       service_description Redis
       check_command        check_nrpe!check_redis!localhost 6379 1000 used_memory:1073741824:2147483648:gt,mem_fragmentation_ratio:1.5::gt,mem_fragmentation_ratio::1:lt
}

コード

gist.github.com

参考資料

監視項目考えるのにこちら参考にしました。

Understanding the Top 5 Redis Performance Metrics