概要
- こんにちわ。2023/7/11 (火) に、JAWS-UG 名古屋にLT枠で参加しました。7月のJAWS-UG 名古屋は、『オブザーバビリティ for AWS』をテーマに開催されました。
- 会場は、コラボベース NAGOYA。とてもオシャレな会場で、この回は多くのエンジニアの方々が参加。私も「CloudWatchカスタムメトリクスをトリガにスケールするEC2 ASGのタイトルにて、実際に業務で経験したオブザーバビリティの実例をお話しました。
LT の概要
オブザーバビリティとは
- オブザーバビリティ(Observability)→ 可観測性と訳される。
- モニタリングとオブザーバビリティは、意味が異なる。モニタリングは、「何が起きているか」を見ること。
- オブザーバビリティは、「何が障害の原因だったのか」、「どこに影響があるのか」「どう対処すれば良いのか」を把握すること。
私が遭遇した実例
- とあるEC2 Auto Scaling構成の httpサーバー(Apache)がある。定期的に、一部インスタンスでElastic Load Balancing のヘルスチェックのunhealthy が起こるようになった。
- 特定のインスタンスではなく、事象発生時に複数台で起き始める。
- メトリクス,ログから原因不明 → なぜか時間の経過でunhealthyは解消される。
原因と対処
- unhealthy のインスタンスがヘルスチェック失敗で削除される前に、インスタンスOS に乗り込んで調査。
- ApacheのWorkers にはIdleは見受けられず、スレッドは使い切っていることが予測された(httpサーバーが処理しきれない状態だった)。
- 高負荷の時間帯(アクセスが多い時間帯)では性能不足あり、性能改善が必要と認識。改善策はいくつかある。並行して改善は進めるが、インスタンスの台数を増やす必要ありと判断した。
- Apacheの同時接続数(MaxRequestWorkers)の変更
- ApacheのKeepAliveTimeout値の見直し
- インスタンスの台数増やす
- → 単純に増やすとコスト増
- EC2 AutoScaling ポリシーを使いたい
- → だけど台数増やすタイミングが不明(LoadBalancerにぴったりなメトリクスはなし)
伝えたいポイント
- 今回の実例は、CloudWatchメトリクスだけでは「なんかおこった!」しか見えてこない。unhealthy のメトリクスをトリガにEC2 にログインしたり、Linuxコマンドを叩く必要があった。調べるインスタンスは何台もあり、調査には時間を必要とする。
- 標準のメトリクスだけでは、このシステムで本当に起きていること(root cause)が、見えない!
- 調査の結果、原因と対処は分かった。
- だけど、unhealthy が起きてから運用が手作業でスケールアウトなんて無理だ。人力の監視と対処を何とかしたい!
- httpのプロセス数をにらめっこしていたら、これ使うと事前に対処出来そう。
- だけど、CloudWatch にプロセス数を見るメトリクスはない? プロセス数を可視化したい!
- CloudWatch Agent の設定によってプロセス数のカスタムメトリクスが導入できるぞ。
- 待てよ? プロセス数をしきい値にインスタンスを1台ずつ増やしたいのに、AutoScalingGroup に所属するインスタンスの台数分、スケールアウトが発動しちゃうかも!? AutoScalingGroupでメトリクスをまとめることはできないのか?
LT のスライド
- どうやったらプロセス数をAutoScalingGroup単位で可視化できるか、そしてAutoScaling ポリシーにスケールアウトを組み込めるかを検証。その結果を解説しました。
- 詳細は、以下のスライドを参照。
- 以下は、LT の様子です。