2015年8月19日水曜日

Munin みたいなメモリグラフを Zabbix でも監視したい

概要

Munin のメモリのグラフを Zabbix でも監視できないかなと思って調べていたら記事を見つけたのでやってみました
Zabbix 2.4 で実施しているのでスクリプトを Zabbix 2.4 に対応するように修正しています

環境

  • CentOS 6.6 64bit Final
  • Zabbix 2.4.5
  • Munin 2.0.25
  • Python 2.6.6

各種インストール

Munin インストール

とりあえずこれでhttp://hostname/muninに ID/PW でアクセスできることを確認しましょう
今回 munin は使いませんがメモリの使用量が munin で問題なく取得できていることを確認してください

今回利用するメモリ使用量を取得するプラグインは以下にシンボリックリンクとしてあります

/etc/munin/plugins/memory

Zabbix インストール

ここを参考にインストールしています
今回は Munin も Zabbix (MySQL も) すべて同一ホストにインストールしています

インストールが完了したらとりあえずZabbix Server自体が監視できていればOKです

スクリプト設定

公開されている python スクリプトは指定したテンプレートに対してアイテムおよびグラフを登録してくれます
今回は Zabbix 2.4 でも動作するようにスクリプトを修正しています

テンプレート登録

Zabbix の UI にアクセスしてテンプレートを一つ登録してください
今回は「Template_Munin_Memory」というテンプレートを作成した体で話を進めます

zabbix_agentd.conf 修正

  • echo 'UserParameter=munin[*],/etc/munin/plugins/$1 |grep "^$2.value" |cut -d " " -f2' > /etc/zabbix/zabbix_agentd.d/userparameter_munin_plugin.conf

echo 文で conf ファイルを1つ作成します
作成したらservice zabbix-agent restartで再起動しましょう

スクリプト修正

適当なディレクトリに移動してスクリプトを取得しましょう

  • cd work
  • git clone git://github.com/oopsops/scripts.git
  • cd scripts/zabbix

zabbix_munin_plugin.py 修正

  • 39 - 40行目 : Zabbix にアクセスするための ID/PW に変更します
39,40c39,40
< username = "Admin"
< password = "zabbix"
---
> username = "Your ID"
> password = "Your PW"
  • 65行目 : カラーコードを6桁にします
65c65
<   for x in range(1,6):
---
>   for x in range(1,7):
  • 71行目 : graph.create の際に templateid を送信しないようにする
71c71
< createdgraphids = zapi.graph.create([{'gitems': (gitems) ,'name': (graph_title),'width':'900','height':'200','yaxismin':'
0.0000','yaxismax':'3.0000','templateid':'0','show_work_period':'1','show_triggers':'1','graphtype':'0','show_legend':'1','
show_3d':'0','percent_left':'0.0000','percent_right':'0.0000','ymin_type':'0','ymax_type':'0','ymin_itemid':'0','ymax_itemi
d':'0'}])["graphids"][0]
---
> createdgraphids = zapi.graph.create([{'gitems': (gitems) ,'name': (graph_title),'width':'900','height':'200','yaxismin':'
0.0000','yaxismax':'3.0000','show_work_period':'1','show_triggers':'1','graphtype':'0','show_legend':'1','show_3d':'0','per
cent_left':'0.0000','percent_right':'0.0000','ymin_type':'0','ymax_type':'0','ymin_itemid':'0','ymax_itemid':'0'}])["graphi
ds"][0]

zabbix_api.py 修正

  • 201 - 206 行目: user.login method の場合に auth パラメータを付与しないようにする
201,206c201,213
<         obj = {'jsonrpc': '2.0',
<                'method': method,
<                'params': params,
<                'auth': self.auth,
<                'id': self.id
<               }
---
>         if method == "user.login":
>             obj = {'jsonrpc': '2.0',
>                    'method': method,
>                    'params': params,
>                    'id': self.id
>                   }
>         else:
>             obj = {'jsonrpc': '2.0',
>                    'method': method,
>                    'params': params,
>                    'auth': self.auth,
>                    'id': self.id
>                   }
  • 230 行目 : user.authenticate を user.login に変更する
230c237
<         obj = self.json_obj('user.authenticate', {'user': l_user,
---
>         obj = self.json_obj('user.login', {'user': l_user,

修正箇所は以上です
とりあえず自分は上記のみで動作しましたが、他にも Zabbix Server のホスト名を記載する部分もあったので環境によってはまだ修正が必要な箇所があるかもしれません

スクリプト実行

  • chmod 755 zabbix_munin_plugin.py
  • ./zabbix_munin_plugin.py memory Template_Munin_Memory

でエラーがでなければOKです
エラーの場合は Exception の内容を確認して上記スクリプトを更に修正する必要があります

各種調整

スクリプトの動作が完了するとテンプレートにアイテムが13個とグラフ1個が追加されます
以下手動での操作ですがやったほうが良さそうな点を紹介します

グラフ修正

  • グラフタイプの変更
    グラフのタイプが「ノーマル」になっているので「積算グラフ」に変更しましょう

  • 不要なアイテムの削除
    グラフから以下のアイテムを削除しましょう

committed
active
inactive
vmalloc_used
mapped

上記はあってもいいのですが積算グラフにすることで縦軸が合わなくなります
Munin のグラフは積算+折れ線グラフでメモリ使用量を表示しており上記のアイテムは折れ線グラフで表示している項目になるため Zabbix では削除しないと縦軸の値が合いません
なので、やるとしたら別途、ノーマルタイプの折れ線グラフを作成して、そちらに移行するといいと思います

完成するとこんな感じになります

sample_memory.png

色はzabbix_munin_plugin.py内でランダムで生成しているので必要に合わせて変更してください

最後に

munin-node を使って Zabbix で Munin ってぽいメモリ監視をすることができました
Python スクリプトも使っているので、スクリプトの実行で失敗しまくる場合は、素直に Munin を使いましょう

Tips

  • Zabbix 2.0.3 でも実施してみましたが Color を作成する for 文のところだけ変更すれば動作しました

0 件のコメント:

コメントを投稿