vague memory

うろ覚えを無くしていこうともがき苦しむ人の備忘録

Datadog Logs(パブリックベータ) ログ解析と通知

Datadog でのログ管理機能(パブリックベータ版)での検証履歴です。 今回は[Logs]->[Explorer]、[Logs]->[Pipelines] 部分を確認します。

また、公開当時は無かった Log Monitor (通知機能) も実装されていますので併せて試します。


目次


Explorer

検索用の画面です。 ここでの条件付与の為に後述 Pipeline で、表示列(column)や絞り込み条件(facet)を作成します。

Pipelines

デフォルト状態で Apache、Nginx、Java の Pipeline が設定されていました。 今後標準的なログの Pipeline は増えていくのかもしれません。

既存 Pipeline からの複製(clone)が行えます。clone元は無効化された状態となります。 (新規作成ももちろん可能です)

f:id:htnosm:20180329015647p:plain

Pipeline filters

facets や tag を利用して、Pipeline の対象とするログの絞り込み設定をします。

Processors

Pipeline filters で絞り込みをしたログに対する変換処理を定義します。

Grok で解析・抽出し、リマッパーに渡して属性に割り当てるが基本的な流れになります。詳細は公式参照で、以下メモです。

  • Grok Parser
    • Logstash で利用される Grok filter を用いて解析を行う。
  • Log Date Remapper
    • ログのタイムスタンプを定義
    • 未定義の場合はDatadogがログを受信した日時となる
  • Log Status Remapper
    • level を定義
    • Explorer上の Status に反映される
    • 整数は syslog Severity_level に対応
    • 文字列は後述 Status Remapper 対応表 参照
  • Attribute Remapper
    • 任意の属性を別属性に再割当て
  • URL Parser
    • URLを解析しパラメータ抽出
    • Gork Parser 内でも url フィルタとして実装
  • Useragent parser
    • User Agent を解析しパラメータ抽出
    • Gork Parser 内でも useragent フィルタとして実装

Status Remapper 対応表

  • 大文字小文字の区別無し
  • 該当しないものは全て info(6) にマップ
開始文字列 割当キーワード 対応値 重大度(Severity)
emerg または f emerg 0 緊急(Emergency)
a alert 1 アラート(Alert)
c critical 2 クリティカル(Critical)
err error 3 エラー(Error)
w warning 4 警告(Warning)
n notice 5 通知(Notice)
i info 6 情報(Informational)
d または trace または verbose debug 7 デバッグ(Debug)
ok または success に一致 OK

制限

サイズ制限等があるため下記最新情報を参照。

解析(ParsingRule)例

既存のログを使用し、いくつか解析を試してみます。

尚、 Pipeline 設定を更新した場合、過去に取り込み済みのログには適用されません。 Pipeline 更新以降に取り込まれたログから適用されます。

jenkins.log

JenkinsParsingRule %{date("MMM dd, yyyy H:mm:ss"):datestr} %{regex("[AP]M"):meridian} %{notSpace:class} %{word:method}[\n| ]%{word:level}: %{data:message}

f:id:htnosm:20180329015649p:plain

messages

messages %{date("MMM d HH:mm:ss"):datestr} %{notSpace:host} %{word:program}(\[%{integer:processid}\])?:%{data:message}

f:id:htnosm:20180329015648p:plain

maillog(stat=を含む行のみ)

maillogstat %{date("MMM d HH:mm:ss"):datestr} %{notSpace:host} %{data:program}(\[%{integer:processid}\])?: %{word:messageid}: %{data::keyvalue("="," /()\\[\\]:")}stat=%{word:stat}: %{data:message}

f:id:htnosm:20180329015650p:plain

Monitor

閾値超過でのアラート通知を行えます。

"ERROR" を含むログが n 件出力されたらアラート の通知はできますが、 "ERROR" を含むログの内容 の通知機能は今の所ありません。

  • [Monitors]->[New Monitor]->[Logs]

f:id:htnosm:20180329015651p:plain

設定自体は他のMonitorと同様です。

f:id:htnosm:20180329015652p:plain

尚、バグなのか仕様なのか不明ですが、 現在、閾値(threshold)は 1 以上しか設定できない(0は入力を受け付けない)ため、1件での検知をしたい場合は above or equal to 1 で設定する必要があります。

Slackへの通知例

クエリが通知先と認識されてしまっていますが、通知イメージです。

f:id:htnosm:20180329015653p:plain


LogMonitor はまだテスト実装な感じを受けました。