Logstash-internal-architecture

提供:Dev Guides
移動先:案内検索

Logstash-内部アーキテクチャ

この章では、Logstashの内部アーキテクチャとさまざまなコンポーネントについて説明します。

Logstashサービスアーキテクチャ

Logstashは、さまざまなサーバーおよびデータソースからのログを処理し、荷送人として動作します。 荷送人はログを収集するために使用され、これらはすべての入力ソースにインストールされます。 Redis、Kafka または RabbitMQ などのブローカーは、インデクサーのデータを保持するバッファーです。フェールオーバーインスタンスとして複数のブローカーが存在する場合があります。

*Lucene* などのインデクサーを使用してログのインデックスを作成し、検索パフォーマンスを向上させてから、出力をElasticsearchまたはその他の出力先に保存します。 出力ストレージのデータは、Kibanaおよびその他の視覚化ソフトウェアで使用できます。

Logstashサービスアーキテクチャ

Logstash内部アーキテクチャ

Logstashパイプラインは、3つのコンポーネント Input、Filters および Output で構成されています。 入力部分は、 Apache Tomcat Server のログフォルダーなどの入力データソースを指定してアクセスする役割を果たします。

Logstash内部アーキテクチャ

Logstashパイプラインを説明する例

Logstash構成ファイルには、Logstashの3つのコンポーネントに関する詳細が含まれています。 この場合、 Logstash.conf というファイル名を作成しています。

次の構成では、入力ログ「inlog.log」からデータをキャプチャし、フィルターなしで出力ログ「outlog.log」に書き込みます。

Logstash.conf

Logstash構成ファイルは、入力プラグインを使用して inlog.log ファイルからデータをコピーし、出力プラグインを使用して outlog.log ファイルにログデータをフラッシュします。

input {
   file {
      path => "C:/tpwork/logstash/bin/log/inlog.log"
   }
}
output {
   file {
      path => "C:/tpwork/logstash/bin/log/outlog.log"
   }
}

Logstashを実行する

Logstashは –f オプションを使用して構成ファイルを指定します。

C:\logstash\bin> logstash –f logstash.conf

inlog.log

次のコードブロックは、入力ログデータを示しています。

Hello finddevguides.com

outlog.log

Logstashの出力には、メッセージフィールドの入力データが含まれます。 Logstashは、タイムスタンプ、入力ソースのパス、バージョン、ホスト、タグなどの他のフィールドも出力に追加します。

{
   "path":"C:/tpwork/logstash/bin/log/inlog1.log",
   "@timestamp":"2016-12-13T02:28:38.763Z",
   "@version":"1", "host":"Dell-PC",
   "message":" Hello finddevguides.com", "tags":[]
}

可能な限り、Logstashの出力には、入力ログから提供されたデータ以上のものが含まれています。 出力には、ソースパス、タイムスタンプ、バージョン、ホスト名、タグが含まれます。これらは、エラーなどの追加メッセージを表すために使用されます。

フィルターを使用してデータを処理し、ニーズに合わせてデータを有用にすることができます。 次の例では、フィルターを使用してデータを取得します。これは、GETまたはPOSTなどの動詞の後に Unique Resource Identifier が続くデータのみに出力を制限します。

Logstash.conf

このLogstash構成では、入力データを除外するために grok という名前のフィルターを追加します。 パターンシーケンスの入力ログと一致する入力ログイベントは、エラーのある出力先にのみ到達します。 Logstashは、出力イベントに「_grokparsefailure」という名前のタグを追加しますが、これはgrokフィルターパターンシーケンスと一致しません。

Logstashは、Apacheなどの一般的なサーバーログを解析するための多くの組み込み正規表現パターンを提供します。 ここで使用するパターンは、get、postなどの動詞の後に均一なリソース識別子が続くことを想定しています。

input {
   file {
      path => "C:/tpwork/logstash/bin/log/inlog2.log"
   }
}
filter {
   grok {
      match => {"message" => "%{WORD:verb} %{URIPATHPARAM:uri}"}
   }
}
output {
   file {
      path => "C:/tpwork/logstash/bin/log/outlog2.log"
   }
}

Logstashを実行する

次のコマンドを使用してLogstashを実行できます。

C:\logstash\bin> logstash –f  Logstash.conf

inlog2.log

入力ファイルには、デフォルトの区切り文字、つまり改行区切り文字で区切られた2つのイベントが含まれています。 最初のイベントはGROkで指定されたパターンと一致し、2番目のイベントは一致しません。

GET/finddevguides/Logstash
Input 1234

outlog2.log

grokフィルターパターンと一致しないため、2番目の出力イベントに「_grokparsefailure」タグが含まれていることがわかります。 ユーザーは、出力プラグインで 'if' 条件を使用することにより、これらの一致しないイベントを出力から削除することもできます。

{
   "path":"C:/tpwork/logstash/bin/log/inlog2.log",
   "@timestamp":"2016-12-13T02:47:10.352Z","@version":"1","host":"Dell-PC","verb":"GET",
   "message":"GET/finddevguides/logstash", "uri":"/finddevguides/logstash", "tags":[]
}
{
   "path":"C:/tpwork/logstash/bin/log/inlog2.log",
   "@timestamp":"2016-12-13T02:48:12.418Z", "@version":"1", "host":"Dell-PC",
   "message":"t 1234\r", "tags":["_grokparsefailure"]
}