CloudWatch Agentでインスタンスタイプも含めてメトリクスを転送する
CloudWatch Agentでは、append_dimensions を設定することで、メトリクスに追加情報を付与できます。
これにより、CloudWatch上でより詳細な分析が可能になります。
しかし、append_dimensions を設定しない場合、CloudWatch上では以下のように識別情報が不足した状態となります。
この状態では、複数インスタンスを管理する際にホスト名のみでの判別となります。
さらにホスト名は動的に変更されるケースもあり、運用上非常に不便です。
そこで今回は、以下の情報を付与します。
- インスタンスID
- インスタンスタイプ
これにより、CloudWatch上での可視性を向上させます。
記事の目次
事前準備
以下の準備が完了している前提とします。
- httpd:インストール・起動・自動起動設定済み
- CloudWatch Agent:インストール済み
- EC2:必要なIAMロールをアタッチ済み
- AWS CLI:インストール済み
CloudWatch Agent 設定ファイルの作成
設定ファイル作成
sudo vi /opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.json以下の内容を記載します。
{
"metrics": {
"namespace": "CWAgent",
"append_dimensions": {
"InstanceId": "${aws:InstanceId}",
"InstanceType": "${aws:InstanceType}"
},
"aggregation_dimensions": [
["InstanceId"]
],
"metrics_collected": {
"procstat": [
{
"pattern": "httpd",
"measurement": [
"pid_count"
],
"metrics_collection_interval": 60
}
]
}
}
}設定の反映
sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl \
-a fetch-config \
-m ec2 \
-c file:/opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.json \
-sステータス確認
sudo systemctl status amazon-cloudwatch-agent
稼働確認
sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl -a status
AWSマネジメントコンソールのCloudWatchから、インスタンスID、インスタンスタイプで取得できているのを確認
番外編:CloudWatch Alarmの作成(CloudFormation)
前提
SNSトピック作成済みEC2に以下のIAMロールが付与されていること
- SNSトピック作成済み
- EC2に以下のIAMロールが付与されていること
CloudWatchAgentServerPolicy
CloudWatchFullAccess(※検証用途)
CloudFormationテンプレート作成
vi cloudwatch-alarm.yamlAWSTemplateFormatVersion: '2010-09-09'
Description: Httpd procstat alarm
Parameters:
TargetInstanceId:
Type: AWS::EC2::Instance::Id
InstanceType:
Type: String
SnsTopicArn:
Type: String
Resources:
HttpdDownAlarm:
Type: AWS::CloudWatch::Alarm
Properties:
AlarmName: !Sub Httpd-Process-Down-${TargetInstanceId}
Namespace: CWAgent
MetricName: procstat_lookup_pid_count
Statistic: Average
Period: 60
EvaluationPeriods: 1
Threshold: 1
ComparisonOperator: LessThanThreshold
TreatMissingData: missing
Dimensions:
- Name: InstanceId
Value: !Ref TargetInstanceId
- Name: InstanceType
Value: !Ref InstanceType
- Name: pattern
Value: httpd
- Name: pid_finder
Value: native
AlarmActions:
- !Ref SnsTopicArnデプロイ
aws cloudformation deploy \
--template-file cloudwatch-alarm.yaml \
--stack-name CloudWatch-Alarm-1
確認
CloudWatch Alarmが作成され、ステータスが「OK」であることを確認します。
インスタンスタイプを変えたらどうなるのか、テスト
今回の構成では、CloudWatchのディメンションに以下を含めています。
- InstanceId
- InstanceType
そのため、インスタンスタイプを変更するとディメンションが変化します。
例:
- 変更前:t3.micro
- 変更後:t3.small
この場合、メトリクスは「別データ」として扱われます。
結果として、
- 旧アラーム → データ不足(INSUFFICIENT_DATA)
となります。
実際に試してみましょう。
CloudWatch メトリクスは現状下記です。
インスタンスタイプを変更
t3.microからt3.smallに変更します
CloudWatchメトリクスを確認
少し経つとインスタンスタイプがt3.microとt3.smallがでてきました。
ただし、以前のアラームは「データ不足」になりましたね。やはりDimensionでインスタンスタイプを指定した場合、インスタンスタイプ変更に合わせてCLoudWatchアラームの設定も変えないとダメなようです。
- タグ:
- CloudWatch