プロセスのメモリをある程度管理できたので、次にどのサイトが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 データ型:数値
「クラウドテック」です。 掲載案件では平均月60万、週3~4日勤務の案件が豊富で生活スタイルに合わせた働き方を設計できます。 また福利厚生が充実し旅行、レジャー、家事代行、ヘビーシッター、健康診断など100種類以上を無料で使えます。
- 97%がリモートのお仕事
- 週4日、週3日OKのお仕事多数
- 登録社数74万件業界トップクラス
- 2〜4週間程度でお仕事決定