前提と仕様
今回はひとまず、同一サーバ上の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-ss
jarコマンドを使って、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 コメント:
コメントを投稿