Amazon CloudWatch とは
CloudWatchは、AWSが提供する監視サービスです。サーバーやアプリケーションの状態を24時間365日見守ってくれる、頼もしい見張り番のような存在です。
CPUの使用率が高くなったり、メモリが足りなくなったり、プロセスが停止したり。そんな異常をすぐに検知してお知らせしてくれます。
主要機能
CloudWatchには便利な機能がたくさんあります。主なものを3つご紹介します。
1.メトリクス収集
サーバーの様々な数値を自動で集めてくれます。CPU使用率、ディスク容量、ネットワーク通信量がグラフで見やすく表示されるので、一目で状態がわかります。

2.アラーム機能
「CPUが80%を超えたら通知して」といった設定ができます。メールやSlackに通知をすることができます。

3.ログ管理
アプリケーションのログを一箇所に集めて管理できます。エラーログを検索したり、特定のキーワードが出たら通知したり。トラブルシューティングの時間が大幅に短縮されます。

導入メリット
CloudWatchを使うメリットは大きく3つあります。
1. 導入が簡単
EC2インスタンスなら、最初から基本的な監視が有効になっています。追加の設定なしで、すぐに使い始められます。
2. コスト効率が良い
使った分だけの料金体系です。小規模なシステムなら月数百円程度で運用可能。専用の監視サーバーを立てる必要もありません。
3. 自動化しやすい
異常を検知したら自動でサーバーを再起動する。こんな設定も簡単にできます。運用の手間が大幅に削減されます。
連携サービス
SNS(Simple Notification Service)との連携で、メールやSMS、Slackへの通知が可能です。
Lambdaと組み合わせれば、アラート時に自動で復旧処理を実行できます。例えば、プロセスが停止したら自動で再起動するなど。
Systems Managerを使えば、より詳細なプロセス監視が可能になります。特定のアプリケーションが動いているか、定期的にチェックできます。

実際の画面確認
プロセス監視の設定方法
実際の設定は思ったより簡単です。基本的な流れをご紹介します。
ステップ1:CloudWatch Agentのインストール
EC2インスタンスにCloudWatch Agentをインストールします。Systems ManagerのRun Commandを使えば、数クリックで完了です。


ローカルPCの監視を実施したい場合は以下のURLをご参照ください。
Agentの監視先を細かく設定することも可能です。

{
"logs": {
"logs_collected": {
"windows_events": {
"collect_list": [
{
"event_format": "xml",
"event_levels": [
"VERBOSE",
"INFORMATION",
"WARNING",
"ERROR",
"CRITICAL"
],
"event_name": "1",
"log_group_class": "STANDARD",
"log_group_name": "onpremise-pc",
"log_stream_name": "onpremise-pc-Application.log",
"retention_in_days": 30
}
]
}
}
},
"metrics": {
"metrics_collected": {
"LogicalDisk": {
"measurement": [
"% Free Space"
],
"metrics_collection_interval": 60,
"resources": [
"*"
]
},
"Memory": {
"measurement": [
"% Committed Bytes In Use"
],
"metrics_collection_interval": 60
},
"Network Interface": {
"measurement": [
"Bytes Sent/sec",
"Bytes Received/sec",
"Packets Sent/sec",
"Packets Received/sec"
],
"metrics_collection_interval": 60,
"resources": [
"*"
]
},
"Paging File": {
"measurement": [
"% Usage"
],
"metrics_collection_interval": 60,
"resources": [
"*"
]
},
"PhysicalDisk": {
"measurement": [
"Disk Write Bytes/sec",
"Disk Read Bytes/sec",
"Disk Writes/sec",
"Disk Reads/sec"
],
"metrics_collection_interval": 60,
"resources": [
"*"
]
},
"Processor": {
"measurement": [
"% Processor Time"
],
"metrics_collection_interval": 60,
"resources": [
"*"
]
}
}
}
}
ステップ2:監視したいプロセスをパラメータストアで設定し、Run Commnadにて監視設定を実行
設定ファイルに監視したいプロセス名を書きます。例えば「nginx」や「java」など。正規表現も使えるので柔軟に指定できます。
設定ファイル作成はコマンドプロンプトで実施します。
※ステップ2監視したいプロセスの指定(1)の画像はEC2の監視を実施する場合になります。

設定サンプルを以下に記載します。
こちらはMicrosoft edgeとコマンドプロンプトの監視を行う設定になります。
{
"metrics": {
"metrics_collected": {
"procstat": [
{
"exe": "msedge",
"measurement": [
"pid_count"
],
"metrics_collection_interval": 60
}
]
}
}
}
Run Commnadで監視対象のサーバーを指定します。

・Action Configure(append)
・Mode EC2
※実機の場合はOnpremiss
・Optional Configuration Source 作成したパラメータストア名
・Optional Restart yes
・ターゲット 対象EC2もしくはオンプレサーバー

・その他パラメータ デフォルト

ステップ3:メトリクスの確認
CloudWatchコンソールで、プロセスが動いているか確認します。「1」なら動作中、「0」なら停止中で表示されます。
画像の内容はコマンドプロンプトを監視しておりますが、どんなアプリケーションでも監視設定することができます。

ステップ4:アラームの設定
プロセスが停止したら通知するアラームを作ります。「メトリクスが0になったら通知」と設定します。

ステップ5:通知先の設定
メールアドレスを登録します。これで24時間監視体制の完成です。

クラウドポータルでの実装
クラウドポータルでは上記のステップを簡易的に設定することが可能です。
ステップ1:リモート管理にてマネージドインスタンスの登録
対象サーバーをリモート管理に登録します。

ステップ2:CloudWatchエージェント設定
エージェント設定を行うことでステップ1、2を同時に設定することができます。

CloudWatchエージェント設定後に先ほどのステップ3~ステップ5の設定を行うことでローカルPC、AWS上のEC2を監視することができます。
まとめ
いかがでしたでしょうか?プロセス監視は難しそうに見えて、実は基本を押さえれば誰でも設定できます。まずは重要なサーバーから監視を始めてみてはいかがでしょうか。
CloudWatchがあれば、安心してシステム運用ができるようになりますよ。
