2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【AWS】Amazon Linux 2023 でCloudWatch設定

Last updated at Posted at 2024-11-04

この前何気にAmazonLinux2023で初めてCloudWatch設定をしました。
そしてアクセスログをAmazon Linux 2と同様にCloudWatchで設定しようとすると、見事に罠にハマってしまった為問題と改善策を記録しようと思い本記事を記載します。

前提

AWS
EC2 AmazonLinux2023
IAMロールでCloudWatchLogsFullAccessを適用
Nginxをミドルウェアとして利用
socket通信を利用するためにphp-fpmも利用
今回監視したいのは以下3つ

  • nginxのアクセスログ
  • nginxのエラーログ
  • php-fpmのエラーログ

失敗した内容

対象とするインスタンスでCloudWatch Logsと連携するためにはエージェントをインストールする必要があるので、Amazon Linux 2と同様に以下コマンドを実行しました。

dnf install -y awslogs
Last metadata expiration check: 3:12:45 ago on Mon Nov  4 23:01:38 2024.
No match for argument: awslogs
Error: Unable to find a match: awslogs

awslogsがリポジトリに無い、、

代替方法

そして調べていくとAmazonLinux2023では以下のコマンドがcloudwatch-agentをインストールするコマンドになったようです。

sudo dnf install amazon-cloudwatch-agent

インストール後のステータス確認

sudo systemctl start amazon-cloudwatch-agent
sudo systemctl status amazon-cloudwatch-agent
● amazon-cloudwatch-agent.service - Amazon CloudWatch Agent
     Loaded: loaded (/etc/systemd/system/amazon-cloudwatch-agent.service; disabled; preset: disabled)
     Active: active (running) since Tue 2024-11-05 02:30:34 JST; 2s ago
   Main PID: 15882 (amazon-cloudwat)
      Tasks: 6 (limit: 1112)
     Memory: 64.4M
        CPU: 229ms
     CGroup: /system.slice/amazon-cloudwatch-agent.service

監視設定

そしてここからのエージェントの設定も以前なら、/etc/awslogs/awslogs.confを編集していましたが
それも大きく変わったようで以下の様な対応が必要です。

初期設定ファイルを作成するのにウィザード形式が使えるようで(対話式で設定を決めてける)以下コマンドを実行します。

cd /opt/aws/amazon-cloudwatch-agent/bin
sudo ./amazon-cloudwatch-agent-config-wizard

すると以下の様な対話が始まりますので、監視したいpathを設定していきます。
(かなり長い為一部省略しています)

On which OS are you planning to use the agent?
1. linux
2. windows
3. darwin
default choice: [1]:
1
Trying to fetch the default region based on ec2 metadata...
I! imds retry client will retry 1 timesAre you using EC2 or On-Premises hosts?
1. EC2
2. On-Premises
default choice: [1]:
1
Which user are you planning to run the agent?
1. cwagent
2. root
3. others
default choice: [1]:
1
Do you want to turn on StatsD daemon?
1. yes
2. no
default choice: [1]:
2
Do you want to monitor metrics from CollectD? WARNING: CollectD must be installed or the Agent will fail to start
1. yes
2. no
default choice: [1]:
2
Do you want to monitor any host metrics? e.g. CPU, memory, etc.
1. yes
2. no
default choice: [1]:
1
Do you want to monitor cpu metrics per core?
1. yes
2. no
default choice: [1]:
2
Do you want to add ec2 dimensions (ImageId, InstanceId, InstanceType, AutoScalingGroupName) into all of your metrics if the info is available?
1. yes
2. no
default choice: [1]:
Log file path:
/var/log/nginx/dev.menta.me.access.log
Log group name:
default choice: [dev.menta.me.access.log]
dev.menta.me.access.log
Log stream name:
default choice: [{instance_id}]
dev.menta.me.access.log
Log Group Retention in days
1. -1
2. 1
3. 3
4. 5
5. 7
6. 14
7. 30
8. 60
9. 90
10. 120
11. 150
12. 180
13. 365
14. 400
15. 545
16. 731
17. 1096
18. 1827
19. 2192
20. 2557
21. 2922
22. 3288
23. 3653
default choice: [1]:
1
Do you want to specify any additional log files to monitor?
1. yes
2. no
default choice: [1]:
2

最後の質問Do you want to specify any additional log files to monitor?で2を選ぶと、再度Log file path:を聞いてくれるので、そのほか監視したいpathを追加します。
私の場合/var/log/nginx/dev.menta.me.error.log"と/var/log/php-fpm/error.logを追加しました。

完了後json形式の設定ファイル[config.json]が作成されていることが分かります。

[root@ip-10-0-1-87 bin]# ls -al
total 455144
drwxr-xr-x 2 root root     16384 Nov  4 23:15 .
drwxr-xr-x 7 root root       140 Nov  4 23:03 ..
-rw-r--r-- 1 root root        11 Aug 28 04:16 CWAGENT_VERSION
-rwxr-xr-x 1 root root 137234696 Aug 28 04:16 amazon-cloudwatch-agent
-rwxr-xr-x 1 root root  14708712 Aug 28 04:16 amazon-cloudwatch-agent-config-wizard
-rwxr-xr-x 1 root root     14117 Aug 28 04:16 amazon-cloudwatch-agent-ctl
-rwxr-xr-x 1 root root  40563352 Aug 28 04:16 config-downloader
-rwxr-xr-x 1 root root 131724840 Aug 28 04:16 config-translator
-rw-r--r-- 1 root root      1900 Nov  4 23:50 config.json

しかしまだ設定が必要です。
設定ファイルの配置場所と設定ファイル名を変更する必要があります。

まずは/opt/aws/amazon-cloudwatch-agent/etc配下にコピー

cp -p config.json ../etc/

ファイル名をamazon-cloudwatch-agent.jsonに変更

cd ../etc/
mv config.json ./amazon-cloudwatch-agent.json
ls -la
total 40
drwxr-xr-x 3 root root 16384 Nov  5 00:42 .
drwxr-xr-x 7 root root   140 Nov  4 23:03 ..
drwxr-xr-x 2 root root     6 Aug 28 04:16 amazon-cloudwatch-agent.d
-rw-r--r-- 1 root root  1900 Nov  5 00:31 amazon-cloudwatch-agent.json
-rw-r--r-- 1 root root  2102 Nov  5 02:30 amazon-cloudwatch-agent.toml
-rw-r--r-- 1 root root  2740 Nov  5 02:30 amazon-cloudwatch-agent.yaml
-rw-r--r-- 1 root root   959 Aug 28 04:16 common-config.toml
-rw-r--r-- 1 root root     2 Nov  5 02:30 env-config.json
-rw-r--r-- 1 root root   177 Nov  5 02:30 log-config.json

念のため設定ファイルの中身を見ておきます。

[root@ip-10-0-1-87 etc]# cat amazon-cloudwatch-agent.json
{
        "agent": {
                "metrics_collection_interval": 60,
                "run_as_user": "root"
        },
        "logs": {
                "logs_collected": {
                        "files": {
                                "collect_list": [
                                        {
                                                "file_path": "/var/log/nginx/dev.menta.me.access.log",
                                                "log_group_class": "STANDARD",
                                                "log_group_name": "dev.menta.me.access.log",
                                                "log_stream_name": "/var/log/nginx/dev.menta.me.access.log",
                                                "retention_in_days": -1
                                        },
                                        {
                                                "file_path": "/var/log/nginx/dev.menta.me.error.log",
                                                "log_group_class": "STANDARD",
                                                "log_group_name": "dev.menta.me.error.log",
                                                "log_stream_name": "dev.menta.me.error.log",
                                                "retention_in_days": -1
                                        },
                                        {
                                                "file_path": "/var/log/php-fpm/error.log",
                                                "log_group_class": "STANDARD",
                                                "log_group_name": "error.log",
                                                "log_stream_name": "error.log",
                                                "retention_in_days": -1
                                        }
                                ]
                        }
                }
        },
        "metrics": {
                "aggregation_dimensions": [
                        [
                                "InstanceId"
                        ]
                ],
                "append_dimensions": {
                        "AutoScalingGroupName": "${aws:AutoScalingGroupName}",
                        "ImageId": "${aws:ImageId}",
                        "InstanceId": "${aws:InstanceId}",
                        "InstanceType": "${aws:InstanceType}"
                },
                "metrics_collected": {
                        "cpu": {
                                "measurement": [
                                        "cpu_usage_idle",
                                        "cpu_usage_iowait",
                                        "cpu_usage_user",
                                        "cpu_usage_system"
                                ],
                                "metrics_collection_interval": 60,
                                "totalcpu": false
                        },
                        "disk": {
                                "measurement": [
                                        "used_percent",
                                        "inodes_free"
                                ],
                                "metrics_collection_interval": 60,
                                "resources": [
                                        "*"
                                ]
                        },
                        "diskio": {
                                "measurement": [
                                        "io_time"
                                ],
                                "metrics_collection_interval": 60,
                                "resources": [
                                        "*"
                                ]
                        },
                        "mem": {
                                "measurement": [
                                        "mem_used_percent"
                                ],
                                "metrics_collection_interval": 60
                        },
                        "swap": {
                                "measurement": [
                                        "swap_used_percent"
                                ],
                                "metrics_collection_interval": 60
                        }
                }
        }

設定変更は完了なのでサービス再起動します

systemctl restart amazon-cloudwatch-agent

最後にログが送信されているか確認

ロググループを見ると先ほど設定した以下3つがあることが分かります。
image.png

そしてログストリームを見ても、ログが流れてきていることが確認できました
image.png

image.png

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?