【AWS】CloudWatchエージェントインストール〜CloudWatch Logsにログ出力迄(AmazonLinux)
はじめに
AmazonLinuxにCloudWatchエージェントをインストールするところから、CloudWatchLogsにログを出力する迄の流れをアウトプットしたいと思います。
前提条件
- 作業用IAMユーザーにて作業実施
- AmazonLinux2の初期構築が完了している状態
- CloudWatchLogsにログを出力する部分のみ考慮
EC2(AmazonLinux)のスペック
項目 | 設定 |
---|---|
VM名 | Testlinux |
インスタンスタイプ | t2.micro |
OS | AmazonLinux2 |
vCPU | 1 |
メモリ(GiB) | 1 |
ルートデバイス名 | /dev/sda1:8GiB(/) |
今回取得したいログ
/var/log/messages
の内容を取得します。
作業の流れ
①IAMロール作成/EC2にIAMロール付与
②EC2にCloudWatchエージェントをインストール&設定
③CloudWatchLogsにてログ出力確認
作業手順
①IAMロール作成/EC2にIAMロール付与
1.IAMダッシュボードより「ロール」をクリック。
2.ロール一覧より「ロールを作成」をクリック。
3.ロール作成画面にて「AWSサービス」を選択し、「EC2」を選択する。選択後、「次のステップ:アクセス権限」をクリックする。
4.以下ポリシーを選択する。
- CloudWatchAgentAdminPolicy
- CloudWatchAgentServerPolicy
選択後、「次のステップ:タグ」をクリックする。
※大きい権限を付与しているため、業務で使用する場合は権限をご確認下さい。
5.タグは未設定のまま、「次のステップ:確認」をクリックする。
6.任意のロール名を設定し、設定に問題なければ「ロールの作成」をクリックする。
7.ロール一覧より、作成したロールが存在することを確認する。
8.EC2ダッシュボードのEC2一覧画面に移動し、対象のインスタンスにチェックを入れた後に、「アクション」→「セキュリティ」→「IAMロールを変更」と選択する。
9.IAMロールの変更画面にて、作成したロールを選択し「保存」をクリックする。
10.インスタンス下部のサマリ画面のセキュリティを確認し、対象のIAMロールが付与されていることを確認。
②EC2にCloudWatchエージェントをインストール&設定
1.EC2にSSH接続を実施し、CloudWatchエージェントのインストールを実施
- CloudWatchエージェントのダウンロード
wget https://s3.ap-northeast-1.amazonaws.com/amazoncloudwatch-agent-ap-northeast-1/amazon_linux/amd64/latest/amazon-cloudwatch-agent.rpm
※東京リージョン以外の場合は、ap-northeast-1
の部分を対象のリージョンに変更して下さい。
[ec2-user@ip-10-0-0-24 ~]$ wget https://s3.ap-northeast-1.amazonaws.com/amazoncloudwatch-agent-ap-northeast-1/amazon_linux/amd64/latest/amazon-cloudwatch-agent.rpm
--2021-08-30 06:53:35-- https://s3.ap-northeast-1.amazonaws.com/amazoncloudwatch-agent-ap-northeast-1/amazon_linux/amd64/latest/amazon-cloudwatch-agent.rpm
s3.ap-northeast-1.amazonaws.com (s3.ap-northeast-1.amazonaws.com) をDNSに問いあわせています... 52.219.0.162
s3.ap-northeast-1.amazonaws.com (s3.ap-northeast-1.amazonaws.com)|52.219.0.162|:443 に接続しています... 接続しました。
HTTP による接続要求を送信しました、応答を待っています... 200 OK
長さ: 46891760 (45M) [application/octet-stream]
`amazon-cloudwatch-agent.rpm' に保存中
100%[======================================>] 46,891,760 27.4MB/s 時間 1.6s
2021-08-30 06:53:37 (27.4 MB/s) - `amazon-cloudwatch-agent.rpm' へ保存完了 [46891760/46891760]
[ec2-user@ip-10-0-0-24 ~]$
[ec2-user@ip-10-0-0-24 ~]$ ls -l
合計 45796
-rw-rw-r-- 1 ec2-user ec2-user 46891760 8月 9 01:51 amazon-cloudwatch-agent.rpm
[ec2-user@ip-10-0-0-24 ~]$
- CloudWatchエージェントのインストール
sudo rpm -U ./amazon-cloudwatch-agent.rpm
rpm -qa | grep amazon-cloudwatch-agent
amazon-cloudwatch-agent
が存在すれば問題なし。
[ec2-user@ip-10-0-0-24 ~]$ sudo rpm -U ./amazon-cloudwatch-agent.rpm
create group cwagent, result: 0
create user cwagent, result: 0
[ec2-user@ip-10-0-0-24 ~]$
[ec2-user@ip-10-0-0-24 ~]$ rpm -qa | grep amazon-cloudwatch-agent
amazon-cloudwatch-agent-1.247349.0b251399-1.x86_64
[ec2-user@ip-10-0-0-24 ~]$
2.CloudWatchエージェントのセットアップ作業を実施する。
- セットアップコマンド
sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-config-wizard
- セットアップ実施
以下のように設定する。(基本、デフォルト設定を踏襲)
値を変更した部分は★マークを付けています。
※ログを取得するためだけの設定になります。
[ec2-user@ip-10-0-0-24 ~]$ sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-config-wizard
=============================================================
= Welcome to the AWS CloudWatch Agent Configuration Manager =
=============================================================
On which OS are you planning to use the agent?
1. linux
2. windows
3. darwin
default choice: [1]:
Trying to fetch the default region based on ec2 metadata...
Are you using EC2 or On-Premises hosts?
1. EC2
2. On-Premises
default choice: [1]:
Which user are you planning to run the agent?
1. root
2. cwagent
3. others
default choice: [1]:
Do you want to turn on StatsD daemon?
1. yes
2. no
default choice: [1]:
Which port do you want StatsD daemon to listen to?
default choice: [8125]
What is the collect interval for StatsD daemon?
1. 10s
2. 30s
3. 60s
default choice: [1]:
What is the aggregation interval for metrics collected by StatsD daemon?
1. Do not aggregate
2. 10s
3. 30s
4. 60s
default choice: [4]:
Do you want to monitor metrics from CollectD? ← ★
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]:
2 ← ★
Do you have any existing CloudWatch Log Agent (http://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/AgentReference.html) configuration file to import for migration?
1. yes
2. no
default choice: [2]:
2
Do you want to monitor any log files? ← ★
1. yes ← ★
2. no
default choice: [1]:
1 ← ★
Log file path:
/var/log/messages ← ★
Log group name:
default choice: [messages]
Testlinux_LogGroup ← ★
Log stream name:
default choice: [{instance_id}]
/var/log/messages ← ★
Do you want to specify any additional log files to monitor? ← ★
1. yes
2. no ← ★
default choice: [1]:
2 ← ★
Saved config file to /opt/aws/amazon-cloudwatch-agent/bin/config.json successfully.
Current config as follows:
{
"agent": {
"run_as_user": "root"
},
"logs": {
"logs_collected": {
"files": {
"collect_list": [
{
"file_path": "/var/log/messages",
"log_group_name": "Testlinux_LogGroup",
"log_stream_name": "/var/log/messages"
}
]
}
}
},
"metrics": {
"metrics_collected": {
"statsd": {
"metrics_aggregation_interval": 60,
"metrics_collection_interval": 10,
"service_address": ":8125"
}
}
}
}
Please check the above content of the config.
The config file is also located at /opt/aws/amazon-cloudwatch-agent/bin/config.json.
Edit it manually if needed.
Do you want to store the config in the SSM parameter store?
1. yes
2. no
default choice: [1]:
2
Program exits now.
[ec2-user@ip-10-0-0-24 ~]$
※セットアップにて以下を設定しています。
項目 | 設定 |
---|---|
取得するログファイル | /var/log/messages |
ロググループ名 | Testlinux_LogGroup |
ログストリーム名 | /var/log/messages |
- jsonファイルが存在することを確認
ls -l /opt/aws/amazon-cloudwatch-agent/bin/config.json
[ec2-user@ip-10-0-0-24 ~]$ ls -l /opt/aws/amazon-cloudwatch-agent/bin/config.json
-rwxr-xr-x 1 root root 452 8月 30 07:07 /opt/aws/amazon-cloudwatch-agent/bin/config.json
[ec2-user@ip-10-0-0-24 ~]$
3.「config.json」の内容をCloudWatchエージェントに反映させる。
- 設定読み込み
sudo /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
[ec2-user@ip-10-0-0-24 ~]$ sudo /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
****** processing amazon-cloudwatch-agent ******
/opt/aws/amazon-cloudwatch-agent/bin/config-downloader --output-dir /opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.d --download-source file:/opt/aws/amazon-cloudwatch-agent/bin/config.json --mode ec2 --config /opt/aws/amazon-cloudwatch-agent/etc/common-config.toml --multi-config default
Successfully fetched the config and saved in /opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.d/file_config.json.tmp
Start configuration validation...
/opt/aws/amazon-cloudwatch-agent/bin/config-translator --input /opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.json --input-dir /opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.d --output /opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.toml --mode ec2 --config /opt/aws/amazon-cloudwatch-agent/etc/common-config.toml --multi-config default
2021/08/30 07:20:16 Reading json config file path: /opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.d/file_config.json.tmp ...
Valid Json input schema.
I! Detecting run_as_user...
No csm configuration found.
Configuration validation first phase succeeded
/opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent -schematest -config /opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.toml
Configuration validation second phase succeeded
Configuration validation succeeded
amazon-cloudwatch-agent has already been stopped
Created symlink from /etc/systemd/system/multi-user.target.wants/amazon-cloudwatch-agent.service to /etc/systemd/system/amazon-cloudwatch-agent.service.
Redirecting to /bin/systemctl restart amazon-cloudwatch-agent.service
[ec2-user@ip-10-0-0-24 ~]$
- CloudWatchエージェント再起動/自動起動設定
sudo systemctl restart amazon-cloudwatch-agent.service
systemctl status amazon-cloudwatch-agent.service
systemctl status amazon-cloudwatch-agent.service
のステータスがactive(running)
であれば問題なし。
[ec2-user@ip-10-0-0-24 ~]$ sudo systemctl restart amazon-cloudwatch-agent.service
[ec2-user@ip-10-0-0-24 ~]$ systemctl status amazon-cloudwatch-agent.service
● amazon-cloudwatch-agent.service - Amazon CloudWatch Agent
Loaded: loaded (/etc/systemd/system/amazon-cloudwatch-agent.service; enabled; vendor preset: disabled)
Active: active (running) since 月 2021-08-30 07:22:33 UTC; 30s ago
Main PID: 3703 (amazon-cloudwat)
CGroup: /system.slice/amazon-cloudwatch-agent.service
└─3703 /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agen...
8月 30 07:22:33 ip-10-0-0-24.ap-northeast-1.compute.internal systemd[1]: St...
8月 30 07:22:33 ip-10-0-0-24.ap-northeast-1.compute.internal systemd[1]: St...
8月 30 07:22:33 ip-10-0-0-24.ap-northeast-1.compute.internal start-amazon-cloudwatch-agent[3703]: ...
8月 30 07:22:33 ip-10-0-0-24.ap-northeast-1.compute.internal start-amazon-cloudwatch-agent[3703]: ...
8月 30 07:22:33 ip-10-0-0-24.ap-northeast-1.compute.internal start-amazon-cloudwatch-agent[3703]: ...
Hint: Some lines were ellipsized, use -l to show in full.
[ec2-user@ip-10-0-0-24 ~]$
sudo systemctl enable amazon-cloudwatch-agent.service
systemctl is-enabled amazon-cloudwatch-agent.service
systemctl is-enabled amazon-cloudwatch-agent.service
の結果が、enable
であれば問題なし。
[ec2-user@ip-10-0-0-24 ~]$ sudo systemctl enable amazon-cloudwatch-agent.service
[ec2-user@ip-10-0-0-24 ~]$ systemctl is-enabled amazon-cloudwatch-agent.service
enabled
[ec2-user@ip-10-0-0-24 ~]$
③CloudWatchLogsにてログ出力確認
1.AWSマネジメントコンソールにてCloudWatchダッシュボードを起動し、ログ直下の「ロググループ」をクリック。
2.CloudWatchエージェントにて設定した対象のロググループが存在することを確認し、クリックする。
3.ロググループ画面の下部にて「ログストリーム」のタブを選択し、対象のログストリームをクリックする。
4./var/log/messages
のログが出力されていることを確認。
さいごに
以下の記事にログ監視についてまとめているので、併せて実施してみては如何でしょうか?
【AWS】CloudWatch Logsからシステムログをメール通知する。
参考リンク
(初心者向け)EC2に CloudWatch エージェントをインストールして SSM で起動する
【AWS】【CentOS7】CloudWatch エージェントでログ監視をする設定手順
Discussion