この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
コンサル部@大阪オフィスのYui(@MayForBlue)です。
Amazon Linux 2 に CloudWatch エージェントをインストールして起動しようとした際にエラーが出てハマってしまいました。
小ネタですが備忘録として解決方法を残しておきたいと思います。
起きたこと
EC2 に CloudWatch エージェントをインストールして SSM から Run Command を使用してエージェントを起動しようとした際に、エラーが出て実行が失敗してしまいました。
エラーの内容は以下です。
/opt/aws/amazon-cloudwatch-agent/bin/config-downloader --output-dir /opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.d --download-source ssm:AmazonCloudWatch-linux --mode ec2 --config /opt/aws/amazon-cloudwatch-agent/etc/common-config.toml --multi-config default
Region: ap-northeast-1
credsConfig: map[]
Successfully fetched the config and saved in /opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.d/ssm_AmazonCloudWatch-linux.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
Valid Json input schema.
I! Detecting runasuser...
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 failed
======== Error Log ========
2020/08/06 06:20:57 I! AmazonCloudWatchAgent Version 1.246396.0.
2020/08/06 06:20:57 E! Error parsing /opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.toml, open /usr/share/collectd/types.db: no such file or directory
----------ERROR-------
2020/08/06 06:20:57 Reading json config file path: /opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.d/ssm_AmazonCloudWatch-linux.tmp ...
failed to run commands: exit status 1
結論と解決策
結論を言うと、OSに collectd (サーバの統計情報を収集するためのソフトウェア) のアプリケーションが足りていないことが原因でした。
Amazon Linux 2 にはデフォルトで collectd がインストールされていないにも関わらず、エージェントの設定ファイルを作成した際に collectd のメトリクスを有効にしていたため、上記のエラーが発生しました。
実際に使用した設定ファイルの内容は以下です。
{
"agent": {
"metrics_collection_interval": 60,
"run_as_user": "root"
},
"logs": {
"logs_collected": {
"files": {
"collect_list": [
{
"file_path": "/var/log/messages",
"log_group_name": "messages",
"log_stream_name": "{instance_id}"
}
]
}
}
},
"metrics": {
"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"
}
}
}
}
解決策として、以下のドキュメントにしたがって collectd をインストールしました。
collectd を使用したカスタムメトリクスの取得
インストールのコマンドは以下です。
sudo yum install -y https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
sudo yum install -y collectd
インストールが終わったあと再度SSMの Run Command を実行すると無事にエージェントが起動し、CloudWatch Logs にログが出力されていることが確認できました。
また、collectd からのメトリクスの収集が不要な場合は、collectd の使用をしないようにエージェントの設定ファイルを再度作成してコマンドを実行するとエージェントの起動が成功します。
さいごに
小ネタですが、少しハマったので備忘録として書いてみました。
この記事がどなたかのお役に立てば幸いです。
以上、コンサル部@大阪オフィスのYui(@MayForBlue)でした!