ハマログ

株式会社イーツー・インフォの社員ブログ

AWS Lightsailで構築した環境にCloudWatch監視つけてみた話

前回Lightsailで作成した環境に「監視つけて。CPUとメモリとディスク使用量。CloudWatchに実行ログ転送もセットで」とのお達しを受けて、

例によってハイヨロコンデーと作業しまして。

……あとでトラブったのでちょっとそこもコミでメモ。

  • やることはだいたいEC2と同じ。

⇒CloudWatchエージェント入れて設定して、CloudWatchエージェントを使うためにIAMユーザーを作成してLightsailにロール設定する。

EC2でCloudWatchエージェントを設定した場合と、Lightsailで設定した場合ではメトリクス名と項目の紐づきが異なる。

  • CPUはLightsailでアラート設定できる

⇒インスタンス→メトリクスからアラートが設定できるようになってるので、そっちで設定するのがラク。

設定してしばらくは動いていたんですが、「なんかログが出てないんだけど」って連絡が。
調べてみたら、機能追加で一部ログの出力先が変更されてCloudWatchに転送されなくなってました。
『右手がやってることを左手が知らない』ってなもんですね。
で、直すことに。
[root@ip-HOG-EH-OG-IP logs]# cat /opt/aws/amazon-cloudwatch-agent/bin/config.json
{
        "agent": {
                "metrics_collection_interval": 60,
                "run_as_user": "root"
        },
        "logs": {
                "logs_collected": {
                        "files": {
                                "collect_list": [
                                        {
                                                "file_path": "/var/log/messages",
                                                "log_group_name": "messages",
                                                "log_stream_name": "{local_hostname}",
                                                "retention_in_days": -1
                                        },
                                        {
                                                "file_path": "/var/www/char.gelgoog.jp/storage/logs/*.log",
                                                "log_group_name": "Lightsail/log/prod/laravel/web",
                                                "log_stream_name": "{local_hostname}",
                                                "retention_in_days": -1
                                        },
                                        {
                                                "file_path": "/var/www/char.gelgoog.jp/storage/logs/form/*.log",
                                                "log_group_name": "Lightsail/log/prod/laravel/web",
                                                "log_stream_name": "{local_hostname}_form",
                                                "retention_in_days": -1
                                        },
                                        {
                                                "file_path": "/var/www/char.gelgoog.jp/storage/logs/form2/*.log",
                                                "log_group_name": "Lightsail/log/prod/laravel/web",
                                                "log_stream_name": "{local_hostname}_form2",
                                                "retention_in_days": -1
                                        },
                                        {
                                                "file_path": "/var/log/httpd/*_log",
                                                "log_group_name": "Lightsail/log/prod/httpd/access",
                                                "log_stream_name": "{local_hostname}",
                                                "retention_in_days": -1
                                        },
                                        {
                                                "file_path": "/var/log/php-fpm/error.log",
                                                "log_group_name": "Lightsail/log/prod/php-fpm/error",
                                                "log_stream_name": "{local_hostname}",
                                                "retention_in_days": -1
                                        }
                                ]
                        }
                }
        },
        "metrics": {
                "metrics_collected": {
                        "cpu": {
                                "measurement": [
                                        "cpu_usage_idle",
                                        "cpu_usage_iowait",
                                        "cpu_usage_steal",
                                        "cpu_usage_guest",
                                        "cpu_usage_user",
                                        "cpu_usage_system"
                                ],
                                "metrics_collection_interval": 60,
                                "resources": [
                                        "*"
                                ],
                                "totalcpu": true
                        },
                        "disk": {
                                "measurement": [
                                        "used_percent"
                                ],
                                "metrics_collection_interval": 60,
                                "resources": [
                                        "*"
                                ]
                        },
                        "diskio": {
                                "measurement": [
                                        "io_time",
                                        "write_bytes",
                                        "read_bytes",
                                        "writes",
                                        "reads"
                                ],
                                "metrics_collection_interval": 60,
                                "resources": [
                                        "*"
                                ]
                        },
                        "mem": {
                                "measurement": [
                                        "mem_used_percent"
                                ],
                                "metrics_collection_interval": 60
                        },
                        "net": {
                                "measurement": [
                                        "bytes_sent",
                                        "bytes_recv",
                                        "packets_sent",
                                        "packets_recv"
                                ],
                                "metrics_collection_interval": 60,
                                "resources": [
                                        "*"
                                ]
                        },
                        "netstat": {
                                "measurement": [
                                        "tcp_established",
                                        "tcp_time_wait"
                                ],
                                "metrics_collection_interval": 60
                        },
                        "swap": {
                                "measurement": [
                                        "swap_used_percent"
                                ],
                                "metrics_collection_interval": 60
                        }
                }
        }
}

log_stream_nameが{hostname}でなく{local_hostname}なのは、EC2ではなくLightsailのため。

{hostname} はEC2メタデータからホスト名を取得するため、Lightsailでは動作しないのです。

で、直すついでに「CLIだと検証環境と本番環境の区別がつかないし、hostname設定して区別つけられるようにしましょ」って、このあとhostnameも変更。

……これが原因でトラブル発生。

ログ転送は動いているものの、CloudWatchのアラームにメモリとディスクの使用率が届かなくなりました。

データ不足の表示になってアラートがブガーブガー。

(゜々。)<あれー、おっかしーなー?

ここでミソなのが、 上記の『EC2でCloudWatchエージェントを設定した場合と、Lightsailで設定した場合ではメトリクス名と項目の紐づきが異なる』ってとこ。

  • EC2はインスタンスIDでCloudWatchアラームと紐づけする
  • LightsailはEC2ではないのでインスタンスIDは無い
  • LightsailのCloudWatchアラームはインスタンスIDで紐づけられていない
  • LightsailのCloudWatchアラームはhostnameで紐づけられている

(੭ ᐕ)<おまえログ転送設定直すついでに何やった?

……はい、hostname変更しましたね……。

CloudWatchのメトリクスを見てみると、実際変更したhostnameでメモリとディスク使用率を送ってきてました。

で、あれば、と当該CloudWatchアラームのhostnameを変更するとデータ不足表示は解消されてアラートも鳴り止みました。

『LightsailだとCloudWatchアラームとインスタンスIDでの紐づけがない』

ので

『LightsailではCloudWatchアラームを設定後にhostnameを変更するとダメ』

という失敗談でございました。

……誰かのせいにしたいが自分の顔しか思い浮かばない。

⎿(。々゜)┐
AWSCloudWatchLightsail

  Y.W   2024年4月26日


関連記事

作成したAMIを別のAWSアカウントで利用する

あるAWSアカウントで運用しているEC2インスタンスを別のAWSアカウントに引っ…

AWSのアーキテクチャー図の自動生成

サーバーやネットワーク構成知りたい 他の会社さんが構築したものなど引き継いだ時に…

Amazon Linux 2 x86_64 standard: 3.0のCodeBuild環境でPHP8.0を使う方法。

『今度の開発はPHP8.0環境にLaravel8でソース組んでるんでインフラもそ…


← 前の投稿

次の投稿 →