💬

Dynatraceで特定条件を満たすログを検知・通知する方法

2024/06/03に公開

概要📝

オブザーバビリティであるDynatraceで特定条件を満たすログを検知・通知する方法を記載します

対象読者🔖

  • Dynatraceの初心者
  • よくわからないけど興味がある方

ゴール🔥

下記を理解している状態

  • ログとイベントの使い方
  • 特定条件を満たすログがあったことを検知する方法
  • Alert Plofileの設定方法
  • Problem notificationの設定方法

コスト💰

イベント、ログクエリに対する課金が発生します
詳しくはRate card

関連リンク

How to use DQL queries
Severity level
Alerting profile
Notifications and alerting

前提🏫

下記の状態を想定しています

  • ホストにOneAgentがインストールされている=監視が開始している
  • Settings > Set up log ingestで、自動検知されたログを1つ以上転送している
    Ingest all detected log sourcesを有効化すると、自動検知したすべてのログが転送されます。検証用では問題ないかもしれませんが、ログ取込料金に注意です)

手順👓

ログとイベントでクエリしながら、アラート内容を決定する

Simple modeでぽちぽちフィルタして、Advanced modeに切り替えてDQL内容を見ながら微調整するとやりやすいです
DQL構文の学習はこちら→How to use DQL queries

Log and eventsで、たとえばstatuserrorを選択→クエリを叩く前に、Advanced modeに切り替えます

課金を抑えるため、limit 20を最後の行に追加してクエリ返答を制限 > Run query
filterを追加しても課金には影響せず、limitならば節約が可能とサポートより回答がありました。現時点での知見ですので、課金には十分注意してお使いください。

クエリ結果がアラートしたい内容と一致していればOK
filterの条件=今回はmatchesValue(status, "ERROR")をコピーしておきます
本文中の文字列を検索したい場合は、contentsのような本文を表す箇所に対してフィルタすればよいことになります
触っている感じ、大文字小文字は区別しないようです

特定条件を満たすログの検知を設定

Settings > Log Monitoring > Events extractionを設定
設定例

項目 設定値
Summary test
Log query matchesValue(status, "ERROR")
Title test
Description Detected if log status is ERROR
Event type Custom alert
Allow merge 有効化

matchesValue(status, "ERROR")にあてはまるログを検知して、カスタムアラートを発生させるtestという名前のイベントを作成しています

Event typeは、アラートのSeverityです。詳しくはこちら→Severity level

Allow mergeは下記のように説明されています。

Davis® AIはこのイベントを既存の問題に統合しようとするが、そうでない場合は常に新しい問題が作成される。

Dynatraceでは、Problem画面で検知された問題が分析されていきます。AIが既存の問題との関連性を発見した場合は、複数のイベントがひとつの問題にマージされます。
ここではあまり考えなくて大丈夫です。

Alerting profileを設定

Alerting profileは検知した問題のグルーピング/フィルタリング機能です。
検知したい問題と通知したい問題は別ですよね。
すべての検知した問題の中から、たとえばあるアプリの開発者だけに通知したい問題をグルーピングできる機能です。
どの問題を通知すべきかを決めるということです。
ドキュメントはこちら→Alerting profile

Settings > Alerting > Problem alerting profiles > Add alerting profileを下記のように設定
設定例

項目 設定値
Name test
Management zone 今回は設定しない
Title test
Severity rules Problem severity level: Custom
Problem send delay in minutes: 0
Filter problems by tag: Inclede all entities
Event filters Filter problems by any event of source: Custom
Operator of the comparison: equals
value: test
Enabled

testという名前のカスタムアラートのイベントを通知するためのAlerting profileです

通知を設定

様々なツールとWebhookに対応している→Notifications and alerting
大きく分類すると、①Email、②チャット、③電話の方法がある
たとえば、下記のような運用が考えられます
・緊急度が低い通知→Email
・できるだけ早い対応が必要な通知→チャット(WebhookによるTeams通知)
・緊急性が高く即時対応が必要→電話(PagerDutyなどと連携が必要)
他にも、JiraやTrelloなどのタスク管理ツールとの連携も提供しています!

Email通知の場合

Email通知

Settings > Integration > Problem notificationsを下記のように設定
設定例

項目 設定値
Notification type Email
Display name email-test
To Toにあたるメールアドレス
CC CCにあたるメールアドレス
BCC CCにあたるメールアドレス
Subject デフォルトの下記でOK
{State} Problem {ProblemID}: {ImpactedEntity}
Body デフォルトの下記でOK
{ProblemDetailsHTML}
Alerting profile test

testというAlerting profileの条件を満たすものを、Email通知する設定です
Send test notificationでテスト通知が可能です

Teams通知の場合

Teams通知

TeamsチャネルにWebhookを作成
下記に従って、通知したいチャネルにWebhookを作成
Teams - Webhook作成方法
Webhook URLをコピーしておきます

Settings > Integration > Problem notificationsを下記のように設定
設定例
表に記載されていない項目はデフォルト値または任意の値でOK

項目 設定値
Notification type Custom Integration
Display name teams-test
Webook URL 通知したいチャネルのWebhook URL
(先ほどコピーしたもの)
Custom payload 表外に記載します
Alerting profile test
Custom payloadの内容
{
"title":"{ProblemTitle}",
"text":"{ProblemDetailsHTML}",
"themeColor":"EA4300"
}

testというAlerting profileの条件を満たすものを、Email通知する設定です
Send test notificationでテスト通知が可能です

さいごに📝

何か気づきがあった場合は、更新いたします

Discussion