背景

実際の使用では、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 specified

Logstash は、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 running

Logstash 構成のリロード

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 つは試していません。