DatadogでLambdaの監視を行う方法_後編

前編では、DatadogでLambdaの実行メトリクス・実行ログを取得するための手順について記載しました。

後編となる今回は、Terraformを使ってDatadog の監視設定を行う手順について書きたいと思います。

1、Terraformのインストール

Terraformのインストールは以下記事の「3、Terraformのインストール」を参照してインストールしてください。

2、tfファイルの作成

監視設定の設定内容をTerraformのコードとして記述します。各属性の詳細な内容については、以下のリンクを参照してください。

datadog_monitor

後で記載するクエリ文字列に設定できるメトリクスについては、以下のリンクを参照します。

Lambda収集メトリクス

設定ファイルの拡張子は「<任意の名前>.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

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)