🖥

AWS + Terraform – ALBのエラーを CloudWatch メトリクスで検知して通知する

2023/10/07に公開

標準メトリクス

CloudWatch > メトリクス にいろんな標準メトリクスがある

ALBだけでも相当色々な数があるが「リージョン別のメトリクス」とか「ALB単位のメトリクス」とかに分かれているようだ

アラームの作成

CloudWatch > アラーム から新しいアラームを作成できる

ここで好きなメトリクスを選んでしきい値などを設定すれば良い

ALB (ELB) の500系エラーの説明

ALBの層で起こるエラーと、ターゲット内(アプリケーション層とか)で起こるエラーはメトリクスの種類が分かれているようだ

HTTPCode_ELB_5XX_Count
ロードバランサーから送信される HTTP 5XX サーバーエラーコードの数。この数には、ターゲットによって生成される応答コードは含まれません。

HTTPCode_Target_5XX_Count
ターゲットによって生成された HTTP 応答コードの数。これには、ロードバランサーによって生成される応答コードは含まれません。

https://docs.aws.amazon.com/ja_jp/elasticloadbalancing/latest/application/load-balancer-cloudwatch-metrics.html

通知の設定

メトリクスの作成・編集でSNSトピックとの連携ができるので、SNSトピックを設定してサブスクリプションも設定する

例えばLambdaスクリプトを使う場合は

CloudWatchメトリクス -> ALARM -> SNSトピック -> サブスクリプション -> Lambda

という経路になる (長い)

ログはどこに?

ALBのログはS3に保存されているようだ
CloudWatchでは見られない ( 2023/09/20 現在)

落とし穴

エラーを発生させてもメトリクスのページでどのエラーの回数も最大1までにしかならない
他のタブにしれっと「平均」とか「合計」の選択が紛れ込んでいた

ここを合計にすると(当たり前だが)合計値が見やすい

<img width="563" alt="image" src="https://github.com/YumaInaura/YumaInaura/assets/13635059/66b26c2f-6c98-4eb2-967f-28c09cca5b2b">

Terraform

標準メトリクスを指定してアラームを作れるようなので、公式説明を参考に metric_name などを指定すれば良さそう

metric_name と namespace はそれぞれ存在する正しい指定にしないといけないようだ
あとALBの指定も必要

resource "aws_cloudwatch_metric_alarm" "foobar" {
  alarm_name                = "terraform-test-foobar5"
  comparison_operator       = "GreaterThanOrEqualToThreshold"
  metric_name               = "メトリクスの名前"
  namespace                 = "AWS名前空間"
  evaluation_periods        = 2
  period                    = 60
  statistic                 = "Sum"
  threshold                 = 10
  alarm_description         = "Alarm!"
  insufficient_data_actions = []

  dimensions = {
    LoadBalancer = "<ALB_PATH>"
  }

}
  • periods : チェック期間の秒数、デフォルトは60秒=1分
  • threshold : チェックのしきい値 (上のコード例であれば、期間内にエラーが10回以上起きた場合を検知したい場合は5にする)
  • evaluation_periods : 何回の繰り返しを検知するか ( 2にした場合は periods/treadshold などで指定したエラーが2回繰り返された場合にALARM扱いにする )

LoadBalancerにはALBのARNでもなく一部のパスを渡す必要がありそうだ

たとえばARNが以下なら

arn:aws:elasticloadbalancing:<REGION>:<ACCOUNT>:loadbalancer/app/alb-name/1234567890

以下の部分

app/alb-name/1234567890

https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/cloudwatch_metric_alarm

どうやって500系エラーを起こすか

ALBのリスナーのルールで、てきとうに500系のエラーを起こすルールを作っておけば確認しやすい

チャットメンバー募集

何か質問、悩み事、相談などあればLINEオープンチャットもご利用ください。

https://line.me/ti/g2/eEPltQ6Tzh3pYAZV8JXKZqc7PJ6L0rpm573dcQ

Twitter

https://twitter.com/YumaInaura

公開日時

2023-09-20

Discussion