Cloud Watch Agentについて調べてみた
IT技術
はじめに
前回はAWSの監視ツールについて説明しました。
CloudWatchが自動的にエラーをキャッチする機能についても触れましたが、残念ながらEC2インスタンスなどは標準設定では詳細なエラーログの自動出力をサポートしていません。
今回の記事では、EC2インスタンスにCloudWatch Agentを導入し、エラーログや詳細メトリクスを検出する方法を解説します。
EC2の作成
まずはEC2を作成していきましょう。
特に意識することはなく通常通りに作成して問題ないです。
-
- インスタンスの作成AWSマネジメントコンソールで「インスタンスを起動」ボタンをクリックします。
- AMIの選択希望するAmazon Machine Image (AMI) を選択します。今回は、無料枠のAmazon Linux AMIを利用します。
- インスタンスタイプの選択適切なインスタンスタイプ(例:t2.micro)を選び、「次のステップ: インスタンスの詳細の設定」へ進みます。
- ストレージの設定必要なストレージ容量を設定します。今回は最小値の8GBにします。
- キーペアキーペアを選択または新規作成します。
- セキュリティグループの設定新しいセキュリティグループを作成し、必要なポート(SSH用のポート22など)を開放します。
- 高度な詳細設定CloudWatchモニタリングの詳細を有効化します。
- インスタンスの確認と起動設定を確認し、「起動」ボタンを押します。
注意する点は、詳細モニタリングを有効にする必要があることです。
既に作成されているEC2インスタンスの設定を変更する場合は、起動中のインスタンスを選択し、「アクション」から「モニタリングとトラブルシューティング」へ進んで、「詳細モニタリングを有効化」を選択してください。
これにより、詳細モニタリングが有効になります。再起動の必要はありません。
IAMロールの作成
次にIAMロールを作成します。
EC2インスタンスがCloudWatchにログデータやメトリクスを送信するために必要です。
- IAMコンソールにアクセスAWSマネジメントコンソールにログインし、「サービス」メニューから「IAM」を選択します。
- ロールの作成「ロール」セクションで「ロールの作成」を選び、EC2を信頼されたエンティティとして設定します。
- ポリシーのアタッチ検索バーに「CloudWatchAgentServerPolicy」と「CloudWatchLogsFullAccess」と入力し、これらのポリシーを選択します。これにより、ロールにログデータとメトリクスをCloudWatchに送信する権限が与えられます。
- ロールの確認と作成設定内容を確認し、「ロールの作成」をクリックしてIAMロールを作成します。
EC2インスタンスにIAMロールをアタッチ
- EC2ダッシュボードから、アタッチしたいインスタンスを選択します。
- 「アクション」>「セキュリティ」>「IAMロールの変更」を選び、先ほど作成したIAMロールを適用します。
これで、EC2インスタンスがCloudWatchにデータを送信するための準備が整いました。
CloudWatch Agentの設定
導入方法
それではEC2にCloudWatch Agentをインストールして設定していきましょう!!
EC2インスタンスにSSHまたはセッションマネージャーでアクセスし、以下のコマンドを実行してください。
1sudo yum install amazon-cloudwatch-agent -y
インストールが完了したら、Agentの設定に進みます。
設定ファイルの作成と編集
CloudWatch Agentは設定ファイルに基づいて動作します。
このファイルでは、監視するログファイルとデータ収集方法を定義します。
設定ファイルはJSON形式で記述され、次の場所に/opt/aws/amazon-cloudwatch-agent/bin/config.json
保存されます。
設定ウィザードを使って設定ファイルを作成していきます。
下記コマンドでウィザードが開始されます。
1sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-config-wizard
ウィザードの設定
ウィザードでは、ログファイルのパスや収集間隔など、多くの設定を選択できます。
例えば、メモリ使用量のような基本的なホストメトリクスの収集を設定できます。
また、より詳細な設定で、特定のポートで動作するStatsDデーモンの設定も可能です。
まず最初にagentと取得するmetricsについて質問されます。
以下はコマンドの実行例です。
1
2[ec2-user@ip-172-31-0-26 ~]$ sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-config-wizard
3================================================================
4= Welcome to the Amazon CloudWatch Agent Configuration Manager =
5= =
6= CloudWatch Agent allows you to collect metrics and logs from =
7= your host and send them to CloudWatch. Additional CloudWatch =
8= charges may apply. =
9================================================================
10On which OS are you planning to use the agent?
111. linux
122. windows
133. darwin
14default choice: [1]:
15
16Trying to fetch the default region based on ec2 metadata...
17I! imds retry client will retry 1 timesAre you using EC2 or On-Premises hosts?
181. EC2
192. On-Premises
20default choice: [1]:
21
22Which user are you planning to run the agent?
231. cwagent
242. root
253. others
26default choice: [1]:
27
28Do you want to turn on StatsD daemon?
291. yes
302. no
31default choice: [1]:
32
33Which port do you want StatsD daemon to listen to?
34default choice: [8125]
35
36What is the collect interval for StatsD daemon?
371. 10s
382. 30s
393. 60s
40default choice: [1]:
41
42What is the aggregation interval for metrics collected by StatsD daemon?
431. Do not aggregate
442. 10s
453. 30s
464. 60s
47default choice: [4]:
48
49Do you want to monitor metrics from CollectD? WARNING: CollectD must be installed or the Agent will fail to start
501. yes
512. no
52default choice: [1]:
53
54Do you want to monitor any host metrics? e.g. CPU, memory, etc.
551. yes
562. no
57default choice: [1]:
58
59Do you want to monitor cpu metrics per core?
601. yes
612. no
62default choice: [1]:
63
64Do you want to add ec2 dimensions (ImageId, InstanceId, InstanceType, AutoScalingGroupName) into all of your metrics if the info is available?
651. yes
662. no
67default choice: [1]:
68
69Do you want to aggregate ec2 dimensions (InstanceId)?
701. yes
712. no
72default choice: [1]:
73
74Would you like to collect your metrics at high resolution (sub-minute resolution)? This enables sub-minute resolution for all metrics, but you can customize for specific metrics in the output json file.
751. 1s
762. 10s
773. 30s
784. 60s
79default choice: [4]:
80
81Which default metrics config do you want?
821. Basic
832. Standard
843. Advanced
854. None
86default choice: [1]:
このセクションでここまでの設定値が反映されたJSONが出力されます。
1
2 {
3 "agent": {
4 "metrics_collection_interval": 60,
5 "run_as_user": "cwagent"
6 },
7 "metrics": {
8 "aggregation_dimensions": [
9 [
10 "InstanceId"
11 ]
12 ],
13 "append_dimensions": {
14 "AutoScalingGroupName": "${aws:AutoScalingGroupName}",
15 "ImageId": "${aws:ImageId}",
16 "InstanceId": "${aws:InstanceId}",
17 "InstanceType": "${aws:InstanceType}"
18 },
19 "metrics_collected": {
20 "collectd": {
21 "metrics_aggregation_interval": 60
22 },
23 "disk": {
24 "measurement": [
25 "used_percent"
26 ],
27 "metrics_collection_interval": 60,
28 "resources": [
29 "*"
30 ]
31 },
32 "mem": {
33 "measurement": [
34 "mem_used_percent"
35 ],
36 "metrics_collection_interval": 60
37 },
38 "statsd": {
39 "metrics_aggregation_interval": 60,
40 "metrics_collection_interval": 10,
41 "service_address": ":8125"
42 }
43 }
44 }
45 }
設定項目について、重要な項目を説明します。
- metrics_collection_interval: この値はメトリクスがどの頻度で収集されるかを定義します。例えば、60 と設定すると、メトリクスは毎分収集されます。
- append_dimensions: これはメトリクスに追加される次元で、例えばEC2インスタンスに関連する InstanceId や InstanceType などを含めることができます。これにより、メトリクスがどのEC2インスタンスに関連しているかを簡単に特定できます。
- metrics_collected: どのメトリクスを収集するかを定義します。disk や mem はそれぞれディスク使用率やメモリ使用率を収集します。
基本的にはdefaultの設定でOKです。
では引き続きウィザードで設定値を入力します。
次はログファイルのモニタリング設定を行うプロセスです。
1
2 Are you satisfied with the above config? Note: it can be manually customized after the wizard completes to add additional items.
3 1. yes
4 2. no
5 default choice: [1]:
6
7 Do you have any existing CloudWatch Log Agent (http://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/AgentReference.html) configuration file to import for migration?
8 1. yes
9 2. no
10 default choice: [2]:
11
12 Do you want to monitor any log files?
13 1. yes
14 2. no
15 default choice: [1]:
16
17 Log file path:
18 /home/ec2-user/test.log
19 Log group name:
20 default choice: [test.log]
21 Test
22 Log group class:
23 1. STANDARD
24 2. INFREQUENT_ACCESS
25 default choice: [1]:
26
27 Log stream name:
28 default choice: [{instance_id}]
29 test.log
30 Log Group Retention in days
31 1. -1
32 2. 1
33 3. 3
34 4. 5
35 5. 7
36 6. 14
37 7. 30
38 8. 60
39 9. 90
40 10. 120
41 11. 150
42 12. 180
43 13. 365
44 14. 400
45 15. 545
46 16. 731
47 17. 1096
48 18. 1827
49 19. 2192
50 20. 2557
51 21. 2922
52 22. 3288
53 23. 3653
54 default choice: [1]:
55 2
56 Do you want to specify any additional log files to monitor?
57 1. yes
58 2. no
59 default choice: [1]:
60 2
61 Do you want the CloudWatch agent to also retrieve X-ray traces?
62 1. yes
63 2. no
64 default choice: [1]:
65 2
66 Existing config JSON identified and copied to: /opt/aws/amazon-cloudwatch-agent/etc/backup-configs
67 Saved config file to /opt/aws/amazon-cloudwatch-agent/bin/config.json successfully.
68 Current config as follows:
69 {
70 **省略**
71 }
72 Please check the above content of the config.
73 The config file is also located at /opt/aws/amazon-cloudwatch-agent/bin/config.json.
74 Edit it manually if needed.
75 Do you want to store the config in the SSM parameter store?
76 1. yes
77 2. no
78 default choice: [1]:
79 2
80 Program exits now.
こちらも基本的にはdefaultの設定でOKですが、下記の項目はNoを選択しました。
Do you want the CloudWatch agent to also retrieve X-ray traces?
X-rayトレースの取得は今回は行いません。
Do you want to store the config in the SSM parameter store?
SSMパラメータストアに設定を保存しないためNoを選択しました。
設定項目について、説明します。
- Log file path: モニタリングしたいログファイルのパスを指定します。
- Log group name: CloudWatch Logsのロググループ名を入力します。デフォルトではログファイル名が使用されますが、異なる名前を設定することもできます。
- Log stream name: ログストリームの名前を設定します。デフォルトではEC2インスタンスのIDが使用されますが、ここでは「test.log」という名前を選択しています。
- Log Group Retention in days: ログデータの保持期間を選択します。ここでは「2」(1日)を選択して、ログデータを1日間保持するように設定しています。
設定したいログファイルが複数ある場合は、Do you want to specify any additional log files to monitor?
で「1」(yes)を選択して同様の手順で複数のログファイルを設定できます。
最終的なconfig.jsonは下記になります。
1
2{
3 "agent": {
4 "metrics_collection_interval": 60,
5 "run_as_user": "cwagent"
6 },
7 "logs": {
8 "logs_collected": {
9 "files": {
10 "collect_list": [
11 {
12 "file_path": "/home/ec2-user/test.log",
13 "log_group_class": "STANDARD",
14 "log_group_name": "Test",
15 "log_stream_name": "test.log",
16 "retention_in_days": 1
17 }
18 ]
19 }
20 }
21 },
22 "metrics": {
23 "aggregation_dimensions": [
24 [
25 "InstanceId"
26 ]
27 ],
28 "append_dimensions": {
29 "AutoScalingGroupName": "${aws:AutoScalingGroupName}",
30 "ImageId": "${aws:ImageId}",
31 "InstanceId": "${aws:InstanceId}",
32 "InstanceType": "${aws:InstanceType}"
33 },
34 "metrics_collected": {
35 "collectd": {
36 "metrics_aggregation_interval": 60
37 },
38 "disk": {
39 "measurement": [
40 "used_percent"
41 ],
42 "metrics_collection_interval": 60,
43 "resources": [
44 "*"
45 ]
46 },
47 "mem": {
48 "measurement": [
49 "mem_used_percent"
50 ],
51 "metrics_collection_interval": 60
52 },
53 "statsd": {
54 "metrics_aggregation_interval": 60,
55 "metrics_collection_interval": 10,
56 "service_address": ":8125"
57 }
58 }
59 }
60}
より具体的なメトリクスログを出力するための設定
メモリ使用率やディスク使用率のみを取得する場合、collectdのインストールは不要です。
アプリケーションやサービスから追加のメトリクスを取得する必要がある場合は、collectdをインストールしてください。
collectdをインストールするには、以下のコマンドを実行します。
1sudo yum install collectd -y
Agentの起動とログの確認
設定が完了したら、以下のコマンドを使用してCloudWatch Agentを起動します。
このコマンドは、指定された設定ファイルに基づいてAgentを実行します。
1sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl -a fetch-config -m ec2 -c file:/opt/aws/amazon-cloudwatch-agent/bin/config.json -s
ここまでで、CloudWatch Agentの設定は完了です!
Agentの停止と再起動
設定ファイル/opt/aws/amazon-cloudwatch-agent/bin/config.json
を変更した後は、プロセスの再起動が必要になります。
CloudWatch Agentを停止するには、以下のコマンドを実行します。
1sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl -m ec2 -a stop
CloudWatch Agentを再起動するには、以下のコマンドを実行します。
1sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl -m ec2 -a restart
CloudWatch logの確認
実際にAWSマネジメントコンソールからCloudWatchを確認していきます。
CloudWatch ロググループの確認
まずはロググループが正しく作成されているかを確認します。
EC2インスタンスにSSH接続してログファイルを適当に作成します。
1touch /home/ec2-user/test.log
2echo "Sample log data for CloudWatch" >> /home/ec2-user/test.log
次にAWSマネジメントコンソールにログインし、CloudWatchサービスに移動して「ログ」セクションを開きます。
ここで「Test」という名前のロググループが作成されていることが確認できます。
ロググループを選択すると、保存されたログエントリを見ることができます。
無事にログを収集できたようです。
CloudWatch メトリクスの確認
CloudWatch で「CWAgent」カテゴリが追加されていることが確認できます。
「CWAgent」を押すと、設定した名前空間毎に対象のメトリクスが確認できます。
これで詳細なメトリクスログを確認できるようになりました。
具体的には、ディスク使用率の詳細や、メモリ使用率です。
まとめ
今回はCloudWatch Agentについてご紹介してきました。
CloudWatch Agentを利用することで、EC2インスタンスのエラーログやメトリクスログをキャッチすることが出来るようになりました。
これらの情報を使ってSNSトピックを設定し、システムの重要な変更点に基づいてアラートを設定することが可能です。
EC2を起動する際には、user_data
スクリプトによるCloudWatch Agentの自動ダウンロードと設定を行うと便利そうです。
今後もAWSサービスに関するさまざまな情報をブログで共有していきたいと思います。
ライトコードでは、エンジニアを積極採用中!
ライトコードでは、エンジニアを積極採用しています!社長と一杯しながらお話しする機会もご用意しております。そのほかカジュアル面談等もございますので、くわしくは採用情報をご確認ください。
採用情報へ
趣味は映画を見ることです。