AWS CloudWatchアラームでリソースの異常を通知する方法|初心者向け監視・ログ完全入門
生徒
「AWSを使い始めたんですが、サーバーが止まったり負荷が高くなったことに気づく方法はありますか?」
先生
「AWSでは、CloudWatch(クラウドウォッチ)という監視サービスを使って、リソースの状態を自動で見張ることができます。」
生徒
「ずっと画面を見ていないといけないんですか?」
先生
「いいえ。CloudWatchアラームを設定すれば、異常が起きたときにメールなどで通知を受け取れます。」
生徒
「それなら初心者の自分でも安心してAWSを使えそうですね。」
1. CloudWatchとは何か
CloudWatchは、AWS上で動いているサービスやサーバーの状態を監視するための仕組みです。CPU使用率やメモリの動き、ネットワークの通信量など、目に見えない内部の情報を数値として集めてくれます。これらの情報はメトリクスと呼ばれ、AWSの監視やログ管理の基本となります。初心者にとっては、CloudWatchは「AWSの健康診断表」のような存在だと考えると分かりやすいでしょう。
2. CloudWatchアラームの役割
CloudWatchアラームは、メトリクスの数値が決めた条件を超えたときに動作します。例えば、CPU使用率が八十パーセントを超えた場合や、サーバーが応答しなくなった場合などです。アラームは自動で状態を判断し、異常が発生した瞬間に通知を送るため、人が常に監視し続ける必要がありません。AWS運用において、トラブルの早期発見に欠かせない機能です。
3. 監視できる主なAWSリソース
CloudWatchアラームは、さまざまなAWSリソースを対象に設定できます。代表的なのはEC2のCPU使用率やディスクの読み書き回数です。他にもRDSのデータベース負荷、ELBのリクエスト数、Lambdaの実行回数なども監視できます。これにより、サーバーだけでなく、AWS全体のシステム状況をまとめて把握できるようになります。
4. アラーム作成の基本的な流れ
CloudWatchアラームを作成する流れはとてもシンプルです。まず監視したいメトリクスを選びます。次に、その数値がどこまで上がったら異常とするか条件を決めます。最後に、異常時の動作を設定します。AWSの管理画面では画面に沿って進めるだけなので、専門知識がなくても操作できます。初めてでも安心して設定できる点が大きな特徴です。
5. 通知先として使われるSNS
CloudWatchアラームの通知には、SNSという仕組みがよく使われます。SNSは、通知をまとめて配信する役割を持っています。メールアドレスを登録しておけば、アラームが発生した瞬間に通知メールが届きます。これにより、AWSにログインしていなくても異常を把握できます。初心者の場合は、まず自分のメールアドレスに通知を送る設定から始めるのがおすすめです。
6. AWS CLIを使ったアラーム設定例
画面操作だけでなく、AWS CLIを使ってCloudWatchアラームを作成することもできます。CLIはコマンドで操作できるため、同じ設定を何度も行う場合に便利です。以下はEC2のCPU使用率を監視する例です。
aws cloudwatch put-metric-alarm \
--alarm-name HighCPUAlarm \
--metric-name CPUUtilization \
--namespace AWS/EC2 \
--statistic Average \
--period 300 \
--threshold 80 \
--comparison-operator GreaterThanThreshold \
--evaluation-periods 1
このようにコマンドを実行すると、条件を満たしたときに自動でアラームが動作します。最初は難しく見えますが、内容を一つずつ理解すれば怖くありません。
7. 初心者が気をつけたいポイント
CloudWatchアラームを使うときは、条件を厳しくしすぎないことが大切です。少し数値が変わっただけで通知が来ると、逆に混乱してしまいます。また、通知が届くかどうか事前にテストすることも重要です。AWSの監視設定は、一度作って終わりではなく、運用しながら調整していくものだと覚えておきましょう。
まとめ
AWS CloudWatchアラームは、クラウド環境の運用において「目」となり「声」となる非常に強力なツールです。本記事では、基本的な仕組みから監視対象の選定、そしてSNS(Simple Notification Service)を介した通知設定までを幅広く解説してきました。AWSリソースを安定して稼働させるためには、単にサービスを立ち上げるだけでなく、その後の「健康状態」をいかに効率よく見守るかが重要です。
監視運用の核心:メトリクスと閾値のバランス
CloudWatchにおける監視の基本は、メトリクスと呼ばれる数値データに基づいています。例えば、仮想サーバーであるEC2のCPU使用率が異常に高騰していないか、あるいはデータベースであるRDSのストレージ残量が不足していないかといった項目です。これらを監視する際、最も初心者が悩むポイントが「閾値(しきいち)」の設定です。
「八十パーセントを超えたら通知する」といったルールを定める際、あまりに敏感に設定しすぎると、一時的な負荷上昇でもアラームが鳴り響いてしまい、いわゆる「アラーム疲れ」を引き起こします。逆に緩すぎると、本当の障害に気づくのが遅れてしまいます。まずは標準的な数値を設定し、実際の稼働状況をグラフで確認しながら、自分のシステムに最適なラインを見つけるのが運用のコツです。
運用の自動化を支えるIaCとAWS CLI
手動で一つずつアラームを設定するのは、学習段階では非常に有効ですが、実際の業務で数十台、数百台のサーバーを管理するとなると現実的ではありません。そこで重要になるのが、記事内でも触れたAWS CLIやCloudFormation、Terraformといったツールを用いた自動化です。
例えば、以下のようなBoto3(Python用AWS SDK)ライブラリを使用したスクリプトを使えば、プログラムから動的にアラームを制御することも可能です。
import boto3
# CloudWatchクライアントの作成
cloudwatch = boto3.client('cloudwatch')
# EC2インスタンスのCPU使用率を監視するアラームを作成
def create_cpu_alarm(instance_id):
cloudwatch.put_metric_alarm(
AlarmName=f'CPU_Usage_Alarm_{instance_id}',
ComparisonOperator='GreaterThanThreshold',
EvaluationPeriods=2,
MetricName='CPUUtilization',
Namespace='AWS/EC2',
Period=60,
Statistic='Average',
Threshold=75.0,
ActionsEnabled=True,
AlarmActions=[
'arn:aws:sns:ap-northeast-1:123456789012:MyNotificationTopic'
],
AlarmDescription='CPU使用率が75%を2回連続で超えた場合の通知',
Dimensions=[
{
'Name': 'InstanceId',
'Value': instance_id
},
],
Unit='Percent'
)
print(f"Alarm created for {instance_id}")
# 実行例
if __name__ == "__main__":
create_cpu_alarm('i-0abcdef1234567890')
ログ監視と一元管理の重要性
数値データの監視だけでなく、CloudWatch Logsを利用した「ログ監視」も忘れてはいけません。サーバー内のシステムログ(/var/log/messagesなど)やアプリケーションのエラーログをCloudWatchに転送することで、特定の「Error」という文字列が出現した回数をカウントし、それをトリガーにアラームを飛ばすことができます。
これにより、「数値」には現れない「動作の不具合」もいち早く察知できるようになります。AWSマネジメントコンソール上のダッシュボード機能を活用すれば、これらの数値メトリクスとログ情報を一枚のパネルで可視化でき、インフラ全体の状況を一目で把握することが可能になります。
トラブルシューティングの第一歩
万が一、アラームが通知された場合は、まずCloudWatchのコンソールで該当のグラフを確認しましょう。急激な変化なのか、それとも緩やかに上昇し続けているのかによって、原因の切り分けがスムーズになります。また、通知が来ないと思ったら、SNSのサブスクリプション確認(承認メールのクリック忘れ)や、IAMロールの権限不足を疑ってみるのが定石です。
AWS CLIを使って現在の設定状況を確認するコマンドも覚えておくと、デバッグ時に非常に役立ちます。
aws cloudwatch describe-alarms --alarm-name-prefix HighCPUAlarm
{
"MetricAlarms": [
{
"AlarmName": "HighCPUAlarm",
"StateValue": "OK",
"StateReason": "Threshold Crossed: 1 out of the last 1 data points [5.2 (31/01/26 01:20:00)] was not greater than the threshold (80.0).",
"MetricName": "CPUUtilization",
"Namespace": "AWS/EC2"
}
]
}
監視設定は一度作れば終わりではありません。システムの成長や変化に合わせて、常に最適化し続けることが、安定運用の秘訣です。本記事をきっかけに、まずは身近なリソースに一つアラームを設定することから始めてみてください。その一歩が、将来的な大規模システムの安定稼働へと繋がっていきます。
生徒
「先生、CloudWatchアラームの全体像がかなり見えてきました!単に通知を送るだけじゃなくて、メトリクスの閾値を調整したり、ログも一緒に見たりするのが大切なんですね。」
先生
「その通りです。特に『なぜその数値でアラームを鳴らすのか』という根拠を持つことが、運用の現場では重要になってきます。最初はデフォルトの設定でも良いですが、慣れてきたら自分たちにとっての『異常』を定義してみてください。」
生徒
「プログラムから設定する方法も紹介されていて驚きました。手で一つずつ設定するよりも、スクリプトにした方がミスも減りそうです。PythonのBoto3を使えば、特定のタグが付いたサーバーに自動でアラームを適用するなんてこともできるんでしょうか?」
先生
「鋭いですね。まさにそれがエンジニアの仕事の醍醐味です。タグ情報を取得して、ループ処理で設定を流し込めば、何百台あっても一瞬で監視網を構築できますよ。AWS CLIでの確認方法も、コンソールが重い時やスクリプトを組む際に重宝するので、ぜひ手元で試してみてください。」
生徒
「ありがとうございます!まずは自分の開発環境で、わざと負荷をかけてみて、本当にメールが届くか試してみます。SNSの設定で、メールの承認を忘れないように気をつけますね。」
先生
「素晴らしい意気込みです。実際にアラームが飛んでくる瞬間を体験するのが一番の勉強になります。もし通知が多すぎて困ったら、次は複合アラームなどの応用機能についても一緒に学んでいきましょう。これからもAWSマスターを目指して頑張ってくださいね!」