Datadog でのログ管理機能(パブリックベータ版)での検証履歴です。 今回は[Logs]->[Explorer]、[Logs]->[Pipelines] 部分を確認します。
また、公開当時は無かった Log Monitor (通知機能) も実装されていますので併せて試します。
目次
- 目次
- ExPlorer
- Pipelines
— Pipeline filters
— Processors
—– Status Remapper 対応表
— 制限 - 解析(ParsingRule)例
— jenkins.log
— messages
— maillog(stat=を含む行のみ) - Monitor
— Slackへの通知例
Explorer
検索用の画面です。 ここでの条件付与の為に後述 Pipeline で、表示列(column)や絞り込み条件(facet)を作成します。
Pipelines
デフォルト状態で Apache、Nginx、Java の Pipeline が設定されていました。 今後標準的なログの Pipeline は増えていくのかもしれません。
既存 Pipeline からの複製(clone)が行えます。clone元は無効化された状態となります。 (新規作成ももちろん可能です)
Pipeline filters
facets や tag を利用して、Pipeline の対象とするログの絞り込み設定をします。
Processors
Pipeline filters で絞り込みをしたログに対する変換処理を定義します。
- 公式 Parsing
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}
messages
messages %{date("MMM d HH:mm:ss"):datestr} %{notSpace:host} %{word:program}(\[%{integer:processid}\])?:%{data:message}
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}
Monitor
- 公式 Log monitor
閾値超過でのアラート通知を行えます。
“ERROR” を含むログが n 件出力されたらアラート の通知はできますが、 “ERROR” を含むログの内容 の通知機能は今の所ありません。
- [Monitors]->[New Monitor]->[Logs]
設定自体は他のMonitorと同様です。
尚、バグなのか仕様なのか不明ですが、 現在、閾値(threshold)は 1 以上しか設定できない(0は入力を受け付けない)ため、1件での検知をしたい場合は above or equal to 1 で設定する必要があります。
Slackへの通知例
クエリが通知先と認識されてしまっていますが、通知イメージです。
LogMonitor はまだテスト実装な感じを受けました。