前提と仕様
今回はひとまず、同一サーバ上のApacheのログを収集し検索することを目標とする。環境はCentOS 5.5。
logstashのインストール
logstash - open source log managementからlogstash-1.1.1-monolithic.jarをダウンロードし、インストールする。といっても、適当なとこにjarを置くだけ。ディレクトリは/opt/logstashにしてみた。$ cd /opt/logstash/ $ ls logstash-1.1.1-monolithic.jarLogstash tutorial @ Dreamforceの
Step 6 - real world example + search
にあるapache-elasticsearch.confを参考にして、設定ファイルmylogstash.confを作成。
上記サイトの例は、ncコマンドでapacheのログを食わせる形になっていたが、今回はひとまずスタンドアローンで試せればよいので、ログファイルを直接指定した。また、私の環境では日付のパースがうまくいかなかった(エラーになった)のでコメントアウトした。
$ vi mylogstash.conf
input { file { type => "apache" path => "/var/log/httpd/access_log" } #tcp { # type => "apache" # port => 3333 #} } filter { grok { type => "apache" pattern => "%{COMBINEDAPACHELOG}" } # 2012.09.11 dsp74118 comment-out due to parse error # date { # type => "apache" # timestamp => "dd/MMM/yyyy:HH:mm:ss Z" # } } output { stdout { debug => true debug_format => "json"} elasticsearch { embedded => true } }logstashを起動するためのスクリプトを作成。
$ vi start.sh
java -jar logstash-1.1.1-monolithic.jar agent -f mylogstash.conf -- web --backend elasticsearch:///?local起動してみる。
$ ./start.sh parse logfile thread remaining log4j:WARN No appenders could be found for logger (org.elasticsearch.node). log4j:WARN Please initialize the log4j system properly. log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.log4jのエラーが出た。jarファイルにlog4jの設定ファイルが入っていないのが原因なので、下記のようなlog4j.propertiesを作る。
log4j.rootLogger=INFO,rolling log4j.appender.rolling=org.apache.log4j.DailyRollingFileAppender log4j.appender.rolling.layout=org.apache.log4j.PatternLayout log4j.appender.rolling.layout.ConversionPattern=%5p [%t] %d{ISO8601} %F (line %L) %m%n log4j.appender.rolling.File=logs/logstash.log log4j.appender.rolling.DatePattern=.yyyy-MM-dd.HH-mm-ssjarコマンドを使って、jarファイルにlog4j.propertiesを格納する。
$ jar -uf logstash-1.1.1-monolithic.jar log4j.properties再度起動。
$ ./start.sh parse logfile thread remainingLog4jのエラーは解消。
ログが収集できるか試す
試しに、その辺のPCのブラウザでApacheにアクセスする。… {"@source":"file://server/var/log/httpd/access_log","@type":"apa che","@tags":[],"@fields":{"clientip":["xx.xx.xx.xx"],"ident":[" -"],"auth":["-"],"timestamp":["11/Sep/2012:13:14:56 +0900"],"ZON E":["+0900"],"verb":["GET"],"request":["/javascripts/effects.js? 1290948531"],"httpversion":["1.1"],"response":["304"],"referrer" :["http://server/issues/252"],"agent":["\"Mozilla/5.0 (Windows N T 6.1; WOW64; rv:15.0) Gecko/20100101 Firefox/15.0.1\""]},"@time stamp":"2012-09-11T04:25:27.121000Z","@source_host":"server","@s ource_path":"/var/log/httpd/access_log","@message":"xx.xx.xx.xxx - - [11/Sep/2012:13:14:56 +0900] \"GET /javascripts/effects.js? 1290948531 HTTP/1.1\" 304 - \"http://server/issues/252\" \"Mozil la/5.0 (Windows NT 6.1; WOW64; rv:15.0) Gecko/20100101 Firefox/1 5.0.1\""} …logstashが集めたログが標準出力に表示された。
Web GUIでログを検索してみる
次にGUIで見てみる。ブラウザでhttp://server:9292/にアクセス。
Figure.1 logstashの検索画面 |
Figure.2 検索結果画面 |
時刻の範囲指定をしてみる。下記のような感じ。
<検索キーワード> @timestamp:[YYYY-MM-DDTHH:MI:SS TO YYYY-MM-DDTHH:MI:SS]
Figure.3 時刻で絞り込んでみたところ |
次回は他サーバのApacheログも集めてみたい。
0 コメント:
コメントを投稿