Memo

メモ > サーバ > サービス: AWS > CloudWatch

■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 の「時差」も参照

Advertisement