【AWS】Datadogとの連携方法メモ

今回はAWSをDatadogを連携させたので、その際の手順についてメモを兼ねて記事にしたいと思います。

概要

AWSで作成したアプリケーションのログ管理といえばCloudWatchかと思います。 AWS上のリソースの動作ログを追うという意味では十分なのですが、如何せん表記がわかりにくい箇所もあり、何かしらダッシュボードのようなものが欲しいと感じていました。

そこで今回はDatadogと連携させることで、API Gatewayで発生しているエラー等を分かりやすくしたいと思います。

Datadogとは

Datadogはサーバ監視・分析のクラウドサービスです。 単純な死活監視から細かなログ分析・通知まで手広く行うことができます。 今回はAWSとの連携を扱いますが、他にもGCPAzureなど有名どころのクラウドサービスは抑えてあります。もちろんエージェントを導入することでオンプレでも利用できます。

なお前提としてDatadogのアカウントは作成済みとしますが、フリートライアルとして14日間利用できるようなので、興味のある方は試してみてください。

実際の設定

以下、実際に行った設定になります。

Integrationsの設定

メニューの【Integrations】から【AWS】を選択します。 連携先の設定画面が開かれるので【Configuration】内の【アカウント設定】を押下し、【Automatically Using CloudFormation】を選択します。

aws_datadog2

AWSとの連携においてはDatadogCloudFormationのテンプレートを用意してくれており、それをAWS上で展開するだけでデータの導通設定が可能になります。 ※導通にあたっていくつかリソースを立ち上げます。CloudWatchが多いですが、当然課金が発生しますのでご注意ください。

さらに連携用のAPI Keyを作成します。 【Create New】から任意の名前でAPI Keyを作成し【Launch CloudFormation Template】を押下します。

aws_datadog3

自動でAWSコンソールのCloudFormation画面に遷移するのでそのままスタックを作成します。 ここで作成されたスタック群の中のdata-forward(Datadogへのログデータ転送)を行っているLambdaが中心となっていきます。

API Gateway側の設定

今回はAPI Gateway側のログをDatadogに送ることにします。 API Gatewayの対象となるAPIのステージ設定でCloudWatchと連携するようにします。

aws_datadog4

仮にCDKで同じ設定にする場合は以下のように記載します。

import * as apigateway from 'aws-cdk-lib/aws-apigateway';
import * as logs from 'aws-cdk-lib/aws-logs';

// ロググループの作成
const apiLogGroup = new logs.LogGroup(
  this,
  `ApiLogGroup`,
  {
    logGroupName: `/aws/apigateway/anyapi-log`,
    retention: 365,
  },
);

// APIの作成
const api = new apigateway.RestApi(this, `AnyApi`, { 
  
  // 省略...

  deployOptions: {
    dataTraceEnabled: true,
    loggingLevel: apigateway.MethodLoggingLevel.ERROR,
    accessLogDestination: new apigateway.LogGroupLogDestination(
      apiLogGroup,
    ),
    metricsEnabled: true,
    accessLogFormat: apigateway.AccessLogFormat.jsonWithStandardFields(),
  },
});

いずれの方法でも、作成したLogGroupdata-forwardしているLambdaのトリガーに指定してあげる必要があります。 こうすることで、「API Gatewayが動く」→「LogGroupのログが書き込まれる」→「Lanbdaがトリガーされ、Datadogに書き込まれる」という流れになります。

実際にDatadog側のログを見てみる

実際にAPIを動かしてみると、以下のような感じでDatadogにログが流れてきていることが分かります。

aws_datadog5

ここで表示しているのはAPI Gatewayの動作ログなので、主には「いつ」「どこからリクエストが来て」「どんなレスポンスが返ったか」をアバウトに把握できるだけです。

実際には、ここに加えてAPI Gatewayから呼び出されたLambda等のログを合わせることによって細かな解析ができるようになります。

Slackに連携させてみる

ここからは少しおまけ的な内容でAPI Gatewayでエラーに応じてSlackに通知されるようにしてみます。

過去にも上記のような記事でCloudWatchからSNS等を用いてSlack連携はさせましたが、今回はログ解析の主体がDatadogなのでそちらでやってみます。

AWSと連携させた時と同様に【Integrations】からSlackを選択します。 ※ここで、どんなワークスペースのどんなチャンネルかを選択します。

【Define the metric】で監視するメトリクスの内訳(ここでは4XXエラーと5XXエラー)を設定した後、【Set alert conditions】で閾値(ここでは1件でWarning、2件でアラート)を設定します。

aws_datadog6

あとは【Notify your team】で通知先・メッセージを編集すれば完了です。 メッセージには{{is_alert}}のようにDatadog独自のパラメータを埋め込むこともできます。設定可能な値については下記リンクを参照ください。

これで設定した閾値を跨いだ場合Slackに通知が飛ぶようになったかと思います。

まとめ

今回はAWSのログ解析のためにDatadogと連携させた際の設定手順をまとめました。 CloudFormationが用意されていることで、比較的手間もなく連携が成功しました。

今回はAPI Gatewayの連携を主にしましたが、他のリソースについても同様に監視・通知を行うことができます。

とはいえCloudWatchを絡めてログ連携させる関係上、AWS側でもコストが少しかかるのに加えてDatadog側でも利用料金が発生します。 この辺りはコストと確認して、管理を円滑に進めるための必要経費として割り切る必要があるかなと感じました。

今回の内容が役立ちましたら幸いです。

SNSでシェアする