■CloudWatch
※インスタンスを監視できる
※無料枠では10メトリクス、10アラームまで(詳細監視を有効にすると大量のメトリクスが作られる?)
※ログの保存は最長14日間…だったが「最長15ヶ月」に変更された
EC2 → インスタンス → 監視したいインスタンスを選択 → CloudWatchのMonitoring → アラームの追加/編集
アラーム詳細が開くので「アラームの作成」をクリック
一例として、以下の内容で登録する
通知の送信先: (通知先を選択)
次の時: 平均でCPU使用率(%)
が: >= 80 パーセント
アラーム名: web1.refirio.net CPU Utilization
「アラームの作成」ボタンを押すとアラームが作成される
追加した内容は CloudWatch からまとめて確認できる
警告メールが送られる際、「アラーム名」で指定したものが使われる
ただし警告メールの件名には日本語が使われないので、日本語を除いた件名になる
よって英語のみで意味のあるタイトルにしておくといい
作成したアラームを選択し、「変更」ボタンを押すと登録内容を修正できる
EC2の画面からだけでなく、
CloudWatch → アラーム → アラームの作成
からも作成できる
RDSはインスタンスを選択し、右上のアイコンから「Show Multi-Monitoring View」を選択し、
「CloudWatch Alarms」のC「Create Alarm」ボタンからアラームを作成できる
ELBも同様の手順で監視できる
Amazon EC2編〜EC2インスタンスを監視するには〜
http://recipe.kc-cloud.jp/archives/258
■標準メトリクスで監視
Amazon EC2編〜EC2インスタンスを監視するには〜
http://recipe.kc-cloud.jp/archives/258
通知先
refirio: info@refirio.net
対象 Name Threshold
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
ELB refirio.net ELB Host Unhealthy UnHealthyHostCount >= 1 for 5 minute
ELB refirio.net ELB Client Error 4XX HTTPCode_ELB_4XX >= 10 for 5 minute (Sum ELB 4XXs)
ELB refirio.net ELB Server Error 5XX HTTPCode_ELB_5XX >= 10 for 5 minute (Sum ELB 5XXs)
ELB refirio.net HTTP Client Error 4XX HTTPCode_Backend_4XX >= 30 for 5 minute (Sum HTTP 4XXs)
ELB refirio.net HTTP Server Error 5XX HTTPCode_Backend_5XX >= 30 for 5 minute (Sum HTTP 5XXs)
Web web1.refirio.net CPU Utilization CPUUtilization >= 80 for 5 minute
Web web2.refirio.net CPU Utilization CPUUtilization >= 80 for 5 minute
RDS refirio.net RDS Storage Free Space FreeStorageSpace <= 1,000,000,000 for 5 minutes
RDS refirio.net RDS CPU Utilization CPUUtilization >= 80 for 5 minutes
またEC2インスタンスを選択し、
Actions → Cloud Watch Monitoring → Enable Detailed Monitoring
で詳細なモニタリングができる
(Detailed Monitoring や Disk Reads などが監視できるようになる)
ELBの場合「ELB メトリクス」内に「UnHealthyHostCount」があるが、
ALBの場合「ApplicationELB メトリクス」に同等の項目が無いので注意
ターゲットグループ用の項目になっているので、「Per AppELB, per TG Metrics」内の「ASIMS2 ALB Host Unhealthy」「ASIMS2 ALB Host Unhealthy」を使用する
【新機能】新しいロードバランサー Application Load Balancer(ALB)が発表されました | Developers.IO
https://dev.classmethod.jp/cloud/aws/alb-application-load-balancer/
■標準メトリクスでインスタンスのステータスを監視
原則「StatusCheckFailed が1以上か否か」という監視を付けておくと良さそう
【小ネタ】CloudWatchの「StatusCheckFailed_Instance」と「StatusCheckFailed_System」について | DevelopersIO
https://dev.classmethod.jp/articles/cloudwatch-metrix-memo-1/
OSがハングしたら自動再起動する設定AWS Cloudwatchアラームアクション | puti se blog
https://blog.putise.com/os%E3%81%8C%E3%83%8F%E3%83%B3%E3%82%B0%E3%81%97%E3%81%9F%E3%82%89%E8%87%AA%E...
インスタンスの利用可能な CloudWatch メトリクスのリスト表示 - Amazon Elastic Compute Cloud
https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/viewing_metrics_with_cloudwatch.html
■カスタムメトリクスで監視1
AWS提供のスクリプトを使用して、メモリとディスクの使用率を監視する方法
AWSでメモリやディスクの使用率とか監視する - Qiita
https://qiita.com/zaburo/items/98388ef35aa2e7a477e0
使用するアクセスキーに対して、あらかじめ EC2FullAccess と CloudWatchFullAccess の権限を与えておく
# yum install perl-Switch perl-DateTime perl-Sys-Syslog perl-LWP-Protocol-https -y
… 依存ライブラリをインストール
# yum install perl-Digest-SHA -y
… mon-put-instance-data.pl を実行して「Can't locate Digest/SHA.pm in @INC」のエラーになる場合これもインストール
# sudo mkdir /usr/local/cloudwatch
… スクリプト用ディレクトリを作成
# cd /usr/local/cloudwatch
# curl
https://aws-cloudwatch.s3.amazonaws.com/downloads/CloudWatchMonitoringScripts-1.2.2.zip -O
… スクリプトのダウンロード
# unzip CloudWatchMonitoringScripts-1.2.2.zip
# rm CloudWatchMonitoringScripts-1.2.2.zip
# cd aws-scripts-mon
# cp awscreds.template awscreds.conf
… 設定ファイルの作成
# vi awscreds.conf
AWSAccessKeyId=XXXXX … アクセスキーID
AWSSecretKey=YYYYY … シークレットアクセスキー
# ./mon-put-instance-data.pl --mem-util --swap-util --disk-space-util --disk-path=/ --verify
… テスト実行
# vi /etc/crontab
… Cronに登録
#Mmemory Utilization
*/5 * * * * root /usr/local/cloudwatch/aws-scripts-mon/mon-put-instance-data.pl --mem-util --swap-util --disk-space-util --disk-path=/ --from-cron
CloudWatch → メトリクス
の「カスタム名前空間」に「Linuxシステム」が追加される
上の例の場合、「Filesystem, InstanceId, MountPath」に「DiskSpaceUtilization」が、
「InstanceId」に「MemoryUtilization」「SwapUtilization」が追加されていた
それぞれの意味は以下のとおり
・DiskSpaceUtilization
… ディスク使用率
・MemoryUtilization
… メモリ使用率
・SwapUtilization
… スワップ使用率
対象 Name Threshold
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Web web1.refirio.net Disk Utilization DiskSpaceUtilization >= 80 for 5 minute
Web web1.refirio.net Mmemory Utilization MemoryUtilization >= 80 for 5 minute
Web web1.refirio.net Swap Utilization SwapUtilization >= 80 for 5 minute
記録されていない場合、以下のように「--verbose」を付けて実行するとエラー内容を確認できる。例えば
「ERROR: Failed to call CloudWatch: HTTP 400. Message: AccessDeniedException","Message":"User: arn:aws:iam::1234567890:user/production is not authorized to perform: cloudwatch:PutMetricData」
と表示される場合、使用しているアクセスキーの権限が不足している
# /usr/local/cloudwatch/aws-scripts-mon/mon-put-instance-data.pl --mem-util --swap-util --disk-space-util --disk-path=/ --verbose
2015年時点では以下の記事を参考にして設定した
AWS EC2でメモリ利用率をCloud Watchで監視する
http://qiita.com/masarufuruya/items/212adbfb285476683c47
【AWS】カスタムメトリクスを使ったプロセス監視(Linux編)【CloudWatch】 - Qiita
https://qiita.com/koomaru/items/ac274f96fd541ffe4c31
はじめてのCloudWatch(AWS) 〜カスタムメトリクスを作って無料枠でいろいろ監視する〜 - Qiita
https://qiita.com/hilotter/items/5d5c7cddb5e580bd7aa5
AWS CloudWatchでEC2を監視する (プロセス死活監視、ディスク使用率、iノード使用率を監視してアラートメールを送信する) - Qiita
https://qiita.com/na0AaooQ/items/9dc3649e0bf4b0193ef9
■カスタムメトリクスで監視2
AWS提供のスクリプトを使用せずに、任意の項目を監視する方法
AWS CloudWatchにカスタムメトリックスを登録する - Siguniang's Blog
https://siguniang.wordpress.com/2014/12/19/publish-custom-metrics-to-cloudwatch-with-awscli/
EC2インスタンス内から情報を取得する方法 #AWS - Qiita
https://qiita.com/akikinyan/items/c6be02e1d48de46fca53
【AWS】CloudWatchカスタムメトリクスを知る|SAYJOY blog
https://sayjoyblog.com/aws-cli-cloudwatch-custommetrics-handson/
公開は、lsyncdに異常があれば通知させるものとする
lsyncdは、成功時は以下の内容が返される
# service lsyncd status
Redirecting to /bin/systemctl status lsyncd.service
● lsyncd.service - Live Syncing (Mirror) Daemon
Loaded: loaded (/usr/lib/systemd/system/lsyncd.service; enabled; vendor preset: disabled)
Active: active (running) since 木 2023-11-30 14:29:40 JST; 1h 59min ago
Main PID: 25966 (lsyncd)
CGroup: /system.slice/lsyncd.service
└─25966 /usr/bin/lsyncd -nodaemon /etc/lsyncd.conf
失敗時は以下の内容が返される
# service lsyncd status
Redirecting to /bin/systemctl status lsyncd.service
● lsyncd.service - Live Syncing (Mirror) Daemon
Loaded: loaded (/usr/lib/systemd/system/lsyncd.service; enabled; vendor preset: disabled)
Active: failed (Result: exit-code) since 水 2023-11-29 15:48:19 JST; 22h ago
Process: 3862 ExecStart=/usr/bin/lsyncd -nodaemon $LSYNCD_OPTIONS (code=exited, status=255)
Main PID: 3862 (code=exited, status=255)
今回は「running」という文字があれば正常とみなす…とする
使用するアクセスキーに対して、あらかじめ CloudWatchFullAccessV2 の権限を与えておく
また今回は、以下のようにawsコマンドを使ってEC2にアクセスキーを登録した
# aws configure
AWS Access Key ID [None]: (アクセスキーを入力)
AWS Secret Access Key [None]: (シークレットアクセスキーを入力)
Default region name [None]: ap-northeast-1
Default output format [None]: text
lsyncdの状態を確認して、CloudWatchにデータを送信するシェルスクリプトを作成する
# vi lsyncd_status_check_failed.sh
#!/bin/bash
REGION="ap-northeast-1"
INSTANCE_ID=`curl
http://169.254.169.254/latest/meta-data/instance-id`
TIMESTAMP=$(date -u +%Y-%m-%dT%H:%M:%S.000Z)
NAMESPACE="Middleware/Rsync"
METRIC_NAME="StatusCheckFailed"
result=`systemctl status lsyncd | grep -c "Active: active (running)"`
if [ $result -eq 1 ]; then
value=0
else
value=1
fi
#echo $REGION;
#echo $INSTANCE_ID;
#echo $TIMESTAMP;
#echo $NAMESPACE;
#echo $METRIC_NAME;
#echo $value;
/usr/bin/aws cloudwatch --region $REGION put-metric-data --dimensions InstanceId=$INSTANCE_ID --timestamp $TIMESTAMP --namespace $NAMESPACE --metric-name $METRIC_NAME --value $value --unit Count
Cronで5分ごとに実行させる
# chmod 0744 lsyncd_status_check_failed.sh
# ./lsyncd_status_check_failed.sh
# vi /etc/crontab
*/5 * * * * root /usr/bin/sh /root/lsyncd_status_check_failed.sh > /dev/null 2>&1
CloudWatch → メトリクス → すべてのメトリクス
「カスタム名前空間」に「Middleware/Rsync」が追加される
クリックすると「InstanceId」があり、
さらにクリックするとメトリクス名「StatusCheckFailed」を確認できる
(値を確認できるようになるには、5分程度のタイムラグがあるみたい)
最後に、「StatusCheckFailed >= 1」をトリガーに、CloudWatchのアラームを設定する
■アラーム状態からの復旧を通知
「アクションの設定」で「通知」を登録する際、デフォルトでは「アラーム状態」になったときの通知設定になっている
ここで「OK」になったときの通知設定を追加することで、アラーム状態からの復旧を通知できる
■時差について
AWSコンソールのCloudWatch画面では、日時は「2021-10-20 18:06:55 UTC」のように表示されている
UTCは「協定世界時」で、日本との時差は9時間ある
上記の場合、日本時間では「2021-10-21 03:06:55」となるので注意
ただしその後、CloudWatch画面の上部「Custom」のメニューから「UTC」か「Local time」かを選択できるようになっていた
(次回アクセス時や他ユーザのログインなど、すべてに恒久的に反映されるかは要検証)
Etcetera.txt の「時差」も参照