logstash
提供: FreeBSD入門
スポンサーリンク
logstash とは、プロセスのログやいろいろなシステムからのイベントログのデータパイプラインです。
読み方
- logstash
- ろぐ すたっしゅ
目次
概要
logstashは、
- input プラグイン
- filter プラグイン
- output プラグイン
- codec プラグイン
のプラグインを実装して、いろいろなイベントや出力先に対応できます。
出力先として elasticsearch を指定できます。
logstash , elasticsearch, kibana を利用して、簡単にログを可視化できます。たとえば、ApacheのアクセスログをウェブUIで簡単に見れます。
インストール
pkgコマンドでインストールする場合
sudo pkg install logstash
apacheのログを取り込む
事前に kibanaとelasticsearchを入れておきましょう。
$ sudo pkg install logstash kibana4 elasticsearch $ sudo service elasticsearch onestart $ sudo service kibana onestart
ブラウザで http://localhost:5601/ にアクセスすると kibana にアクセスできます。
logstash-apache.conf
input { file { path => "/var/log/httpd-access.log" start_position => "beginning" } } filter { grok { patterns_dir => "patterns" match => [ "message", "%{IP:client_ip} %{USER:ident} %{USER:auth} \[%{HTTPDATE:apache_timestamp}\] \"%{WORD:method} /%{NOTSPACE:request_page} HTTP/%{NUMBER:http_version}\" %{NUMBER:server_response} " ] } date { match => [ "timestamp" , "dd/MMM/yyyy:HH:mm:ss Z" ] } mutate { convert => { "@version" => "integer" } convert => { "http_version" => "integer" } convert => { "server_response" => "integer" } convert => { "bytes" => "integer" } } } output { elasticsearch { host => "localhost" index => "apache" protocol => "http" } stdout { codec => rubydebug } }
ログの取り込み
/usr/local/logstash/bin/logstash -f logstash-apache.conf
設定ファイルのテスト
設定ファイルは、--configtest オプションでテストできます。
$ /usr/local/logstash/bin/logstash --configtest -f logstash-apache.conf '[DEPRECATED] use `require 'concurrent'` instead of `require 'concurrent_ruby'` Configuration OK
apacheログのパース
この行で、http version や reponse が分解されるらしいのだけれども、分解されずに、1つの文字列(string)として入ってしまう。
match => { "message" => "%{COMBINEDAPACHELOG}" }
match => [ "message", "%{IP:client_ip} %{USER:ident} %{USER:auth} \[%{HTTPDATE:apache_timestamp}\] \"%{WORD:method} /%{NOTSPACE:request_page} HTTP/%{NUMBER:http_version}\" %{NUMBER:server_response} " ]
上の設定だと以下のように分解されます。しかしながら、 NUMBER と指定しているのに、 ダブルクォーテーションで囲まれているため、elasticsearchで文字列として格納されてしまいます。
{ "message" => "127.0.0.1 - - [27/Sep/2015:14:40:10 +0900] \"GET /pc/ HTTP/1.0\" 301 -", "@version" => "1", "@timestamp" => "2015-09-27T05:40:11.520Z", "host" => "a1.local", "path" => "/var/log/httpd-access.log", "client_ip" => "127.0.0.1", "ident" => "-", "auth" => "-", "apache_timestamp" => "27/Sep/2015:14:40:10 +0900", "method" => "GET", "request_page" => "pc/", "http_version" => "1.0", "server_response" => "301" }
上では、数値も文字列として扱われてしまっています。これは、filterで変換できます。
mutate { convert => { "@version" => "integer" } convert => { "http_version" => "integer" } convert => { "server_response" => "integer" } convert => { "bytes" => "integer" } }
filterで文字列として扱われている値を整数(integer)に変換することで以下のようになりました。
{ "message" => "127.0.0.1 - - [27/Sep/2015:15:00:45 +0900] \"GET /pc/ HTTP/1.1\" 301 -", "@version" => 1, "@timestamp" => "2015-09-27T06:01:27.180Z", "host" => "a1.local", "path" => "/var/log/httpd-access.log", "client_ip" => "127.0.0.1", "ident" => "-", "auth" => "-", "apache_timestamp" => "27/Sep/2015:15:00:45 +0900", "method" => "GET", "request_page" => "pc/", "http_version" => 1, "server_response" => 301 }
kibanaで見る
kibana で見るときは、 index 名は、 apache を指定すれば見られます。
関連項目
ツイート
スポンサーリンク