ELKスタック統合: Logstash、Elasticsearch、Kibanaの同期
Logstash、Elasticsearch、Kibanaをパイプライン、マッピング、インデックス名、TLS、データビューで整合させます。
ELKスタック統合:Logstash、Elasticsearch、Kibanaの同期
Logstash、Elasticsearch、Kibanaの同期が取れていないと、ログが消失したり、ダッシュボードが空に見えたり、フィールドの型が間違って表示されたりします。ELKスタック統合とは、3つのサービスを起動すること以上に、インデックス名、マッピング、タイムスタンプ、認証情報、データビューがすべて一致していることを確認することです。
このガイドでは、実用的なログパイプラインについて説明します。Logstashがイベントを受信し、解析し、Elasticsearchに送信し、Kibanaが結果のインデックスまたはデータストリームを読み取ります。例では、従来のLogstashパイプライン構文と、Kibana Dev Toolsから実行できるElasticsearch APIを使用します。
データフローの理解
スタックを通して1つのイベントを追跡します。
- Logstash がBeats、TCP、syslog、ファイル、キュー、またはその他の入力からデータを受信します。
- Logstashフィルター がフィールドを解析、エンリッチ、リネーム、正規化します。
- Elasticsearch がテンプレート、マッピング、ライフサイクルポリシーを使用してイベントをインデックス化します。
- Kibana がデータビューを通じてElasticsearchにクエリを実行し、Discover、ダッシュボード、Lens、またはアラートにイベントを表示します。
ほとんどの統合バグは境界で発生します。Logstashが接続できない、Elasticsearchがドキュメントを拒否する、またはKibanaが間違ったデータビューや時間範囲を参照しているなどです。
クリーンなデータフローのためのLogstash設定
Logstashパイプラインには、input、filter、outputの3つの主要ブロックがあります。各ブロックはシンプルでテスト可能に保ちます。
入力プラグイン
一般的な入力プラグインは次のとおりです。
beats: Filebeat、Metricbeat、その他のBeatsからイベントを受信します。tcp/udp: ネットワークソケットを介してイベントを受信します。file: ローカルファイルを読み取ります。これは小規模なデプロイやテストに便利ですが、分散した本番ホストには通常エージェントの方が適しています。syslog: syslogメッセージを受信します。
TLSを使用したBeats入力の例:
input {
beats {
port => 5044
ssl_enabled => true
ssl_certificate => "/etc/pki/tls/certs/logstash.crt"
ssl_key => "/etc/pki/tls/private/logstash.key"
}
}
ポートが開いていること、証明書がクライアントの接続方法と一致していること、オプション名がインストールされているプラグインバージョンと一致していることを確認してください。最近のBeats入力プラグインバージョンでは ssl_enabled を使用します。
フィルタープラグイン
フィルターは、生のイベントを有用なフィールドに変換します。Logstashはフィルターを順次実行するため、順序が重要です。
filter {
grok {
match => { "message" => "%{COMBINEDAPACHELOG}" }
}
date {
match => [ "timestamp", "dd/MMM/yyyy:HH:mm:ss Z" ]
}
mutate {
remove_field => [ "message" ]
}
}
非構造化テキストには grok、@timestamp を設定するには date、フィールドのクリーンアップには mutate、IPベースの位置情報エンリッチメントが必要な場合は geoip を使用します。本番環境に導入する前に、実際のログ行に対してgrokパターンをテストしてください。小さな解析ミスで、何千ものイベントがフィールド欠落のままElasticsearchに送信される可能性があります。
出力プラグイン
ELKスタックの場合、Elasticsearch出力が通常の宛先です。
output {
elasticsearch {
hosts => ["https://elasticsearch-node1:9200", "https://elasticsearch-node2:9200"]
index => "my-logs-%{+YYYY.MM.dd}"
user => "logstash_writer"
password => "${LOGSTASH_ES_PASSWORD}"
ssl_enabled => true
cacert => "/etc/logstash/certs/http_ca.crt"
}
}
index の値は、ElasticsearchテンプレートとKibanaデータビューとの契約です。Logstashが my-logs-2026.05.23 に書き込む場合、テンプレートとデータビューは my-logs-* と一致する必要があります。
大規模な環境では、手動管理の日次インデックスではなく、データストリームとインデックスライフサイクル管理を検討してください。データストリームを使用する場合は、データストリームと従来のインデックスオプションを混在させるのではなく、data_stream 設定に関するElasticの現在のLogstash出力ガイダンスに従ってください。
Elasticsearchテンプレートとマッピング
Elasticsearchは、ドキュメントが到着する前に一貫したマッピングを必要とします。そうしないと、最初のドキュメントがフィールドタイプを設定し、後続のイベントで問題が発生する可能性があります。最初に "200" として到着したステータスコードが、数値ではなくテキストやキーワードになる可能性があります。
構成可能なインデックステンプレートの例:
PUT _index_template/my_log_template
{
"index_patterns": ["my-logs-*"],
"template": {
"settings": {
"number_of_shards": 1,
"number_of_replicas": 1
},
"mappings": {
"properties": {
"@timestamp": {"type": "date"},
"message": {"type": "text"},
"host.name": {"type": "keyword"},
"log.level": {"type": "keyword"},
"http.response.status_code": {"type": "integer"}
}
}
}
}
完全一致と集約には keyword、全文検索には text、メトリクスとステータスコードには数値型、時間フィールドには date を使用します。シャード数を増やす測定された理由がない限り、シャード数は控えめに保ちます。小さなシャードが多すぎると、クラスタのパフォーマンスに悪影響を与える可能性があります。
Kibanaデータビュー
Kibanaの現在のUIはデータビューを使用します。古いバージョンではインデックスパターンと呼ばれていました。Elasticsearchが実際に持っているインデックス名またはデータストリームと一致するデータビューを作成します。
典型的な設定:
- スタック管理 -> Kibana -> データビュー に移動します。
my-logs-*などのデータビューを作成します。- 時間フィールドとして
@timestampを選択します。 - Discoverを開き、テスト中は時間ピッカーを広げます。
Discoverが空の場合、Logstashが失敗したと想定しないでください。時間範囲、データビューパターン、@timestamp が正しく解析されたかどうかを確認してください。
一般的な統合問題のトラブルシューティング
データがKibanaに表示されない
各ホップを確認します:
GET _cat/indices/my-logs-*?v
GET my-logs-*/_search?size=1&sort=@timestamp:desc
次に、以下を確認します。
- Logstashログの接続、認証、TLS、マッピングエラー。
- Elasticsearchログの拒否されたドキュメントとセキュリティ障害。
- Kibanaデータビューパターンと選択された時間範囲。
- イベントのタイムスタンプが未来、過去、または欠落していないか。
ドキュメントがElasticsearchによって拒否される
マッピングの競合はよくあります。たとえば、あるイベントが http.response.status_code を 200 として送信し、別のイベントが "OK" として送信する場合です。Elasticsearchは両方を integer フィールドに格納できません。
フィールドが一貫して型付けされるようにLogstashフィルターを修正するか、不良イベントをレビュー用に別のインデックスにルーティングします。不良ドキュメントを作成するパイプラインを修正せずに、インデックスを削除して再作成し続けないでください。
LogstashのCPU使用率が高すぎる
負荷の高いgrokパターン、高いイベントボリューム、大きなマルチラインイベントにより、LogstashのCPUが急上昇する可能性があります。まず、どのパイプラインがビジーかを測定し、パターンを簡素化し、正規表現をアンカーし、運用が容易な場合は単純な解析をBeatsまたはElasticsearchのインジェストパイプラインに移動します。
Kibanaクエリが遅い
遅いダッシュボードは、多くの場合、広い時間範囲、高カーディナリティの集約、シャードが多すぎる、またはKibanaが keyword を必要とする場合にフィールドが text としてマッピングされていることが原因です。より狭いダッシュボードのデフォルト、ILMロールオーバー、および可視化に一致するフィールドマッピングを使用します。
まとめ
ELKスタック統合を3つのレイヤー間の契約として扱います。Logstashは予測可能なフィールドを出力し、Elasticsearchはそれらを正しくマッピングして保存し、Kibanaは正しい時間範囲で正しいデータビューにクエリを実行する必要があります。何かが壊れた場合は、1つのサンプルイベントを入力からインデックス、ダッシュボードまで追跡します。