Fluentdを使ってNginxLogをMysqlにリアルタイムで格納する
エキスパートのためのMySQL[運用+管理]トラブルシューティングガイド
- 作者: 奥野幹也
- 出版社/メーカー: 技術評論社
- 発売日: 2010/06/12
- メディア: 大型本
- 購入: 16人 クリック: 204回
- この商品を含むブログ (31件) を見る
重要なデータはMysqlへ
CentOSでNginxのログをFluentdを使ってMongodbにリアルタイムで格納する - Yuta.Kikuchiの日記
MongoDBの集計機能が便利過ぎて泣けてくるお話し - Yuta.Kikuchiの日記
最近は大学生に良く間違われる現在30歳の@yutakikucです。今日はNginxLogの必要な項目をMysqlにリアルタイムで格納することを試してみます。重要なデータはどこに格納するの..? Mysqlでしょ!という人向けに書いてみます。過去にMongodbに格納して集計するエントリーを書いたのでそちらも参照してください。次回はFluentd-WebHDFSを使ってリアルタイムにHDFSに格納することに挑戦してみようと思います。
Fluent-Plugin-Mysql
plugin
Fluentd plugins
tagomoris/fluent-plugin-mysql · GitHub
fluentdの公開されているpluginを利用すると実現したいことが簡単に出来るかもしれません。Mysqlへのリアルタイム格納にはtagomorisさんが開発したfluent-plugin-mysqlを利用します。fluentd install
まずはfluentdの本体をinstallします。fluentdのpackageを管理しているtresuredataをrepos.dに登録してyumにてinstallします。
$ sudo vim /etc/yum.repos.d/td.repo [treasuredata] name=TreasureData baseurl=http://packages.treasure-data.com/redhat/$basearch gpgcheck=0 $ sudo yum install td-agent -y Installed: td-agent.x86_64 0:1.1.11-0 Dependency Installed: compat-libtermcap.x86_64 0:2.0.8-49.el6 compat-readline5.x86_64 0:5.2-17.1.el6 openssl098e.x86_64 0:0.9.8e-17.el6.centos.2 td-libyaml.x86_64 0:0.1.4-1 Complete!fluent-gem install fluent-plugin-mysql
次にfluent-gemコマンドを利用してfluent-plugin-mysqlをinstallします。
$ sudo /usr/lib64/fluent/ruby/bin/fluent-gem install fluent-plugin-mysql Successfully installed fluent-plugin-mysql-0.0.4 1 gem installed Installing ri documentation for fluent-plugin-mysql-0.0.4... Installing RDoc documentation for fluent-plugin-mysql-0.0.4...td-agent.confの設定
Mysqlにリアルタイムでデータを格納する設定をtd-agent.confに記述します。Mongodbの時と同様にsourceのタグでaccesslogの記録について設定します。詳しく調べていませんがformatという項目が重要で、ここでmatchタグの中のkey_namesの指定できる名前が自動で決定しているように見えます。formatをapacheとしたのでkey_namesとして選択できる項目がcode,path,agent,refererのような内容になります。但しformatは正規表現を使って自由に設定する事ができるので、その場合は
のように指定した項目名でkey_namesも扱うことが可能なようです。matchタグでは条件に一致したデータを格納する記述を書きます。typeにmysql、hostは今回localhostとし、databaseに後で定義するnginxを指定します。key_nameは先程の説明の通りでformatと関連して指定できる項目が決まります。sql INSERT INTO access_log (code,path,agent,referer) VALUES (?,?,?,?)の箇所でMysqlにデータを格納する命令を記述します。td-agent.confの設定を変更した場合はtd-agentのrestartを行なって下さい。 $ cat /etc/td-agent/td-agent.conf <source> type tail format apache # format /^(?<host>[^ ]*) [^ ]* (?<user>[^ ]*) \[(?<time>[^\]]*)\] \[(?<strtime>[^\]]*)\] "(?<method>\S+)(?: +(?<path>[^ ]*) +\S*)?" (?<code>[^ ]*) (?<size>[^ ]*)(?: "(?<referer>[^\"]*)" "(?<agent>[^\"]*)")?$/ path /var/log/nginx/access.log tag nginx.access </source> <match nginx.access> type mysql host localhost database nginx key_names code,path,agent,referer sql INSERT INTO access_log (code,path,agent,referer) VALUES (?,?,?,?) username root #password "" flush_interval 10s </match>$ sudo /etc/init.d/td-agent restart Shutting down td-agent: [ OK ] Starting td-agent: [ OK ]Create table
NginxのLogを格納するTableを作成します。上のtd-agent.confで記述したcolumn内容を定義します。
drop table if exists nginx.access_log; create table if not exists nginx.access_log ( id int(10) NOT NULL AUTO_INCREMENT, code int(10) NOT NULL, path varchar(255) NOT NULL, agent varchar(255) NOT NULL, referer varchar(255) NOT NULL, PRIMARY KEY(id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;Mysqlの確認
Nginxにアクセスします。そうするとリアルタイムでデータが流れているのが分かると思います。今日の目的はこれで達成とします。
mysql> select * from nginx.access_log; +----+------+--------------------------------------+--------------------------------------------------------------------------------------------------------+------------------------+ | id | code | path | agent | referer | +----+------+--------------------------------------+--------------------------------------------------------------------------------------------------------+------------------------+ | 1 | 200 | /hello | Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.4 (KHTML, like Gecko) Chrome/22.0.1229.94 Safari/537.4 | - | | 2 | 304 | /assets/css/bootstrap.css?1368635404 | Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.4 (KHTML, like Gecko) Chrome/22.0.1229.94 Safari/537.4 | http://localhost/hello | | 3 | 404 | /favicon.ico | Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.4 (KHTML, like Gecko) Chrome/22.0.1229.94 Safari/537.4 | - | | 4 | 200 | /hello | Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.4 (KHTML, like Gecko) Chrome/22.0.1229.94 Safari/537.4 | - | | 5 | 404 | /favicon.ico | Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.4 (KHTML, like Gecko) Chrome/22.0.1229.94 Safari/537.4 | - | +----+------+--------------------------------------+--------------------------------------------------------------------------------------------------------+------------------------+ 5 rows in set (0.01 sec)