+ 作るログイン
1 / 20
AWS でサービスを作る ― 知識ゼロから、構成を自分で考えられるまで / 全32章

AWS 17:監視 ― CloudWatch で「壊れた」に先に気づく

発行
アニメモ公式
版
第2版
改訂
コマ
全20

第16章で組んだ3層の Web 構成に、見張りを付けます。CloudWatch のメトリクス・ログ・アラーム・ダッシュボードの仕組み、原因ではなく利用者から見た症状を見張る考え方、SNS での通知、ログの保存期間とお金、どこで遅いかを探すトレース(X-Ray)の入口までを、フォトログを例に説明します。

構成はできた。でも、壊れたことに誰が気づく?

第16章で、フォトログは「ALB+Auto Scaling の EC2+RDS Multi-AZ+S3/CloudFront+Route 53」という3層の Web 構成になりました。サーバーが1台壊れても、ALB(第11章)が残りの1台へリクエストを回し、Auto Scaling(第12章)がやがて新しい1台を立ち上げます。DB も待機系(第13章)へ切り替わります。

よくできた構成です。ところが、1つ大事なものが抜けています。壊れたことを、あなたに知らせる仕組みです。

図では、Web 2 が壊れています。ALB は Web 1 だけにリクエストを送るので、利用者から見るとサイトは一応動いています。でも、次のようなことが静かに進んでいるかもしれません。

静かに進むことその先に起きること
1台で全員を受けている夕方の混む時間に、残りの1台も倒れる
新しい台が起動するたびに、同じ理由で壊れている入れ替えが延々と続き、いつまでも直らない
DB のディスクが少しずつ埋まっているある日、写真の投稿が一切できなくなる
一部の画面だけエラーが出ている利用者は黙って去り、あなたは理由を知らない

最初に気づくのが「利用者の書き込み」では遅すぎます。この章では、利用者より先に、あなたが異常に気づくための仕組み、つまり監視(システムの状態を見張り続けること)を、AWS の Amazon CloudWatch で作ります。

※2026年9月時点の情報です。画面・料金・細部は変わることがあります。

  • AWS でサービスを作る 17 ― 監視:CloudWatch
  • 1 / 20
  • 構成はできた。でも、壊れたことに誰が気づく?
  • VPC(第16章の構成)
  • サーバー
  • 会話
  • 「フォトログ落ちてる?」
  • 最初に気づいたのは利用者
  • 人々
  • ネットワーク
  • Web 1
  • データベース
  • 利用者
  • ALB
  • サーバー
  • NG
  • RDS
  • 月
  • あなた
  • 寝ている。何も知らない
  • Web 2
  • Web 2 が壊れても ALB が Web 1 へ回すので、見た目は動く。だが1台で回り続け、混めば落ちる
  • → 利用者より先に、あなたが気づく仕組みが要る。それが「監視」
  • ひらめき
  • 第16章の構成は、壊れても動き続けるように作った。だが「壊れた」と知らせる仕組みはまだ無い。

CloudWatch は、AWS 全体の「計器盤」

CloudWatch(クラウドウォッチ)は、AWS のサービスの状態を集めて、見せて、おかしければ知らせるサービスです。ほとんどの AWS サービスは、何も設定しなくても自分の状態を CloudWatch へ送っています。図の灰色の線が、各部品から CloudWatch へ流れ込む情報のイメージです。

車の運転席にたとえるとわかりやすくなります。

CloudWatch の道具車でいうと教えてくれること
メトリクス速度計・燃料計「どれくらい」を数字で。CPU が何%、エラーが何件
ログ走行記録・ドライブレコーダー「何が起きたか」を文章で。どの利用者のどの操作が失敗したか
アラーム警告灯・警告音数字が決めた線を超えたら鳴る
ダッシュボード運転席のパネル全体大事な数字を1枚に並べて、一目で見る

この章は、この4つを順番に見ていきます。最後に、「どこで遅いのか」を探すトレース(X-Ray)の入口にも触れます。

CloudWatch はリージョン(第2章)ごとのサービスです。東京リージョンに作った構成の数字は、東京リージョンの CloudWatch で見ます。

  • AWS でサービスを作る 17 ― 監視:CloudWatch
  • 2 / 20
  • CloudWatch は、AWS 全体の「計器盤」
  • VPC(第16章の構成)
  • サーバー
  • 折れ線
  • CloudWatch
  • 人々
  • ネットワーク
  • AWS の見張り番
  • Web 1
  • データベース
  • 利用者
  • ALB
  • サーバー
  • RDS
  • 折れ線
  • 書類
  • Web 2
  • メトリクス
  • ログ
  • 数字の変化
  • 出来事の記録
  • 通知
  • 画面
  • 車の計器盤と同じ:速度計(数字)・走行記録(ログ)・
  • 警告灯(アラーム)・パネル全体(ダッシュボード)
  • アラーム
  • ダッシュボード
  • おかしければ鳴る
  • 一目で見る
  • ひらめき
  • CloudWatch は数字・記録・警報・一覧表をまとめて持つ見張り番。この章はこの4つを順に見ていく。

メトリクス:決まった間隔で記録される「数字の列」

メトリクスは、ある数字を時間に沿って並べたものです。「3時00分に CPU 使用率 12%、3時05分に 15%……」のように、いつ・何が・いくつの点が並んでいます。図の棒の1本1本が、1つの点です。

1本のメトリクスは、次の3つで決まります。

項目意味例
名前空間どのサービスの数字かAWS/EC2、AWS/ApplicationELB、AWS/RDS
メトリクス名何の数字かCPUUtilization(CPU 使用率)
ディメンションどの1台(1つ)の数字かInstanceId=i-0abc…

同じ CPUUtilization でも、Web 1 と Web 2 ではディメンションが違うので、別の1本として記録されます。

数字を見たり、アラームに使ったりするときは、さらに2つを決めます。

項目意味
期間何分ぶんを1つの点にまとめるか(1分、5分など)
統計まとめ方。平均(Average)・最大(Maximum)・合計(Sum)・件数(SampleCount)など

たとえば「エラーの数」は5分の合計で、「CPU」は5分の平均で見る、というように、数字の性質に合った統計を選びます。「返事の時間」のように、一部の遅い利用者を見逃したくない数字では、平均ではなく p99(遅いほうから1%の位置の値)のようなパーセンタイルを使うこともできます。

  • AWS でサービスを作る 17 ― 監視:CloudWatch
  • 3 / 20
  • メトリクス:決まった間隔で記録される「数字の列」
  • EC2 の CPU 使用率(Web 1)
  • 名前空間
  • AWS/EC2(どのサービスか)
  • 名前
  • CPUUtilization
  • ディメンション
  • InstanceId=i-0abc…(どの1台か)
  • 統計
  • 平均・最大・合計・件数など
  • 期間
  • 何分ぶんを1点にまとめるか
  • 5分ごとの点 →
  • ひらめき
  • メトリクスは「いつ・何が・いくつ」の並び。名前空間・名前・ディメンションの3つで1本が決まる。

何もしなくても届く数字と、届かない数字

AWS のサービスの多くは、主な数字を自動で CloudWatch へ送っています。フォトログの部品では、次のようになっています。

部品自動で届く主な数字間隔
ALB(第11章)リクエスト数、返事の時間、エラーの数、健全・不健全な台数1分ごと(リクエストがあるとき)
EC2(第9章)CPU 使用率、ネットワークの量、ディスクの読み書き、状態チェック既定は5分ごと。詳細モニタリングを有効にすると1分ごと(追加料金)
RDS(第13章)CPU、空きディスク、接続数、読み書きの遅さ1分ごと

ここで1つ、よく驚かれる点があります。EC2 のメモリ使用率とディスクの空き容量は、自動では届きません。

理由は、それが OS(サーバーの中で動く基本ソフト)の中の数字だからです。AWS は仮想マシンの外側から CPU やネットワークは測れますが、OS の中でメモリがどう使われているかまでは見えません(見えないのは、あなたのサーバーの中を AWS が覗かないという意味でもあります)。

そこで、サーバーの中に CloudWatch エージェント(数字やログを集めて CloudWatch へ送る小さなプログラム)を入れます。エージェントが送る数字は、既定では CWAgent という名前空間に入り、カスタムメトリクス(自分で送る数字)として課金されます。

エージェントの設定は、ユーザーデータ(第9章)や自作の AMI(第10章)に入れておけば、Auto Scaling で増えた新しい台でも最初から動きます。EC2 には、エージェントが送信できる権限を持った IAM ロール(第3章)を付けておきます。

  • AWS でサービスを作る 17 ― 監視:CloudWatch
  • 4 / 20
  • 何もしなくても届く数字と、届かない数字
  • VPC(第16章の構成)
  • サーバー
  • 折れ線
  • CloudWatch
  • 人々
  • ネットワーク
  • AWS の見張り番
  • Web 1
  • データベース
  • 利用者
  • ALB
  • サーバー
  • RDS
  • 注意
  • 自動では届かない
  • Web 2
  • メモリ使用率・ディスクの空き。
  • OS の中の数字なので、
  • CloudWatch エージェントを入れる
  • ALB:1分ごと
  • EC2:5分ごと
  • RDS:1分ごと
  • ひらめき
  • ALB・EC2・RDS は主な数字を自動で送る。ただし EC2 のメモリとディスクの空きは、エージェントが要る。

何を見張るか:原因より先に「利用者から見た症状」

数字は山ほど取れます。では、どれにアラームを付ければいいのでしょうか。

大事な考え方は、まず利用者から見た「症状」を見張ることです。「CPU が 90%」は、それだけでは問題かどうかわかりません。CPU をしっかり使って、全員に速く返事できているなら、むしろ効率がよい状態です。問題なのは、利用者が困っているときです。

利用者の困り方は、だいたい次の4つに分けられます。

症状見る数字の例
エラー:失敗したサーバーが返した 5xx(サーバー側の失敗を表す HTTP の番号)の数や割合
遅さ:待たされる返事までの時間
入れない:届かないリクエストが急に0件になる、ヘルスチェックに全台落ちる
詰まり:余力が尽きそうディスクの空き、DB の接続数など「尽きたら即止まる」もの

これに対して、CPU・メモリ・DB の接続数・ログの中身は、なぜ困っているかを調べるときの手がかり(原因)です。

図の左(番号1)の症状で鳴らし、鳴ったら右(番号2)の原因を見に行く。この順番にすると、知らない原因で壊れたときでも、症状として必ず気づけるようになります。反対に、原因の数字にだけアラームを付けていると、思いもしなかった理由で壊れたとき、何も鳴りません。

なお「詰まり」は症状の一歩手前ですが、ディスクのように尽きた瞬間に全部止まるものは、症状が出る前に鳴らす価値があります。

  • AWS でサービスを作る 17 ― 監視:CloudWatch
  • 5 / 20
  • 何を見張るか:原因より先に「利用者から見た症状」
  • 症状(鳴らす):利用者が困っているか
  • 原因(調べる):なぜ困っているか
  • エラー
  • 失敗した返事の割合(5xx)
  • CPU
  • 計算が追いつかない?
  • 遅さ
  • 返事までの時間
  • メモリ
  • 足りずに遅い?
  • 入れない
  • サイトに届かない・0件
  • DB 接続数
  • 接続が溢れた?(第13章)
  • 詰まり
  • 余力が尽きそう(ディスク等)
  • ログ
  • 何のエラーが出た?
  • 症状に鳴らせば、原因が何であっても気づける。原因にだけ鳴らすと、知らない原因で壊れたときに黙ったまま
  • ひらめき
  • CPU が高くても、利用者が困っていなければ問題ではない。まず症状を見張り、原因は調べるときに見る。

フォトログで見張る数字を決める

前のページの考え方で、フォトログで見張る数字を決めます。入口の ALB は、すべてのリクエストが通る場所なので、利用者から見た症状を測るのにいちばん向いた場所です。

メトリクス名前空間役割アラームの考え方
HTTPCode_Target_5XX_CountAWS/ApplicationELB症状:エラー5分の合計が決めた件数を超えたら
TargetResponseTimeAWS/ApplicationELB症状:遅さp99 などが決めた秒数を超えたら
UnHealthyHostCountAWS/ApplicationELB症状の手前1台以上が不健全な状態が続いたら
CPUUtilizationAWS/EC2原因鳴らさず、Auto Scaling とダッシュボードで使う
FreeStorageSpaceAWS/RDS詰まり空きが少なくなったら(尽きる前に)
DatabaseConnectionsAWS/RDS原因ダッシュボードで見る。上限に近いなら要注意

「決めた件数」「決めた秒数」は、サービスによって違います。最初は少し緩めに決め、1〜2週間ふだんの数字を眺めてから締めるのが現実的です。

ALB には HTTPCode_ELB_5XX_Count という似た名前の数字もあります。こちらは ALB 自身が返したエラー(後ろのサーバーが1台も健全でない、など)です。Target のほうはサーバーが返したエラーです。両方を見ると、どちらで壊れているかの見当がつきます。

  • AWS でサービスを作る 17 ― 監視:CloudWatch
  • 6 / 20
  • フォトログで見張る数字を決める
  • メトリクス(名前空間)
  • 意味と、鳴らす目安の考え方
  • HTTPCode_Target_5XX_Count
  • サーバーが失敗した返事の数(ALB)。増えたら鳴らす
  • TargetResponseTime
  • サーバーの返事の時間(ALB)。遅くなったら鳴らす
  • UnHealthyHostCount
  • ヘルスチェックに落ちた台数(ALB・第11章)
  • CPUUtilization
  • EC2 の CPU。Auto Scaling の判断にも使う(第12章)
  • FreeStorageSpace
  • RDS のディスクの空き。尽きる前に鳴らす
  • DatabaseConnections
  • RDS への接続数。上限に近づいたら要注意
  • 赤=症状(利用者に直結) 黄・緑=原因の手がかり
  • ひらめき
  • 入口(ALB)で症状を、その奥(EC2・RDS)で原因を見る。この表がアラームの設計図になる。

ログ:「何が起きたか」を文章で残す

数字は「エラーが30件」と教えてくれますが、「どのエラーが、誰の、どの操作で」までは教えてくれません。それを残すのがログです。ログは、プログラムが出来事を1行ずつ書き残した記録です。

図の下の黒い板が、フォトログのアプリが書くログの例です。1行目は「写真の投稿(POST /photos)が成功(201)し、184ミリ秒かかった」、2行目は「画像の縮小に失敗した」という記録です。

ここで大事なのが、ログをサーバーの外へ送ることです。

ログをサーバーの中に置いたままだと困ること
Auto Scaling が壊れた台を消す(第12章)ログも一緒に消える。壊れた理由がわからない
サーバーが2台、10台と増える1台ずつ入って探さないといけない
サーバーに入る権限が要る調べるたびに、中へ入る人と権限が増える

そこで、CloudWatch エージェントでアプリのログを CloudWatch Logs へ送ります。こうすれば、台が消えてもログは残り、全台のログを1か所で探せます。

AWS のサービス自身もログを出せます。たとえば ALB のアクセスログ(誰がいつどこに来たか)は S3(第15章)へ、RDS のエラーログは CloudWatch Logs へ送る設定ができます。

  • AWS でサービスを作る 17 ― 監視:CloudWatch
  • 7 / 20
  • ログ:「何が起きたか」を文章で残す
  • VPC(第16章の構成)
  • サーバー
  • ログを送る
  • 折れ線
  • CloudWatch
  • 人々
  • ネットワーク
  • AWS の見張り番
  • Web 1
  • データベース
  • 利用者
  • ALB
  • サーバー
  • RDS
  • Auto Scaling(第12章)は壊れた台を
  • 消して入れ替える。中のログも一緒に
  • Web 2
  • 消えるので、外に出しておく
  • 2026-09-29T03:12:04Z POST /photos 201 184ms
  • 2026-09-29T03:12:07Z ERROR 画像の縮小に失敗 user=u_81
  • ひらめき
  • 数字は「どれくらい」を、ログは「何が」を教える。サーバーの中のログは、外へ送らないと消える。

ロググループとログストリーム

CloudWatch Logs には、ログを入れる棚が3段あります。

段意味フォトログの例
ロググループ同じ種類のログをまとめた棚。保存期間や権限はここで決める/photolog/app(アプリのログ)
ログストリーム1つの送り元からの流れEC2 1台ごと(インスタンス ID の名前)
ログイベント1行ぶんの記録。時刻と本文「画像の縮小に失敗」

図では、ロググループ /photolog/app の中に、Web 1・Web 2・入れ替わった新しい台のストリームが並んでいます。台が入れ替わっても、同じロググループに新しいストリームが増えるだけで、過去のストリームは残ります。

図の右下に赤で書いたとおり、ロググループの保存期間は、既定で「無期限」です。つまり、何もしなければログは永遠にたまり続けます。これはお金の話につながるので、後で詳しく見ます。

ログは、できれば1行を JSON({"level":"error","user":"u_81","msg":"..."} のような、項目名と値の組の形)で書いておくと、後で項目ごとに絞り込んだり数えたりしやすくなります。

  • AWS でサービスを作る 17 ― 監視:CloudWatch
  • 8 / 20
  • ロググループとログストリーム
  • ロググループ /photolog/app
  • イベント
  • 1行ぶんの記録
  • 書類
  • ストリーム:i-0abc(Web 1)
  • ストリーム
  • 1つの送り元の流れ
  • 書類
  • ストリーム:i-0def(Web 2)
  • グループ
  • 同じ種類をまとめた棚
  • 書類
  • ストリーム:i-0f12(入れ替わった新しい台)
  • 保存期間
  • 既定は「無期限」
  • ひらめき
  • ロググループ=同じ種類のログの棚(保存期間はここで決める)。ストリーム=1台ぶんの流れ。

たまったログから探す:Logs Insights

ログを集めたら、次は探します。CloudWatch Logs Insights は、ロググループに対して問い合わせの文(クエリ)を投げ、条件に合う行を探したり、数えたりする機能です。

図の左上は、「ERROR を含む行を、5分ごとに数える」クエリです。

行意味
fields @timestamp, @message時刻と本文を取り出す
filter @message like /ERROR/本文に ERROR を含む行だけに絞る
stats count(*) by bin(5m)5分ごとに件数を数える
sort @timestamp desc新しい順に並べる

結果を見ると、図の右のように3時10分ごろにエラーが急に増えています。この時刻に何があったか(新しい版を出した、利用者が急に増えた、など)と突き合わせれば、原因にぐっと近づけます。

Logs Insights は、問い合わせで読んだログの量に応じて課金されます。期間を「過去30日」にして巨大なロググループを何度も検索すると、思ったより高くつくことがあります。期間を絞ってから検索するのが基本です。

ログから数字を作る:メトリクスフィルター

「ERROR という行が5分で20回以上出たら鳴らしたい」。こう思ったとき、ログのままではアラームを付けられません。アラームが見張れるのは数字(メトリクス)だけだからです。

そこで使うのがメトリクスフィルターです。ロググループに「この文字列(やパターン)を見つけたら、この数字を1増やす」という決まりを付けておくと、ログが届くたびに数えて、メトリクスにしてくれます。

設定フォトログの例
対象のロググループ/photolog/app
パターンERROR を含む行
作るメトリクス名前空間 Photolog、名前 AppErrors、1件ごとに 1

こうして作った AppErrors には、他のメトリクスと同じようにアラームを付けられます。アプリのコードに手を入れず、すでに出しているログから数字を作れるのが利点です。

作った数字はカスタムメトリクスとして課金されます。細かく分けて何百本も作ると、それだけで費用がかさみます。

  • AWS でサービスを作る 17 ― 監視:CloudWatch
  • 9 / 20
  • たまったログから探す:Logs Insights
  • fields @timestamp, @message
  • 結果:5分ごとの ERROR 件数
  • | filter @message like /ERROR/
  • | stats count(*) by bin(5m)
  • | sort @timestamp desc
  • fields
  • 表示する項目を選ぶ
  • filter
  • ERROR を含む行だけ
  • stats … by bin(5m)
  • 5分ごとに件数を数える
  • 03:10 ごろに急増
  • ERROR の行を数え続けて数字にする仕組みが「メトリクスフィルター」。数字にすればアラームを付けられる
  • Logs Insights は読んだ量で課金される。検索する期間を絞ってから投げる
  • ひらめき
  • ロググループに問い合わせの文を投げて探し、数える。見つけた行を数字にもできる。

アラーム:しきい値を超え続けたら鳴る

アラームは、1本のメトリクスを見張り、決めた線(しきい値)を超えたら状態を変えて知らせる仕組みです。

ただし、1回だけ跳ねた数字でいちいち鳴っていたら、うるさくて仕方ありません。そこで CloudWatch のアラームは、次の組み合わせで「鳴らす条件」を決めます。

設定意味図の例
期間何分ぶんを1点にまとめるか5分
統計まとめ方平均
しきい値超えたら「悪い点」とする線80%
評価期間(N)直近いくつの点を見るか3
アラームを実行するデータポイント(M)そのうち何点が悪ければ鳴らすか2

この「N 点のうち M 点」という決め方が大事です。図の左側のように、1点だけ線を超えても鳴りません。右側のように、超えた状態が続いたときだけ鳴ります。

M と N を大きくすると誤報は減りますが、気づくのが遅れます。小さくすると早く気づけますが、誤報が増えます。どれだけ早く知りたいかとどれだけ誤報に耐えられるかの釣り合いで決めます。

  • AWS でサービスを作る 17 ― 監視:CloudWatch
  • 10 / 20
  • アラーム:しきい値を超え続けたら鳴る
  • 赤い線=しきい値(80%)
  • 期間
  • 5分(1点のまとめ方)
  • 評価期間
  • 直近 3 点を見る
  • 鳴らす点数
  • そのうち 2 点が超えたら
  • 統計
  • 平均
  • 「N 点のうち M 点」と呼ぶ
  • 1回だけ→鳴らない
  • 続いた→鳴る
  • ひらめき
  • 「5分の平均が80%超」を「3回のうち2回」満たしたら鳴らす、のように決める。1回の跳ねでは鳴らさない。

アラームの状態は3つ

アラームは、いつも次の3つのどれかの状態にいます。

状態意味
OK数字がしきい値の内側にある
ALARM数字がしきい値を超えた(条件を満たした)
INSUFFICIENT_DATA作った直後や、数字が届いていないなどで、判断できるだけのデータが無い

通知を送ったり、何かの操作をしたりするのは、状態が変わったときです。OK から ALARM に変わったときに「壊れた」、ALARM から OK に戻ったときに「直った」を知らせるように設定できます。

もう1つ、データが届かないときの扱いを決められます。

扱いどうなるか向いている数字
悪い点とみなす(breaching)ALARM へサーバーが止まると数字自体が途絶えるもの
良い点とみなす(notBreaching)OK へエラー件数のように、0件のときは数字が送られないもの
無視する(ignore)今の状態を保つときどきしか届かないもの
データ不足とする(missing)INSUFFICIENT_DATA へ既定の扱い

ALB のエラー件数は、エラーが0件の時間には点が送られません。これを既定のままにすると、平和なときほど「データ不足」になってしまいます。エラー件数には notBreaching を選ぶのが定番です。

  • AWS でサービスを作る 17 ― 監視:CloudWatch
  • 11 / 20
  • アラームの状態は3つ
  • OK
  • 通知
  • 砂時計
  • OK
  • ALARM
  • INSUFFICIENT_DATA
  • しきい値の内側
  • しきい値を超えた
  • 判断できるデータが無い
  • データが来ない=壊れた(breaching)
  • ALARM にする。止まると数字が途絶えるもの向き
  • データが来ない=正常(notBreaching)
  • OK にする。エラー件数のように「0 は送られない」もの向き
  • 無視する/データ不足にする
  • 今の状態を保つ/INSUFFICIENT_DATA にする
  • ひらめき
  • OK・ALARM・INSUFFICIENT_DATA(データ不足)。データが来ないときの扱いは自分で決められる。

鳴ったら知らせる:SNS でメールやチャットへ

アラームが ALARM になっても、画面を見ていなければ気づけません。そこで、アラームに通知を付けます。通知には Amazon SNS(Simple Notification Service)を使います。

SNS は「トピック」という掲示板のようなものを作り、そこに購読者(メールアドレス、チャットへの転送、スマホへの SMS など)を登録しておくと、トピックに届いた知らせを購読者全員に配ってくれるサービスです。

部品役割
アラーム状態が変わったら、SNS トピックへ知らせる
SNS トピック(photolog-alerts)知らせを受け取り、購読者全員へ配る
購読者メール、チャット(Slack などへは Amazon Q Developer in chat applications 経由で送れる)、電話・SMS など

図では、Web 2 の故障でアラームが鳴り、CloudWatch から SNS、そしてメールとチャットへ知らせが配られています。

メールで購読すると、最初に確認のメールが届きます。そのリンクを押すまで、通知は届きません。作っただけで安心しないことが大事です。

アラームは知らせるだけでなく、操作もできます。

アラームの操作例
Auto Scaling の操作混んできたら台数を増やす(第12章のスケーリングポリシー)
EC2 の操作状態チェックに落ちたら、再起動する・別のハードウェアへ移して復旧する
  • AWS でサービスを作る 17 ― 監視:CloudWatch
  • 12 / 20
  • 鳴ったら知らせる:SNS でメールやチャットへ
  • VPC(第16章の構成)
  • サーバー
  • 折れ線
  • CloudWatch
  • 人々
  • ネットワーク
  • AWS の見張り番
  • Web 1
  • データベース
  • 利用者
  • ALB
  • サーバー
  • NG
  • RDS
  • 送信
  • SNS トピック
  • photolog-alerts
  • Web 2
  • アラームは通知のほかに、Auto Scaling で台数を増やす・
  • メール
  • チャット・電話
  • EC2 を再起動する、といった操作もできる
  • ひらめき
  • アラームが SNS へ知らせ、SNS が購読者全員へ配る。メールは確認を押すまで届かない。

ダッシュボード:大事な数字を1枚に並べる

障害が起きて通知が届いたとき、まず何を見るでしょうか。そのとき慌てて数字を1本ずつ探さなくて済むように、大事な数字を1枚の画面に並べておくのがダッシュボードです。

並べ方のコツは、見る順番どおりに置くことです。

段置くもの役割
上の段(赤)5xx の数、返事の時間、不健全な台数症状。今、利用者が困っているか
下の段(黄・緑)EC2 の CPU、RDS の接続数、ERROR 件数原因の手がかり。なぜ困っているか

図のダッシュボードでは、すべてのグラフが同じ時刻に跳ねています。症状と原因を同じ時間の軸で並べておくと、「5xx が増えた時刻に、DB の接続数も増えている」のようなつながりがすぐに見えます。

ダッシュボードは、コンソールの CloudWatch の画面で、グラフを足していくだけで作れます。あるいは、設定を JSON で書いて作ることもできます。JSON で書けるということは、次の第18章で扱う「構成をコードにする」の対象にもできる、ということです。

  • AWS でサービスを作る 17 ― 監視:CloudWatch
  • 13 / 20
  • ダッシュボード:大事な数字を1枚に並べる
  • photolog-main(ダッシュボード)
  • 5xx の数
  • 返事の時間
  • 不健全な台数
  • EC2 CPU
  • RDS 接続数
  • ERROR 件数
  • ひらめき
  • 障害のとき最初に開く1枚。症状(上の段)→ 原因(下の段)の順に並べ、見る順番を決めておく。

作ってみる:通知先とアラームを CLI で

ここまでの部品を、CLI(第1章)で作ってみます。コンソールでも同じ項目を画面で選ぶだけです。

図の板は2つの手順に分かれています。

手順やること
1SNS トピックを作り、自分のメールアドレスで購読する。届いた確認メールのリンクを押す
2ALB の HTTPCode_Target_5XX_Count を見張るアラームを作る

アラームの設定の意味は次のとおりです。

設定意味
--namespace / --metric-name / --dimensionsどの数字を見るか(ALB の、サーバーが返した 5xx)
--statistic Sum --period 3005分(300秒)ごとの合計
--threshold 10 --comparison-operator GreaterThanThreshold10件を超えたら悪い点
--evaluation-periods 3 --datapoints-to-alarm 2直近3点のうち2点で鳴らす
--treat-missing-data notBreaching0件で点が来ないときは「良い」とみなす
--alarm-actions / --ok-actions鳴ったとき・直ったときの知らせ先

LoadBalancer のディメンションの値は、ALB の ARN の末尾(app/名前/ID の部分)です。

作ったら、わざと鳴らして通知が届くことを確かめておくと安心です。CLI の aws cloudwatch set-alarm-state で、アラームの状態を一時的に ALARM にできます。

  • AWS でサービスを作る 17 ― 監視:CloudWatch
  • 14 / 20
  • 作ってみる:通知先とアラームを CLI で
  • # 1. 通知先(SNS トピック)とメールの購読。届いた確認メールのリンクを押す
  • aws sns create-topic --name photolog-alerts
  • aws sns subscribe --topic-arn <トピックのARN> --protocol email --notification-endpoint [email protected]
  • # 2. ALB の 5xx が 5分ごとの合計で 10件超を、3回中2回 → 鳴らす
  • aws cloudwatch put-metric-alarm --alarm-name photolog-5xx \
  • --namespace AWS/ApplicationELB --metric-name HTTPCode_Target_5XX_Count \
  • --dimensions Name=LoadBalancer,Value=app/photolog-alb/xxxx \
  • --statistic Sum --period 300 --threshold 10 --comparison-operator GreaterThanThreshold \
  • --evaluation-periods 3 --datapoints-to-alarm 2 --treat-missing-data notBreaching \
  • --alarm-actions <トピックのARN> --ok-actions <トピックのARN>
  • ひらめき
  • SNS トピックを作ってメールを購読し、ALB の 5xx が続いたら鳴るアラームを付ける。

どこで遅いのか:トレース(X-Ray)の入口

アラームで「写真の投稿が遅い」とわかりました。では、どこで遅いのでしょうか。ALB?アプリ?DB?S3? メトリクスは部品ごとの数字なので、1つのリクエストが部品をまたいで流れる様子は見えません。

そこで使うのがトレースです。トレースは、1つのリクエストが通った道と、各区間にかかった時間を記録したものです。AWS では AWS X-Ray がトレースを集めて見せてくれます。

図は、写真の投稿1回ぶんのトレースを横棒で並べたものです。

区間図の棒読み取れること
ALB・アプリ全体にわたる長い棒リクエストの入口から出口まで
RDS に保存短いDB は遅くない
S3 に画像を置く短いS3 も遅くない
画像の縮小いちばん長いここが犯人

こうして犯人の区間がわかれば、直す場所がはっきりします。フォトログの場合、画像の縮小を投稿のたびにその場で待たせずに、後回しにするのが解決策です。これは第24章(非同期)で扱います。

トレースを取るには、アプリに計装(記録を取るための仕組みを組み込むこと)が要ります。2026年時点では、業界標準の OpenTelemetry(AWS 版は ADOT:AWS Distro for OpenTelemetry)で計装するのが推奨です。X-Ray 独自の SDK とデーモンは 2026年2月から保守のみの段階に入り、2027年2月に提供終了の予定です。これから始めるなら OpenTelemetry を選びます。

  • AWS でサービスを作る 17 ― 監視:CloudWatch
  • 15 / 20
  • どこで遅いのか:トレース(X-Ray)の入口
  • POST /photos(合計 1.8 秒)
  • ALB
  • アプリ(EC2)
  • RDS に保存
  • S3 に画像を置く
  • 画像の縮小
  • いちばん長い区間は「画像の縮小」。ここを後回しにする話は第24章(非同期)で扱う
  • 計装は OpenTelemetry(ADOT)が推奨。X-Ray の SDK は 2026年2月から保守のみの段階に入った
  • ひらめき
  • トレースは1つのリクエストが通った道と、各区間の時間を記録する。「遅い」の犯人を区間で探せる。

お金:何に課金されるか

CloudWatch の料金は、使う道具ごとに単位が違います。

道具何に対して課金されるか
標準のメトリクスALB・EC2(5分ごと)・RDS などが自動で送る数字は、追加料金なし
詳細モニタリングEC2 の数字を1分ごとにすると、追加料金
カスタムメトリクスエージェント・メトリクスフィルター・自作の数字。本数で課金
アラーム1本ごとに、存在している時間で課金
ダッシュボード枚数で課金
ログ取り込んだ量(GB)と、保存している量(GB・月)
Logs Insights問い合わせで読んだ量(GB)

いくつかの項目には無料枠があり、小さなサービスなら無料枠でかなりの部分が収まります。単価と無料枠の量は変わるので、CloudWatch の料金ページで確認してください。

気をつけたいのは、いちばん膨らみやすいのはログだという点です。1リクエストごとに何行もログを書くと、利用者が増えるにつれて取り込み量がそのまま増えます。「デバッグ用の細かいログは本番では出さない」「必要な項目だけ書く」を心がけます。

CloudWatch Logs には、取り込みの単価が安い Infrequent Access(あまり検索しないログ向け)という種類もあります。できる機能が一部限られるので、使い分けは料金ページと公式ドキュメントで確かめます。

  • AWS でサービスを作る 17 ― 監視:CloudWatch
  • 16 / 20
  • お金:何に課金されるか
  • 標準のメトリクス
  • ALB・EC2(5分)・RDS などが自動で送る分は追加料金なし
  • 詳細モニタリング
  • EC2 を1分ごとにすると追加料金
  • カスタムメトリクス
  • エージェント・フィルター・自作の数字。本数で課金
  • アラーム
  • 1本ごとに、存在している時間で課金
  • ダッシュボード
  • 枚数で課金(少数の無料枠あり)
  • ログ
  • 取り込んだ量(GB)と、保存している量(GB・月)
  • Logs Insights
  • 問い合わせで読んだ量(GB)
  • 単価と無料枠の量は、CloudWatch の料金ページで確認する
  • ひらめき
  • 数字は「本数」、アラームは「本数×時間」、ログは「取り込んだ量」と「置いている量」。無料枠もある。

ログの保存期間は、既定で「無期限」

ロググループの保存期間は、何も設定しないと無期限です。ログは消えずにたまり続け、保存料も毎月少しずつ増えていきます。図の赤い棒のように、何年も経つと「誰も読まないログに毎月払っている」状態になります。

そこで、ロググループを作ったらすぐに保存期間を決めます。1日から10年までの決まった日数から選べます。

ログの種類目安の考え方
アプリのログ障害の調査に使う。30〜90日あれば足りることが多い
アクセスログ問い合わせや不正の調査にどこまで遡りたいか
監査・法令で残すもの社内の決まりや法律に従う。長く安く置くなら S3 へ書き出す手もある

設定は、図の右下のコマンド1行でできます(コンソールでも、ロググループの「保持期間」から変えられます)。

保存期間を過ぎたログは削除の対象になります。すぐに消えるわけではなく、少し時間がかかることがありますが、対象になった時点からは保存料がかかりません。

  • AWS でサービスを作る 17 ― 監視:CloudWatch
  • 17 / 20
  • ログの保存期間は、既定で「無期限」
  • 無期限:保存量が毎月ふくらむ
  • アプリのログ
  • 30日〜90日
  • アクセスログ
  • 調査に要る期間
  • 監査が要るもの
  • 決まりに従う(年単位)
  • aws logs put-retention-policy \
  • --log-group-name /photolog/app \
  • 月 →
  • --retention-in-days 30
  • ひらめき
  • ログは消さない限りたまり続け、保存料も毎月増える。ロググループごとに保存期間を決める。

よくある落とし穴

監視は「付けたつもり」になりやすい仕組みです。よくある失敗を並べます。

落とし穴なぜ困るか対策
アラームが多すぎて毎日鳴る慣れてしまい、本物の警報を見逃す(オオカミ少年)鳴ったら誰かが必ず動くものだけにする
メールの購読確認を押していない鳴っても誰にも届かないわざと鳴らして確かめる
EC2(5分ごと)に1分の期間のアラーム点が足りず、ずっとデータ不足期間を5分にするか、詳細モニタリングを有効にする
ログにパスワード・トークン・個人情報を書くログを読める人全員に漏れる書く前に取り除く。ロググループの権限も絞る
ログの保存期間を決めない保存料が毎月ふくらむ作ったらすぐ決める
通知先が1人のメールだけその人が休みだと誰も気づかないチームのチャットや当番の仕組みへ送る

図のいちばん下の、緑の印の項目が、この章でいちばん伝えたいことです。鳴らすのは症状に絞り、原因はダッシュボードで見る。これだけで、アラームは「うるさいだけのもの」から「信頼できる知らせ」に変わります。

  • AWS でサービスを作る 17 ― 監視:CloudWatch
  • 18 / 20
  • よくある落とし穴
  • NG
  • アラームが多すぎて毎日鳴る → 慣れて本物を見逃す(オオカミ少年)
  • NG
  • メールの購読確認を押していない → 鳴っても誰にも届かない
  • NG
  • EC2 は5分ごとなのに「1分の期間」で作る → データ不足のまま
  • NG
  • ログにパスワード・トークン・個人情報を書く → 読める人全員に漏れる
  • NG
  • ログの保存期間を決めない → 保存料が毎月ふくらむ
  • OK
  • 鳴らすのは症状に絞る。原因はダッシュボードで見る
  • ひらめき
  • 鳴りすぎるアラームは、誰も見なくなる。鳴ったら必ず誰かが動く、という本数に絞る。

片付け:練習で作った監視を消す

この章で練習のために作ったものは、次の順で消します。フォトログの構成そのもの(ALB・EC2・RDS など)の片付けは、第16章を見てください。

番号消すもの方法(CLI の例)
1アラームaws cloudwatch delete-alarms --alarm-names photolog-5xx
2ダッシュボードaws cloudwatch delete-dashboards --dashboard-names photolog-main
3ロググループaws logs delete-log-group --log-group-name /photolog/app
4SNS トピックaws sns delete-topic --topic-arn <トピックのARN>(購読も一緒に消える)
5エージェントサーバーのエージェントを止める。起動テンプレートの設定からも外す

カスタムメトリクスには「削除する」操作がありません。送るのをやめれば、やがて課金の対象から外れ、数字もしばらくすると見えなくなります。メトリクスフィルターは、ロググループを消すと一緒に消えます。

ロググループを消すと、中のログは戻せません。調査に使うログが残っていないか確かめてから消してください。

  • AWS でサービスを作る 17 ― 監視:CloudWatch
  • 19 / 20
  • 片付け:練習で作った監視を消す
  • 通知
  • 画面
  • 書類
  • アラーム
  • ダッシュボード
  • ロググループ
  • delete-alarms
  • delete-dashboards
  • logs delete-log-group
  • 送信
  • 設定
  • SNS トピック
  • エージェント
  • sns delete-topic
  • 送るのをやめる
  • カスタムメトリクスは送るのをやめれば、やがて課金対象から外れる(消す操作は無い)
  • ひらめき
  • アラーム・ダッシュボード・ログ・SNS を消す。構成そのものの片付けは第16章を見る。

まとめ:数字・記録・警報・一覧表で「先に気づく」

この章では、第16章で組んだ構成に「見張り」を付けました。

項目内容
メトリクス決まった間隔の数字。名前空間・名前・ディメンションで1本が決まる
自動で届かないものEC2 のメモリとディスクの空き。CloudWatch エージェントを入れる
何を見張るかまず利用者から見た症状(エラー・遅さ・入れない・詰まり)。原因は調べるときに見る
ログ何が起きたか。サーバーの外(CloudWatch Logs)へ送る。保存期間は既定で無期限なので決める
Logs Insights・フィルターログを探す・数える。ログから数字を作ってアラームに使う
アラーム「N 点のうち M 点」で鳴らす。状態は OK / ALARM / INSUFFICIENT_DATA
通知SNS トピック → メール・チャット。購読確認を忘れない
ダッシュボード障害のとき最初に開く1枚。症状 → 原因の順に並べる
トレースどの区間が遅いか。OpenTelemetry で計装し、X-Ray で見る

ところで、ここまでの VPC・サブネット・ALB・Auto Scaling・RDS、そしてこの章のアラームやダッシュボードは、すべてコンソールで手でクリックして作ってきました。

では、「本番とまったく同じ構成を、試験用にもう1つ作って」と言われたら、同じものを間違いなく作れるでしょうか。先月誰かが画面で変えた設定を、あなたは知っているでしょうか。次の第18章では、この「手作業の構成」の問題を、構成をコードにする(IaC)ことで解決します。

  • AWS でサービスを作る 17 ― 監視:CloudWatch
  • 20 / 20
  • まとめ:数字・記録・警報・一覧表で「先に気づく」
  • メトリクス
  • 決まった間隔の数字。名前空間・名前・ディメンションで1本
  • 見張るもの
  • まず利用者から見た症状(エラー・遅さ・入れない・詰まり)
  • ログ
  • 何が起きたか。外に送り、保存期間を決める(既定は無期限)
  • アラーム
  • N 点のうち M 点。状態は OK / ALARM / データ不足
  • 通知
  • SNS トピック → メール・チャット。購読確認を忘れない
  • ダッシュボード
  • 障害のとき最初に開く1枚。症状 → 原因の順
  • トレース
  • どの区間が遅いか。OpenTelemetry で計装し X-Ray で見る
  • ひらめき
  • 次の第18章:ここまでの構成も監視も、すべて手でクリックして作った。もう1つ同じ環境を作れるだろうか?

0 件のコメント

読み込み中…

権利侵害・不適切な内容の連絡: [email protected]