前編では、DatadogでLambdaの実行メトリクス・実行ログを取得するための手順について記載しました。
後編となる今回は、Terraformを使ってDatadog の監視設定を行う手順について書きたいと思います。
1、Terraformのインストール
Terraformのインストールは以下記事の「3、Terraformのインストール」を参照してインストールしてください。
2、tfファイルの作成
監視設定の設定内容をTerraformのコードとして記述します。各属性の詳細な内容については、以下のリンクを参照してください。
後で記載するクエリ文字列に設定できるメトリクスについては、以下のリンクを参照します。
設定ファイルの拡張子は「<任意の名前>.tf」として保存します。
2-1、件数をカウントする設定
「5分間当たりのLambda実行回数」や「5分間当たりの実行エラー発生数」でアラートを発生させる場合は、以下のようなquery文字列を設定したコードを記述します。
resource "datadog_monitor" "lambda-error-count" {
name = "Lambda 実行エラー件数 アラート"
type = "metric alert"
tags = ["service:hogehoge"]
message = <<EOT
===============================================
■検知時刻(UTC) {{last_triggered_at}}
■監視対象 Lambda Function Name {{functionname.name}}
===============================================
## 以下のDatadogを参照し、状況を確認してください。
@hogehoge {{^is_recovery}} @hogehoge{{/is_recovery}}
EOT
escalation_message = <<EOT
EOT
query = "sum(last_5m):default(max:aws.lambda.errors{system:hogehoge} by {functionname}.as_count(), 0) >= 1"
notify_no_data = false
renotify_interval = 0
notify_audit = false
timeout_h = 0
include_tags = true
require_full_window = false
new_host_delay = 300
evaluation_delay = 900
thresholds = {
critical = 1
}
}
「message」属性はヒアドキュメント形式で記述することが出来ます。
ポイントは「query」属性を「”sum(last_5m):default(hogehoge by {functionname}.as_count(), 0) >= 1″」のように設定し、回数をカウントできるようにします。
「query」部分は以下の意味となります。
sum(last_5m)→5分間当たり
default(<メトリクス取得>.as_count(), 0)→合計値を算出
max:aws.lambda.errors{タグなど関数の識別子} by {functionname}→どのメトリクスを取得するか。「errors」部分を取得したいメトリクスによって変更する。
コードとして記述する前に、Datadog のモニター作成画面でクエリ文字列を入力し、設定値が想定通りに機能するか確認することをお勧めします。
2-2、実行時間をカウントする設定
「Lambda関数1回実行当たりの実行時間」でアラートを発生させる場合は、以下のようなquery文字列を設定したコードを記述します。
resource "datadog_monitor" "lambda-duration" {
name = "Lambda 実行時間 アラート"
type = "metric alert"
tags = ["service:hogehoge"]
message = <<EOT
===============================================
■検知時刻(UTC) {{last_triggered_at}}
■監視対象 Lambda Function Name {{functionname.name}}
===============================================
## 以下のDatadogを参照し、状況を確認してください。
@hogehoge {{^is_recovery}} @hogehoge{{/is_recovery}}
EOT
escalation_message = <<EOT
EOT
query = "sum(last_5m):max:aws.lambda.duration{system:hogehoge} by {functionname} >= 30000"
notify_no_data = false
renotify_interval = 0
notify_audit = false
timeout_h = 0
include_tags = true
require_full_window = false
new_host_delay = 300
evaluation_delay = 900
thresholds = {
critical = 30000
}
}
ポイントは「query」属性を「”sum(last_5m):max:aws.lambda.duration{system:hogehoge} by {functionname} >= 30000″」のように設定し、回数をカウントできるようにします。
ポイントは「default(<メトリクス取得>.as_count(), 0)」を記載しないことです。
2-3、ログ内の文字列を検知する設定
Lambda実行時のログ文字列を検知してアラートを発生させる場合は、以下のようなquery文字列を設定したコードを記述します。
resource "datadog_monitor" "lambda-log-error" {
name = "Lambda ERROR文字列検知 アラート"
type = "log alert"
tags = ["service:hogehoge"]
message = <<EOT
===============================================
■検知時刻(UTC) {{last_triggered_at}}
■内容 ERRORの文字列を検知
===============================================
@hogehoge {{^is_recovery}} @hogehoge{{/is_recovery}}
EOT
escalation_message = <<EOT
EOT
query = "logs(\"system:hogehoge *error*\").index(\"*\").rollup(\"count\").by(\"functionname\").last(\"5m\") >= 1"
notify_audit = false
locked = false
include_tags = true
new_host_delay = 300
require_full_window = false
notify_no_data = false
enable_logs_sample = false
thresholds = {
critical = 1
}
}
ポイントは以下となります。
- type属性を”log alert”に設定する。
- query属性で”logs()”の中に判定条件式を設定する。
2-4、DataDogの認証情報設定(オプション)
この設定項目は設定ファイルをGitなどで管理する場合に、別ファイルへ記載してリモートリポジトリにアップロードされないよう、注意してください。
また、認証情報を環境変数に記載することもできます。
provider "datadog" {
api_key = "${var.datadog_api_key}"
app_key = "${var.datadog_app_key}"
}
3、Terraformコードのデプロイ
3-1、Terraformの初期化
設定ファイル(.tf)があるディレクトリで以下のコマンドを実行します。
terraform init
3-2、デプロイ前の確認
設定ファイルをDataDogにデプロイする前に、構文に問題がないか確認します。この確認では、アラート発生条件のクエリ内容などはチェックされないため、デプロイ後のテストで正常に機能するか確認します。
また、項目2-4で認証情報を設定しなかった場合は、確認コマンド実行前に認証情報を環境変数に設定します。
export DATADOG_API_KEY=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
export DATADOG_APP_KEY=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
terraform plan
3-3、設定のデプロイ
3-2でエラーがない場合は、以下のコマンドを実行して、Datadog へ設定をデプロイします。
terraform apply