Amazon Web Services 資料一覧
ALBのAnomalousHostCountメトリクスを簡単に出す方法
2024/05/31更新
ALBのAnomalousHostCountメトリクスはターゲットホストからの異常応答(HTTP 5XXなど)が他のターゲットよりも多い場合の対象ターゲット数を表すが、これを簡単に出す環境を作る。(AnomalousHostCountをトリガーにアラームを設定する場合などにそのテスト環境として役に立つのではないかと)
環境作成とテスト
ALBにぶら下げるターゲットはAWSがAnomalousHostを判断するために3台以上必要なので、まず以下のEC2インスタンスを3台作成する。
Amazon Linux 2023 + nginx(インストールのみ)
次にこのうち1台だけnginxに流量制御を設定する。
$ sudo vi /etc/nginx/nginx.conf : http { limit_req_zone $binary_remote_addr zone=req:1m rate=1r/s; limit_req zone=req; : } $ sudo systemctl restart nginx
limit_req_zoneで流量制御のゾーン定義をし、limit_reqでそのゾーンを有効化する。
$binary_remote_addr
リモートアドレス毎にバッファを用意
zone=req:1m
バッファに「req」というゾーン名を付け、バッファ容量は1MBとする
rate=1r/s
1秒間に1リクエストまでの受け入れを許可
その他パラメータの詳細は公式ドキュメントを参照のこと。
Module ngx_http_limit_req_module (nginx)
この状態でALBを作成して上記3台のEC2をぶら下げ、ヘルスチェックの失敗回数(非正常のしきい値)を2から10に増やしてターゲットホストがUnHealthyになる条件を緩めた上で外部から例えば0.2秒毎にリクエストを送るとAnomalousHostCountメトリクスが出る。
$ while [ 1 ] do curl http://<ALB>のURL/ sleep 0.2 done
なお、流量制御を設定したnginxのログには以下のような内容が記録される。
/var/log/nginx/access.log
xx.xx.xx.xx - - [DD/MMM/YYYY:hh:mm:ss +0900] "GET / HTTP/1.1" 503 3693 "-" "curl/x.x.x" "xx.xx.xx.xx"
/var/log/nginx/error.log
YYYY/MM/DD hh:mm:ss [error] 2187#2187: *1774 limiting requests, excess: 0.195 by zone "req", client: xx.xx.xx.xx, server: _, request: "GET / HTTP/1.1", host: "xxxxxxxx.ap-northeast-1.elb.amazonaws.com"
参考ドキュメント
Application Load Balancer のターゲットグループ > 自動ターゲット重み (ATW) (Amazon Web Services)