WildflyのログをElastic Stackへ取り込む


はじめに

WildflyのログをElastic Stackへ取り込んで、Kibanaでログの表示する環境を構築してみます。

データの流れは
 wildflyログ→Filebeat→Logstash→Elasticsearch
となります。
Filebeatから直接Elasticsearchという構成できます。

環境

使用した環境は以下のとおり。

  • CentOS 7.5
  • Elasticsearch 7.8
  • Kibana 7.8
  • Filebeat 7.8
  • Logstash 7.8

ElasticStack 7.8 環境構築」で構築した環境を利用しています。

Logstashの設定

/etc/logstash/conf.d以下にwildfly.confファイルを作成します。

# vi /etc/logstash/conf.d/wildfly.conf

input {
  beats {
    port => "5044"
  }
}
filter {
  grok {
    match => { "message" => "%{TIMESTAMP_ISO8601:logdate} %{LOGLEVEL:loglevel}\s+\[%{GREEDYDATA:class}\]\s+\(%{GREEDYDATA:thread}\)\s+%{GREEDYDATA:msgbody}" }
  }
  date {
    match => ["logdate", "YYYY-MM-dd HH:mm:ss,SSS"]
  }
}
output {
  elasticsearch {
    hosts => ["localhost:9200"]
    index => "wildfly-%{+YYYY.MM.dd}" 
  }
}

Elasticsearchへ送る前にLogstashで確認したい場合は以下のように標準出力へ出力するように設定して確認できます。

output {
  stdout { codec => rubydebug }
}
  • /opt/wildfly-20.0.1.Final/standalone/configuration/logging.properties

上のWildflyのログ設定ファイルを見ると次のレイアウトになっていました。

formatter.PATTERN.pattern=%d{yyyy-MM-dd HH:mm:ss,SSS} %-5p [%c] (%t) %s%e%n

そのため、grokは以下のように設定しています。

%{TIMESTAMP_ISO8601:logdate} %{LOGLEVEL:loglevel}\s+\[%{GREEDYDATA:class}\]\s+\(%{GREEDYDATA:thread}\)\s+%{GREEDYDATA:msgbody}

最後に作成したwildfly.confファイルを読み込んでLogstashを起動します。

# /usr/share/logstash/bin/logstash -f /etc/logstash/conf.d/wildfly.conf 

Filebeatの設定

filebeat.ymlを変更し、Wildflyのログファイルを読み込み、Logstashへ送信するように設定します(変更点のみ抜粋)。

# vi /etc/filebeat/filebeat.yml

- type: log
  enabled: true
  paths:
    - /opt/wildfly-20.0.1.Final/standalone/log/server.log
#output.elasticsearch:
  #hosts: ["localhost:9200"] 
output.logstash:
  hosts: ["localhost:5044"]

Filebeatを自動起動するように設定し、起動させます。

# systemctl enable filebeat
# systemctl start filebeat

Kibanaで可視化

Index Patternsにwildfly-*で登録し、[Discover]からログを確認してみると以下のように表示されます。