Logstashチュートリアル:Logstashを使用して電子メール通知を合理化する

公開: 2022-03-11

エラーや例外を報告するための主要なメカニズムとしてメールを使用するアプリは、最初は常に良い考えのように思われます。 Java開発者として、私たちは「ねえ、何かがうまくいかないときはすぐにわかります!」と考えています。

ただし、ある時点で、エラーの電子メールがあなたから遠ざかっていることに気付くはずであり、電子メールの受信トレイをクリーンアップする必要があります。 404を無視することができ(ほとんどの場合)、新しいサインアップの通知を受け取るのは良いことですが、結局のところ、それは少し忙しすぎたり、時間がかかったりする可能性があります。

遅かれ早かれ、「実用的な」電子メールと無意味な通知を区別することは困難になります。 メールにルールとフィルターを設定することはできますが、これらでも管理できなくなる可能性があります。

logstashチュートリアル

このJavaチュートリアルでは、Logstashを使用して制御を取り戻し、電子メールの受信トレイをクリーンアップして、エラー電子メールを再び管理できるようにする可能性について説明します。すべて、アプリ内の1つの変更は必要ありません。

Logstashのセットアップと入力

Logstashチュートリアルの最初のステップは、システムから受信するすべての電子メールが1つのフォルダーに確実に送信されるようにすることです。 すべての並べ替えと管理を受信トレイから移動しているので、それが1つの大きなフォルダであるかどうかは問題ではありません。 先に進んで、すでに設定したすべてのフォルダーとフィルターを削除し、1つのフォルダーと1つのフィルターに減らします。

すべての電子メールを「[email protected]」から「MyAwesomeAppEmails」フォルダーに移動します。 これらの電子メール用に別のメールボックスがある場合は、さらに簡単になります。

これで、Logstashを設定して、そのフォルダーをポーリングし、IMAPプラグインを使用してメールを解析できます。 バージョン1.4.2は、受信トレイからの電子メールのプルのみをサポートしますが、特定のフォルダーのポーリングを可能にするためにバージョン1.5で適用された比較的単純な修正があります。 別のメールボックスがない場合は、続行する前に、LogstashインスタンスのIMAPプラグインにパッチを適用してください。

 # /etc/logstash/conf.d/01-imap-input.conf input { imap { host => "imap.yourmailserver.com" user => "username" password => "password" secure => true fetch_count => 15 folder => "MyAwesomeAppEmails" # This line will only work if you apply the above mentioned patch } }

これにより、新しい電子メールのチェックが開始され、それらがLogstashイベントに解析されます。

logstashイベント

Logstashフィルター

多くの有用なデータが電子メールからさまざまなイベントプロパティに解析されます。電子メールのタイムスタンプがイベントの「@timestamp」として使用されていることに注意してください。 さらに、ヘッダーだけから、エラーの原因となったホストを特定するなどのことができます。

 filter { mutate { replace => [ "received", "%{[received][-1]}" ] } grok { match => [ "received", "from %{HOSTNAME:hostname} \(%{HOSTNAME:full_hostname} \[%{IP:ip}\]\)" ] } mutate { remove_field => [ "received" ] } }

ただし、これだけではエラーメールを抑えるには不十分です。 もう少し、具体的には次の3つの手順を説明する必要があります。

  • エラーの種類
  • エラーの重大度
  • メールに含まれるエラーの詳細

エラーの名前(例:「WidgetFailed」)と、エラーの重大度「ERROR」を次のようにメールの件名に入力したとします。「ERROR:Widget Failed in / var / www / myapp/foobar」 .php20インチ。

これを使用して、イベントのいくつかのプロパティを設定します。

 filter { grok { match => [ "subject", "%{WORD:severity}: %{DATA:type} in %{PATH:path} %{POSINT:line}" ] } }

Logstashには、ログやその他のさまざまな場所に表示されると予想される、事前定義されたパターンがいくつか付属しています。 これらを使用して、Grokパターンを構築し、読みやすくします。 「WORD」(単一の単語)、「DATA」(貪欲でないキャッチオール)、「PATH」(UnixまたはWindowsのファイルパス)、および「POSINT」(正の整数)を使用しました。 GrokDebuggerを使用してGrokパターンをデバッグすることもできます。 パターンに一致しないメッセージは、「_grokparsefailure」タグでタグ付けされます。

これにより、エラーのタイプ、重大度、ソースファイル、および行が処理されます。基本的には、イベントに関連するすべてのメタデータです。 次に詳細に移ります。

Logstashの微調整

あなたは以前にあなたの電子メールに素敵なヘッダーまたはフッターの署名を追加していて、あなたが礼儀正しい人であるかもしれませんが、今では邪魔になっています。 エラースタックトレースの残りの電子メールを解析できるように、メッセージと末尾の空白からそれを削除しましょう。

 filter { mutate { # gsub takes 3 elements per substitution: field, regular expression and substitution gsub => [ "message", "Your Dev Team", "", "message", "More error details:", "" ] } mutate { strip => "message" } # Split the message into an array of lines, each containing a line of the stacktrace mutate { split => [ "message", "\n" ] } }

「gsub」ミューテーションは標準のRubyRegexpオブジェクトを使用するため、すべてのオプションと機能はlogstashでも使用できます。

ElasticsearchとAmazonSNSを介した出力

Logstash Elasticsearchの出力を使用してこれをElasticsearchインスタンスに適用して、収集しているデータを簡単に検索して定量化できるようにします。

 output { if "_grokparsefailure" not in [tags] { elasticsearch { } } }

「_grokparsefailure」タグをチェックすることにより、正しくGrokされなかったすべてのメッセージを除外します。 件名が指定された件名と一致する電子メールのみがエラー電子メールとして解釈されることを前提としています。 そうでなければ、それは単純で簡単です。

Logstashには多数の出力が付属しているため、SNS出力を使用してこれをさらに強化し、AmazonのSimple Notification Service(SNS)を使用して重大なエラーを通知します。 タイプ「通知可能」のすべてのエラーは通知を生成する必要があると想定します。 EC2インスタンスを使用していない場合は、AWSキーとシークレットを指定する必要があります。

 output { if "notifiable" in [tags] { sns { region => "us-east-1" arn => "arn:aws:sns:us-east-1:1234567890123456:mytopic" access_key_id => "AWS ACCESS_KEY" # Only specify these if you're not on an EC2 instance secret_access_key => "AWS ACCESS SECRET" # Only specify these if you're not on an EC2 instance } } }

エラーに「通知可能」のタグを付けるのはあなた次第です。 これを行うには、エラーの重大度またはエラーのタイプを確認します。

これで、重要なメールを実際にもう一度読むことができ、重要なエラーメールを見逃すことはありません。 エラーが発生する頻度と最後に発生した時期を確認できるため、修正するエラーについて情報に基づいた決定を行うこともできます。 このLogstashチュートリアルで概説されているElasticsearchの優れた検索機能のおかげで、特定のエラーの検索もより簡単かつ迅速になります。