【AWS】CloudWatchエージェントインストール〜CloudWatch Logsにログ出力迄(AmazonLinux)

2021/08/30に公開

はじめに

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  89 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  830 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...

 830 07:22:33 ip-10-0-0-24.ap-northeast-1.compute.internal systemd[1]: St...
 830 07:22:33 ip-10-0-0-24.ap-northeast-1.compute.internal systemd[1]: St...
 830 07:22:33 ip-10-0-0-24.ap-northeast-1.compute.internal start-amazon-cloudwatch-agent[3703]: ...
 830 07:22:33 ip-10-0-0-24.ap-northeast-1.compute.internal start-amazon-cloudwatch-agent[3703]: ...
 830 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