Datadog基本設定（Log Explorer）

ログ監視の設定方法がよく分からなかったのでメモ
## Datadogでログ監視するために設定する手順

## （１）Datadogエージェントの設定
サーバーOSにインストールするAgentの設定と、独自アプリケーションのログを記録する手順の詳細は、こちら「[Datadog基本設定（CentOS）#独自アプリケーションのログを記録したい](https://qiita.com/1Kano/items/6851fbe099f9be3fbe14)」に記載したので、今回は簡易版として記載します。

### 監視シナリオ
インターネットVPN（IPsec）の通信が出来ていることを10秒毎にPing応答で検査している。Ping応答が失敗した時はエラーメッセージをログに出力し、Ping応答が成功した時はログが大量になることを防ぐため１時間に１回だけ成功メッセージをログに出力する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/189936/d88ace77-945d-3ef5-bbce-eb6c419ebba4.png)

<1-1> Datadogエージェントをインストール
<1-2> 独自アプリケーションがログを出力（pythonでスクリプトを書いた場合）

```独自アプリ（application.py）
# ログ出力先を定義
import logging
logging.basicConfig(filename='/home/username/ping2.log', level=logging.INFO)

#10秒毎に対抗ルータのIPアドレスにPing応答を検査する。
#Ping応答が無ければPingのエラーメッセージをログファイルに出力する。
logging.error('error %s',msg)

#Ping応答が有る場合は、破棄するか、1時間ごとに成功メッセージをログファイルに出力する（ログ量を減らす為）。
logging.info('info %s',msg)
```

<1-3> ログのサンプル

```/home/username/ping2.log
INFO:root:info 1 packets transmitted, 1 received, 0% packet loss, time 0ms, 2020/2/1, 18:0:0.129468
INFO:root:info 1 packets transmitted, 1 received, 0% packet loss, time 0ms, 2020/2/1, 19:0:0.8532
INFO:root:info 1 packets transmitted, 1 received, 0% packet loss, time 0ms, 2020/2/1, 20:0:0.63532
INFO:root:info 1 packets transmitted, 1 received, 0% packet loss, time 0ms, 2020/2/1, 21:0:0.20883
INFO:root:info 1 packets transmitted, 1 received, 0% packet loss, time 0ms, 2020/2/1, 22:0:0.117805
ERROR:root:error 1 packets transmitted, 0 received, 100% packet loss, time 0ms, 2020/2/1, 22:58:58.418653
ERROR:root:error 1 packets transmitted, 0 received, 100% packet loss, time 0ms, 2020/2/1, 22:59:8.623560
ERROR:root:error 1 packets transmitted, 0 received, 100% packet loss, time 0ms, 2020/2/1, 22:59:18.828957
ERROR:root:error 1 packets transmitted, 0 received, 100% packet loss, time 0ms, 2020/2/1, 22:59:29.33790
ERROR:root:error 1 packets transmitted, 0 received, 100% packet loss, time 0ms, 2020/2/1, 22:59:39.238556
INFO:root:info 1 packets transmitted, 1 received, 0% packet loss, time 0ms, 2020/2/1, 23:0:0.158865
```

<1-4> Datadogエージェントの設定
２つの設定ファイルに取得したいログファイルを指定する。

```/etc/datadog-agent/datadog.yaml
##################################
## Log collection Configuration ##
##################################
logs_enabled: true
```

```/etc/datadog-agent/conf.d/custom_log_collection.yaml
logs:
  - type: file
    path: /home/username/ping2.log
    source: customelog #自分の好きな名前
    service: pingheatrun #　　　〃
```

```/etc/datadog-agent/check.d/
設定不要
```


<1-5> しばらく（30秒以上）待って、Datadogでログが記録されていることを確認する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/189936/bc9f9d09-a9e4-763f-3e79-efa0deeab316.png)

## （２）Datadog Log Expolorer でステータスレベルを分類する。
メニュー[Logs]→[Pipelines]に移動して、全てのログからキーワード読み替え(Grok Parser)とステータス再割り当て(Remapper)を行う。
（参考）
・ログメッセージをJSONで出力し、予約語[status, severity, level, syslog.severity]で書かれている場合は自動的にステータス[ERROR][INFO][WARN]等を仕分けしてくれる。
・テキスト列挙したログの場合は、全て強制的にステータス[INFO]で仕分けされるので、キーワード読み替えとステータス再割り当てを行う。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/189936/c82cd262-05ae-fe8b-6f07-5a1674382728.png)

<2-1> キーワード読み替え（Grok Parser）
①Log sample: ログサンプルをテキストで貼り付けする（複数ログ形式あるなら追加できる）。
②Define parsing rules: 整形するルールを書く。公式には下記サンプルあり。「自分の好きなルール名 %{最初の文字列:再割り当てするステータス名}.*」でも良い。ルールが正しいと、ログサンプルの右横に[MATCH][UNMATCH]が表示される。
③自分の好きなプロセス名を書く。どんな処理か分かるような処理名がいいと思います。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/189936/dec5401f-7142-4ceb-7056-e6f1501be19c.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/189936/797caeb6-24dc-3b23-2da5-341018903333.png)

<2-2> 再割り当てするステータス名を指定する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/189936/db0509b6-cd03-87c3-8b80-244cba848379.png)

<2-3> Datadogログ出力を見る。
あれれ？「変化なーい（T_T）」。
期待しているのは、Statusの欄に[Error]がカウントアップされて、赤色でマークされるのだが。
ここで３～４時間ハマったのだが、過去ログデータにステータスを再割り当てできないのでしょうか。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/189936/bc9f9d09-a9e4-763f-3e79-efa0deeab316.png)

試しに新しい「エラーログ」をログファイルに手動追加してみた。たらーん。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/189936/e79e63ae-3ccb-1528-62d8-5e680f229203.png)

なるほど。過去に記録されたログデータは、ステータス再割り当て[Grok Parser]できないのですね。設定した以降に、取得するログはきちんとステータス[Error]に仕分けされます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/189936/f2b2d599-b921-fbc3-3c31-f68c4017db10.png)

# （３） ログのキーワード合致でアラート送信する
この例では、①Define the search queryに「"auth_basic:error"」をセットして、BASIC認証がエラーだったログを100回記録したらメール送信するもの。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/189936/4b689389-f458-c490-6675-79ec67b28409.png)


## （４）センシティブなログ情報をOSの外（監視サーバー）へ送信しない方法。

センシティブな情報をマスクする前

```
Jul 02 22:33:04.082	postfix/qmgr	0FF46644DB: from=<username123@hoge.kano.local>, size=1663
```

監視エージェントの設定

``` /etc/datadog-agent/conf.d/journald.yaml
logs:
    - type: journald
      path: /var/log/journal/
      log_processing_rules:
          - type: mask_sequences
            name: mask_sensitive_data
            replace_placeholder: "[masked_info]"
            pattern: username123

```

センシティブな情報をマスクした後（Log Explorer に記録された結果）

```
Jul 02 22:33:04.082	postfix/qmgr	0FF46644DB: from=<[masked_info]@hoge.kano.local>, size=1663
```

## まとめ
・ログデータを仕分けすることで、エラー率や時系列を作ればエラーの上昇率を算出できそうです。
・この次に学びたい事
　- [ERROR]ステータスに仕分けしたら、アラート通知をメール送信できるか。
　- 出来ればその[ERROR]は毎回メール送信するのではなく、10件まとまったらとか、エラー率10%以上とか。
　- 月次報告に「エラー率」を追加するとか。
　- 秘密テキストがログにあるときは[マスクする方法](https://docs.datadoghq.com/ja/agent/logs/advanced_log_collection)とか。
まだやること沢山ありそうだけど参考書少ない気がする。



## Datadog関連記事

- [図解で、Datadogエージェントの設定手順] (https://qiita.com/1Kano/items/3533a8ebe5f6777840a6)
- [DatadogカスタムCheckの一番小さなコード] (https://qiita.com/1Kano/items/f1f897d8ee943f318c3e)
- [Datadogのデータ予測機能を使う] (https://qiita.com/1Kano/items/b6b484ae3e9afca3d296)
- [図解で、うちのワンコを真夏の暑さから守る（Datadogで）] (https://qiita.com/1Kano/items/5f2eed58794f13776a8e)
- [Datadog基本設定メモ（Windowsサーバ）] (https://qiita.com/1Kano/items/633b17fecec058a8eb2c)
- [Datadog基本設定メモ（CentOSサーバ）] (https://qiita.com/1Kano/items/6851fbe099f9be3fbe14)
- [Datadog基本設定（Log Explorer）] (https://qiita.com/1Kano/items/1c959c20cba3151db071)
- [Datadog基本設定（APM）] (https://qiita.com/1Kano/items/33dbcbc6bc86d369146a)