別々にあるバーチャルホストのログを集約 apache→fluentd→zabbix

プロセスのメモリをある程度管理できたので、次にどのサイトがApacheの負荷をかけているのかをすぐに把握できないかと考えた。

また1台のサーバでサイトを50サイトぐらい管理しているのだが、ログの場所がサイトごとに散らばっておりログの管理が大変だった。そこで「fluentd」を使ってログを集約しアクセス数をリアルタイムに監視できるようにした。

全体像は以下の通り。

各サイトに散らばっているログを集約しdatacounterプラグインを使って集計しデータをzabbixに送って表示するといった感じだ。

fluentdインストール

まずはこれをインストールしないと始まらないので以下のコマンドでインストールする。これはCentOSの場合になる。

curl -L https://toolbelt.treasuredata.com/sh/install-redhat-td-agent3.sh | sh

以下のURLにほかのOSのインストール方法が記載されているのでCentOS以外の場合は調べてください。
https://docs.fluentd.org/installation/install-by-rpm

datacounterプラグインインストール

集計部分を担当。

/opt/td-agent/embedded/bin/fluent-gem install fluent-plugin-datacounter

Zabbixプラグインインストール

Zabbixにデータを送るためのプラグイン。

/opt/td-agent/embedded/bin/fluent-gem install fluent-plugin-zabbix

zabbix senderインストール

前提としてZabbixのエージェントがインストールされていること。そのほかにZabbixトラッパーというタイプを使ってデータを送信するためテストコマンドが使えるように「zabbix sender」をインストールする。

yum install zabbix-sender.x86_64

Zabbixのアイテム作成(テスト用)

データの受け皿のアイテムをZabbixの管理画面から設定する。
テストとして以下のアイテムを追加しておく。

・アイテム追加

名前:test
タイプ:Zabbixトラッパー
キー:test.trapper
データ型:文字列

トラッパーテスト

以下のコマンドを入力しデータが保存されるかテストする。ホスト名は、Zabbixでアイテムを登録したホスト名を記入する。

#/usr/bin/zabbix_sender -vv -z ZabbixサーバのIP -s "ホスト名" -k "キー" -o データ
#例:ZabbixサーバのIP:192.168.0.20 ホスト名:hogehoge キー:test.trapper データ:100の場合

/usr/bin/zabbix_sender -vv -z 192.168.0.20 -s "hogehoge" -k "test.trapper" -o 100

このコマンドでエラーが出た場合、修正しエラーがでないようにする。ここで設定したZabbixサーバのIPとホスト名はのちのfluentdの設定に使う。

fluentdの設定

vi /etc/td-agent/td-agent.conf

まずtailの部分を追加する。tailタイプはコマンドのtail -fと同じ感じでログをリアルタイムに監視する。これで散らばっていたサイトをログを集約する。

#バーチャルホスト1
<source>
  @type tail
  @id input_tail_sample1.com
  time_format %d/%b/%Y:%H:%M:%S %z
  path /var/www/vhosts/sample1.com/logs/access_log
  pos_file /var/log/td-agent/apache.sample1.com.pos
  tag apache.access.sample1.com
</source>
#バーチャルホスト2
<source>
  @type tail
  @id input_tail_sample2.com
  time_format %d/%b/%Y:%H:%M:%S %z
  path /var/www/vhosts/sample2.com/logs/access_log
  pos_file /var/log/td-agent/apache.sample2.com.pos
  tag apache.access.sample2.com
</source>

つぎに集計する部分を追加する。
datacounterの説明サイトにサンプルが載っているのでそれをカスタマイズする。
https://github.com/tagomoris/fluent-plugin-datacounter

ログはここを通り集計される。

<match apache.access.**>
  type datacounter
  aggregate all
  count_interval 1m
  count_key code
  tag response.code.analysis
  pattern1 2xx ^2\d\d$
  pattern2 3xx ^3\d\d$
  pattern3 4xx ^4\d\d$
  pattern4 5xx ^5\d\d$
</match>

最後に集計したデータを出力する部分を追加する。出力先を二か所にしたいのでcopyを使う。出力先はZabbixとファイル。
zabbixの設定は上記でテストした値を入れる。

<match monitor.duration>
  @type copy
  <store>
   @type file
   @id output_file_duraion
   path /var/log/td-agent/apache.duraion
  </store>
  <store>
    type zabbix
    zabbix_server 192.168.0.20
    host hogehoge
    name_key_pattern ^[num|min|max|avg|sum|percentile_90|percentile_95]
  </store>
</match>

挿入する設定

上記をまとめると以下のコード。

<source>
  @type tail
  @id input_tail_sample1.com
  time_format %d/%b/%Y:%H:%M:%S %z
  path /var/www/vhosts/sample1.com/logs/access_log
  pos_file /var/log/td-agent/apache.sample1.com.pos
  tag apache.access.sample1.com
</source>
#バーチャルホスト2
<source>
  @type tail
  @id input_tail_sample2.com
  time_format %d/%b/%Y:%H:%M:%S %z
  path /var/www/vhosts/sample2.com/logs/access_log
  pos_file /var/log/td-agent/apache.sample2.com.pos
  tag apache.access.sample2.com
</source>
<match apache.access.**>
  type datacounter
  aggregate all
  count_interval 1m
  count_key code
  tag response.code.analysis
  pattern1 2xx ^2\d\d$
  pattern2 3xx ^3\d\d$
  pattern3 4xx ^4\d\d$
  pattern4 5xx ^5\d\d$
</match>
<match monitor.duration>
  @type copy
  <store>
   @type file
   @id output_file_duraion
   path /var/log/td-agent/apache.duraion
  </store>
  <store>
    type zabbix
    zabbix_server 192.168.0.20
    host hogehoge
    name_key_pattern ^[num|min|max|avg|sum|percentile_90|percentile_95]
  </store>
</match>

fluentdを再起動

再起動し設定を反映させる。

service td-agent restart

ログを確認。

cat /var/log/td-agent/apache.access/buffer.xxxxxxxxxxxxxxx.log

以下のようになっていると取得成功

2020-01-14T00:34:48+09:00       response.code.analysis  {"apache.access.analyzer_unmatched_count":0,"apache.access.analyzer_unmatched_rate":0.0,"apache.access.analyzer_unmatched_percentage":0.0,"apache.access.analyzer_2xx_count":3,"apache.access.analyzer_2xx_rate":0.05,"apache.access.analyzer_2xx_percentage":100.0,"apache.access.analyzer_3xx_count":0,"apache.access.analyzer_3xx_rate":0.0,"apache.access.analyzer_3xx_percentage":0.0,"apache.access.analyzer_4xx_count":0,"apache.access.analyzer_4xx_rate":0.0,"apache.access.analyzer_4xx_percentage":0.0,"apache.access.analyzer_5xx_count":0,"apache.access.analyzer_5xx_rate":0.0,"apache.access.analyzer_5xx_percentage":0.0}

Zabbixのアイテム作成(本番用)

データを取得する受け皿をZabbixに追加する。

・アイテム追加

名前:2xx_count
タイプ:Zabbixトラッパー
キー:2xx_count
データ型:数値

シェアする

  • このエントリーをはてなブックマークに追加

フォローする