share facebook facebook twitter menu hatena pocket slack

2018.04.16 MON

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

WRITTEN BY 大住 孝之

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

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

目次

Explorer

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

Pipelines

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

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

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}

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

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

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

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

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

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

Slackへの通知例

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

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

元記事はこちら

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

大住 孝之

構築運用担当。 個性的な面々の中で無個性という個性を打ち出していこうと画策中。

cloudpack

cloudpackは、Amazon EC2やAmazon S3をはじめとするAWSの各種プロダクトを利用する際の、導入・設計から運用保守を含んだフルマネージドのサービスを提供し、バックアップや24時間365日の監視/障害対応、技術的な問い合わせに対するサポートなどを行っております。
AWS上のインフラ構築およびAWSを活用したシステム開発など、案件のご相談はcloudpack.jpよりご連絡ください。