ELK (Elasticsearch + Logstash + Kibana)

splunk のデモをみて、自分の環境に logstash を入れてみた。 :)

logstash - open source log management

どうせやるなら、Centralized Setup with Event Parsing で構成してみた。

このページの構成図のようにしたが、Web インターフェースは Kibana のほうがいい感じ。

logstash-shipper -> redis -> logstash-indexer -> Elasticsearch -> Kibana


(この節は kibana 2 用の古い内容です)

Kibana で細かなアクセス権限を与える場合は、フロントに apache + mod_proxy で実装する。
ProxyPass              /kibana/  http://127.0.0.1:5601/
ProxyPassReverse       /kibana/  http://127.0.0.1:5601/
SetEnv force-proxy-request-1.0 1
SetEnv proxy-nokeepalive 1
+いつもの ACL で

Kibana 3 系は elasticsearch を proxy する。あとは kibana 3 の config.js をごにょごにょ

ProxyRequests Off
ProxyPass              /es/  http://127.0.0.1:9200/ disablereuse=On ttl=120 timeout=3000
ProxyPassReverse       /es/  http://127.0.0.1:9200/ timeout=3000
SetEnv force-proxy-request-1.0 1
SetEnv proxy-nokeepalive 1
SetEnv proxy-initial-not-pooled 1
+いつもの ACL で

Kibana4 系は apache reverse proxy ではうまく動かないので、様子見中

どうも apache の Basic 認証をうまく越えられないようだ。Basic 認証外すと動く。network + Basic 認証にしておかないと怖いなぁ
https://github.com/elastic/kibana/issues/3302
このパッチと下記の設定でなんとかいけそげ
    ProxyRequests Off
    ProxyPreserveHost On
    ProxyPass              /kibana/  http://127.0.0.1:5601/ disablereuse=On ttl=120 timeout=3000
    ProxyPassReverse       /kibana/  http://127.0.0.1:5601/ timeout=3000
    SetEnv force-proxy-request-1.0 1
    SetEnv proxy-nokeepalive 1
    SetEnv proxy-initial-not-pooled 1

    <Location /kibana>
      Order Allow,Deny
      Allow from 127.0.0.1 *ALLOW-NETWORKS*
      <IfModule mod_authn_file.c>
        AuthUserFile /path/htpasswd
	AuthType Basic
      </IfModule>
      require valid-user
    </Location>

    <Location /kibana/elasticsearch>
      Order Allow,Deny
      Allow from 127.0.0.1
      Satisfy any
    </Location>


java の shipper は重たい。 専用の shipper があるっぽい。 (私は、今は logstash-forwarder を使ってます)

ログのパースは解析用サーバの shipper でやってる構成に今はしている
My logstash config, grok filter, grok patterns @ github
sshd や postfix の grok pattern あります。今は collectd のメトリックスを収集するテスト中。


indexer と shipper の java プロセスは別に起動したほうがパフォーマンスが良い。

lightweight shipper

redis にいれる lightweight shipper

beaver : python daemon that munches on logs and sends their contents to logstash

udp で直接ぶち込むには

-F string -t udp

lumberjack というのも良いらしい。

lumberjack
lumberjack は名前がかわって logstash-forwarder になった。elasticsearch 軍団に入った。
logstash-forwarder
elasticsearch の repository に logstash-forwarder の deb がひっそりあるのだが、 i386 版がなくってアセった....

parser

各種ログのパターンのメモ

apache error log 系

Logstash parser for ModSecurity/CRS entries in the Apache ErrorLog

postfix 系

Postfix LogStash patterns
Postfix grok filters

logstash の書籍がでた。うれしい

The LogStash Book

Elasticsearch のメンテナンス

elasticsearch-curator

ERROR

何故か接続が切れる...

Registrar received 100 events
Registrar received 100 events
Registrar received 100 events
Read error looking for ack: read tcp _SHIPPER_IP_:_SHIPPER_PORT_: i/o timeout
Setting trusted CA from file: /etc/logstash/logstash-forwarder.crt
Connecting to [_SHIPPER_IP_]:_SHIPPER_PORT_ (_SHIPPER_IP_)
Connected to _SHIPPER_IP_
Registrar received 100 events
Read error looking for ack: read tcp _SHIPPER_IP_:_SHIPPER_PORT_: i/o timeout
Setting trusted CA from file: /etc/logstash/logstash-forwarder.crt
Connecting to [_SHIPPER_IP_]:_SHIPPER_PORT_ (_SHIPPER_IP_)
Connected to _SHIPPER_IP_
Registrar received 100 events
Read error looking for ack: read tcp _SHIPPER_IP_:_SHIPPER_PORT_: i/o timeout
Setting trusted CA from file: /etc/logstash/logstash-forwarder.crt
Connecting to [_SHIPPER_IP_]:_SHIPPER_PORT_ (_SHIPPER_IP_)
Connected to _SHIPPER_IP_
Registrar received 100 events
spool-size=10 でしのぐ...
これか? https://github.com/elasticsearch/logstash-forwarder/issues/323


munin

logstash をモニタリングする munin plugin (なんか微妙なのですが munin ファンなので私)

https://raymii.org/s/software/Munin_plugin_Logstash_Kibana_messages_per_hour.html
検索の @timestamp にあたえる日付を TZ が +01:00 となっているのを、それぞれの環境に合わせる事。わたしはJST運用してるので +09:00