Logstash cheat sheet: Difference between revisions

Jump to navigation Jump to search
 
(88 intermediate revisions by the same user not shown)
= 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 を入れてみた。 :) ==
:(ELKBの更新が速いので、随時記事をアップデートします。[https://www.elastic.co/downloads/elasticsearch Elasticsearch 67.36.02], [https://www.elastic.co/downloads/logstash Logstash 67.36.02], [https://www.elastic.co/downloads/beats/filebeat Filebeat 67.36.02], [https://www.elastic.co/downloads/kibana Kibana 67.36.02])
 
:[http://ja.splunk.com/ splunk] のデモを見て、構造化ロギング・高速検索・可視化の素晴らしさが解ったので、それをオープンソースの Elastic stack (ELK stack) で実現する。
 
::完全に通常の運用につかっているので、アグレッシブな変更はできなくなってるので突っ込んだ記事がかけない^^;;;
 
 
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
:::[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">
それか無視するか
<syntaxhighlight lang="javascript" enclose="div">
# For Beat and LSF compatibility
if [beat][name] {
# Remove host metadata
mutate {
remove_field => [ "[host]" ]
 
*apache
[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]
 
===rsyslog の timestamp を milliseconds まで取る===
:/etc/rsyslog.conf の
# Use traditional timestamp format.
# To enable high precision timestamps, comment out the following line.
#
#
$ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat
:の指示通り、"ActionFileDefaultTemplate" 行をコメントアウトする。
systemctl stop kibana
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
./bin/logstash-plugin remove x-pack
./bin/logstash-plugin install x-pack
./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 kibana
/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 ==

Navigation menu