https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/sns_topic
https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/cloudwatch_metric_alarm
AWS Chatbotは公式でTerraform化されていないため、以下のように手動で行う。今後はCloudFormationが良さそう。
https://blog.chakimar.net/aws-chatbot-cloudwatch-logs/
目的としては以下、PostgreSQLのACCESS EXCLUSIVEやdeadlockが出た場合にエラー検知する流れ。
https://aws.amazon.com/jp/blogs/news/working-with-rds-and-aurora-postgresql-logs-part-1/
1 |
2024-03-15 08:47:09 UTC:xxx.xxx.xxx.xx.(xxxxx):xxxxxxx@xxxx:[3211]:DETAIL: Process holding the lock: 3217. Wait queue: 3211. |
- rds_parametergroup.tf
1 2 3 4 5 6 |
~省略~ parameter { apply_method = "immediate" name = "deadlock_timeout" value = "5000" } |
- sns.tf
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 |
resource "aws_sns_topic" "hoge_cloudwatch_logs_rds_monitor" { name = "hoge_cloudwatch-logs-rds-monitor" } resource "aws_sns_topic_policy" "hoge_cloudwatch_logs_rds_monitor_error" { arn = aws_sns_topic.hoge_cloudwatch-logs-rds-monitor.arn policy = <<EOF { "Version": "2008-10-17", "Id": "__default_policy_ID", "Statement": [ { "Sid": "__default_statement_ID", "Effect": "Allow", "Principal": { "AWS": "*", "Service": "codestar-notifications.amazonaws.com" }, "Action": [ "SNS:Publish", "SNS:RemovePermission", "SNS:SetTopicAttributes", "SNS:DeleteTopic", "SNS:ListSubscriptionsByTopic", "SNS:GetTopicAttributes", "SNS:AddPermission", "SNS:Subscribe" ], "Resource": "", "Condition": { "StringEquals": { "AWS:SourceOwner": "xxxxxxxxx" } } }, { "Sid": "AllowCloudWatchToPublish", "Effect": "Allow", "Principal": { "Service": "cloudwatch.amazonaws.com" }, "Action": "SNS:Publish", "Resource": "arn:aws:sns:ap-northeast-1:xxxx:hoge_cloudwatch-logs-rds-monitor" } ] } EOF } |
- cloudwatchlogs.tf
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
resource "aws_cloudwatch_log_group" "hoge_db" { name = "/aws/rds/cluster/hoge-db/postgresql" retention_in_days = 7 } resource "aws_cloudwatch_log_metric_filter" "hoge_db_error" { name = "hoge-db-lock-error" pattern = "Process holding the lock" log_group_name = aws_cloudwatch_log_group.hoge_db.name metric_transformation { name = "EventCount" namespace = "hoge_db-lock-error" value = "1" } } |
- cloudwatchlogs_alarm.tf
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
resource "aws_cloudwatch_metric_alarm" "hoge_db_lock_error_alarm" { alarm_name = "hoge-db-lock-error-alarm" comparison_operator = "GreaterThanOrEqualToThreshold" evaluation_periods = "1" metric_name = "EventCount" namespace = "hoge-db-lock-error" period = "60" statistic = "Sum" threshold = "1" alarm_description = "This alarm triggers when a 'hoge-db-lock-error' error occurs." actions_enabled = true alarm_actions = [aws_sns_topic.hoge_cloudwatch_logs_rds_monitor.arn] datapoints_to_alarm = 1 } |
- CloudWatch Logsにテストログを送る
Was this helpful?
0 / 0
1989年生まれのFindy/SRE。ホスティングから大規模なアドテクなどのインフラエンジニアとして携わる。現在はサービスの信頼性向上、DevOps、可用性、レイテンシ、パフォーマンス、モニタリング、オブザーバビリティ、緊急対応、AWSでのインフラ構築、Docker開発環境の提供、IaC、新技術の検証、リファクタリング、セキュリティ強化、分析基盤の運用などを担当している。個人事業主では数社サーバー保守とベンチャー企業のSREインフラコンサルティングやMENTA/TechBullで未経験者にインフラのコーチング/コミュニティマネージャーとして立ち上げと運営をしている。また、過去「脆弱性スキャナVuls」のOSS活動もしており、自称エバンジェリスト/技術広報/テクニカルサポート/コントリビュータでもある。