Logstash-internal-architecture
Logstash-内部アーキテクチャ
この章では、Logstashの内部アーキテクチャとさまざまなコンポーネントについて説明します。
Logstashサービスアーキテクチャ
Logstashは、さまざまなサーバーおよびデータソースからのログを処理し、荷送人として動作します。 荷送人はログを収集するために使用され、これらはすべての入力ソースにインストールされます。 Redis、Kafka または RabbitMQ などのブローカーは、インデクサーのデータを保持するバッファーです。フェールオーバーインスタンスとして複数のブローカーが存在する場合があります。
*Lucene* などのインデクサーを使用してログのインデックスを作成し、検索パフォーマンスを向上させてから、出力をElasticsearchまたはその他の出力先に保存します。 出力ストレージのデータは、Kibanaおよびその他の視覚化ソフトウェアで使用できます。
Logstash内部アーキテクチャ
Logstashパイプラインは、3つのコンポーネント Input、Filters および Output で構成されています。 入力部分は、 Apache Tomcat Server のログフォルダーなどの入力データソースを指定してアクセスする役割を果たします。
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"]
}