メモ_webサーバーログをmysqlにぶち込む_(簡易アクセスデータ取得ツール\1)
webサーバーに透過gifをおいて、ウェブサイトアクセス時に該当gifにパラメータをつけてアクセスする。
そのリクエストログをログサーバー側でdbに保存し、その数を確認できるようにしたい。
リクエストの取得はgaを参考に簡易なタグを作成。
データの取り込みはfluentdを利用。
mysqlへ入れるプラグインがすぐ見つかったのと、各段階で欲しい情報がすぐ見つかったから。パーサーの自前での作成などもrubyでかけて助かる。
※logstash+elasticsearch+kibanaについては、構築のドキュメントは良く見つかるし、構築も簡単なのだが。。運用にはそれぞれの習熟が必要で、3つも新しいもの使うとそこにパワーが係る。とくにelascticsearch周りかな。
ログ収集だけはfluentdを使いその他はなれたRDBMSと簡易WEB画面作成したほうが柔軟な対応ができそう..
fluentdインストール
参考リンク
http://hit.hateblo.jp/entry/2016/01/11/020555
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
# td-agent(fluentd)のインストール curl -L http://toolbelt.treasuredata.com/sh/install-redhat-td-agent2.sh | sh ※スクリプトでyumが始まる。 $ td-agent --version >> td-agent 0.12.35 $ td-agent-gem -v >> 2.4.8 # mysqlプラグインのインストール td-agent-gem list --local | grep -i plugin td-agent-gem install fluent-plugin-mysql ※下記エラーのときは ERROR: Error installing fluent-plugin-mysql: ERROR: Failed to build gem native extension. yum install mysql-devel td-agent-gem list --local | grep -i plugin ※※※※※※※※※※※※※※※※※ #起動 $systemctl start td-agent |
(メモ)
起動にあたり、プロセスの実行ユーザーをrootにしておくと、ファイル側の権限を変更しなくて良い。
参考:http://qiita.com/zaburo/items/dbd943d370afe8e4a304
td-agent.conf の設定
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
<source> type tail format mt_log tag log.apache path /var/log/httpd/td-agent_tsv.log pos_file /var/log/td-agent/mt-temp.apache.pos </source> ## Output descriptions: <match log.*># tagと関連付ける type copy <store> type mysql host localhost database db username user password XXXXXXXXXXX key_names atime, host, path sql INSERT INTO logs (time, host, path, ) VALUES (?,?,?) flush_interval 5s </store> <store> #ファイルにも保存 type file path /var/log/td-agent/request.json </store> </match> |
<source>に入力条件
<match>に保存先の条件を指定する
<source>のformat は色々ある。
フォーマット参考:http://qiita.com/hayashier/items/7524000f07f63303e7e0
keysで左からマッチしたものに名前をつける。keysが元データのヘッダーだと思えばいい。
typeを正規表現で設定することも可能。
その場合の項目名は正規表現の中で「?<user>[^ ]*)」というように<user>という識別子を入れる。
正規表現が複雑になりすぎる場合は、パーサープラグインを作成したほうがよっぽど楽。rubyでかける。
パーサー参考:http://qiita.com/toru-takahashi/items/b475aa4747e0e360f454
<match>でSQLを直接書いて実行している。インサート先のテーブルは予めつくって置いてね、と。
これででデータが入っていく。
データが入らないとき
/var/log/td-agentのログにミスマッチのログが出力される。ここで条件の正否は確認できる。
基本はここを監視。
ひとまずここまで。
関連記事
-
-
メールサーバーとMTAの違い
メール転送エージェント – Wikipedia メール配送エージェン …
-
-
NATとIPマスカレードとポートフォワーディングの意味整理
NATとは プライベートIPアドレスとグローバルIPアドレスを変換する。プライベ …
-
-
[Linux][MT]負荷の高いプロセスの詳細の調べ方
MovableTypeを運用していて、やたらサーバーの負荷が高くなったことがあっ …
-
-
【基盤】プロセス名から探して、まとめてプロセスを落とす。
pgrep, pkill を使用してプロセスを殺す – 技術メモ帳 …
-
-
[linux][sh]アパッチのアクセスログからアクセス数の確認_簡易版
gaとかを仕込んで無いサイトでPVを確認したい、という要望あり。 アクセスログが …