zabbixのApache監視項目を追加
Webサーバ上で動作しているApacheの統計情報、動作監視のためにTemplate_App_Apache_Statsというテンプレートがあります。自ブログの2013年1月21日のエントリに導入時の経緯を書いていますが、zabbix.comのwikiがリンク切れですね。
テンプレートそのものはgithubに有る模様。うーむ、導入したときはエージェントからシェルスクリプトをキックして値を取得してたんだけど、これだとpythonのスクリプトになってるな。
それはともかく。ちょっと前にWebサーバのmpmをeventに変更しています。導入しているテンプレートとシェルスクリプトの組み合わせはpreforkかworkerにのみ対応しているようでeventで取得できるデータが取得できません。
ってなことでデータを取得できるように改造。
データはどこから?
apacheの統計情報は http://server/server-status?auto へリクエストを出して帰ってきた文字列から取得しています。event mpmの場合はこんなのが帰ってきます。
hoge ServerVersion: Apache/2.4.16 (Unix) OpenSSL/1.0.1e-fips mod_fcgid/2.3.7 ServerMPM: event Server Built: Aug 4 2015 09:31:01 CurrentTime: Wednesday, 05-Aug-2015 11:52:57 JST RestartTime: Tuesday, 04-Aug-2015 09:35:30 JST ParentServerConfigGeneration: 1 ParentServerMPMGeneration: 0 ServerUptimeSeconds: 94647 ServerUptime: 1 day 2 hours 17 minutes 27 seconds Load1: 1.65 Load5: 1.35 Load15: 1.32 Total Accesses: 7669720 Total kBytes: 180112660 CPUUser: 42845.7 CPUSystem: 4231.05 CPUChildrenUser: 0 CPUChildrenSystem: 0 CPULoad: 49.7393 Uptime: 94647 ReqPerSec: 81.035 BytesPerSec: 1948670 BytesPerReq: 24047.2 BusyWorkers: 45 IdleWorkers: 180 ConnsTotal: 199 ConnsAsyncWriting: 0 ConnsAsyncKeepAlive: 63 ConnsAsyncClosing: 91 Scoreboard: .........................__WRRW_WWWWR__W_WWWRRWR_W..................................................WW___W_RW____WW_WRWW__WW_........................._________________________W__W____R___W_WWR_W_R_______________________W__R_____________________________W____R___________________________R______________................................................
zapache.shだと、この画面中のLoad1とか、CPUUserなどの値取得には対応していません。
テンプレートにアイテムを追加
ということで値を取得できるようにまずテンプレートにアイテムを追加します。
zabbixの管理画面から「設定」→「テンプレート」。下のテンプレート一覧に今回編集対象となるTemplate_App_Apache_Statsがあるのでそのロウ中の「アイテム」をクリック。
アイテムの設定画面が表示されるので、右上の「アイテムの作成」をクリック。
アイテムの作成画面で名前、キーなどを適当に入れて「追加」をクリック。
zapache.shで値を取れるように編集
こんどは監視対象側のzabbixエージェント経由で起動されるzapache.shが /server-status?auto ででてくる画面から対象データを取得できるように改修。
上記の例での Load15 の場合だと以下の三行を適当なところへ追加。
'Load15') echo "$VAR"|grep "Load15:"|awk '{print $2}' rval=$?;;
適当なところっていうのは、どこでもいいってことではありません。
まぁ似たような処理が並んでいるところがあるので解るでしょう。
これでzabbixで指定したデータを取得してストアしてくれます。