HTTP/2 でのアクセス比率を Zabbix で蓄積&グラフ化

常時 SSL 化 & HTTP/2 対応したのはいいのだけど、実際自サイトへのアクセスが、どれだけ HTTP/2 で来ているのかを定常的にチェックする仕組みを考えてみた。

自分のところは、HTTP も HTTPS も同じ /var/log/apache2/access.log にアクセスログを出力しているので、そのログに記録されている HTTP バージョンを集計すれば出来るな、ということで、

  • logtail2 コマンドを使って、アクセスログの増分を取得
  • HTTP/1.0 、 HTTP/1.1 、 HTTP/2 それぞれでのアクセス回数のカウントと、HTTP/2 でのアクセス比率を計算
  • その結果を全て zabbix_sender で、Zabbixサーバに送信
という動作を行うスクリプトを Web サーバ上に用意してすることに。
スクリプトで利用している、 logtail2 コマンド( logtail パッケージに含まれる)と zabbix_sender のインストールについては、ここでは言及しません。
#HTTP と HTTPS でアクセスログを分離しているのであれば、 HTTPS 側だけ集計すればいいんですけど…。

下は実際に動作させているスクリプト。見てもらえれば、特に小難しいことをやってないのは判るんじゃないかと思います。

root@vps2:~# more bin/HTTP_Ver.sh
#!/bin/bash

item=()

# アクセスログの増分から、HTTPバージョンごとのアクセス数をカウント
/usr/sbin/logtail2 -f /var/log/apache2/access.log -o /tmp/apache2.offset > /tmp/apache2.diff
for i in 1.0 1.1 2 ; do
verCount=`/bin/grep -c HTTP/${i} /tmp/apache2.diff `
/usr/bin/zabbix_sender -z 127.0.0.1 -s vps2.downtown.jp -k HTTP.ver.${i} -o $verCount
item+=($verCount)
done

# HTTP/2でのアクセス比率を計算
if [ ${item[2]} -eq 0 ]; then
ratio=0.00000
else
ratio=`echo "scale=5 ; ${item[2]} / (${item[0]} + ${item[1]} + ${item[2]})" | bc`
fi
/usr/bin/zabbix_sender -z 127.0.0.1 -s vps2.downtown.jp -k HTTP2.ratio -o $ratio

for 文の繰り返し回数の制御を HTTP のバージョン番号である " 1.0 1.1 2" (実際にアクセスログ中に出てくるもの)で行うようにして、この値を zabbix_sender で指定するアイテムのを識別するための key の識別に使う、というような工夫はしていますけどね。

次に、Zabbix サーバ側に、このスクリプトが送信するデータを受け付けるためのアイテムを作成します。


アイテムその1

バージョンごとに単位時間あたりのアクセス数をアイテムをアイテムタイプ Zabbix trapperで作成しますが、先のスクリプトの for ループ内で実行される zabbix_sender が送信してくる key と合致するように注意します。


アイテムその2:HTTP/2でのアクセス比率

もう一つ、スクリプト側で計算した HTTP/2 プロトコルでのアクセス比率を受信するためのアイテムも作成します。アイテムタイプは、こちらもZabbix trapper。
アクセス比率のデータは、スクリプトの計算結果が小数点以下5桁の数値が送られくるので、それに合わせてデータ形式を浮動小数点型を選択し、Zabbix 側でパーセンテージ変換するために、単位 (Units) と乗数 (Use custom multiplier) の設定も合わせて行います。


アイテムの設定が終わったら、スクリプトを手動実行して、値が送信されるかを確認。

最新データでデータの受信状況を確認

これで問題なく更新させているのが確認できたら、スクリプトを cron で実行されるよう登録して、終わり。
Zabbix 側でデータの受信が確認できなかった場合は、スクリプトと登録したアイテムの再チェックをして、おかしな所があれば修正して、再度スクリプトの手動実行というのを繰り返して問題点を潰していく、ということになります。

あと、logtail2 の初回実行時は、その時点でのアクセスログの中身全てが増分として認識されることになって、スクリプトの実行に時間がかかるので、事前にスクリプト中に書いたものと同じオプションを付けて logtail2 を実行しておくのが吉。そうすることで、取得値も初回だけ極端に大きな値になってしまう、といったことも防げますしね。
#ま、動作確認で正常に動作することが判った時点で、一旦ヒストリーをクリアするという手もありますけど。

あとは、取得したデータをグラフ化しておけば、視覚的に判りやすくてよいかと。

設定適用後のグラフ

最後に。
自分のトコロでは、 Zabbix 3.0.0 alpha 5 を試用中なので、2.2 系や 2.4 系の Zabbix では、そっくりそのまま設定ができない場合があるかもしれないので、そのあたりは適宜読み替えていただけると幸いです。

トラックバック(1)

さて、前のエントリーで、最初考えていたのとは、違う方法で実現したところがあったりします。 スクリプト内で処理をしている HTTP/2 でのアクセス比率の計... 続きを読む

コメントする