継続は力なり

タイトル通り定期的な更新を心掛けるブログです。

デッドロックの発生時に通知できるように CloudWatch Logs サブスクリプションフィルターを作る

タダです.

以前,デッドロックの発生時にエラーログを CloudWatch Logs に出力するパラメーターを紹介しました.デッドロック発生時に Datadog Logs に流したいと思って CloudWatch Logs サブスクリプションフィルターと Datadog のモニターを設定したので備忘録として設定内容を書きます.

sadayoshi-tada.hatenablog.com

設定したサブスクリプションフィルター

結論ですが, "*** (1) TRANSACTION:"で設定したところフィルタリングができています.Terraform での設定例で書くと,以下のようになります.この設定で CloudWatch Logs → Kinesis Data Strems → Lambda 等を使って Datadog Logs にログを転送することができました.

resource "aws_cloudwatch_log_subscription_filter" "deadlock_subsctiption_filter" {
  name            = [サブスクリプションフィルター名]
  role_arn        = [Kinesis Streams に流すための IAM ロール ARN]
  log_group_name  = [エラーログが出力されている CloudWatch Logs のグループ名]
  destination_arn = [Kinesis Streams の ARN]
  distribution    = "ByLogStream"
  filter_pattern  = "\"*** (1) TRANSACTION:\""
}

関連ドキュメント

docs.datadoghq.com

docs.datadoghq.com

デッドロックの発生時に通知する Datadog のモニター設定

デッドロックの詳細情報が Datadog Logs に流れてきたら後はその内容を通知していきます.こちらも Terraform で設定したので設定例を書きます.

resource "datadog_monitor" "deadlock_notify_monitor" {
  name  = [モニター名]
  type  = "log alert"
  query = "logs(\"service:rds @aws.awslogs.logGroup:\\\"/aws/rds/cluster/[Aurora クラスター名]/error\\\"\").index(\"*\").rollup(\"count\").last(\"5m\") >= 1"
  message = [アラートメッセージ]
  monitor_thresholds {
    critical = 1
  }
  enable_logs_sample  = true
}

まとめ

デッドロックの発生時に Datadog Logs にログを転送するための CloudWatch Logs サブスクリプションフィルターの設定と転送されたログからモニターを作ったので,その設定をまとめました.