今回はAWSをDatadogを連携させたので、その際の手順についてメモを兼ねて記事にしたいと思います。
AWS
で作成したアプリケーションのログ管理といえばCloudWatch
かと思います。
AWS
上のリソースの動作ログを追うという意味では十分なのですが、如何せん表記がわかりにくい箇所もあり、何かしらダッシュボードのようなものが欲しいと感じていました。
そこで今回はDatadog
と連携させることで、API Gateway
で発生しているエラー等を分かりやすくしたいと思います。
Datadog
はサーバ監視・分析のクラウドサービスです。
単純な死活監視から細かなログ分析・通知まで手広く行うことができます。
今回はAWS
との連携を扱いますが、他にもGCP
やAzure
など有名どころのクラウドサービスは抑えてあります。もちろんエージェントを導入することでオンプレでも利用できます。
なお前提としてDatadog
のアカウントは作成済みとしますが、フリートライアルとして14日間利用できるようなので、興味のある方は試してみてください。
以下、実際に行った設定になります。
メニューの【Integrations】から【AWS】を選択します。 連携先の設定画面が開かれるので【Configuration】内の【アカウント設定】を押下し、【Automatically Using CloudFormation】を選択します。
対AWS
との連携においてはDatadog
がCloudFormation
のテンプレートを用意してくれており、それをAWS
上で展開するだけでデータの導通設定が可能になります。
※導通にあたっていくつかリソースを立ち上げます。CloudWatch
が多いですが、当然課金が発生しますのでご注意ください。
さらに連携用のAPI Key
を作成します。
【Create New】から任意の名前でAPI Key
を作成し【Launch CloudFormation Template】を押下します。
自動でAWS
コンソールのCloudFormation
画面に遷移するのでそのままスタックを作成します。
ここで作成されたスタック群の中のdata-forward
(Datadogへのログデータ転送)を行っているLambda
が中心となっていきます。
今回はAPI Gateway
側のログをDatadog
に送ることにします。
API Gateway
の対象となるAPI
のステージ設定でCloudWatch
と連携するようにします。
仮に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(),
},
});
いずれの方法でも、作成したLogGroup
をdata-forward
しているLambda
のトリガーに指定してあげる必要があります。
こうすることで、「API Gateway
が動く」→「LogGroup
のログが書き込まれる」→「Lanbda
がトリガーされ、Datadog
に書き込まれる」という流れになります。
実際にAPI
を動かしてみると、以下のような感じでDatadog
にログが流れてきていることが分かります。
ここで表示しているのはAPI Gateway
の動作ログなので、主には「いつ」「どこからリクエストが来て」「どんなレスポンスが返ったか」をアバウトに把握できるだけです。
実際には、ここに加えてAPI Gateway
から呼び出されたLambda
等のログを合わせることによって細かな解析ができるようになります。
ここからは少しおまけ的な内容でAPI Gateway
でエラーに応じてSlack
に通知されるようにしてみます。
過去にも上記のような記事でCloudWatch
からSNS
等を用いてSlack
連携はさせましたが、今回はログ解析の主体がDatadog
なのでそちらでやってみます。
AWS
と連携させた時と同様に【Integrations】からSlack
を選択します。
※ここで、どんなワークスペースのどんなチャンネルかを選択します。
【Define the metric】で監視するメトリクスの内訳(ここでは4XXエラーと5XXエラー)を設定した後、【Set alert conditions】で閾値(ここでは1件でWarning、2件でアラート)を設定します。
あとは【Notify your team】で通知先・メッセージを編集すれば完了です。
メッセージには{{is_alert}}
のようにDatadog
独自のパラメータを埋め込むこともできます。設定可能な値については下記リンクを参照ください。
これで設定した閾値を跨いだ場合Slack
に通知が飛ぶようになったかと思います。
今回はAWS
のログ解析のためにDatadog
と連携させた際の設定手順をまとめました。
CloudFormation
が用意されていることで、比較的手間もなく連携が成功しました。
今回はAPI Gateway
の連携を主にしましたが、他のリソースについても同様に監視・通知を行うことができます。
とはいえCloudWatch
を絡めてログ連携させる関係上、AWS
側でもコストが少しかかるのに加えてDatadog
側でも利用料金が発生します。
この辺りはコストと確認して、管理を円滑に進めるための必要経費として割り切る必要があるかなと感じました。
今回の内容が役立ちましたら幸いです。