Logstash cheat sheet
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
- このパッチと下記の設定でなんとかいけそげ (4.0.2 で URL に USER:PASS@HOST が正しく動く様になった。が、まだおかしい)(firefox ダメダメだし)
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
- elasticsearch の日付は UTC なので、マシンの時刻が JST な場合は、スクリプト内に date を date -u にしておく。
日付またぎ問題を大胆に処理してみた。
TOTAL_EVENTS=$(curl -s -k -XGET http://127.0.0.1:9200/logstash-`/bin/date -u --date "1 day ago" +%Y.%m.%d`,logstash-`/bin/date -u +%Y.%m.%d`/_search -d '{ "size": 0, "query": { "filtered": { "query": { "match_all": { } }, "filter": { "range": { "@timestamp": { "from": "'`/bin/date -u --date "1 hours ago" +%Y-%m-%dT%H:00:00`'", "to": "'`/bin/date -u +%Y-%m-%dT%H:00:00`'" } } } } }, "from": 0, "sort": { "@timestamp": { "order": "desc" } }}' | /bin/grep --only \"hits\"\:\{\"total\"\:[0-9]*,\" | /bin/grep -o [0-9]*)