はじめに
- Logstash を使って Elasticsearch から Elasticsearch へドキュメントを転送する。
Logstash とは
- Logstash はデータ処理エージェントで、データを収集して加工して送信することができる。
- fluentd とかと同じような役割の製品で Elastic 社製。
Logstash 設定
logstash.conf
# ログの読み込み先の設定
input {
# Elasticsearch から読み込む
Elasticsearch {
# 読み込み先のサーバー
hosts => [ "from.example.com" ]
# 読み込み先のインデックス
index => "logstash-*"
# Elasticsearch の Scroll API のタイムアウト時間
# Scroll API はデータを抜け漏れなく取得するための API で、初回リクエスト時に結果を全件スナップショットとして保存しておき、次回以降はそのスナップショットから順次ドキュメントを返していく
# Scroll API への 2 回目以降のリクエストには新たに追加されたドキュメントは反映されないのでリアルタイムの要求ではなく大量のデータを処理する場合などに利用できる
# デフォルトは "1m" で 1 分過ぎたらスナップショットが破棄され新たな検索として扱われる
scroll => "10m"
# メタデータも読み込むかどうかフラグ
docinfo => true
# 読み込みクエリ
query => '{ "query": { "query_string": { "query": "*" } }, "sort": [ "_doc" ] }'
# 実行スケジュール. crontab 形式で指定する.
# これを指定しない場合は 1 度読み込みと書き込みを実行しただけですぐに終了する
schedule => "* * * * *"
}
}
# ログの書き込み先の設定
output {
# Elasticsearch へ書き込む
Elasticsearch {
# 書き込み先サーバー
hosts => [ "to.example.com" ]
# 書き込み先インデックス
# 読み込んだメタデータを使って指定できる
index => "%{[@metadata][_index]}"
# 書き込む際の document_id
# これも読み込んだメタデータを使って指定できる
document_id => "%{[@metadata][_id]}"
}
}
Logstash 実行
- java が入っていれば基本的に logstash ダウンロードして設定ファイル指定して実行するだけ
- RPM とか Docker イメージもあるので詳細は公式を参照
curl https://artifacts.elastic.co/downloads/logstash/logstash-6.2.3.zip -o logstash-6.2.3.zip
unzip logstash-6.2.3.zip
bin/logstash -f logstash.conf