こんにちは、寒すぎてもう暖房がない日を忘れたものです
今回はAWSのCloudWatchエージェントでhttpdプロセスを監視してみた手順の備忘録となります
▼環境
OS:AlmaLinux9
ミドルウェア:Apache 2.4
▼手順
※インターネットから接続可能なEC2がAWS上に存在していることを前提としています
1. Apache の起動
・インストール
dnf install httpd -y
・起動と自動起動設定
systemctl start httpd
systemctl enable httpd
・起動確認
systemctl status httpd
→ active (running) と enabled が表示されることを確認する
・プロセスの確認
ps auxwwf | grep [h]ttpd
→apache のプロセスが起動していることを確認する
2. IAMロールの作成
EC2からCloudWatchへアクセスする必要があるので下記ポリシーを付与したIAMロールを作成し、EC2インスタンスへ割り当てます
・CloudWatchAgentServerPolicy
・AmazonSSMManagedInstanceCore
IAM > ロール > ロールを作成 > 下記の設定し、ロールの作成 を押下する
信頼されたエンティティタイプ:AWS のサービス
サービスまたはユースケース:EC2
ロール名:ec2-to-cloudwatch-agent-role
→IAMロールの一覧に ec2-to-cloudwatch-agent-role が存在すること確認する
3. EC2にIAMロールを付与する
EC2 > インスタンス > 対象インスタンスをチェック > アクション > セキュリティ > IAMロールを変更 > ec2-to-cloudwatch-agent-role を選択し、AIMロールの更新 を押下する
→選択したIAMロールが設定されていることを確認する
4. CloudWatch エージェントのインストール
・epelのインストール
dnf install epel-release
・Collectedのインストール
dnf --enablerepo=epel install collectd
・Collectedの起動
systemctl start collectd
systemctl enable collectd
systemctl status collectd
→ active (running) と enabled が表示されることを確認する
・CloudWatchエージェントのインストール
dnf install https://s3.ap-northeast-1.amazonaws.com/amazoncloudwatch-agent-ap-northeast-1/redhat/amd64/latest/amazon-cloudwatch-agent.rpm
5. CloudWatch エージェントのセットアップ
/opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-config-wizard
→今回は基本的にはデフォルトでOKですが、今回は下記それぞれ 2 を選択し、ログを取得しないようにしました
Do you want to monitor any log files? Do you want the CloudWatch agent to also retrieve X-ray traces? Do you want to store the config in the SSM parameter store?
※最終的に出力されたファイル
Saved config file to /opt/aws/amazon-cloudwatch-agent/bin/config.json successfully.
Current config as follows:
{
"agent": {
"metrics_collection_interval": 60,
"run_as_user": "cwagent"
},
"metrics": {
"aggregation_dimensions": [
[
"InstanceId"
]
],
"append_dimensions": {
"AutoScalingGroupName": "${aws:AutoScalingGroupName}",
"ImageId": "${aws:ImageId}",
"InstanceId": "${aws:InstanceId}",
"InstanceType": "${aws:InstanceType}"
},
"metrics_collected": {
"collectd": {
"metrics_aggregation_interval": 60
},
"disk": {
"measurement": [
"used_percent"
],
"metrics_collection_interval": 60,
"resources": [
"*"
]
},
"mem": {
"measurement": [
"mem_used_percent"
],
"metrics_collection_interval": 60
},
"statsd": {
"metrics_aggregation_interval": 60,
"metrics_collection_interval": 10,
"service_address": ":8125"
}
}
}
}
6. CloudWatch エージェントの起動
・デフォルトで出力されたままでは起動に失敗するので下記のようにコピーします
cp -ip /opt/aws/amazon-cloudwatch-agent/bin/config.json /opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.json
・起動設定
systemctl start amazon-cloudwatch-agent
systemctl enable amazon-cloudwatch-agent
systemctl status amazon-cloudwatch-agent
→ active (running) と enabled が表示されることを確認する
7. CloudWatch メトリクスの確認
CloudWatch > Metrics
→AWSコンソール上から CloudWatchエージェント を導入したEC2インスタンスのメトリクスが取得できていることを確認する
8. SSM Agentのインストール
※今回は利用しないですが、念のためインストールします
・インストール
sudo dnf install -y https://s3.amazonaws.com/ec2-downloads-windows/SSMAgent/latest/linux_amd64/amazon-ssm-agent.rpm
・SSM Agentの起動
systemctl start amazon-ssm-agent
systemctl enable amazon-ssm-agent
systemctl status amazon-ssm-agent
→ active (running) と enabled が表示されることを確認する
9. CloudWatch エージェントのconfファイルを修正
・httpdのプロセスを監視できるようにconfファイルを修正します
※run_as_user を root へ変更しないと、サーバー内でrootユーザーで実行されているhttpdプロセスが監視できないです
vi /opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.json
{
"agent": {
"metrics_collection_interval": 60,
"run_as_user": "root"
},
"logs": {
"logs_collected": {
"files": {
"collect_list": [
{
"file_path": "",
"log_group_name": ".",
"log_stream_name": "{instance_id}",
"retention_in_days": -1
},
{
"file_path": "",
"log_group_name": ".",
"log_stream_name": "{instance_id}",
"retention_in_days": -1
}
]
}
}
},
"metrics": {
"aggregation_dimensions": [
[
"InstanceId"
]
],
"append_dimensions": {
"AutoScalingGroupName": "${aws:AutoScalingGroupName}",
"ImageId": "${aws:ImageId}",
"InstanceId": "${aws:InstanceId}",
"InstanceType": "${aws:InstanceType}"
},
"metrics_collected": {
"collectd": {
"metrics_aggregation_interval": 60
},
"disk": {
"measurement": [
"used_percent"
],
"metrics_collection_interval": 60,
"resources": [
"*"
]
},
"mem": {
"measurement": [
"mem_used_percent"
],
"metrics_collection_interval": 60
},
"statsd": {
"metrics_aggregation_interval": 60,
"metrics_collection_interval": 10,
"service_address": ":8125"
},
"procstat": [
{
"exe": "httpd",
"measurement": [
"pid_count"
],
"metrics_collection_interval": 10
}
]
}
}
}
・CloudWatchエージェントの再起動
systemctl restart amazon-cloudwatch-agent
systemctl status amazon-ssm-agent
→active (running) と enabled が表示されることを確認する
10. CloudWatchコンソールからプロセスの起動確認
CloudWatch > Metrics > CWAgent > procstat_lookup_pid_count
→値が 1 以上になっていればOK
▼まとめ
いかがでしたでしょうか?
あまりCloudWatchでプロセス監視は実施しないかもしれませんが、何かの一助になれば幸いですー


