7,166
edits
(→構成) |
|||
(400 intermediate revisions by the same user not shown) | |||
Line 1: | Line 1: | ||
= 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 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] のデモを見て、構造化ロギング・高速検索・可視化の素晴らしさが解ったので、それをオープンソースの ELK stack で実現する。 | :[http://ja.splunk.com/ splunk] のデモを見て、構造化ロギング・高速検索・可視化の素晴らしさが解ったので、それをオープンソースの Elastic stack (ELK stack) で実現する。 | ||
:ELK でログ管理をしはじめて、いままで気付かなかった事がいろいろ見えて、かなり改善しました(実感!) | :ELK でログ管理をしはじめて、いままで気付かなかった事がいろいろ見えて、かなり改善しました(実感!) | ||
最近の Elastic Stack は logstash いらずで簡易にという方向を狙ってきている。それはそれで嬉しいが、いろいろ細かく触りたい場合には、まだまだ logstash をホゲらないと逝けない。 | |||
::完全に通常の運用につかっているので、アグレッシブな変更はできなくなってるので突っ込んだ記事がかけない^^;;; | |||
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 | |||
-Djava.io.tmpdir=${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 19: | Line 161: | ||
Filebeat(送る) ↘︎ | Filebeat(送る) ↘︎ | ||
Filebeat(送る) → logstash-shipper(受け取りredisに送る) → redis(ブローカー) → logstash-indexer(パース・構造化) → Elasticsearch(蓄積・検索エンジン) → Kibana(可視化) | Filebeat(送る) → logstash-shipper(受け取りredisに送る) → redis(ブローカー) → logstash-indexer(パース・構造化) → Elasticsearch(蓄積・検索エンジン) → Kibana(可視化) | ||
Filebeat(送る) | Filebeat(送る) ↗︎ ↗︎ | ||
logstash-shipper(redisに送る) | logstash-shipper(redisに送る)--------------↗︎ | ||
beaver(redisに送る)-----------------↗︎ | beaver(redisに送る)-------------------↗︎ | ||
Filebeat(redisに送る)-----------------↗︎ | |||
</pre> | </pre> | ||
:最近は Kafka を broker にするのが良さげか? | |||
:私は各端末には Java 環境は入れたくないので [https://github.com/elastic/filebeat Filebeat] を使ってます。 | :私は各端末には Java 環境は入れたくないので [https://github.com/elastic/filebeat Filebeat] を使ってます。 | ||
Line 28: | Line 172: | ||
Filebeat: | Filebeat: | ||
端末(filebeat) ----> 解析サーバ(logstash-shipper) | 端末(filebeat) ----> 解析サーバ(logstash-shipper) | ||
[端末(filebeat) ----> 解析・蓄積(Elasticsearch Ingest Node)] | |||
logstash-shipper: | logstash-shipper: | ||
Filebeat の待ち受け(input beats)、ブローカーへそのまま吐き出す(output redis) | Filebeat の待ち受け(input beats)、ブローカーへそのまま吐き出す(output redis) | ||
Line 92: | Line 238: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
<!-- | |||
=== Logtash-Forwarder to Filebeat Migration === | === Logtash-Forwarder to Filebeat Migration === | ||
[https://github.com/elastic/beats/blob/master/filebeat/docs/migration.asciidoc Logtash-Forwarder to Filebeat Migration] | [https://github.com/elastic/beats/blob/master/filebeat/docs/migration.asciidoc Logtash-Forwarder to Filebeat Migration] | ||
--> | |||
<!-- | |||
==== logstash-input-lumberjack から logstash-input-beats へ入れ替え ==== | ==== logstash-input-lumberjack から logstash-input-beats へ入れ替え ==== | ||
LS 1.5.x でも 2.x も可 | LS 1.5.x でも 2.x も可 | ||
<syntaxhighlight lang="bash" enclose="div"> | <syntaxhighlight lang="bash" enclose="div"> | ||
cd /opt/logstash | cd /opt/logstash | ||
./bin/plugin install logstash-input-beats | ./bin/logstash-plugin install logstash-input-beats | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Line 117: | Line 266: | ||
: plugin 名を 'lumberjack' から 'beats' へ変更。'ssl => true' 行を追加 (SSL はデフォルト false) | : plugin 名を 'lumberjack' から 'beats' へ変更。'ssl => true' 行を追加 (SSL はデフォルト false) | ||
: クライアントが LSF のときは、 target_field_for_codec => "line" 行が必要。Filebeat になれば不要。 | : クライアントが LSF のときは、 target_field_for_codec => "line" 行が必要。Filebeat になれば不要。 | ||
--> | |||
==== Filebeat 設定 ==== | ==== Filebeat 設定 ==== | ||
'''filebeat.yml 例''' | '''filebeat.yml 例 (6.0 仮)''' | ||
: 6.0 は type が使えないので log_type という名前のカスタムフィールドに変更する。 | |||
::logstash 使うので filebeat modules は使わない。 | |||
:::modules 勉強しないといけない。 | |||
::::もともと logstash から入ったので modules は私には不要かも... | |||
<syntaxhighlight lang="yaml" enclose="div"> | <syntaxhighlight lang="yaml" enclose="div"> | ||
######################## Filebeat Configuration ############################ | |||
#=========================== Filebeat prospectors ============================= | |||
filebeat.inputs: | |||
#filebeat.prospectors: | |||
- type: log | |||
paths: | |||
- /var/log/syslog | |||
- /var/log/mail.log | |||
- /var/log/auth.log | |||
fields: | |||
log_type: syslog | |||
fields_under_root: true | |||
- type: log | |||
paths: | |||
/var/log/apache2/access.log | |||
fields: | |||
log_type: apache | |||
fields_under_root: true | |||
- type: log | |||
paths: | |||
/var/log/apache2/other_vhosts_access.log | |||
fields: | |||
log_type: apache-other-vhost | |||
fields_under_root: true | |||
- type: log | |||
paths: | |||
/var/log/apache2/error.log | |||
fields: | |||
log_type: apache-error | |||
fields_under_root: true | |||
- type: log | |||
paths: | |||
/var/log/varnish/varnishncsa.log | |||
fields: | |||
log_type: varnish | |||
fields_under_root: true | |||
- type: log | |||
paths: | |||
/var/log/dpkg.log | |||
fields: | |||
log_type: dpkg | |||
fields_under_root: true | |||
- type: log | |||
paths: | |||
/var/log/fail2ban.log | |||
fields: | |||
log_type: fail2ban | |||
fields_under_root: true | |||
# | #========================= Filebeat global options ============================ | ||
filebeat.registry_file: /var/lib/filebeat/registry | |||
# | #================================ Outputs ====================================== | ||
#----------------------------- Logstash output --------------------------------- | |||
output.logstash: | |||
# The Logstash hosts | |||
hosts: ["localhost:5044"] | |||
# Optional SSL. By default is off. | |||
# List of root certificates for HTTPS server verifications | |||
ssl.certificate_authorities: ["/etc/logstash/logstash-forwarder.crt"] | |||
# Certificate for TLS client authentication | |||
#ssl.certificate: "/etc/logstash/logstash-forwarder.crt" | |||
# Client Certificate Key | |||
#ssl.key: "/etc/logstash/logstash-forwarder.key" | |||
# Configure SSL verification mode. If `none` is configured, all server hosts | |||
# and certificates will be accepted. In this mode, SSL based connections are | |||
# susceptible to man-in-the-middle attacks. Use only for testing. Default is | |||
# `full`. | |||
#ssl.verification_mode: full | |||
ssl.verification_mode: none | |||
#================================ Logging ====================================== | |||
# There are three options for the log output: syslog, file, stderr. | |||
# Under Windows systems, the log files are per default sent to the file output, | |||
# under all other system per default to syslog. | |||
# Sets log level. The default log level is info. | |||
# Available log levels are: critical, error, warning, info, debug | |||
#logging.level: info | |||
logging.level: info | |||
# Enable debug output for selected components. To enable all selectors use ["*"] | |||
# Other available selectors are "beat", "publish", "service" | |||
# Multiple selectors can be chained. | |||
#logging.selectors: [ ] | |||
# Send all logging output to syslog. The default is false. | |||
#logging.to_syslog: true | |||
logging.to_syslog: false | |||
# If enabled, filebeat periodically logs its internal metrics that have changed | |||
# in the last period. For each metric that changed, the delta from the value at | |||
# the beginning of the period is logged. Also, the total values for | |||
# all non-zero internal metrics are logged on shutdown. The default is true. | |||
#logging.metrics.enabled: true | |||
# The period after which to log the internal metrics. The default is 30s. | |||
#logging.metrics.period: 30s | |||
##### | # Logging to rotating files files. Set logging.to_files to false to disable logging to | ||
# files. | |||
logging.to_files: true | |||
logging.files: | |||
# Configure the path where the logs are written. The default is the logs directory | |||
# under the home path (the binary location). | |||
#path: /var/log/filebeat | |||
path: /var/log/filebeat | |||
# The name of the files where the logs are written to. | |||
# The name of the | #name: filebeat | ||
name: filebeat.log | |||
# | |||
# | # Configure log file size limit. If limit is reached, log file will be | ||
# | # automatically rotated | ||
# | #rotateeverybytes: 10485760 # = 10MB | ||
# | rotateeverybytes: 10485760 # = 10MB | ||
# | # Number of rotated log files to keep. Oldest files will be deleted first. | ||
#keepfiles: 7 | |||
# | keepfiles: 7 | ||
# | # The permissions mask to apply when rotating log files. The default value is 0600. | ||
# | # Must be a valid Unix-style file permissions mask expressed in octal notation. | ||
# | #permissions: 0600 | ||
# Set to true to log messages in json format. | |||
#logging.json: false | |||
</syntaxhighlight> | </syntaxhighlight> | ||
== メンテナンス == | == メンテナンス == | ||
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
/usr/share/logstash/bin/logstash-plugin list | |||
/usr/share/logstash/bin/logstash-plugin list --verbose | |||
/usr/share/logstash/bin/logstash-plugin update | |||
</syntaxhighlight> | </syntaxhighlight> | ||
===plugin version 指定の方法=== | ===plugin version 指定の方法=== | ||
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
/usr/share/logstash/bin/logstash-plugin install --version=3.1.1 logstash-input-redis | |||
</syntaxhighlight> | </syntaxhighlight> | ||
Line 345: | Line 444: | ||
*apache | *apache | ||
[https://github.com/logstash-plugins/logstash-patterns-core/blob/master/patterns/ | [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 357: | Line 456: | ||
[https://github.com/nxhack/logstash/blob/master/patterns/zimbra mailbox.log grok pattern] | [https://github.com/nxhack/logstash/blob/master/patterns/zimbra mailbox.log grok pattern] | ||
[https://github.com/nxhack/logstash/blob/master/patterns/amavis amavis grok pattern] | [https://github.com/nxhack/logstash/blob/master/patterns/amavis amavis grok pattern] | ||
*fail2ban | |||
[https://github.com/nxhack/logstash/blob/master/patterns/fail2ban fail2ban grok pattern] | |||
===パターンの作成=== | ===パターンの作成=== | ||
Line 367: | Line 469: | ||
=== バグ? === | === バグ? === | ||
どうも ":int" や ":float" 指定しているパターンで、パターンがマッチしたりしなかったりして、フィールドの有り無しが混在するケースで cast というか data type conversion が失敗するようにおもう。 | どうも ":int" や ":float" 指定しているパターンで、パターンがマッチしたりしなかったりして、フィールドの有り無しが混在するケースで cast というか data type conversion が失敗するようにおもう。 | ||
対処としては、 grok pattern で data type 指定をしないで、filter 側で mutate convert するようにする。 | 対処としては、 grok pattern で data type 指定をしないで、filter 側で mutate convert するようにする。 | ||
== geoip, user-agent == | == geoip, user-agent == | ||
http://dev.maxmind.com/geoip/geoip2/geolite2/ | |||
http://geolite.maxmind.com/download/geoip/database/GeoLite2-City.mmdb.gz | |||
http://geolite.maxmind.com/download/geoip/database/GeoLite2-Country.mmdb.gz | |||
http://geolite.maxmind.com/download/geoip/database/GeoLite2-ASN.tar.gz | |||
http://dev.maxmind.com/geoip/legacy/geolite/ | http://dev.maxmind.com/geoip/legacy/geolite/ | ||
Line 380: | Line 484: | ||
https://github.com/ua-parser/uap-core/blob/master/regexes.yaml | https://github.com/ua-parser/uap-core/blob/master/regexes.yaml | ||
https://raw.githubusercontent.com/ua-parser/uap-core/master/regexes.yaml | https://raw.githubusercontent.com/ua-parser/uap-core/master/regexes.yaml | ||
geoip 更新処理 | |||
<syntaxhighlight lang="bash" enclose="div"> | |||
wget http://geolite.maxmind.com/download/geoip/database/GeoLite2-City.mmdb.gz | |||
wget http://geolite.maxmind.com/download/geoip/database/GeoLite2-Country.mmdb.gz | |||
wget http://geolite.maxmind.com/download/geoip/database/GeoLite2-ASN.tar.gz | |||
rm *.old | |||
mv GeoLite2-City.mmdb GeoLite2-City.mmdb.old | |||
mv GeoLite2-Country.mmdb GeoLite2-Country.mmdb.old | |||
mv GeoLite2-ASN.mmdb GeoLite2-ASN.mmdb.old | |||
gunzip GeoLite2-City.mmdb.gz | |||
gunzip GeoLite2-Country.mmdb.gz | |||
tar xfz GeoLite2-ASN.tar.gz --strip=1 --wildcards */GeoLite2-ASN.mmdb | |||
rm GeoLite2-ASN.tar.gz | |||
</syntaxhighlight> | |||
== enable high precision timestamps == | == enable high precision timestamps == | ||
Line 385: | 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 414: | Line 533: | ||
:(切り戻してもエラーがでないように mutate, replace 処理追加) | :(切り戻してもエラーがでないように mutate, replace 処理追加) | ||
===apache2.4 のログの場合 | ===apache2.4 のログの場合=== | ||
%{%Y-%m-%dT%H:%M:%S}t.%{msec_frac}t%{%z}t | %{%Y-%m-%dT%H:%M:%S}t.%{msec_frac}t%{%z}t | ||
Line 425: | Line 544: | ||
[https://discuss.elastic.co/t/tags-vs-fields/24014 Tags vs Fields - Logstash - Discuss Elasticsearch, Logstash and Kibana | Elastic] | [https://discuss.elastic.co/t/tags-vs-fields/24014 Tags vs Fields - Logstash - Discuss Elasticsearch, Logstash and Kibana | Elastic] | ||
よく確認する tag は "_grokparsefailure" で、これは文字通りパースを失敗した時。こいつをトリガーで grok pattern を修正している。beaver は tag をつけて(空でも)送ってくる。これはいろいろな filter で "add_tag" や "remove_tag" | よく確認する tag は "_grokparsefailure" で、これは文字通りパースを失敗した時。こいつをトリガーで grok pattern を修正している。beaver は tag をつけて(空でも)送ってくる。これはいろいろな filter で "add_tag" や "remove_tag" で操作される。tag は filter 処理の制御フラグとして使われたりする。なので不審がらずに tag を利用する方針がよい。 | ||
名前が "tags" の array type の特殊な field という理解でいいのかな? | 名前が "tags" の array type の特殊な field であり、処理の制御等に利用される という理解でいいのかな? | ||
== rsyslog limit 解除 == | == rsyslog limit 解除 == | ||
Line 436: | Line 555: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
== LS 2.2 == | == JMX == | ||
私が出した [https://github.com/elastic/logstash/issues/4666 issue] に対する公式見解がでた。 | |||
[https://github.com/elastic/logstash/issues/4319 https://github.com/elastic/logstash/issues/4319] | |||
Logstash 5.0 でメトリックスが LS 自体からとれるようになるらしい。 | |||
:それはでは JMX うごかすw | |||
Logstash 5.0.0 GA につき、Monitor API を使った munin plugin 作ってみた。 | |||
[https://github.com/nxhack/munin-plugin-logstash https://github.com/nxhack/munin-plugin-logstash] | |||
Elastic Stack 純正のモニタリングパッケージ [https://www.elastic.co/products/x-pack X-Pack] はこれから試す。 | |||
== X-Pack == | |||
Basic ライセンスというのが Free で、ライセンスを1年ごとに更新していけば、ずっと無料でつかえそうだ。 | |||
:6.3.0 から Basic ライセンスは有効期限が無制限になった。また面倒だったアップテート時の x-pack のインストース作業も不要になった。 | |||
自分のテスト環境はシングルノードなので status が YELLOW にならないように、 | |||
/usr/share/elasticsearch/plugins/x-pack/x-pack-core/x-pack-core-6.2.4.jar | |||
:テンプレート json の index.number_of_replicas を変更する。 | |||
curl -XDELETE 'http://127.0.0.1:9200/_template/.monitoring-logstash' | |||
curl -XDELETE 'http://127.0.0.1:9200/_template/.monitoring-alerts' | |||
curl -XDELETE 'http://127.0.0.1:9200/_template/.monitoring-es-2' | |||
curl -XDELETE 'http://127.0.0.1:9200/_template/.monitoring-es' | |||
curl -XDELETE 'http://127.0.0.1:9200/_template/.monitoring-data-2' | |||
curl -XDELETE 'http://127.0.0.1:9200/_template/.monitoring-kibana-2' | |||
curl -XDELETE 'http://127.0.0.1:9200/_template/.monitoring-kibana' | |||
作ってしまった index の index.number_of_replicas を変更する。 | |||
<syntaxhighlight lang="bash" enclose="div"> | |||
curl -XPUT 'http://localhost:9200/.monitoring-es-6-2017.12.05/_settings' -H 'Content-Type: application/json' -d' | |||
{ | |||
"index" : { | |||
"number_of_replicas" : "0" | |||
} | |||
} | |||
' | |||
curl -XPUT 'http://localhost:9200/.monitoring-logstash-6-2017.12.05/_settings' -H 'Content-Type: application/json' -d' | |||
{ | |||
"index" : { | |||
"number_of_replicas" : "0" | |||
} | |||
} | |||
' | |||
curl -XPUT 'http://localhost:9200/.monitoring-kibana-6-2017.12.05/_settings' -H 'Content-Type: application/json' -d' | |||
{ | |||
"index" : { | |||
"number_of_replicas" : "0" | |||
} | |||
} | |||
' | |||
</syntaxhighlight> | |||
Elastic Stack がアップデートされたら、いちいち明示的に X-Pack をアップデートしなければいけないのは萎える。 | |||
:6.3.0 から標準パッケージにはいったっぽい。 | |||
<syntaxhighlight lang="bash" enclose="div"> | |||
systemctl stop logstash | |||
systemctl stop kibana | |||
systemctl stop elasticsearch | |||
cd /usr/share/logstash | |||
./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 | |||
systemctl start logstash | |||
</syntaxhighlight> | |||
また、elasticsearch を(再)起動する時点で、kibana や logstash が稼働している場合に、monitor を突きにくるので、認証エラーが多発する。 | |||
これは無視してよいが気持ち悪い。 | |||
Authentication of [kibana] was terminated by realm [reserved] - failed to authenticate user [kibana] | |||
Authentication of [logstash_system] was terminated by realm [reserved] - failed to authenticate user [logstash_system] | |||
== LS 2.3.1 geoip issue == | |||
illegal latitude value | |||
[https://github.com/elastic/logstash/issues/4961 https://github.com/elastic/logstash/issues/4961] | |||
mapping type "geo_point" の型(変換)が 2.2.x と変わっている感じでエラー | |||
この設定が影響しているっぽいが...(これを削除すればエラーは出ない) | |||
<syntaxhighlight lang="javascript" enclose="div"> | |||
mutate { remove_field => [ "[postfix_geoip][location]" ] } | |||
mutate { add_field => { "[postfix_geoip][location]" => "%{[postfix_geoip][longitude]}" } } | |||
mutate { add_field => { "[postfix_geoip][location]" => "%{[postfix_geoip][latitude]}" } } | |||
</syntaxhighlight> | |||
私の処理では固定の location だったのでこれでやりたいことはできたのだが、変数の場合はどうしたらよいのか? | |||
<syntaxhighlight lang="javascript" enclose="div"> | |||
mutate { replace => { "[postfix_geoip][location]" => "-77.4875, 39.044" } } | |||
</syntaxhighlight> | |||
geo_point は string type でないといけなさそう。 | |||
うーーーーむ。意識してないなぁ... | |||
[https://github.com/elastic/logstash/issues/5114 https://github.com/elastic/logstash/issues/5114] | |||
ちなみに elasticsearch-template.json が 5.0 版になっているらしくって注意。 | |||
[https://github.com/logstash-plugins/logstash-output-elasticsearch/commit/4abd353ff7b058f8142fe2d4ee2dd06408d0aab1 Fix template for 5.0] | |||
<!-- | |||
== redis version == | |||
logstash-input-redis 2.0.3 でとうとう redis 2.2 がうごかなくなった。 | |||
:message=>"Redis connection problem", :exception=>#<Redis::CommandError: ERR unknown command 'script'>, :level=>:warn | |||
これは Lua EVAL 機能を使い始めたかららしい(ストアドプロシージャみないなものかな)。ppa の redis 3.0 に上げた。 | |||
--> | |||
== geoip support for GeoIPLite2-ASN database == | |||
4.2.1 でうごくか... | |||
<syntaxhighlight lang="bash" enclose="div"> | |||
/usr/share/logstash/bin/logstash-plugin update logstash-filter-geoip | |||
Updating logstash-filter-geoip | |||
Updated logstash-filter-geoip 4.1.1 to 4.2.1 | |||
</syntaxhighlight> | |||
<syntaxhighlight lang="json" enclose="div"> | |||
geoip { | |||
database => "/etc/logstash/geoip/GeoLite2-ASN.mmdb" | |||
source => "postfix_client_ip" | |||
target => "postfix_bgp" | |||
} | |||
</syntaxhighlight> | |||
いけた! | |||
<syntaxhighlight lang="json" enclose="div"> | |||
"postfix_bgp": { | |||
"as_org": "Towerstream I, Inc.", | |||
"ip": "64.17.249.242", | |||
"asn": 33224 | |||
}, | |||
</syntaxhighlight> | |||
== Raspberry Pi == | |||
[https://beats-nightlies.s3.amazonaws.com/index.html?prefix=jenkins/filebeat/ https://beats-nightlies.s3.amazonaws.com/index.html?prefix=jenkins/filebeat/] | |||
にある純正スタティックリンク版がさっくり動いた。 | |||
filebeat-god はコンパイルした | |||
<syntaxhighlight lang="bash" enclose="div"> | |||
git clone https://github.com/tsg/go-daemon.git | |||
cd go-daemon | |||
make | |||
mv god filebeat-god | |||
</syntaxhighlight> | |||
config ファイル等は deb から流用 | |||
<syntaxhighlight lang="bash" enclose="div"> | |||
curl -L -O https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-5.5.1-amd64.deb | |||
dpkg-deb -x filebeat-5.5.1-amd64.deb ./ | |||
</syntaxhighlight> | |||
== RLIMIT_MEMLOCK == | |||
systemd 配下の場合は /usr/lib/systemd/system/elasticsearch.service | |||
<syntaxhighlight lang="text" enclose="div"> | |||
[service] | |||
LimitMEMLOCK=infinity | |||
</syntaxhighlight> | |||
こっちで対処するのが良いそうだ。 | |||
<syntaxhighlight lang="bash" enclose="div"> | |||
systemctl edit elasticsearch | |||
</syntaxhighlight> | |||
このコマンドで、 | |||
/etc/systemd/system/elasticsearch.service.d/override.conf | |||
ここに、 | |||
<syntaxhighlight lang="text" enclose="div"> | |||
[service] | |||
LimitMEMLOCK=infinity | |||
</syntaxhighlight> | |||
== sigle node / standalone == | |||
<syntaxhighlight lang="text" enclose="div"> | |||
discovery.type: single-node | |||
</syntaxhighlight> | |||
== Elastic Stack 6.0.0 upgrade memo == | |||
"type" がつかえない | |||
https://www.elastic.co/guide/en/elasticsearch/reference/master/removal-of-types.html | |||
statsd が標準プラグインから消えた。 | |||
./bin/logstash-plugin install logstash-output-statsd | |||
kibana の '.kibana' のフォーマット変換が必要 | |||
https://www.elastic.co/guide/en/kibana/6.0/migrating-6.0-index.html | |||
"type" が使えなくなったので "log_type" というカスタムフィールドにかえた。その変更をコツコツした。 | |||
変換後いろいろ確認して、無駄なものを削除した | |||
curl -XGET 'http://127.0.0.1:9200/.kibana/_search/?size=1000&pretty' | |||
curl -XDELETE 'http://127.0.0.1:9200/.kibana/doc/#{_id} | |||
python beaver も 6.0 には対応できてない。 | |||
とりあえず type を送らないようにした。 | |||
<syntaxhighlight lang="diff" enclose="div"> | |||
--- ./beaver/transports/base_transport.py.orig 2017-11-30 10:57:01.546311555 +0900 | |||
+++ ./beaver/transports/base_transport.py 2017-11-24 11:40:34.962587490 +0900 | |||
@@ -36,21 +36,19 @@ | |||
self._logstash_version = beaver_config.get('logstash_version') | |||
if self._logstash_version == 0: | |||
self._fields = { | |||
- 'type': '@type', | |||
'tags': '@tags', | |||
'message': '@message', | |||
'file': '@source_path', | |||
'host': '@source_host', | |||
- 'raw_json_fields': ['@message', '@source', '@source_host', '@source_path', '@tags', '@timestamp', '@type'], | |||
+ 'raw_json_fields': ['@message', '@source', '@source_host', '@source_path', '@tags', '@timestamp'], | |||
} | |||
elif self._logstash_version == 1: | |||
self._fields = { | |||
- 'type': 'type', | |||
'tags': 'tags', | |||
'message': 'message', | |||
'file': 'file', | |||
'host': 'host', | |||
- 'raw_json_fields': ['message', 'host', 'file', 'tags', '@timestamp', 'type'], | |||
+ 'raw_json_fields': ['message', 'host', 'file', 'tags', '@timestamp'], | |||
} | |||
def raw_formatter(data): | |||
@@ -122,7 +120,6 @@ | |||
formatter = self._default_formatter | |||
data = { | |||
- self._fields.get('type'): kwargs.get('type'), | |||
self._fields.get('tags'): kwargs.get('tags'), | |||
'@timestamp': timestamp, | |||
self._fields.get('host'): self._current_host, | |||
</syntaxhighlight> | |||
== Elastic Stack 5.0.0 upgrade memo == | |||
アップグレードは filebeat, logstash, elasticsearch, kibana の順番で行う。 | |||
Java8 が必要。(以下 Ubuntu の場合) | |||
<syntaxhighlight lang="bash" enclose="div"> | |||
sudo add-apt-repository ppa:openjdk-r/ppa | |||
sudo apt-get update | |||
sudo apt-get install openjdk-8-jre openjdk-8-jre-headless | |||
sudo update-alternatives --config java | |||
</syntaxhighlight> | |||
=== repository setting === | |||
[https://www.elastic.co/guide/en/elasticsearch/reference/5.0/deb.html Install Elasticsearch with Debian Package] | |||
<syntaxhighlight lang="bash" enclose="div"> | |||
wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add - | |||
echo "deb https://artifacts.elastic.co/packages/5.x/apt stable main" | sudo tee -a /etc/apt/sources.list.d/elastic-5.x.list | |||
sudo apt-get update | |||
</syntaxhighlight> | |||
:順番に upgrade するので、apt-get upgrade はしない。 | |||
=== filebeat upgrade === | |||
[https://www.elastic.co/guide/en/beats/libbeat/5.0/upgrading.html Upgrading] | |||
[https://www.elastic.co/guide/en/beats/libbeat/5.0/upgrading-1-to-5.html Upgrading from 1.x to 5.x] | |||
*filebeat を停止する。 | |||
*古い設定ファイルを自動更新するスクリプトを起動する。 | |||
<syntaxhighlight lang="bash" enclose="div"> | |||
sudo apt-get install filebeat | |||
cd etc/logstash | |||
sudo /usr/share/filebeat/scripts/migrate_beat_config_1_x_to_5_0.py filebeat.yml | |||
</syntaxhighlight> | |||
*私は filebeat.yml を /etc/logstash に置いているので、/etc/default/filebeat を変更する。 | |||
<syntaxhighlight lang="text" enclose="div"> | |||
DAEMON_ARGS="-c /etc/logstash/filebeat.yml -path.home /usr/share/filebeat -path.config /etc/filebeat -path.data /var/lib/filebeat -path.logs /var/log/filebeat" | |||
</syntaxhighlight> | |||
*filebeat を起動する。 | |||
<syntaxhighlight lang="text" enclose="div"> | |||
ERR State for /var/log/hoge.log should have been dropped, but couldn't as state is not finished. | |||
</syntaxhighlight> | |||
:更新後 filebeat を起動するが、なぜかエラーになる。一旦停止し、再起動すると正常に稼動する。おそらく registry file の変更処理が問題。 | |||
=== logstash upgrade === | |||
[https://www.elastic.co/guide/en/logstash/5.0/upgrading-logstash.html Upgrading Logstash] | |||
*logstash を停止する。 | |||
<syntaxhighlight lang="bash" enclose="div"> | |||
sudo apt-get install logstash | |||
</syntaxhighlight> | |||
*起動スクリプトの args に追加 | |||
<syntaxhighlight lang="text" enclose="div"> | |||
--path.settings /etc/logstash | |||
</syntaxhighlight> | |||
複数個 logstash を起動する場合は、logfile の名前が衝突する。 (logstash-plain.log) | |||
: /etc/logstash/log4j2.properties でなんとかするか、もしくは log directory を変える。 | |||
::Monitor API 用のポートも明示的に指定しているほうがよい。 --http.port 9600 | |||
*ruby filter の記述を変更する。 | |||
[https://www.elastic.co/guide/en/logstash/5.0/breaking-changes.html#_ruby_filter_and_custom_plugin_developers Ruby Filter and Custom Plugin Developers] | |||
旧: | |||
<syntaxhighlight lang="javascript" enclose="div"> | |||
filter { | |||
ruby { | |||
codec => "event['name'] = 'Logstash'" | |||
} | |||
ruby { | |||
codec => "event['product']['version'] = event['major'] + '.' + event['minor']" | |||
} | |||
} | |||
</syntaxhighlight> | |||
新: | |||
<syntaxhighlight lang="javascript" enclose="div"> | |||
filter { | |||
ruby { | |||
codec => "event.set('name', 'Logstash')" | |||
} | |||
ruby { | |||
codec => "event.set('[product][version]', event.get('major') + '.' + event.get('minor'))" | |||
} | |||
} | |||
</syntaxhighlight> | |||
:カスタムプラグインをつかっている場合も同様の変更が必要。 | |||
*Java系のオプションは /etc/logstash/jvm.options に記述する。 | |||
*logstashを起動する。 | |||
=== elasticsearch upgrade === | |||
[https://www.elastic.co/guide/en/elasticsearch/reference/5.0/setup-upgrade.html Upgrading Elasticsearch] | |||
:'''慎重に。バックアップをとること。一度更新されるとロールバックできないので、完全バックアップをとる事。''' | |||
*更新前の elasticsearch で [https://github.com/elastic/elasticsearch-migration/ Elasticsearch Migration Plugin] を実行する。 | |||
:指示にしたがい作業する。 | |||
::kibana の index が reindex されたら kibana4 からは名前が変わってしまうので、kibana4 で確認作業をする場合は kibana の設定を変える。 | |||
:::elasticsearch 5.x と kibana5 になると alias が機能するので、元の名前に戻して大丈夫。 | |||
::logstash の elasticsearch-template を 5.x 用に変える。(かなり変わっているので、よく調査すること) | |||
:::.raw が .keyword になる。.raw を使いたければ template を変更すること。 | |||
::logstash を停止して、elasticsearch 更新後起動する。 | |||
*elasticsearch を停止する。 | |||
<syntaxhighlight lang="bash" enclose="div"> | |||
sudo apt-get install elasticsearch | |||
</syntaxhighlight> | |||
*Java系のオプションは /etc/elasticsearch/jvm.options に記述する。 | |||
*elasticsearch を起動する。 | |||
*elasticsearch_deprecation.log にこんなのがでたら | |||
<syntaxhighlight lang="text" enclose="div"> | |||
ES has detected the [path.data] folder using the cluster name as a folder [/xxx], Elasticsearch 6.0 will not allow the cluster name as a folder within the data path | |||
</syntaxhighlight> | |||
[https://www.elastic.co/guide/en/elasticsearch/reference/master/breaking_60_cluster_changes.html#_cluster_name_no_longer_allowed_in_path_data Breaking changes in 6.0 » Cluster changes] | |||
:DATA_DIR をクラスタネーム付きのパスまでにしてあげる(ex: /foo -> /foo/cluster_name_bar) | |||
::もちろん /foo/cluster_name_bar 直下には nodes ディレクトリのみがある。 | |||
*ingest node | |||
[https://www.elastic.co/blog/new-way-to-ingest-part-1 A New Way To Ingest - Part 1] | |||
[https://www.elastic.co/blog/new-way-to-ingest-part-2 A New Way To Ingest - Part 2] | |||
:Logstash の filter 機能を Elasticsearch に取り込んだのか...私の場合は不要なので '''node.ingest: false''' | |||
=== kibana upgrade === | |||
[https://www.elastic.co/guide/en/kibana/5.0/upgrade.html Upgrading Kibana] | |||
*kibana を停止する。 | |||
*kibana の設定データをコピーする。 | |||
<syntaxhighlight lang="bash" enclose="div"> | |||
sudo mkdir /etc/kibana | |||
sudo cp /opt/kibana/conf/kibana.yml /etc/kibana/ | |||
</syntaxhighlight> | |||
*kibana をインストールする。 | |||
<syntaxhighlight lang="bash" enclose="div"> | |||
sudo apt-get install kibana | |||
</syntaxhighlight> | |||
*kibana を起動する。 | |||
.raw が .keyword になっているので注意。Object の変更が必要。 | |||
:これは logstash の elasticsearch template の変更による。 | |||
::.raw を使い続けたければ、template を変更する事。(私は もともと .raw を使わない template にしていたが、今回は .keyword を使って見る事にした) | |||
elasticsearch の elasticsearch_deprecation.log にメッセージ出まくり。 | |||
<syntaxhighlight lang="text" enclose="div"> | |||
Deprecated field [type] used, replaced by [match_phrase and match_phrase_prefix query] | |||
</syntaxhighlight> | |||
:github issue や discuss.elastic.co を漁り中だが見つからない。 | |||
::おそらく query を | |||
<syntaxhighlight lang="javascript" enclose="div"> | |||
{ | |||
"query": { | |||
"match": { | |||
"foo": { | |||
"query": "bar", | |||
"type": "phrase" | |||
} | |||
} | |||
} | |||
} | |||
</syntaxhighlight> | |||
から | |||
<syntaxhighlight lang="javascript" enclose="div"> | |||
{ | |||
"query": { | |||
"match_phrase": { | |||
"foo": "bar" | |||
} | |||
} | |||
} | |||
</syntaxhighlight> | |||
でOK | |||
*/var/log/kibana/kibana.stderr を確認する。 | |||
もし下記のエラーがあれば、 | |||
<syntaxhighlight lang="text" enclose="div"> | |||
FATAL { Error: EACCES: permission denied, open '/usr/share/kibana/optimize/bundles/graph.entry.js' | |||
</syntaxhighlight> | |||
:これは X-Pack のインストールした場合の権限がうまく処理できてないのが理由。(X-Pack を消しても残る) | |||
<syntaxhighlight lang="bash" enclose="div"> | |||
cd /usr/share/kibana/optimize/bundles | |||
sudo chmod g+w * | |||
</syntaxhighlight> | |||
= kibana = | = kibana = | ||
<!-- | |||
kibana 4.3.0 で apache-proxy 環境で動作した。 | kibana 4.3.0 で apache-proxy 環境で動作した。 | ||
:timelion を評価してるので ssh tunneling をつかう運用に変えつつある... | :timelion を評価してるので ssh tunneling をつかう運用に変えつつある... | ||
Line 487: | Line 1,040: | ||
logstash-output-elasticsearch 2.1.2 で配布された elasticsearch-template.json は ".raw" が生成されなかった。2.1.3 以降ですぐに元に戻したが、やはり '''analyzed''' '''not_analyzed''' とか field type の mapping は自分でコントロールする癖をつけたほうが良いと思う。[https://github.com/nxhack/logstash/blob/master/elasticsearch-template.json 自分は ".raw" を付けないように変更した。] | logstash-output-elasticsearch 2.1.2 で配布された elasticsearch-template.json は ".raw" が生成されなかった。2.1.3 以降ですぐに元に戻したが、やはり '''analyzed''' '''not_analyzed''' とか field type の mapping は自分でコントロールする癖をつけたほうが良いと思う。[https://github.com/nxhack/logstash/blob/master/elasticsearch-template.json 自分は ".raw" を付けないように変更した。] | ||
:".raw" がないから kibana でエラー出まくりだったが... | :".raw" がないから kibana でエラー出まくりだったが... | ||
--> | |||
ES 5.0.0 から、かなり mapping が変わったので、一旦様子見にはいる。 ES 2.x の .raw は .keyword | |||
=== filter edit === | === filter edit === | ||
Line 505: | Line 1,061: | ||
===Field が未定義という filter=== | ===Field が未定義という filter=== | ||
:"Discover" で Field をクリックして "Quick Count" ででてくる数字をクリック。そして Invert すればよい。 | :"Discover" で Field をクリックして "Quick Count" ででてくる数字をクリック。そして Invert すればよい。 | ||
::5.x から '*' マークをクリックで Invert でも可能 | |||
<!-- | |||
== kibana 4.5.2 == | |||
deb パッケージに不具合あり。 | |||
インストール前に kibana service を stop しないといけない。 | |||
<syntaxhighlight lang="text" enclose="div"> | |||
# dpkg -i kibana_4.5.2_amd64.deb | |||
(Reading database ... 168492 files and directories currently installed.) | |||
Preparing to replace kibana 4.5.1 (using kibana_4.5.2_amd64.deb) ... | |||
Unpacking replacement kibana ... | |||
userdel: user kibana is currently logged in | |||
dpkg: warning: subprocess old post-removal script returned error exit status 8 | |||
dpkg - trying script from the new package instead ... | |||
userdel: user kibana is currently logged in | |||
dpkg: error processing kibana_4.5.2_amd64.deb (--install): | |||
subprocess new post-removal script returned error exit status 8 | |||
userdel: user kibana is currently logged in | |||
dpkg: error while cleaning up: | |||
subprocess new post-removal script returned error exit status 8 | |||
Processing triggers for ureadahead ... | |||
Errors were encountered while processing: | |||
kibana_4.5.2_amd64.deb | |||
</syntaxhighlight> | |||
権限も怪しそうなので変えておいた。 | |||
<syntaxhighlight lang="bash" enclose="div"> | |||
chown -R kibana: /opt/kibana | |||
</syntaxhighlight> | |||
[https://github.com/elastic/kibana/issues/6729 https://github.com/elastic/kibana/issues/6729] | |||
/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 == | ||
Line 516: | Line 1,136: | ||
== kibana screen shots == | == kibana screen shots == | ||
:Elastic Stack 5.0.0 | |||
[[File:kibana-5.x.png]] | |||
:kibana4 の黒い画面で | :kibana4 の黒い画面で | ||
[[ | [[File:kibana4-black.png]] | ||
:Arduino YUN で計測した気象データを TimeLion で | :Arduino YUN で計測した気象データを TimeLion で | ||
::YUN の AR9331 で python supervisord 配下の beaver から SSH tunnel で logstash broker である redis に送信。 | ::YUN の AR9331 で python supervisord 配下の beaver から SSH tunnel で logstash broker である redis に送信。 | ||
[[ | [[File:timelion.png]] | ||
:kibana 4 で kibana 3 風に | :kibana 4 で kibana 3 風に | ||
[[ | [[File:Kibana4-apache.png]] | ||
:kibana 4 で ssh の攻撃元マップ Heatmap カッコイイ | :kibana 4 で ssh の攻撃元マップ Heatmap カッコイイ | ||
[[ | [[File:Kibana4-sshd-heatmap.png]] | ||
:迷惑メール | :迷惑メール | ||
[[ | [[File:Kibana4-amavis.png]] | ||
<!-- | |||
== メモ == | == メモ == | ||
テスト用途で Kibana index の replica を作りたく無い場合 (Standalone な ES の health status を Green にしたい場合) | テスト用途で Kibana index の replica を作りたく無い場合 (Standalone な ES の health status を Green にしたい場合) | ||
Line 541: | Line 1,165: | ||
kibana 4.4.0 で replica 設定は削除された。 | kibana 4.4.0 で replica 設定は削除された。 | ||
[https://github.com/elastic/kibana/commit/f6c611ba85baa35aad4a6b61232edc26d1cb6deb Don't bother setting the number of index replicas when creating kiban… · elastic/kibana@f6c611b] | [https://github.com/elastic/kibana/commit/f6c611ba85baa35aad4a6b61232edc26d1cb6deb Don't bother setting the number of index replicas when creating kiban… · elastic/kibana@f6c611b] | ||
--> | |||
= Elasticsearch = | = Elasticsearch = | ||
== 構造 == | == 構造 == | ||
http://127.0.0.1:9200/{INDEX}/{TYPE:mapping}/{ID:Document} | curl -XGET 'http://127.0.0.1:9200/{INDEX}/{TYPE:mapping}/{ID:Document}' | ||
http://127.0.0.1:9200/{INDEX}/{TYPE:mapping}/{ID:Document}/_source | curl -XGET 'http://127.0.0.1:9200/{INDEX}/{TYPE:mapping}/{ID:Document}/_source' | ||
http://127.0.0.1:9200/{INDEX}/{TYPE:mapping}/_mapping | curl -XGET 'http://127.0.0.1:9200/{INDEX}/{TYPE:mapping}/_mapping' | ||
http://127.0.0.1:9200/{INDEX}/{TYPE:mapping}/_mapping?pretty | curl -XGET 'http://127.0.0.1:9200/{INDEX}/{TYPE:mapping}/_mapping?pretty' | ||
http://127.0.0.1:9200/ | curl -XGET 'http://127.0.0.1:9200/_search?q=tags:_grokparsefailure' | ||
http://127.0.0.1:9200/ | curl -XGET 'http://127.0.0.1:9200/_cluster/health?pretty' | ||
curl -XGET 'http://127.0.0.1:9200/_template?pretty' | |||
http://127.0.0.1:9200/ | curl -XGET 'http://127.0.0.1:9200/kibana-int/_search?q=*:*&pretty' | ||
curl -XGET 'http://127.0.0.1:9200/kibana-int/_search?q=*:*&size=100&pretty' | |||
curl -XGET 'http://127.0.0.1:9200/kibana-int/_search/?size=100&pretty' | |||
== 設定 == | == 設定 == | ||
Line 591: | Line 1,214: | ||
[https://github.com/elasticsearch/curator elasticsearch-curator] | [https://github.com/elasticsearch/curator elasticsearch-curator] | ||
<syntaxhighlight lang="bash" enclose="div"> | <syntaxhighlight lang="bash" enclose="div"> | ||
/usr/local/bin/curator --host 127.0.0.1 delete indices --older-than 90 --time-unit days --timestring '%Y.%m.%d' | ###/usr/local/bin/curator --host 127.0.0.1 delete indices --older-than 90 --time-unit days --timestring '%Y.%m.%d' | ||
/usr/bin/curator --config /etc/logstash/curator.yml /etc/logstash/curator-delet-indexs.conf --dry-run | |||
</syntaxhighlight> | |||
:curator4 で大幅に書式変わった。 | |||
Disk full で index がロックされた場合 | |||
<syntaxhighlight lang="bash" enclose="div"> | |||
curl -XPUT -H "Content-Type: application/json" http://localhost:9200/_all/_settings -d '{"index.blocks.read_only_allow_delete": null}' | |||
</syntaxhighlight> | </syntaxhighlight> | ||
Line 605: | Line 1,235: | ||
curl -XDELETE 'http://127.0.0.1:9200/logstash-YYYY.MM.DD/sysdig' | curl -XDELETE 'http://127.0.0.1:9200/logstash-YYYY.MM.DD/sysdig' | ||
</syntaxhighlight> | </syntaxhighlight> | ||
X-Pack 削除したら... | |||
curl -XGET 'http://127.0.0.1:9200/_cluster/health?level=shards&pretty' | |||
curl -XDELETE 'http://127.0.0.1:9200/.security' | |||
curl -XDELETE 'http://127.0.0.1:9200/.triggered_watches' | |||
curl -XDELETE 'http://127.0.0.1:9200/.watches' | |||
curl -XDELETE 'http://127.0.0.1:9200/.monitoring-es-6-YYYY.MM.DD' | |||
curl -XDELETE 'http://127.0.0.1:9200/.monitoring-alerts-6' | |||
curl -XDELETE 'http://127.0.0.1:9200/.watcher-history-6-YYYY.MM.DD' | |||
= memo = | = memo = | ||
Line 618: | Line 1,257: | ||
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]*) | 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]*) | ||
</syntaxhighlight> | </syntaxhighlight> | ||
ES 5.x で [https://www.elastic.co/guide/en/elasticsearch/reference/5.0/query-dsl-filtered-query.html filterd query が廃止になった]ので対応した。 | |||
[https://github.com/nxhack/munin-plugins https://github.com/nxhack/munin-plugins] | |||
Logstash monitor API を使った plugin も作った。 | |||
[https://github.com/nxhack/munin-plugin-logstash https://github.com/nxhack/munin-plugin-logstash] | |||
Munin plugin for elasticsearch も Pull Request がマージされた。 | |||
[https://github.com/y-ken/munin-plugin-elasticsearch https://github.com/y-ken/munin-plugin-elasticsearch] | |||
[https://github.com/y-ken/munin-plugin-elasticsearch/commit/389725c05a8c43815e38bc30a81216891cc43720 Merge pull request #14 from nxhack/patch_for_ES_5.0.0 ] |