コンテンツにスキップ

Datadogのダッシュボード設定

はじめに

EponaではOperation-Lessの観点から、マネージドサービスやSaaSの利用を推奨しており、 モニタリングについてはDatadogをサポートしています。
Datadogを用いたログからのメトリクス抽出、可視化ガイドでは非構造化ログを構造化し 可視化するまでの手順を示しましたが、本ガイドでは特にダッシュボード について記述します。

ダッシュボードとは

ダッシュボードとは、もともとは自動車の計器盤のことを指します。走行速度や燃料の残量など、運転に必要な様々な情報を一箇所に集約して運転者を支援するものです。
ここから転じて、複数の情報源から必要な情報を抽出し、グラフ・表などで可視化して1箇所に集約したものも「ダッシュボード」と呼ばれるようになりました。
ダッシュボードを作る際は、ダッシュボードを作成する目的、つまり「いつ」「誰が」「何のために」ダッシュボードを見るかを考えることが重要です。 用途や目的のないダッシュボードは使われることがなく、いずれ陳腐化していくからです。
目的を明確にしたうえでダッシュボードを作成し、足りない情報を補ったり不要な情報を落としたりしながら、 サービスの成長に合わせてメンテナンスしていくことが望ましいでしょう。

EponaではシステムメトリクスについてはDatadog、ビジネスメトリクスについてはAmazon QuickSightを使ったダッシュボードの作成方法をガイディングします。 Amazon QuickSightのガイドに関してはこちらを参照してください。

本ガイドでは、Datadogでのダッシュボードについて記述します。

前提事項・事前準備

本ガイドにおいては以下の準備ができていることを前提とします。

Datadogでプリセットされているダッシュボードについて

Datadogでは、すぐに使えるダッシュボードが事前に用意されています。 Datadogと外部サービスのインテグレーションを設定することで、そのサービスからメトリクスが取得され、以下のようなダッシュボードが自動的に作成されます。

image

image

インテグレーションについては、公式ドキュメントのインテグレーション入門やEponaドキュメントのDatadogとのインテグレーション設定を参照してください。

Datadogで作成可能なダッシュボードの種類

Datadogでは、プリセット以外にも利用者独自でカスタムしたダッシュボードを作成できます。
Datadogのダッシュボードにはスクリーンボードタイムボードという2つの種類があります。両者の違いについてはスクリーンボードとタイムボードにも記載がありますが、主な違いは以下の2点です。

  • レイアウト
    スクリーンボードでは配置するグラフの大きさや位置を自由に変えられますが、タイムボードは大きさや位置は固定です
  • 時間軸
    スクリーンボードは個々のグラフ内で別々に期間を指定できますが、タイムボードは全グラフで同じ期間を共有します

2点目について実際の画面で補足します。

  • スクリーンボード
    screenboard
  • タイムボード
    screenboard

タイムボードの右上に、期間を指定するバーがあるのを確認してください。 このバーで期間を指定すると、全グラフがその期間に応じて動的に再集計・再描画されます。 期間はユーザーが自由に設定できます(2020/10/10 09:00〜2020/10/11 10:39のような、端数のある期間も指定できます)。

一方、スクリーンボードでは動的に期間を指定できず、グラフの作成時に指定した期間で表示されます。期間は直近X時間/日/月など、Datadogが用意している選択肢の中で選択します。現在どの期間のグラフが表示されているかは、各グラフの右上に表示されています。

このような違いから、スクリーンボードは通常時の定点観測として使用し、タイムボードは問題発生時のトラブルシューティングに使用することが想定されます。

以上の説明をもとに公式ドキュメントの スクリーンボードタイムボード の記述を参照すると、より理解が深まると思われます。

Datadogで使用できるウィジェット

Datadogではグラフや表などをウィジェットと読んでいます。ダッシュボードは、このウィジェットを組み合わせることで作成します。
主なウィジェットの意味を以下に示します。その他のウィジェットについてはこちらを参照してください。

ウィジェット名 説明
Timeseries: 時系列 指定したメトリクスの経時変化を、折れ線グラフや棒グラフで表示します。
image
Query Value: クエリ値 指定したメトリクスやクエリ結果をテキストで表示します。
image
Table: 表 指定したメトリクスの値を表形式で表示します。
image
Top List: 上位リスト 指定したメトリクスの上位または下位を表形式で表示します。
image
SLO Summery: SLOサマリ DatadogのSLO(サービスレベル目標)機能で設定したSLOの達成状況を表示します。
image
Heat Map: ヒートマップ 指定したメトリクスをホストやタグなどで横断的に集計し、濃淡で表すことで傾向を可視化します。
image
Check Status: ステータス DatadogエージェントやAWSサービスの状態などを表示します。サービスチェックの内容も参照してください。
image
Change: 変化量 指定したメトリクスの一定期間内の変化量を表示します。
image
Host Map: ホストマップ ホストやコンテナ全体の状態をマップで表示します。ホストマップの内容も参照してください。
image
Scatter Plot: 散布図 2つのメトリクスの相関関係を散布図で表示します。
image

設定例

サンプルとして、以下の情報を含むダッシュボードを作成します。対象となるアプリケーションとモニタリングしたい項目を、以下のように整理したとしましょう。

  • 対象となるアプリケーション
  • 目的
    • コンテナに関するモニタリング
      • サービスが稼働しているか知りたい
      • リソースの使用状況を知りたい
    • データベースに関するモニタリング
      • 処理時間を知りたい(性能劣化していないか)
    • アプリケーションに関するモニタリング
      • アプリケーションの稼働状況を知りたい(エラー発生状況など)
  • 取得したい情報
    • Amazon ECSに関する情報
      • タスクステータス
      • コンテナステータス
      • メモリ
      • CPU
    • Amazon RDSに関する情報
      • データベース遅延状況
      • コネクション数
    • アプリケーションに関する情報
      • エラーログ数
      • エラー発生箇所(パス)

ここではAmazon ECSやAmazon RDSに関する情報をタイムボード、アプリケーションに関する情報をスクリーンボードで作成してみます。

ℹ️ Amazon ECSやAmazon RDSにはプリセットのダッシュボードもあります。必要に応じてそちらもご参照ください。

タイムボードの設定例

以下、タイムボードの作成例を記載します。

タイムボードの作成

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

空白のダッシュボードが作成されるので、画面上部のEdit Widgetsをクリックします。すると、ウィジェットの選択メニューが表示されます。

ウィジェットの設定項目

使用したいウィジェットのアイコンをダッシュボード上の空欄にドラッグすると、編集画面が開きます。ここでは、以下のような情報を設定します。

Select your visualizationは、現在選択しているウィジェットの種類です。

Graph your dataでは、グラフ化する項目の検索条件等を設定します。

  • Metric ▼では、グラフ化する項目の分類を選択します。
    Metricの他にLog EventsNetwork Trafficなども選択できます
  • from ▼では、グラフ化するデータの絞り込み条件(フィルター)を設定します。ホストやタグによる絞り込みが可能です
  • avg by ▼では、集計方法を選択します。avg byの他に、max bymin bysum byが選択可能です
  • DisplayColorでは、グラフの見た目を設定します。Line(折れ線グラフ)、Area(面グラフ)、Bar(棒グラフ)を選択できます
  • 1つの平面に複数のグラフを表示する場合はGraph additionalで、追加したいグラフの内容を選択します
  • Give graph a nameでグラフの名称を設定します

設定内容の詳細については公式ドキュメントのクエリを参照してください。

ウィジェット:Amazon ECS コンテナステータス

Amazon ECSのメトリクスとしては、例えばRunningPendingDesiredといったステータスごとの数が取得できます。 これらのデータが可視化できれば、希望しているタスク数を充足しているか、何らかの問題でタスクが待たされている場合はどのくらい継続しているのかが 一目でわかるようになります。
ここでは3つのメトリクスを1つのウィジェットに重ねて表示してみます。

Timeseriesをダッシュボード上の空欄にドラッグし、Graph your dataに以下の情報を入力します。

image

1行目の設定は以下のとおりです。

  • Metric: aws.ecs.service.running
  • from: cluster:epona-chat-example-backend
  • Display: Area、Color: Classic

Graph additionalMetricをクリックすると入力欄が増えます。2行目の設定は以下のとおりです。

  • Metric: aws.ecs.service.pending
  • from: cluster:epona-chat-example-backend
  • Display: Area、Color: Classic

同様に入力欄を追加し、3行目に以下の設定を入力します。

  • Metric: aws.ecs.service.desired
  • from: cluster:epona-chat-example-backend
  • Display: Lines、Color: Warm、Style: Dashed、Stroke: Thick

[Save]をクリックして保存します。これにより、タイムボードにepona-chat-example-backendサービスのステータス状況が可視化できます。

今回対象としたexample-chatにはepona-chat-example-notifierというサービスもあります。 こちらも同様にタスクステータスの数を可視化してみましょう。
同種のメトリクスを可視化する場合、Datadog上で既存のウィジェットをコピーすることで作成を効率化できます。

先程作成したウィジェットの右上に表示される上矢印マークをクリックしてください。メニュー内のCopyを選択します。

ダッシュボード画面でCtrl+vを押すと、ウィジェットがコピーされます。コピーされたウィジェットの鉛筆マークをクリックし、 編集画面を表示してください。

Graph your datafromの内容を3行ともcluster:epona-chat-example-notifierに変更し、[Save]で 保存します。
これにより、epona-chat-example-notifierのステータスごとのタスク数の推移がタイムボード上で可視化されます。

ウィジェット:Amazon ECS メモリ使用率

Timeseriesをダッシュボード上の空欄にドラッグし、Graph your dataに以下の情報を入力します。

  • Metric: aws.ecs.service.memory_utilization
  • Display: Lines、Color: Classic、Style: Solid、Stroke: Normal

ウィジェット:Amazon ECS CPU使用率

Timeseriesをダッシュボード上の空欄にドラッグし、Graph your dataに以下の情報を入力します。

  • Metric: aws.ecs.service.cpuutilization
  • Display: Lines、Color: Classic、Style: Solid、Stroke: Normal

ウィジェット:Amazon RDS コネクション数

Timeseriesをダッシュボード上の空欄にドラッグし、Graph your dataに以下の情報を入力します。

  • Metric: aws.rds.database_connections
  • from: dbinstanceidentifier:epona-rds-instance
  • Display: Lines、Color: Classic、Style: Solid、Stroke: Normal

ウィジェット:Amazon RDS 読み取り/書き込み遅延

Timeseriesをダッシュボード上の空欄にドラッグし、Graph your dataに以下の情報を入力します。

1行目の設定は以下のとおりです。

  • Metric: aws.rds.read_latency
  • from: dbinstanceidentifier:epona-rds-instance
  • Display: Lines、Color: Classic、Style: Solid、Stroke: Normal

Graph additionalMetricをクリックすると入力欄が増えます。2行目の設定は以下のとおりです。

  • Metric: aws.rds.write_latency
  • from: dbinstanceidentifier:epona-rds-instance
  • Display: Lines、Color: Classic、Style: Solid、Stroke: Normal

ウィジェット:Amazon RDS CPU利用率

Timeseriesをダッシュボード上の空欄にドラッグし、Graph your dataに以下の情報を入力します。

  • Metric: aws.rds.cpuutilization
  • from: dbinstanceidentifier:epona-rds-instance
  • Display: Lines、Color: Classic、Style: Solid、Stroke: Normal

ウィジェット:Amazon RDS 利用可能なメモリ

Timeseriesをダッシュボード上の空欄にドラッグし、Graph your dataに以下の情報を入力します。

  • Metric: aws.rds.freeable_memory
  • from: dbinstanceidentifier:epona-rds-instance
  • Display: Lines、Color: Classic、Style: Solid、Stroke: Normal

タイムボード設定後のイメージ

image

スクリーンボードの設定例

スクリーンボードの作成手順も、概ね上記のタイムボードの手順と同様です。 ここでは、アプリケーションログから取得したメトリクスのスクリーンボード上での可視化に取り組んでみましょう。

題材として、アプリケーションで発生するエラー数の推移、エラーが発生するURIの可視化等を取り上げます。 これにより、視覚的にアプリケーションの健全性を確認できるようになります。

image

もちろんこのためには、アプリケーションログをパースしておく必要があります。詳細については、こちらのガイドをご参照ください。

以下の手順で作成していきます。

事前準備(ログのパース)

アプリケーションログから抽出したメトリクスを可視化するにあたって、ログ用のパイプラインに以下のような設定を入れています。
なお、これらの設定の詳細はDatadogを用いたログからのメトリクス抽出、可視化ガイドを 参照してください。
以下に述べる設定は、メニューの[Logs]->[Configuration]からPipelineを選択して実施します。

  • Pre processing for JSON logs
    EponaでデプロイしたアプリケーションのログをDatadogに取り込むと自動的にパースされますが、logという項目が構造化されません。
    Datadogドキュメント を参考に、Message attributes, logを追記して、構造化箇所を指定してください
  • Pipeline
    まずはアプリケーションからのログを処理するパイプラインを構成します。
    アプリケーションはAmazon Fargate上で動作しているため、Fargateから送られてくるログを対象とします。
    Add a pipelineのリンクをクリックして、以下のパイプラインを追加してください

    • Filter: Source:fargate
    • Name: fargate_sample
  • Processor
    対象のアプリケーションは構造化ログではなくテキスト形式の非構造化ログを出力しています。 そのため、これをGrok Parserを用いて構造化ログへと変換する必要があります。
    上記で作成したパイプライン内のAdd Processorをクリックして、以下のGrok Parserを追加してください。
    読みやすさのため改行を入れていますが、実際の画面では1行で入力します

    • 1個目

      • Define parsing rules
        ```grok
        example_chat %{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}
        ```
        
      • Name: example_chat
    • 2個目

      • Define parsing rules
        ```grok
        http_access %{ip:clientip} %{notSpace:ident} %{notSpace:auth} \[%{date("dd/MMM/yyyy:HH:mm:ss Z"):date}\]
         "%{word:http.method} %{notSpace:http.url_details.path} %{notSpace:http.version}"
         %{notSpace:http.status_code} %{notSpace:bytes}
        ```
        
      • Name: http_access

    image

    • Facet
      Datadogを用いたログからのメトリクス抽出、可視化ガイドにあるとおり、 構造化した項目はそのままでは検索条件として使用できません。この後、エラーログの検索のために@logLevelを使用するので、 この項目をファセットへ登録する必要があります。 メニューの[Logs]->[Search]を選択し、サイドバーの「+ Add」を選択してください。Add facet画面で以下の情報を 入力してください

      • Path
        • @logLevel

スクリーンボードの作成

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

ウィジェット:WARNレベル以上のアプリケーションログ数

Timeseriesをダッシュボード上の空欄にドラッグし、Graph your dataに以下の情報を入力します。

  • Log Events
  • クエリ条件: @logLevel:(FATAL OR ERROR OR WARN)
  • Group by: logLevel(@logLevel)
  • Display: Lines、Color: Warm、Style: Solid、Stroke: Normal

Set display preferenceには表示期間を設定します。ここではPast 4 Hoursとします。 なお、ここでは説明を簡潔にするためWARNレベル以上と定義していますが、実運用時はログレベルごとに可視化する方が望ましいでしょう。

ウィジェット:アプリケーションエラーログ発生箇所(パス)

Tableをダッシュボード上の空欄にドラッグし、Graph your dataに以下の情報を入力します。

  • Log Events
  • Group by: logLevel(@logLevel) URL Path(@http.url_details.path)
    • 上記の条件をコピー・ペーストでうまく設定できない場合は、@logLevelを入力・確定してから次の@http.url_details.pathを入力してください

Set display preferencePast 4 Hoursとします。

ウィジェット:パスごとのアクセス数

Timeseriesをダッシュボード上の空欄にドラッグし、Graph your dataに以下の情報を入力します。

  • Log Events
  • クエリ条件: -@http.url_details.path:/api/health
    • 無関係なログが混在している場合は条件にSource:fargateなどを追加してください
    • 上記の条件をコピー・ペーストでうまく設定できない場合は、手打ちで@http.url_details.pathと入力して条件確定後、灰色背景の条件文をクリックして-を追記してください
  • Group by: URL Path(@http.url_details.path)
  • roll up every: 5m
  • Display: Lines、Color: Classic、Style: Solid、Stroke: Normal

Set display preferencePast 4 Hoursとします。

ウィジェット:httpエラーが発生しているパス

Tableをダッシュボード上の空欄にドラッグし、Graph your dataに以下の情報を入力します。

  • Log Events
  • クエリ条件: @http.status_code:>=400
    • 無関係なログが混在している場合は条件にSource:fargateなどを追加してください
  • Group by: URL Path(@http.url_details.path) Status Code(@http.status_code)
    • 上記の条件をコピー・ペーストでうまく設定できない場合は、@http.url_details.pathを入力・確定してから次の@http.status_codeを入力してください

Set display preferencePast 4 Hoursとします。

ダッシュボードの共有、エクスポート/インポート

例えば、チーム外のステークホルダと情報を共有する時などには、メトリクスを可視化したダッシュボードを共有できると便利です。
また、エクスポートとインポートを組み合わせれば、ダッシュボードの構築内容をリポジトリで管理できます。
ダッシュボード画面右上の歯車アイコンをクリックすることで、ダッシュボードの共有やコピー、エクスポートなどが可能です。

Generate public URL

スクリーンボードのみ利用できる機能です。
ダッシュボードの 読み取り専用のURL を発行します。これにより、外部ユーザーとダッシュボードを共有できます。共有をやめるときは同じメニューからRevoke Public URLを選択してください。 なお、ダッシュボード全体でなく、個々の グラフの埋め込みコード を生成することでも外部と共有可能です。
グラフの共有に関しては、スクリーンボード・タイムボードともに利用可能です。

Clone dashboard

ダッシュボード全体をコピーします。メニュー選択後、コピー先の名称を指定することで、その名前でダッシュボードがコピーされます。

Copy dashboard JSON

ダッシュボードのJSONをクリップボードにコピーします。そのままテキストエディタなどに貼り付けることも可能ですが、Import dashboard JSONで直接インポートに使うことも可能です。

Import dashboard JSON

指定されたJSONをダッシュボードとしてインポートします。 Export dashboard JSONで出力したJSONファイル、 またはCopy dashboard JSONで事前にコピーしておいた内容からダッシュボードを作成します。
このオプションを使うと、現在のダッシュボードの内容はすべて上書きされますので注意してください。

Export dashboard JSON

ダッシュボードのJSONファイルをダウンロードします。

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

ログフィルターが設定されているログについても、本ガイドに記載の手順でダッシュボードに可視化できます。

ただし除外したログについてはLog Eventでの検索ができないため、事前に必要な情報をメトリクスに登録し、Metricsを指定してウィジェットを作成してください。


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

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

© 2021 TIS Inc.