Logstash cheat sheet: Difference between revisions

 
(109 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.2.4], [https://www.elastic.co/downloads/logstash Logstash 6.2.4], [https://www.elastic.co/downloads/beats/filebeat Filebeat 6.2.4], [https://www.elastic.co/downloads/kibana Kibana 6.2.4])
:(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 15: Line 96:
:: ES_TMPDIR の定義がないのでエラーになる。
:: ES_TMPDIR の定義がないのでエラーになる。


'''filebeat 6.3.0 は問題ありそう。6.2.4 のままで様子を見る。'''
"error"=>{"type"=>"mapper_parsing_exception", "reason"=>"failed to parse [host]"
:::[https://github.com/elastic/beats/issues/7050 Metricbeat `host` namespace causes mapping conflict when used with Logstash]
:::[https://discuss.elastic.co/t/logstash-errors-after-upgrading-to-filebeat-6-3-0/135984/5 Logstash errors after upgrading to filebeat-6.3.0]
[https://github.com/elastic/beats/blob/master/libbeat/docs/breaking.asciidoc#breaking-changes-in-63 Breaking changes in 6.3]
:ここに着地
<syntaxhighlight lang="javascript" enclose="div">
  "mappings" : {
      "properties" : {
        "host"  : {
          "dynamic": true,
          "properties" : {
            "name": { "type": "keyword" },
            "id" : { "type" : "keyword" },
            "architecture" : { "type" : "keyword" },
            "os" : {
              "dynamic" : true,
              "properties" : {
                "platform": { "type": "keyword" },
                "version": { "type": "keyword" },
                "family": { "type": "keyword" }
            }
            "ip" : { "type" : "ip" },
            "mac" : { "type" : "keyword" }
          }
        }
      }
    }
  }
</syntaxhighlight>
:こんな感じの template でいいのかねぇ
::[https://github.com/elastic/ecs Elastic Common Schema] こんなこと計画してるらしい
それか無視するか
<syntaxhighlight lang="javascript" enclose="div">
  # For Beat and LSF compatibility
  if [beat][name] {
    # Remove host metadata
    mutate {
      remove_field => [ "[host]" ]
    }
    mutate {
      add_field => {
        "host" => "%{[beat][name]}"
      }
    }
</syntaxhighlight>
:beat.hostname ではなく beat.name つかえと...


===logstash の書籍===
===logstash の書籍===
Line 147: Line 279:
#=========================== Filebeat prospectors =============================
#=========================== Filebeat prospectors =============================


filebeat.prospectors:
filebeat.inputs:
#filebeat.prospectors:


- type: log
- type: log
Line 311: 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 371: 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 437: Line 570:
== X-Pack ==
== X-Pack ==
Basic ライセンスというのが Free で、ライセンスを1年ごとに更新していけば、ずっと無料でつかえそうだ。
Basic ライセンスというのが Free で、ライセンスを1年ごとに更新していけば、ずっと無料でつかえそうだ。
 
:6.3.0 から Basic ライセンスは有効期限が無制限になった。また面倒だったアップテート時の x-pack のインストース作業も不要になった。


自分のテスト環境はシングルノードなので status が YELLOW にならないように、
自分のテスト環境はシングルノードなので status が YELLOW にならないように、
Line 479: Line 612:


Elastic Stack がアップデートされたら、いちいち明示的に X-Pack をアップデートしなければいけないのは萎える。
Elastic Stack がアップデートされたら、いちいち明示的に X-Pack をアップデートしなければいけないのは萎える。
:6.3.0 から標準パッケージにはいったっぽい。
<syntaxhighlight lang="bash" enclose="div">
<syntaxhighlight lang="bash" enclose="div">
systemctl stop logstash
systemctl stop logstash
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 969: Line 1,096:
/var/log/kibana/kibana.stdout が肥大化していたので logrotate 設定した。
/var/log/kibana/kibana.stdout が肥大化していたので logrotate 設定した。
-->
-->
=== IPv6 address の抽出 ===
単純な方法があった。
<syntaxhighlight lang="text" enclose="div">
client_ip: *\:*
</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 側のロジックで新しいフィールドつくった。
結局 type ip ならこれでよさそうだ。
<syntaxhighlight lang="text" enclose="div">
if [client_ip] =~ /:/ {
  # is IPv6, do something
  mutate {
    add_field => { "client_ipv6" => "%{client_ip}" }
  }
}
</syntaxhighlight>


== dashboard URL ==
== dashboard URL ==