AWSのcloudwatchというサービスを使ってサーバーの監視をする構成を作成します。
今回はLinuxサーバーを死活監視したいと思います。
記事が長くなりますので、まずはCloudwatchにてサーバーのログを見れるところまでです。
Cloudwatchエージェントの導入
まずはCloudwatchエージェントをLinuxサーバーへ導入します。
Linuxサーバーへログインし下記のコマンドでwgetコマンドを使えるようにします。
yum install wget
次に以下のコマンドでCloudwatchエージェントのダウンロードをします。
wget <download-link>
ダウンロードリンクは以下の公式リンクより確認できます。
2023/5現在以下のコマンドでRedhat版のCloudwatchエージェントのダウンロードができます。
wget https://s3.amazonaws.com/amazoncloudwatch-agent/redhat/amd64/latest/amazon-cloudwatch-agent.rpm
ダウンロード後、ダウンロード先にエージェントがダウンロードされていることを確認します。
[root@~]# ls -l
total 29992
-rw-r--r--. 1 root root 30708216 May 3 16:32 amazon-cloudwatch-agent.rpm
エージェントのインストールを実行します。
rpm -U ./amazon-cloudwatch-agent.rpm
これでエージェントのインストールが完了しました。
Cloudwatchエージェントのセットアップ
次にCloudwatchエージェントのセットアップをします。
セットアップは対話式のウィザードが用意されているためここではそれを利用していきます。
以下のコマンドでセットアップウィザードを開始します。
/opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-config-wizard
対話式で仕様を聞かれていくので下記のように回答していきます。
On which OS are you planning to use the agent?
linuxを選択します。
Trying to fetch the default region based on ec2 metadata...
Are you using EC2 or On-Premises hosts?
EC2インスタンスの監視のためEC2を選択します。
Which user are you planning to run the agent?
エージェント動作のユーザです。デフォルトのrootを選択します。
Do you want to turn on StatsD daemon?
StatsDというデータ収集ツールを利用するかの質問です。今回は利用しません。
Do you want to monitor metrics from CollectD? WARNING: CollectD must be installed or the Agent will fail to start
CollectDというデータ収集ツールを利用するかの質問です。今回は利用しません。
Do you want to monitor any host metrics? e.g. CPU, memory, etc.
CPUやメモリのデータを収集するかの質問です。yesを選択します。
Do you want to monitor cpu metrics per core?
コア当たりのCPUを収集するかの質問です。yesを選択します。
Do you want to add ec2 dimensions (ImageId, InstanceId, InstanceType, AutoScalingGroupName) into all of your metrics if the info is available?
利用可能なディメンジョンにメトリクスを追加するかの質問です。yesを選択します。
Do you want to aggregate ec2 dimensions (InstanceId)?
ec2のディメンジョンを収集するかの質問です。yesを選択します。
Would 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.
1. 1s
2. 10s
3. 30s
4. 60s
メトリクスの収集間隔です。今回は60sを選択します。
Which default metrics config do you want?
1. Basic
2. Standard
3. Advanced
4. None
事前定義されたメトリクスのセットを選択します。
以下の公式リンクに詳細な内容が記載されています。今回はBasicを選択します。
いままで入力したものがJSON形式で出力されます。
{
"agent": {
"metrics_collection_interval": 60,
"run_as_user": "root"
},
"metrics": {
"aggregation_dimensions": [
[
"InstanceId"
]
],
"append_dimensions": {
"AutoScalingGroupName": "${aws:AutoScalingGroupName}",
"ImageId": "${aws:ImageId}",
"InstanceId": "${aws:InstanceId}",
"InstanceType": "${aws:InstanceType}"
},
"metrics_collected": {
"disk": {
"measurement": [
"used_percent"
],
"metrics_collection_interval": 60,
"resources": [
"*"
]
},
"mem": {
"measurement": [
"mem_used_percent"
],
"metrics_collection_interval": 60
}
}
}
}
Are you satisfied with the above config? Note: it can be manually customized after the wizard completes to add additional items.
1. yes
2. no
確認したら上記の質問でyesを選択します。
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
すでにCloudwatchエージェントがあってマイグレーションしますかの質問です。今回は新規のためnoを選択します。
Do you want to monitor any log files?
ログファイルを監視しますかの質問です。今回はyesを選択します。以下のようにログファイルのパスの入力欄がでるので入力します。
今回は/var/log/messagesを監視します。
Log file path:/var/log/messages
以下のようにロググループ名を聞かれます。デフォルトのままとします。
Log group name:messages
default choice: [messages]
以下のようにログストリーム名を聞かれます。デフォルトのまま(インスタンスID)とします。
Log stream name:
default choice: [{instance_id}]
以下のようにログの世代を聞かれます。今回は無期限(-1)とします。
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. 1827
18. 2192
19. 2557
20. 2922
21. 3288
22. 3653
以下のように追加したい監視対象のログはあるか聞かれます。ないのでnoを選択します。
Do you want to specify any additional log files to monitor?
1. yes
2. no
SSMパラメータストアにコンフィグを保存するか聞かれます。今回はしません。
Do you want to store the config in the SSM parameter store?
1. yes
2. no
default choice: [1]:
以上を入力してEnterを押すと以下の出力がされセットアップが完了します。
Program exits now.
これでCloudwatchエージェントの初期セットアップは完了です。
Cloudwatch用のロール付与
次に監視対象のインスタンスにCloudwatchの権限を付与します。
まずはCloudwatchのポリシーを付与したロールを作成します。
IAMからロールを作成します。下図のように選択します。
ポリシーは「CloudWatchAgentServerPolicy」を選択します。
Cloudwatch-roleという名前のロールで作成します。
作成したロールをインスタンスにアタッチします。
インスタンスへのロール付与は以下の記事に手順を記載しています。
Cloudwatchエージェントの起動
下記のコマンドでCloudwatchエージェントの起動をします。
sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl -a fetch-config -m ec2 -s -c file:configuration-file-path
configuration-file-pathの部分はウィザードにて設定したコンフィグファイルを指定します。
デフォルトの場合、下記のように「/opt/aws/amazon-cloudwatch-agent/bin/config.json」になります。
sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl -a fetch-config -m ec2 -s -c file:/opt/aws/amazon-cloudwatch-agent/bin/config.json
以下のコマンドでエージェントが起動されていることを確認します。
sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl -m ec2 -a status
正常に起動していれば下記のような出力になります。
{
"status": "running",
"starttime": "2023-05-05T12:57:17+00:00",
"configstatus": "configured",
"version": "1.247359.0b252558"
}
Cloudwatchにてログを確認
エージェントの起動までするとCloudwatchにてサーバーのメトリクスが取得できるようになります。
マネジメントコンソールにてCloudwatchのサービスを選択します。
左側のメニューから「メトリクス」>「全てのメトリクス」を選択します。
CWAgentというメトリクスがあります。これはCloudwatchにて取得したデータのメトリクスになります。
ディスク使用率などサーバーリソースが見れるようになります。
次に左側のメニューから「ログ」>「ロググループ」を選択します。
Cloudwatchエージェントのセットアップで設定した「messages」があることを確認できます。
選択するとログストリームというものがあります。セットアップ時にインスタンスIDを設定したのでインスタンスIDが入っています。
ログストリームを選択するとログの内容が確認できます。セットアップ時に「/var/log/messages」を指定したので、その内容が出力されていることを確認できます。
Cloudwatchの導入設定としては以上になります。次の記事ではログの内容を監視してアラートを上げ、通知をするということをしたいと思います。
コメント