コンテンツにスキップ

Datadogを用いたログからのメトリクス抽出、可視化ガイド

はじめに

Eponaではモニタリング用のSaaSとしてDatadogをサポートしています。 Datadogには各種のメトリクスを集約の上で抽出や集計、可視化する機能があり、サービスの状態を把握する上で大きな役割を果たします。
一部のメトリクスについては、Datadogのエージェントやクローラーで自動的に収集されます。
しかし、場合によっては直接のメトリクスではなく、アプリケーションログ等のテキストデータからメトリクスデータを取得しなければならないケースもあります。
本ガイドでは、Datadogを使ってログからメトリクスを抽出し、可視化する方法について記載します。

前提事項・事前準備

以下の準備ができていることを前提とします。

  • Datadogユーザー登録が済んでいること
  • 必要となるログについて、AWS各サービスからDatadogへのログ収集が実現できていること

Datadogへのログ収集方法に関しては、以下のリンクを参照してください。

作業の流れ

ログからメトリクスを抽出し、可視化するための大まかな流れは以下のようになります。

  1. パイプラインの構築
  2. プロセッサーによるログのパース(Parse)
  3. ファセットの登録
  4. 可視化用ウィジェットの作成

パイプラインの構築

Datadogにログを送信した際、ログが一番最初に通るのが パイプライン です。パイプライン上で、受信したログをフィルタで絞り込み、 プロセッサー を順次適用して加工します。
CloudTrailやCloudFront等、ログフォーマットが定まっているログについては、Datadogにて インテグレーションパイプライン が用意されています。
これを適用することで、ログを自動的に分解して取り込むことができます。

一方、アプリケーションログの場合は、ログフォーマットはアプリケーション依存となるため、フォーマットに合わせてパイプラインを個別に構築する必要があります。
パイプラインを構築するには、パイプラインの名前(任意)と、「どのログにパイプラインを適用するか」というフィルター条件 (パイプラインフィルター) を設定する必要があります。
フィルタの構文はログの検索構文と同じです。

プロセッサーによるログのパース(Parse)

プロセッサー は、ログに対して構造化のための処理を実行するものです。たとえば以下のようなプロセッサが用意されています。

その他、プロセッサーの内容については公式ドキュメントを参照してください。これらを組み合わせることで、ログを解析して必要なメトリクスを抽出することになります。

ファセットの登録

構造化して取り込んだ属性は、そのままでは検索条件やメトリクスとして使うことはできません。メトリクスの可視化に使用するためには該当の属性を ファセットとして登録する必要があります。
(ファセットとは「切り口」「要素」のことですが、Datadogにおいては属性をインデックス化したものを指します)
必ずしも全属性をファセットにする必要はなく、検索条件等で使用する属性のみで構いません。

可視化用ウィジェットの作成

Datadogにおいてメトリクスを可視化する場所は、主として ダッシュボード になります。
ダッシュボードにはスクリーンボードとタイムボードの2種類があります。両者の違いについては スクリーンボードとタイムボード をご参照ください。
ダッシュボード上でメトリクスの値を可視化するためには、次の手順が必要になります。

  1. 可視化に使うウィジェット(表やグラフの種類)を選択する
  2. 可視化するメトリクスを選択する
  3. フィルターする
  4. 集計、ロールアップする

2〜4については、ウィジェットの設定画面内の クエリ にて設定します。

なお、ここでの「フィルター」とは、可視化するメトリクスに対する抽出条件を設定するものです。 どのホストから送信されてきたものか、どのタグが設定されているメトリクスか、などの条件を指定します。
また、「集計」はメトリクスに適用する演算のことです。 平均(avg by)や最大・最小(それぞれmax by、min by)、総和(sum by)等を指定できます。
「ロールアップ」は時系列でグラフ化する際に設定するもので、データポイント(グラフ上の点)をどれくらいの間隔(1秒、1分、10分など)で丸めるのかを指定するものです。データポイントを細かく取る(狭い間隔)ほどグラフは精密になりますが、上下の激しいデータの場合は線が重なり傾向を見にくくなる場合もあるでしょう。参照したい期間の幅に合わせて、ロールアップにより適切に間隔を調整してください。

パイプラインサンプル

ここでは、SPA + REST API構成のサービス開発リファレンスのコード (以降、example-chat)のログを参考に、簡単なダッシュボードを作成してみます。

パイプラインの構築

まず最初に、example-chatアプリケーションログ用の新しいパイプラインを作成します。
メニューの[Logs]-[Configuration]を選択して表示される画面にて[New Pipeline]ボタンを押下してください。

パイプライン作成ダイアログが開きますので、フィルター条件(Filter:)にSource:cloudwatchと入力してください。 これは、example-chatのアプリケーションログがAmazon CloudWatch Logsから連携されるためです。

フィルター条件の入力が終わったら、パイプライン名をName:に入力します。 任意の名称で良いですが、ここではexample-chat backend app logとします。

最後に[Save]ボタンを押下すると、作成したパイプラインが画面に反映されます。

プロセッサーによるログのパース(Parse)

作成したパイプライン名をクリックすると、[Add Processor] or [Add Nested Pipeline]メニューが表示されます。

ここでは、example-chatのログを構造化するため、プロセッサーとしてGrokパーサーを使用します。[Add Processor]をクリックしましょう。

そうすると、New Processorというプロセッサーの構成画面が開きます。Select the processor typeGrok Parserを選択しましょう。

Log Samplesには、実際にパースしたいログのサンプルを入力します。ここでは以下のように入力してみてください。

2020-10-19 09:45:12.430 WARN DEV GET /api/accounts/me - 8f738764-db38-49fe-a28f-412edc0ee8a6 qtp1886478937-17 Unauthorized access to path. path=[/api/accounts/me] method=[GET]

次にDefine parsing rules欄にパース規則を入力します。 わかりやすいように複数行に分けていますが、1行で入力してください。

example_chat_dev %{date("yyyy-MM-dd hh:mm:ss.SSS"):date} %{word:logLevel}
 %{word:runtimeLoggerName} %{word:http.method} %{notSpace:http.url_details.path}
 %{notSpace:userId} %{notSpace:sessionId} %{notSpace:threadName} %{data:message}

正しく入力すると、その下にパースされ構造化されたログ情報が出力されます。

image

パース規則はルール名 %{MATCHER:EXTRACT:FILTER} ...という形の書式になります。
属性名には任意の名称を設定できますが、Datadogで用意されている 標準の属性名 に該当するものがあれば、そちらに揃えたほうが便利です(このあとのファセットの登録を省略できます)。
上記の例だと、http.methodが標準の属性名を利用した例です。

最後に、プロセッサー名をName the processorに入力してください。名前は任意で良いですが、ここではexample-chat access logとしました。

なお、Grokパーサーの使い方については 公式ドキュメント にも記載がありますので、あわせて参照してください。

ファセットの登録

メニューの[Logs]-[Search]でLog Explorerを表示します。サイドパネルにある「+Add」をクリックするとファセットの登録画面が表示されます(丸印で囲ってある箇所です)。

image

ファセットの登録画面の Pathに、登録したい属性名を@付きで設定します。

  • %{word:logLevel}であれば@logLevel

登録が成功すると、Log Explorerのサイドパネルの下部に追加されます。

image

可視化用ウィジェットの作成

メニューの[Dashboards]-[New Dashboard]を選択すると、ダッシュボードの選択画面が表示されます。
Dashboard nameにはデフォルトでユーザー名と作成日時の名称が付与されますが、今回はexample-chat-dashboardとします。 ダッシュボードの種類はNew Screenboardを使用します。

空白のダッシュボードが作成されるので、画面上部のEdit Widgetsをクリックします。すると、ウィジェットの選択メニューが表示されます。
今回はTop Listを使って、パスごとのアクセス件数を表示してみます。Top Listは、複数の値のリストを表示するときに利用するウィジェットです。ディスクごとの空き容量の可視化などにも利用できます。

ウィジェットのアイコンを下の画面にドラッグすると、ウィジェットの編集画面が表示されます。Graph your data欄で、可視化するデータの抽出・集計条件を入力します。ここではhttp.url_details.pathでグループ化した件数を取得したいので、以下の画面のように入力します。

image

[Save]をクリックして保存すると、ダッシュボード上に以下のような表が表示されます。

image

以上が、Datadogを用いたログからのメトリクス抽出、可視化の流れとなります。

ログフィルターが設定されている場合の注意点

ログフィルターが設定されているログについても、本ガイドに記載の手順で構造化・可視化できます。以下のように読み替えてください。


※ このドキュメントはクリエイティブコモンズ(Creative Commons) 4.0 の「表示—継承」に準拠しています。

※ このドキュメントに記載されている会社名、製品名は、各社の登録商標または商標です。

© 2021 TIS Inc.