Logstash cheat sheet: Difference between revisions

 
(335 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 2.3.5], [https://www.elastic.co/downloads/logstash Logstash 2.3.4], [https://www.elastic.co/downloads/beats/filebeat Filebeat 1.2.3], [https://www.elastic.co/downloads/kibana Kibana 4.5.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) で実現する。
: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 23: Line 164:
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 29: 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 93: 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 も可
Line 118: 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 ######################################
######################## Filebeat Configuration ############################
filebeat:
  # List of prospectors to fetch data.
  prospectors:
    # Each - is a prospector. Below are the prospector specific configurations
    -
      paths:
        - /var/log/syslog
        - /var/log/mail.log
        - /var/log/auth.log
      input_type: log
      document_type: syslog
      fields_under_root: true


    -
#=========================== Filebeat prospectors =============================
      paths:
        - /var/log/apache2/access.log
      input_type: log
      document_type: apache
      fields_under_root: true


    -
filebeat.inputs:
      paths:
#filebeat.prospectors:
        - /var/log/apache2/other_vhosts_access.log
      input_type: log
      document_type: apache-other-vhost
      fields_under_root: true


    -
- type: log
      paths:
  paths:
        - /var/log/apache2/error.log
    - /var/log/syslog
      input_type: log
    - /var/log/mail.log
      document_type: apache-error
    - /var/log/auth.log
      fields_under_root: true
  fields:
    log_type: syslog
  fields_under_root: true


    -
- type: log
      paths:
  paths:
        - /var/log/dpkg.log
    /var/log/apache2/access.log
      input_type: log
  fields:
      document_type: dpkg
    log_type: apache
      fields_under_root: true
  fields_under_root: true


   # General filebeat configuration options
- type: log
   #
   paths:
  # Event count spool threshold - forces network flush if exceeded
    /var/log/apache2/other_vhosts_access.log
   #spool_size: 2048
   fields:
    log_type: apache-other-vhost
   fields_under_root: true


   # Defines how often the spooler is flushed. After idle_timeout the spooler is
- type: log
   # Flush even though spool_size is not reached.
   paths:
   #idle_timeout: 5s
    /var/log/apache2/error.log
   fields:
    log_type: apache-error
   fields_under_root: true


   # Name of the registry file. Per default it is put in the current working
- type: log
   # directory. In case the working directory is changed after when running
   paths:
  # filebeat again, indexing starts from the beginning again.
    /var/log/varnish/varnishncsa.log
   registry_file: /var/lib/filebeat/registry
   fields:
    log_type: varnish
   fields_under_root: true


  # Full Path to directory with additional prospector configuration files. Each file must end with .yml
- type: log
   # These config files must have the full filebeat config part inside, but only
   paths:
  # the prospector part is processed. All global options like spool_size are ignored.
    /var/log/dpkg.log
   # The config_dir MUST point to a different directory then where the main filebeat config file is in.
   fields:
   #config_dir:
    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 ============================
############################# Libbeat Config ##################################
# Base config file used by all other beats for using libbeat features


############################# Output ##########################################
filebeat.registry_file: /var/lib/filebeat/registry


# Configure what outputs to use when sending the data collected by the beat.
#================================ Outputs ======================================
# Multiple outputs may be used.
output:
  ### Logstash as output
  logstash:
    # The Logstash hosts
    hosts: ["localhost:5044"]


    # Number of workers per Logstash host.
#----------------------------- Logstash output ---------------------------------
    #worker: 1
output.logstash:
  # The Logstash hosts
  hosts: ["localhost:5044"]


    # Set gzip compression level.
  # Optional SSL. By default is off.
    #compression_level: 3
  # List of root certificates for HTTPS server verifications
  ssl.certificate_authorities: ["/etc/logstash/logstash-forwarder.crt"]


    # Optional load balance the events between the Logstash hosts
  # Certificate for TLS client authentication
    #loadbalance: true
  #ssl.certificate: "/etc/logstash/logstash-forwarder.crt"


    # Optional index name. The default index name depends on the each beat.
  # Client Certificate Key
    # For Packetbeat, the default is set to packetbeat, for Topbeat
  #ssl.key: "/etc/logstash/logstash-forwarder.key"
    # top topbeat and for Filebeat to filebeat.
    #index: filebeat


    # Optional TLS. By default is off.
  # Configure SSL verification mode. If `none` is configured, all server hosts
    tls:
  # and certificates will be accepted. In this mode, SSL based connections are
      # List of root certificates for HTTPS server verifications
  # susceptible to man-in-the-middle attacks. Use only for testing. Default is
      certificate_authorities: ["/etc/logstash/logstash-forwarder.crt"]
  # `full`.
  #ssl.verification_mode: full
  ssl.verification_mode: none


      # Certificate for TLS client authentication
#================================ Logging ======================================
      #certificate: "/etc/logstash/logstash-forwarder.crt"
# 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,
      # Client Certificate Key
# under all other system per default to syslog.
      #certificate_key: "/etc/logstash/logstash-forwarder.key"
 
      # Controls whether the client verifies server certificates and host name.
      # If insecure is set to true, all server host names and certificates will be
      # accepted. In this mode TLS based connections are susceptible to
      # man-in-the-middle attacks. Use only for testing.
      #insecure: true
 
      # Configure cipher suites to be used for TLS connections
      #cipher_suites: []


      # Configure curve types for ECDHE based cipher suites
# Sets log level. The default log level is info.
      #curve_types: []
# 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: [ ]


############################# Shipper #########################################
# Send all logging output to syslog. The default is false.
#logging.to_syslog: true
logging.to_syslog: false


shipper:
# If enabled, filebeat periodically logs its internal metrics that have changed
  # The name of the shipper that publishes the network data. It can be used to group
# in the last period. For each metric that changed, the delta from the value at
  # all the transactions sent by a single shipper in the web interface.
# the beginning of the period is logged. Also, the total values for
  # If this options is not defined, the hostname is used.
# all non-zero internal metrics are logged on shutdown. The default is true.
  #name:
#logging.metrics.enabled: true


  # The tags of the shipper are included in their own field with each
# The period after which to log the internal metrics. The default is 30s.
  # transaction published. Tags make it easy to group servers by different
#logging.metrics.period: 30s
  # logical properties.
  #tags: ["service-X", "web-tier"]


  # Uncomment the following if you want to ignore transactions created
# Logging to rotating files files. Set logging.to_files to false to disable logging to
   # by the server on which the shipper is installed. This option is useful
# files.
   # to remove duplicates if shippers are installed on multiple servers.
logging.to_files: true
   #ignore_outgoing: 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


   # How often (in seconds) shippers are publishing their IPs to the topology map.
   # The name of the files where the logs are written to.
   # The default is 10 seconds.
   #name: filebeat
   #refresh_topology_freq: 10
   name: filebeat.log


   # Expiration time (in seconds) of the IPs published by a shipper to the topology map.
   # Configure log file size limit. If limit is reached, log file will be
   # All the IPs will be deleted afterwards. Note, that the value must be higher than
   # automatically rotated
   # refresh_topology_freq. The default is 15 seconds.
   #rotateeverybytes: 10485760 # = 10MB
   #topology_expire: 15
   rotateeverybytes: 10485760 # = 10MB


   # Configure local GeoIP database support.
   # Number of rotated log files to keep. Oldest files will be deleted first.
  # If no paths are not configured geoip is disabled.
   #keepfiles: 7
   #geoip:
  keepfiles: 7
    #paths:
    #  - "/usr/share/GeoIP/GeoLiteCity.dat"
    #  - "/usr/local/var/GeoIP/GeoLiteCity.dat"


  # 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 #########################################
#logging.json: false
 
# There are three options for the log ouput: syslog, file, stderr.
# Under Windos systems, the log files are per default sent to the file output,
# under all other system per default to syslog.
logging:
 
  # Send all logging output to syslog. On Windows default is false, otherwise
  # default is true.
  #to_syslog: true
  to_syslog: false
 
  # Write all logging output to files. Beats automatically rotate files if rotateeverybytes
  # limit is reached.
  #to_files: false
  to_files: true
 
  # To enable logging to files, to_files option has to be set to true
  files:
    # The directory where the log files will written to.
    #path: /var/log/mybeat
    path: /var/log/filebeat
 
    # The name of the files where the logs are written to.
    #name: mybeat
    name: filebeat.log
 
    # Configure log file size limit. If limit is reached, log file will be
    # automatically rotated
    rotateeverybytes: 10485760 # = 10MB
 
    # Number of rotated log files to keep. Oldest files will be deleted first.
    #keepfiles: 7
    keepfiles: 7
 
  # Enable debug output for selected components. To enable all selectors use ["*"]
  # Other available selectors are beat, publish, service
  # Multiple selectors can be chained.
  #selectors: [ ]
 
  # Sets log level. The default log level is error.
  # Available log levels are: critical, error, warning, info, debug
  #level: error
  level: info
</syntaxhighlight>
</syntaxhighlight>


== メンテナンス ==
== メンテナンス ==
<syntaxhighlight lang="bash">
<syntaxhighlight lang="bash">
cd /opt/logstash
/usr/share/logstash/bin/logstash-plugin list
./bin/logstash-plugin list
/usr/share/logstash/bin/logstash-plugin list --verbose
./bin/logstash-plugin list --verbose
/usr/share/logstash/bin/logstash-plugin update
./bin/logstash-plugin update
</syntaxhighlight>
</syntaxhighlight>


===plugin version 指定の方法===
===plugin version 指定の方法===
<syntaxhighlight lang="bash">
<syntaxhighlight lang="bash">
cd /opt/logstash
/usr/share/logstash/bin/logstash-plugin install --version=3.1.1 logstash-input-redis
./bin/logstash-plugin install --version=2.0.2 logstash-input-redis
</syntaxhighlight>
</syntaxhighlight>


Line 346: Line 444:


*apache
*apache
  [https://github.com/logstash-plugins/logstash-patterns-core/blob/master/patterns/grok-patterns#L96 grok-patterns の 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 358: 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 372: Line 473:


== 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 379: 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 384: 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 413: 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 442: Line 562:
Logstash 5.0 でメトリックスが LS 自体からとれるようになるらしい。
Logstash 5.0 でメトリックスが LS 自体からとれるようになるらしい。
:それはでは JMX うごかすw
:それはでは 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 ==
== LS 2.3.1 geoip issue ==
Line 470: Line 660:
  [https://github.com/logstash-plugins/logstash-output-elasticsearch/commit/4abd353ff7b058f8142fe2d4ee2dd06408d0aab1 Fix template for 5.0]
  [https://github.com/logstash-plugins/logstash-output-elasticsearch/commit/4abd353ff7b058f8142fe2d4ee2dd06408d0aab1 Fix template for 5.0]


<!--
== redis version ==
== redis version ==
logstash-input-redis 2.0.3 でとうとう redis 2.2 がうごかなくなった。
logstash-input-redis 2.0.3 でとうとう redis 2.2 がうごかなくなった。
Line 476: Line 667:


これは Lua EVAL 機能を使い始めたかららしい(ストアドプロシージャみないなものかな)。ppa の redis 3.0 に上げた。
これは 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 523: 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 541: Line 1,061:
===Field が未定義という filter===
===Field が未定義という filter===
:"Discover" で Field をクリックして "Quick Count" ででてくる数字をクリック。そして Invert すればよい。
:"Discover" で Field をクリックして "Quick Count" ででてくる数字をクリック。そして Invert すればよい。
::5.x から '*' マークをクリックで Invert でも可能


<!--
== kibana 4.5.2 ==
== kibana 4.5.2 ==
deb パッケージに不具合あり。
deb パッケージに不具合あり。
Line 573: Line 1,095:


/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 ==
Line 584: 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]]
[[File:kibana4-black.png]]
Line 600: Line 1,155:
[[File:Kibana4-amavis.png]]
[[File:Kibana4-amavis.png]]


<!--
== メモ ==
== メモ ==
テスト用途で Kibana index の replica を作りたく無い場合 (Standalone な ES の health status を Green にしたい場合)
テスト用途で Kibana index の replica を作りたく無い場合 (Standalone な ES の health status を Green にしたい場合)
Line 609: 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/_search?q=tags:_grokparsefailure


  http://127.0.0.1:9200/_cluster/health?pretty
  curl -XGET 'http://127.0.0.1:9200/_search?q=tags:_grokparsefailure'
http://127.0.0.1:9200/_template?pretty


  http://127.0.0.1:9200/kibana-int/_search?q=*:*&pretty
  curl -XGET 'http://127.0.0.1:9200/_cluster/health?pretty'
  http://127.0.0.1:9200/kibana-int/_search?q=*:*&size=100&pretty
  curl -XGET 'http://127.0.0.1:9200/_template?pretty'
http://127.0.0.1:9200/kibana-int/_search/?size=100&pretty


  http://127.0.0.1:9200/_nodes?clear&all&pretty
  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 659: 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 673: 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 686: 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 ]