カテゴリー
Linux

【失敗】Zabbix で Apache を監視する方法【対象は、Zabbix サーバ、自分自身】

今回も失敗しましたけれども、記録として残しときます><

環境

  • Zabbix で自分自身を監視
  • サーバの IP アドレス 192.168.56.111
  • CentOS 5.10
  • Zabbix server v2.0.9
  • Zabbix agent v2.0.9
  • Apache/2.2.3

ちなみに、それぞれの確認コマンドは、「cat /etc/redhat-release」「zabbix_server –version」「zabbix_agent –version」「httpd -v」ですわ。

Apache の mods_status モジュール設定

すでにインストールされていることを、コマンド「httpd -M」の結果に「status_module (shared)」があることで確認いたしました。

このモジュールをオンにします。

vim /etc/httpd/conf/httpd.conf

Apache 設定ファイルを開き、下記のように2ヵ所編集しました。

ExtendedStatus On

もう1箇所は URL の設定などです。ここで接続を制限して、外部からウェブブラウザでは表示できないようにしています。あまり詳しくないのでテキトーですけれども><。

#<Location /server-status>
#    SetHandler server-status
#    Order deny,allow
#    Deny from all
#    Allow from .example.com
#</Location>

<Location /server-status>
    SetHandler server-status
    Order deny,allow
    Deny from all
    Allow from 192.168.56.111
</Location>

再起動して反映させます。

/etc/init.d/httpd restart

動作を確認します。コマンド「curl http://192.168.56.111/server-status」で自分自身から確認できることをチェックします。

[root@localhost ~]# curl http://192.168.56.111/server-status
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<html><head>
<title>Apache Status</title>
</head><body>
<h1>Apache Server Status for 192.168.56.111</h1>

<dl><dt>Server Version: Apache</dt>
…略…
</table>
</body></html>
[root@localhost ~]#

続いて、外部からウェブブラウザで「http://192.168.56.111/server-status」にアクセスし確認できないことをチェックします。

Forbidden

You don't have permission to access /server-status on this server.

OK です♪

監視スクリプトのダウンロード、配置、設定、確認

監視スクリプト

Apache の mods_status が出力する情報を Python の監視スクリプトで定期的に取得し、Zabbix サーバへと送るプログラムと理解しています。それを、これから導入します。

まずは配置場所です。前回の MySQL 監視導入時に作成した /var/lib/zabbix ディレクトリに置くこととします。そうと決まりましたら早速ダウンロードです。

cd /var/lib/zabbix/
wget https://raw.github.com/gpmidi/zabbix-apache-stats/master/bin/fetch.py
mv fetch.py zabbixApacheUpdater.py

次に、所有者、パーミッション設定です。

chown zabbix:zabbix zabbixApacheUpdater.py
chmod 500 fetch.py

監視スクリプトの動作確認をいたします。

python zabbixApacheUpdater.py --help

次の用にヘルプが表示されましたら OK ですわ。

[root@localhost zabbix]# python zabbixApacheUpdater.py --help
usage: ApacheStatsForZabbix [-z ] [-o ]

This program gathers data from Apache's  built-in status page and sends it to
zabbix. The data is sent via zabbix_sender.  Author: Paulson McIntyre (GpMidi)
License: GPLv2

options:
  --version             show program's version number and exit
  -h, --help            show this help message and exit
  -l URL, --url=URL     Override the automatically generated URL with one of
                        your own
  -o HOST, --host=HOST  Host to connect to. [default: localhost]
  -p PORT, --port=PORT  Port to connect on. [default: 80]
  -r PROTO, --proto=PROTO
                        Protocol to connect on. Can be http or https.
                        [default: http]
  -z ZabbixSERVER, --Zabbixserver=ZabbixSERVER
  -u USER, --user=USER  HTTP authentication user to use when connection.
                        [default: None]
  -a PASSWD, --passwd=PASSWD
                        HTTP authentication password to use when connecting.
                        [default: None]
  -s SENDERLOC, --sender=SENDERLOC
                        Location to the Zabbix_sender executable. [default:
                        /usr/bin/Zabbix_sender]
  -q ZabbixPORT, --Zabbixport=ZabbixPORT
                        Zabbix port to connect to. [default: 10051]
  -c ZabbixSOURCE, --Zabbixsource=ZabbixSOURCE
                        Zabbix host to use when sending values. [default:
                        localhost]
[root@localhost Zabbix]#

cron 設定

つづいて、cron 設定です。-u オプションを付けて、zabbix ユーザで実行するようにいたしました。

crontab -u zabbix -e

内容です。

* * * * * /usr/bin/python /var/lib/zabbix/zabbixApacheUpdater.py -c 127.0.0.1 -z 127.0.0.1 > /dev/null 2>&1

ちなみに、crontab はインストールされておりましたのに、最初、crontab コマンドが使用できませんでしたの。どうしてかしら?と調べておりましたら、vixie-cron がインストールされていないことが原因でしたわ><。早速、「yum install vixie-cron」でインストールいたしましたら、無事使用することができましたの♪

cron に設定しましたスクリプトの動作確認をいたしましょう。

/usr/bin/python /var/lib/zabbix/zabbixApacheUpdater.py -c 127.0.0.1 -z 127.0.0.1

あら?なんだかヘンです。エラーです。プログラムソースを見ましても、ぱっと原因がわかりません。困りましたわ><。

Traceback (most recent call last):
  File "/var/lib/zabbix/zabbixApacheUpdater.py", line 224, in ?
    data = parse(data = data)
  File "/var/lib/zabbix/zabbixApacheUpdater.py", line 77, in parse
    for (key, val) in csvobj:
ValueError: need more than 1 value to unpack

そういえば、zabbix_sender なるもの、これはもしかしてパッケージなのでしょうか?でしたらインストールされていないように思います。確認したところ、確かに zabbix_sender がインストールされておりません

次のコマンドで、ぱっとインストール、いたしました。自動起動設定、起動コマンド、は見当たりませんでしたので、不要と判断いたしました。

yum install zabbix-sender

さて、zabbix_sender をインストールいたしました、、、けれもどエラーメッセージは変わりません><。

そもそも、エラーメッセージの内容が「ValueError: need more than 1 value to unpack」とありますので、オプションのパラメータが足りていない、という趣旨だと思うのでございます。

そこで、パラメータをテキトーにつけたり外したり検証いたしました。これで良さそうです♪「-o」オプションをつければ動きました。この -o オプションホストを指定ですので、ローカルホストの「127.0.0.1」を指定いたしました。

[root@localhost zabbix]# /usr/bin/python /var/lib/zabbix/zabbixApacheUpdater.py -c 127.0.0.1 -z 127.0.0.1 -o 192.168.56.111
zabbix_sender [18176]: DEBUG: answer [{
	"response":"success",
	"info":"Processed 0 Failed 19 Total 19 Seconds spent 0.000125"}]
info from server: "Processed 0 Failed 19 Total 19 Seconds spent 0.000125"
sent: 19; skipped: 0; total: 19
[root@localhost zabbix]#

このエラーについて、どうも参考ページのこの部分に当たるような感じがいたします。引用いたします。

CRITICAL NOTICES:

It’s not described and not specified in –help that option ”-o” being used to construct item key as well. So if user uses it then he has to adjust item key 1st parameter (localhost → -o value) in template as well.
Related code line:

tempfile.write("%s apache[%s,%s] %s\n" % (opts.zabbixsource, opts.host, key, val))

How suggested template then can be used ?

In the first example cron line this part:

  -c host.being.monitored.com

is bad – it misleads !
It has to be changed to some absolutely clear and a note should be added that it’s intended for localhost Apache monitoring !
Or remove it at all.

エラーを解決する答えそのものというよりも、テンプレート(zabbix サーバの管理画面!?)や「-c」オプションに関わってくるように感じられます。要するに、よくわかりません><。

てへ♪

結局、cron は次のように設定いたしました。

* * * * * /usr/bin/python /var/lib/zabbix/zabbixApacheUpdater.py -c 127.0.0.1 -z 127.0.0.1 -o 192.168.56.111 > /dev/null 2>&1

Zabbix サーバへ、Apache 監視のテンプレートをインポート

テンプレートファイルをダンロードしたいのです。

のページの Method 1 > Install/Configure Steps に「Download and import “zabbix_export.xml” file (see a link above) into zabbix frontend;」とございますけれども、肝心のリンクがありません><。

仕方ありませんので、同ページにございます、「Method 2」の xml をコピーして、Template_Apache_Stats.xml ファイルを作成して貼り付けました。

Zabbix サーバのウェブインターフェイスの、設定 > テンプレートページに進み、「インポート」をクリック。

先ほど作成した Template_Apache_Stats.xml ファイルを指定して、「インポート」しました。

スクリーンショット 2013-11-04 15.29.55.png

Zabbix エージェントと、Zabbix サーバの Apache テンプレートの紐付け

  1. 設定 > ホスト。
  2. ホストを選択し、タブ「テンプレート」へ移動。
  3. Template_Apache_Stats を追加、保存

Zabbix サーバの Apache テンプレートのグラフ設定

  1. 設定 > テンプレートで、Template_Apache_Stats を選択
  2. 上部メニュー「グラフ」
  3. Apache Thread Scoreboard をクリックして確認

そうしますと、すでに下記のようなグラフが用意されていることがわかりました♪素晴らしいテンプレートです♪

スクリーンショット 2013-11-04 15.49.12.png

監視の確認

。。。ここまで設定してきましたけれども、どうもダメみたいです。グラフでアクセス数を確認しようとしたのですけれども、出ません><。

次のことを試してみました。

  • 監視スクリプトの使用ポートがデフォルトで 10051 のため、Zabbix サーバのホスト設定で、ポート 10051 を追加。
  • サーバのポート 10051 を開けた。
  • 監視スクリプトのコマンドでポートのオプション「-q」で、10050 を指定してみる → エラーとなったので却下
  • Method 3 の xml を試してみる?
  • Method 1 の実践なのに xml だけ Method 2 を使用したのが原因?Method 2 でやってみる?
  • Zabbix-JPのテンプレートを使ってみる? → Template_App_httpd

おわりに

手順は最後までできたのですけれども、動きませんでした><。失敗です。難しいですの。

それはともかく、次のページが大変参考になりました。ありがとう存じます!

以上です。

「【失敗】Zabbix で Apache を監視する方法【対象は、Zabbix サーバ、自分自身】」への1件の返信

コメントを残す