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で指定したデータを取得してストアしてくれます。