Datadog基本設定(Log Explorer)


ログ監視の設定方法がよく分からなかったのでメモ

Datadogでログ監視するために設定する手順

(1)Datadogエージェントの設定

サーバーOSにインストールするAgentの設定と、独自アプリケーションのログを記録する手順の詳細は、こちら「Datadog基本設定(CentOS)#独自アプリケーションのログを記録したい」に記載したので、今回は簡易版として記載します。

監視シナリオ

インターネットVPN(IPsec)の通信が出来ていることを10秒毎にPing応答で検査している。Ping応答が失敗した時はエラーメッセージをログに出力し、Ping応答が成功した時はログが大量になることを防ぐため1時間に1回だけ成功メッセージをログに出力する。

<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エージェントの設定
2つの設定ファイルに取得したいログファイルを指定する。

/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> しばらく(10分以上)待って、Datadogでログが記録されていることを確認する。

(2)Datadog Log Expolorer でステータスレベルを分類する。

メニュー[Logs]→[Pipelines]に移動して、全てのログからキーワード読み替え(Grok Parser)とステータス再割り当て(Remapper)を行う。
(参考)
・ログメッセージをJSONで出力し、予約語[status, severity, level, syslog.severity]で書かれている場合は自動的にステータス[ERROR][INFO][WARN]等を仕分けしてくれる。
・テキスト列挙したログの場合は、全て強制的にステータス[INFO]で仕分けされるので、キーワード読み替えとステータス再割り当てを行う。

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

<2-2> 再割り当てするステータス名を指定する。

<2-3> Datadogログ出力を見る。
あれれ?「変化なーい(T_T)」。
期待しているのは、Statusの欄に[Error]がカウントアップされて、赤色でマークされるのだが。
ここで3~4時間ハマったのだが、過去ログデータにステータスを再割り当てできないのでしょうか。

試しに新しい「エラーログ」をログファイルに手動追加してみた。たらーん。

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

(3) ログのキーワード合致でアラート送信する

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

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

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

Jul 02 22:33:04.082 postfix/qmgr    0FF46644DB: from=<[email protected]>, 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%以上とか。
 - 月次報告に「エラー率」を追加するとか。
 - 秘密テキストがログにあるときはマスクする方法とか。
まだやること沢山ありそうだけど参考書少ない気がする。

Datadog関連記事