Logstash cheat sheet: Difference between revisions

 
(76 intermediate revisions by the same user not shown)
Line 1: Line 1:
= Elastic stack / ELK (Elasticsearch + Logstash + Kibana) =
= Elastic stack / ELK (Elasticsearch + Logstash + Kibana) =
'''諸般の事情により更新休止します'''
== 久しぶりの追記 ==
久しぶりに logstash.conf を修正したら、割と重要な仕様変更がたくさんあり、過去の記述は現在の仕様に合ってないです。ちなみに ruby code を追記したのですが、event.get event.set とかになっている。
<syntaxhighlight lang="javascript" enclose="div">
  ruby {
      code => "event.set('foo',event.get('foo')+ 5.1)"
  }
</syntaxhighlight>
こんな感じ。
その他、認証系強化による仕様の混乱はとりあえずなんとかするしかないw


== splunk のデモをみて、自分の環境に logstash を入れてみた。 :) ==
== splunk のデモをみて、自分の環境に logstash を入れてみた。 :) ==
:(ELKBの更新が速いので、随時記事をアップデートします。[https://www.elastic.co/downloads/elasticsearch Elasticsearch 6.4.3], [https://www.elastic.co/downloads/logstash Logstash 6.4.3], [https://www.elastic.co/downloads/beats/filebeat Filebeat 6.4.3], [https://www.elastic.co/downloads/kibana Kibana 6.4.3])
:(ELKBの更新が速いので、随時記事をアップデートします。[https://www.elastic.co/downloads/elasticsearch Elasticsearch 7.6.2], [https://www.elastic.co/downloads/logstash Logstash 7.6.2], [https://www.elastic.co/downloads/beats/filebeat Filebeat 7.6.2], [https://www.elastic.co/downloads/kibana Kibana 7.6.2])


:[http://ja.splunk.com/ splunk] のデモを見て、構造化ロギング・高速検索・可視化の素晴らしさが解ったので、それをオープンソースの Elastic stack (ELK stack) で実現する。
:[http://ja.splunk.com/ splunk] のデモを見て、構造化ロギング・高速検索・可視化の素晴らしさが解ったので、それをオープンソースの Elastic stack (ELK stack) で実現する。
Line 10: Line 23:


::完全に通常の運用につかっているので、アグレッシブな変更はできなくなってるので突っ込んだ記事がかけない^^;;;
::完全に通常の運用につかっているので、アグレッシブな変更はできなくなってるので突っ込んだ記事がかけない^^;;;
7.6.0 は kibana の index の変換するのだが、elasticseach のサーキットブレーカーが作動して完了しない。
:一時的に elasticsearch の heap 増やした。(最終的には、今回の件がギリギリ回避できるメモリー量に増やした)
7.6.0 から X-Pack の概念が変わった(なくなった?)
:logstash.yml から xpack の設定をコメントアウト
timelion の位置付けが変わった。
kibana.ymlに
<syntaxhighlight lang="yaml" enclose="div">
timelion.ui.enabled: true
</syntaxhighlight>
で元に戻る。設定を確認して、新しいビジュアライズに移行する。
7.4.1 の logstash がダメっぽい。ヘビー io-wait
:以前よりメモリー食いになってるようで、ES も含めて頑張って使用メモリー削減してかろうじて稼働中
:: dns filter がぁ failed_cache_size ちゃんと設定しないとまずい。
'''ようやく 7.x にあげた'''
あら...意外と簡単に入った 7.4.0...でもないぞ。
よく見たら index 名が変わって Index Lifecycle Management がよしなにしてしまうようで、昔に戻すには elasticsearch output pulgin で
<syntaxhighlight lang="javascript" enclose="div">
ilm_enabled => false
</syntaxhighlight>
kibana の index pattern を削除したあとトラブル。新しい index pattern 作っているのに index pattern が無いので作れといわれる
解決策は、新しい index pattern を作るときに、advanced options を表示して、Custom index pattern ID に index pattern と同じ文字をいれる。たとえば index pattern が "logstash-*" なら Custom index pattern ID も "logstash-*" とする。
私は '*' という文字が嫌なので(あとで問題起きそう)、全部 id を書き換えた。
filebeat.yml で filebeat.registry_file 行削除すること
logstash の elasticsearch-template を変更
<syntaxhighlight lang="javascript" enclose="div">
    "_default_" : {
    ****
    }
</syntaxhighlight>
を削除
python beaver から送られる 'host' を remove
<syntaxhighlight lang="javascript" enclose="div">
    mutate {
      rename => { "host" => "my_host" }
    }
    mutate {
      add_field => { "[host][name]" => "%{my_host}" }
    }
</syntaxhighlight>
beats が送っていた "host" は host.name に
[host][name]
agent.* が増えた
7.0.0 出た! テストは気力があるときwにします。。。
6.6.1 で geoip.postal_code の型がコンフリクト
[https://github.com/logstash-plugins/logstash-output-elasticsearch/pull/788/files#diff-c1b7e63b1e6f2c2cfe8656fa847ecba5 "postal_code" : { "type" : "keyword" }]
6.5.0 で kibana の index が変更されて .kibana_1 .kibana_2 というのができた。これですこしハマった。


6.2.0 で /etc/elasticsearch/jvm.options
6.2.0 で /etc/elasticsearch/jvm.options
Line 53: Line 134:
それか無視するか
それか無視するか
<syntaxhighlight lang="javascript" enclose="div">
<syntaxhighlight lang="javascript" enclose="div">
   # For Beat and LSF compatibility                                                                            
   # For Beat and LSF compatibility
   if [beat][name] {
   if [beat][name] {
     # Remove host metadata                                                                                    
     # Remove host metadata
     mutate {
     mutate {
       remove_field => [ "[host]" ]
       remove_field => [ "[host]" ]
Line 363: Line 444:


*apache
*apache
  [https://github.com/logstash-plugins/logstash-patterns-core/blob/master/patterns/httpd 公式 pattern の COMBINEDAPACHELOG]  
  [https://github.com/logstash-plugins/logstash-patterns-core/blob/master/patterns/httpd 公式 pattern の COMBINEDAPACHELOG]
  [https://github.com/nxhack/logstash/blob/master/patterns/apache apache grok pattern]
  [https://github.com/nxhack/logstash/blob/master/patterns/apache apache grok pattern]


Line 423: Line 504:
===rsyslog の timestamp を milliseconds まで取る===
===rsyslog の timestamp を milliseconds まで取る===
:/etc/rsyslog.conf の
:/etc/rsyslog.conf の
  # Use traditional timestamp format.                                                                                          
  # Use traditional timestamp format.
  # To enable high precision timestamps, comment out the following line.                                                      
  # To enable high precision timestamps, comment out the following line.
  #                                                                                                                            
  #
  $ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat
  $ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat
:の指示通り、"ActionFileDefaultTemplate" 行をコメントアウトする。
:の指示通り、"ActionFileDefaultTemplate" 行をコメントアウトする。
Line 536: Line 617:
systemctl stop kibana
systemctl stop kibana
systemctl stop elasticsearch
systemctl stop elasticsearch
cd /usr/share/elasticsearch
./bin/elasticsearch-plugin remove x-pack
./bin/elasticsearch-plugin install x-pack
emacs plugins/x-pack/x-pack-core/x-pack-core-6.2.4.jar
cd /usr/share/kibana
./bin/kibana-plugin remove x-pack
./bin/kibana-plugin install x-pack
cd /usr/share/logstash
cd /usr/share/logstash
./bin/logstash-plugin remove x-pack
./bin/logstash-plugin install x-pack
./bin/logstash-plugin install logstash-output-statsd
./bin/logstash-plugin install logstash-output-statsd
./bin/logstash-plugin install logstash-filter-throttle
./bin/logstash-plugin install logstash-filter-sleep
systemctl start elasticsearch
systemctl start elasticsearch
systemctl start kibana
systemctl start kibana
Line 1,028: Line 1,102:
</syntaxhighlight>
</syntaxhighlight>
:これだとマッチしないのがあるっぽいな。要調査
:これだとマッチしないのがあるっぽいな。要調査
<syntaxhighlight lang="text" enclose="div">
client_ip: ["::" TO "ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff"]
</syntaxhighlight>
:これでも抜けるな
::これかな? [https://github.com/elastic/elasticsearch/issues/29288 unable to CIDR match IPv4-mapped IPv6]
:::あちゃ。type ipになってなかった。もうすこしホゲる。
:::: type ip にしてみたが、うまくマッチする方法がみつからない。
どうやら type ip ではこれで良い。このアドレスはインターネットに広報してよいブロックのみ。これ以外は変えないといけない。
<syntaxhighlight lang="text" enclose="div">
client_ip: "2000::/3"
</syntaxhighlight>


ちなみに logstash だと
ちなみに logstash だとこんなコードでマッチする。実運用では logstash 側のロジックで新しいフィールドつくった。
 
結局 type ip ならこれでよさそうだ。
<syntaxhighlight lang="text" enclose="div">
<syntaxhighlight lang="text" enclose="div">
if [client_ip] =~ /:/ {
if [client_ip] =~ /:/ {
   # is IPv6, do something
   # is IPv6, do something
  mutate {
    add_field => { "client_ipv6" => "%{client_ip}" }
  }
}
}
</syntaxhighlight>
</syntaxhighlight>