FileBeatでSyslogをElasticSearchに転送する


概要

Filebeatを監視対象サーバーにインストールし、SyslogをElasticSearchに転送する。
(FileBeatからLogstashを経由してElasticSearchにログを転送する方法もあるが、今回は直接ElasticSearchに転送する)

FileBeatのSystemModule(Syslog用のモジュール)を使用する。

System moduleの詳細
https://www.elastic.co/guide/en/beats/filebeat/current/filebeat-module-system.html
System moduleの出力フィールド
https://www.elastic.co/guide/en/beats/filebeat/current/exported-fields-system.html

Moduleとは

ログフォーマットの、収集・パース(構文解析)・可視化のテンプレート。

変数を指定することも可能。(ログのパスを変更する等)
https://www.elastic.co/guide/en/beats/filebeat/current/specify-variable-settings.html

Ingest Node

Moduleで定義されたデータ変換/加工はElasticSeearch側のIngest Nodeで処理される。
(LogstashのFilterでやっていたことの一部がElasticSearchでも実行できる)
https://dev.classmethod.jp/server-side/elasticsearch/elasticsearch-ingest-node/
https://speakerdeck.com/elastic/ingest-node-voxxed-luxembourg?slide=14

ElasticSearchでpipelineを確認するには以下をAPIで実行。

GET _ingest/pipeline/*

環境

  • 監視対象サーバー
    • CentOS 7.4
    • Filebeat 7.4.0
  • ElasticSearch
    • Alibaba Cloud Elasticsearch

なお、Amazon Elasticsearch Serviceを使用する場合はこの方法は使えない。(filebeat-ossの使用が必要)

Step1. FlieBeatインストール

yumを利用する方法とrpmをダウンロードしてインストールする方法がある。今回はyumでインストールした。

Repositories for APT and YUM

Step2. filebeat.yml 修正

Filebeatの構成ファイルであるfilebeat.ymlを修正する。

$ vi /etc/filebeat/filebeat.yml

# System moduleを有効化
filebeat.modules:
- module: system

# Output先をElasticSearchに設定
output.elasticsearch:
  hosts: ["XXX:9200"]
  username: "XXX"
  password: "XXX"

# FilebeatのConfig設定
filebeat.config.modules:
  enabled: true
  path: ${path.config}/modules.d/*.yml

# ElasticSearchのIndex名を変更
output.elasticsearch.index: "syslogtest-%{[agent.version]}-%{+yyyy.MM.dd}"
setup.template.name: "syslogtest"
setup.template.pattern: "syslogtest-*"

文法テスト

$ filebeat test config
Config OK

Step3. 初期設定コマンド

このコマンドによりModuleが使用可能になる。

$ filebeat setup -e

Step4. Filebeat起動

# サービスとして起動
service filebeat start

# プロセスとして起動
filebeat -e

Step5. Kibanaで確認

Kibana Indexesの設定を行う。(手順は省略)

ログが届いていることが確認できる。

参考: Moduleの適用時・非適用時のログの比較

Module非適用時

Module適用時

"message"フィールドがパースされていることがわかる。