図解で、Datadogのログ・キーワード監視（アラート設定手順）

# 図解で、Datadogのログ・キーワード監視（アラート設定手順）

ログファイルに出力されたテキストのうち、「特定の文字列」を見つけたらメールで通知する設定と検査の手順を検証しました。

### シナリオ
ゲーム用サーバーで動いている保守用アプリにログインしたら「<ユーザー名> logged in xxx」というテキストログが出力されます。保守アプリは２個［App1とApp2］があり、重要な［App2］にログインしたとき時だけユーザー名をアラート通知します。つまりログキーワードは［logged in］でありメールで通知する情報は［ユーザー名］とします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/189936/4ba6d5b2-c437-f471-2013-ad758829f749.png)

（参考）Datadog は AWS, Azure など様々なクラウドにAPIアクセスできるインテグレーションが揃っています。[IBM Cloud はDatadog サードパーティ（RapDev）](https://app.datadoghq.com/integrations/app/rapdev-ibm-cloud/overview?search=IBM)からAPIインテグレーションが提供されています。IBM Cloud に限らずサーバーだけを監視する場合は Datadog エージェントをインストールしてサーバー監視及びログキーワード監視ができます。

## アラート設定手順（STEP）

- STEP1. ログの取り込み
- STEP2. ログ送信を検査
- STEP3. クエリをテスト
- STEP4. モニター設定（アラート通知）
- sTEP5. 最終検査

## STEP1. ログの取り込み
サーバーのDatadogエージェントがログファイルを監視して更新があれば、インターネット側のDatadogインテークサーバーにログを転送します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/189936/70b3685c-a355-1652-b00f-9cc23cbdc10d.png)

### Datadog エージェントの設定ファイル
ログ収集を有効化し、対象ログファイルと識別するためのタグを設定します。設定後、Datadogエージェントを再起動します。

``` custome_log_collection.yaml
logs:
- type: file
    path: /var/log/kano/kano.log
    source: kanoHost
    service: kanoApp1
  - type: file
    path: /var/log/kano/kano2.log
    source: kanoHost
    service: kanoApp2
```

## STEP2. ログ送信を検査
Datadogポータルにログインして、ログエクスプローラー[Logs]でログを受信できたことを検査します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/189936/75ef7d9a-684a-864d-0ee8-5371a979a8b2.png)

### 送信されたログを確認
ログを出力してからDatadogエージェントが転送してDatadogポータルで表示されるまでに時間差があります。表示されるのを待ちます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/189936/018ea0e2-5ea2-7b58-d0e8-70ec108c7447.png)

## STEP3. クエリをテスト
ログ・キーワードを合致させたいクエリをテストします。サーバー名[kanohost]とキーワード[logged in]で絞り込んでみました。ログが３個表示されました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/189936/e7de5479-1272-2ffd-990b-fee7b98a6b3f.png)

クエリにアプリ名[kanoApp2]でさらに絞り込みました。ログが１個だけ表示されました。重要なアプリにログインしたことを検知するためのクエリは［source:kanohost　"logged in"　service:kanoApp2］で大丈夫そうです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/189936/c34958cf-ef4a-d366-a1f0-6772cf4b44f6.png)


## STEP4. モニター設定（アラート通知）
ログ・キーワードが出力されたらアラート通知するための設定＆テストをします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/189936/ef1fc39b-62ff-ae04-4bcb-ae0fcbae0e23.png)

### 新しい監視を追加します
[Monitors] > [Manage Monitors] > [New Monitor] > [Logs]

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/189936/9eb0066c-dd42-6ac7-b960-eaa7b2cf1985.png)

### アラート通知の条件を登録します

1. (1) Select monitor scope の箇所でログキーワードのクエリを設定します
2. (2) Set alert conditions の箇所は1個でもキーワードを検出したらメール送信する設定です
3. (3) Notify your team の箇所ではメールタイトルと本文を記載します

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/189936/7fe68fcd-6cd6-ca4a-6265-c2919d9b0588.png)

## STEP5. 最終検査
ログファイルにログを連投してみます。Datadog ポータル[monitors] > [Status]でアラートを確認できました。

```
$ echo "UserA logged in as practice purpose" >> kano.log
$ echo "UserB logged in as practice purpose" >> kano.log
$ echo "new UserF logged in as practice purpose" >> kano2.log
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/189936/d87965ab-d7ce-d6e9-672c-d73e9f9683a3.png)

メールも届きました！

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/189936/95add6cd-49c8-3fd8-f6d9-c0351c48293c.png)

### まとめ
Datadog を活用してサーバーのログファイルに出力された文字列キーワードを見つけたらメール送信する手順を検証できました。