私たちはELKとExchangeと友達です。パート1





ExchangeとELKを接続した経験を共有したい一連の記事を始めています。このスタックは、大量のログを処理するのに役立ち、通常のロギングツールがどのサイズで私たちを助けることを拒否するのか不思議に思うことはありません。ログを使って新しい戦闘機について知りましょう。



Exchangeには、かなり広範なロギングシステムがあります。最も人気のあるログは追跡ログであり、郵便組織内の特定の手紙の段階的な通過を追跡します。システム内の新しい各ユーザーセッションを追跡するWebサーバーログ、およびセッションの粒度が異なる特定のWebアプリケーションのログ。Exchangeは、生のsmtp、imap、およびpop3プロトコルも保存できます。



ログを操作するために使用できるツール:



  • 標準のGet-MessageTrackingLogコマンドレット:追跡ログの処理に便利です。
  • logparserユーティリティ:ロギングに疑似SQL検索言語を使用し、かなり高速に動作します。
  • 外部SQLサーバー:特に特定の場合(たとえば、長期間にわたるデータの分析)。


これはすべて、サーバーが2つあり、処理されたログの量が数十ギガバイトまたは数百ギガバイトで測定されている場合にうまく機能します。しかし、サーバーが数十あり、ログのサイズがテラバイトを超えた場合はどうなるでしょうか。このスキームはおそらく崩壊し始めています。



そして、これが何が起こるかです:Get-MessageTrackingLogはタイムアウトのために落ち始め、logparserは32ビットアーキテクチャの上限に達し、SQLサーバーへのアップロードは、サービスからの複数行の例外を消化することなく、最も不適当な瞬間に中断します。



ここで、新しいプレーヤーが登場します。ELKスタックは、合理的な時間内に大量のログを処理し、許容できるリソースを消費するように特別に調整されています。



最初のパートでは、ELKスタックの一部であるfilebeatを接続する方法について詳しく説明します。-さまざまなアプリケーションがログを書き込む単純なテキストファイルの読み取りと送信を担当します。次の記事では、LogstashコンポーネントとKibanaコンポーネントについて詳しく説明します。



インストール



したがって、filebeatエージェントのファイルアーカイブはこのサイトからダウンロードできます



zipファイルの内容を解凍するだけでインストールが完了します。たとえば、c:\Program Files\filebeat次にinstall-service-filebeat.ps1、キットに付属のPowerShellスクリプトを実行して、filebeatサービスをインストールする必要があります。



これで、構成ファイルのカスタマイズを開始する準備が整いました。



耐障害性



Filebeatは、ログ収集システムへのログの配信を保証します。これは、ログファイルにエントリのレジスタを保持することによって行われます。レジストリには、ログファイルから読み取られたレコードに関する情報が格納され、宛先に配信された特定のレコードがマークされます。



一部のレコードを配信できない場合、filebeatは、受信システムから配信の確認を受信するか、ローテーション中に元のログファイルが削除されるまで、そのレコードを再送信しようとします。



サービスが再起動されると、filebeatはレジストリから最後に読み取られて配信されたレコードに関する情報を読み取り、レジストリ内の情報に基づいてログファイル内のレコードを読み取ります。



これにより、予期しない障害が発生したり、サーバーのメンテナンス操作を実行したりするときに、elastic \ logstashサーバーに送信する必要のあるログに関する情報が失われるリスクを最小限に抑えることができます。



これについて詳しくは、次の段落のドキュメントをご覧ください。Filebeatはファイルの状態をどのように維持し、Filebeatは少なくとも1回の配信をどのように保証しますか?



セットアップ



すべての構成はyml、いくつかのセクションに分割されているフォーマット構成ファイル行われます。Exchangeサーバーからのログの収集に関係するそれらのいくつかを見てみましょう。



ログ処理ユニット



ログ処理ブロックは、次のフィールドで始まります。



filebeat.inputs:


一般的なログ収集ツールを使用します。



- type: log


次に、ステータス(有効)とフォルダへのパスをログで示します。たとえば、IISログの場合、設定は次のようになります。



    enabled: true
    paths:
	- C:\inetpub\logs\LogFiles\W3SVC1\*.log
	- C:\inetpub\logs\LogFiles\W3SVC2\*.log


もう1つの重要な設定は、filebeatが複数行のレコードを読み取る方法です。デフォルトでは、filebeatはログファイルの1行を1つのレコードと見なします。これは、ログでサービスの誤った操作に関連する例外の受信を開始しない限り、うまく機能します。この場合、例外は複数の行にまたがることがあります。したがって、filebeatは、次の行が日付で始まる場合、複数行のレコードを1つとして扱う必要があります。Exchangeでログを記録するための形式は、次のとおりです。ログファイルの新しい各レコードは日付で始まります。構成では、この条件は次のようになります。



multiline:
	pattern: '^[0-9]{4}-[0-9]{2}-[0-9]{2}'
	negate: true
	match: after


送信する投稿にタグを追加するのは理にかなっています。次に例を示します。



  tags: ['IIS', 'ex-srv1']


また、ハッシュ文字で始まる行を処理から除外することを忘れないでください。



  exclude_lines: ['^#']


したがって、ログを読み取るためのブロックは次のようになります。



filebeat.inputs:
- type: log
  enabled: true
  paths:
	- C:\inetpub\logs\LogFiles\W3SVC1\*.log
	- C:\inetpub\logs\LogFiles\W3SVC2\*.log
  multiline:
	pattern: '^[0-9]{4}-[0-9]{2}-[0-9]{2}'
	negate: true
	match: after
  tags: ['IIS', 'ex-srv1']
  exclude_lines: ['^#']


ログ送信ブロック



Filebeatは、ログファイル内の個々のエントリをjsonオブジェクトとして送信します。このオブジェクトでは、ログの特定のエントリが単一のメッセージフィールドに含まれています。どういうわけかこの情報を処理したい場合は、最初にこのフィールドを個別のフィールドに解析する必要があります。これは、たとえばlogstashで実行できます。filebeatからのレコードの受信者になります。これは、filebeat構成ファイルでどのように表示されるかを示しています。



output.logstash:
  hosts: ["logstash1.domain.com:5044"]


複数のサーバーがある場合は、それらのバランシングを有効にできます。filebeatは、リストから最初に使用可能なサーバーにログを送信しませんが、送信されたログを複数のサーバーに分散します。



hosts: ["logstash1.domain.com:5044", "logstash2.domain.com:5044"]
  loadbalance: true 


Filebeatは、送信されたjsonへのログを処理するときに、メッセージフィールドに含まれるログエントリに加えて、一定量のメタデータを追加します。これは、エラスティックに入るドキュメントのサイズに影響します。このメタデータは、送信から選択的に削除できます。これは、プロセッサを使用してプロセッサブロックで実行されますdrop_fieldsたとえば、次のフィールドを除外できます。



processors:
- drop_fields:
	fields: ["agent.ephemeral_id", "agent.hostname", "agent.id", "agent.type", "agent.version", "agent", "ecs.version", "ecs", "input.type", "input", "log.offset", "version"]


除外されたフィールドの選択は、インデックスを作成するためにエラスティック側で使用できるものがあるため、慎重に検討する必要があります。



したがって、ログを送信するためのブロックは次のようになります。



output.logstash:
  hosts: ["logstash1.domain.com:5044", "logstash2.domain.com:5044"]
  loadbalance: true
 
processors:
- drop_fields:
	fields: ["agent.ephemeral_id", "agent.hostname", "agent.id", "agent.type", "agent.version", "agent", "ecs.version", "ecs", "input.type", "input", "log.offset", "version"]


ファイルビートロギング設定



次のログ設定を設定することは理にかなっています。



  • ロギングレベル情報;
  • デフォルトで配置されているファイル(filebeatインストールディレクトリ内のlogsディレクトリ)にログを書き込みます。
  • ログファイル名はfilebeatです。
  • 最後の10個のログファイルを保持します。
  • サイズが1MBに達したら回転を開始します。


最後に、ロギング設定ブロックは次のようになります。



logging.level: info
logging.to_files: true
logging.files:
  name: filebeat
  keepfiles: 10
  rotateeverybytes: 1048576


最終構成



構成を収集しました。これで、次のようになります。



filebeat.inputs:
- type: log
  enabled: true
  paths:
    - C:\inetpub\logs\LogFiles\W3SVC1\*.log
    - C:\inetpub\logs\LogFiles\W3SVC2\*.log
  multiline:
    pattern: '^[0-9]{4}-[0-9]{2}-[0-9]{2}'
    negate: true
    match: after
  tags: ['IIS', 'ex-srv1']
  exclude_lines: ['^#']
 
output.logstash:
  hosts: ["logstash1.domain.com:5044", "logstash2.domain.com:5044"]
  loadbalance: true
 
processors:
- drop_fields:
    fields: ["agent.ephemeral_id", "agent.hostname", "agent.id", "agent.type", "agent.version", "agent", "ecs.version", "ecs", "input.type", "input", "log.offset", "version"]
 
logging.level: info
logging.to_files: true
logging.files:
  name: filebeat
  keepfiles: 10
  rotateeverybytes: 1048576


構成ファイルの形式がymlであることを理解することが重要です。したがって、スペースとマイナス記号を正しく配置することが重要です。



Filebeatは構成ファイルをチェックでき、構文にエラーが含まれている場合は、構文が正しくない行と行の場所を示します。チェックは次のように行われます。



.\filebeat.exe test config


また、filebeatはログレシーバーのネットワーク可用性をチェックできます。チェックは次のように開始されます。



.\filebeat.exe test output


次のパートでは、Exchangeの接続性とLogstashおよびKibanaコンポーネントとの友情について説明します。



便利なリンク






All Articles