背景
実際の使用では、Logstash が相互に競合することなくさまざまなデータ ソースを処理できると同時に、実行中の Logstash インスタンスに影響を与えることなく Logstash 構成の追加、削除、確認、変更を行い、構成の動的な再読み込みを実現できることを期待しています。
Logstash の単一パイプライン構成
単一のパイプラインは単一の構成ファイルを使用し、起動方法は比較的単純です。起動コマンドは次のとおりです。
./bin/logstash -f ./config/logstash.conf -t # これは、設定ファイルの構文が正しいかどうかをテストするためです./bin/logstash -f ./config/logstash.conf # -t パラメータを削除して、logstash 単一ノード サービスを開始します。Logstash マルチパイプライン構成
Logstash で処理する必要がある構成ファイルが N 個ある場合がありますが、ポート インスタンスが 1 つしかない場合、Docker を使用して N 個の複数の Logstash サービスを開いて、異なるポートが異なるファイルを指すようにすることはできないでしょうか。この方法も非常に面倒なので、logstash 設定ファイルで管理できることを望みます。
さまざまなパイプラインを制御します。以下に示すように:

⚠️ 注意 この場所には落とし穴が2つあります 1、
./config/logstash.ymlは、path.configパスを定義してから、パラメーターなしで logstash サービスを開始する必要があります 2、 1 に基づいて、「./bin/logstash -f ./config/logstash.yml」を使用します。特に、logstash 6.0 を起動するときはパラメータを使用しないでくださいと書かれています。これは、記事をコピーして実践したことがあるのかと思います。
マルチパイプラインのコアを使用するか、たとえば、pipelines.yml ファイルを定義します:
- pipeline.id: my_test_log1 path.config: "/data/logstash/config/my_test_log1.conf"- pipeline.id: my_test_log2 path.config: "/data/logstash/config/my_test_log2.conf"- pipeline.id: my_test_log3 path.config: "/data/logstash/config/my_test_log3.conf"上記の 2 つの警告に従って logstash を起動すると、サービスによって次の警告が表示されます.
[WARN ][logstash.config.source.multilocal] Ignoring the 'pipelines.yml' file because modules or command line options are specifiedLogstash は、pipelines.yml ファイルを直接無視します。その場合、そこで定義されている設定は本来の役割を失います。私が遭遇した問題は、logstash サービスは開始されますが、my_test_log1.conf 設定のみが正常にフィルタリングされ、他の 2 つはフィルタリングされるということです。データ ソースが正しいパスに読み取られた場合でも、すべてのファイルのフィルタリングが失敗しました。すべての正しい起動コマンドは次のとおりです:
./bin/logstash --path.settings /data/logstash/config/もちろん、モジュール構成など、マルチ パイプライン操作には他にもさまざまな構成があります。これについては公式ドキュメントを参照してください 保守と再利用が簡単な Logstash パイプラインの作成方法
⚠️ 注意 Pipelines.yml ファイルは、my_test_log1.conf、my_test_log2.conf、my_test_log3.conf と同じディレクトリに存在する必要があります。そうしないと、起動が失敗します。 正常に起動すると、次の情報が出力されます。
[INFO ][logstash.agent ] Pipelines runningLogstash 構成のリロード
logstash データをフィルタリングする場合、構成を追加または変更するときに最も避けたいことは、データ損失のリスクを避けるためにサービスを再起動することです。 (1) my_test_log4.conf ファイルを作成して構成する (2) my_test_log4.conf ファイルを Pipelines.yml に追加します。
- pipeline.id: my_test_log4 path.config: "/data/logstash/config/my_test_log4.conf"(3) logstahs プロセス番号を確認する
ps -aux | grep logstash(4) HUP 信号を logstash に送信して構成をリロードする
kill -HUP $(logstash_pid)実際には、コマンドラインでサービスを開始するときに「—config.reload.automatic」パラメータを追加するなど、動的にロードする他の方法もあります。もう 1 つの方法は、logstash API を介してサービスを提供することです。デフォルトのポート番号は 9600 です。を実行し、コマンドラインで curl - X POST "localhost:9600/_pipeline/pipeline1/reload" を実行してリロードしますが、後者の 2 つは試していません。