オンプレミスのログをAWS CloudWatchから監視する方法
目次
概要
サーバーのログを監視しなければいけない時に AWS CloudWatch のダッシュボードを思い浮かべるのですが、これがAWSのサービスではなくても利用できるとのことなので実際に設定してみました。
前提条件
今回、以下の条件を達成した状態で開始しています。
1. AWS アカウントを取得している
2. 監視対象のサーバーがインターネットに接続している
監視対象となるサーバーは Ubuntu24.04 です。
1. IAM ユーザーの作成
CloudWatch にアクセス可能なIAMユーザーを作成します。
ユーザーの作成からIAMユーザーを作成します。
ユーザー名を入力して次へ。
ポリシーを直接アタッチする、から許可するポリシーで CloudWatchAgentServerPolicy をチェックします。
ユーザーの作成でIAMユーザーが作成されます。
IAMユーザーの一覧から作成したユーザーを選択します。
アクセスキーを作成、からIAMユーザーの認証情報を作成します。
AWSの外部で実行されるアプリケーションを選択して次へ。
説明タグを入力して、アクセスキーを作成します。
アクセスキーの認証情報は作成時の一度しか入手できないため注意して下さい。
.csv ファイルをダウンロード、にて認証情報をローカルフォルダに保存します。
2. CloudWatch エージェントのインストール
サーバーのログを監視してCloudWatchにログをアップロードできるようにします。
wget https://s3.amazonaws.com/amazoncloudwatch-agent/ubuntu/amd64/latest/amazon-cloudwatch-agent.deb
dpkg -i ./amazon-cloudwatch-agent.deb
wgetに指定するダウンロードリンクはOSによって異なるため、詳細はAWS公式ユーザーガイドを参考にしてください。
docs.aws.amazon.com
3. IAM ユーザー認証情報の設定
作成したIAMユーザーのアクセスキーとシークレットアクセスキーをサーバーに設定します。
vi ~/.aws/credentials
今回、監視対象のサーバーが国内にあるためリージョンは ap-northeast-1 としています。
[AmazonCloudWatchAgent] aws_access_key_id = <my_access_key> aws_secret_access_key = <my_secret_key> region = ap-northeast-1
4. CloudWatch エージェントへ IAM ユーザー認証情報の設定
サーバーに設定した認証情報をCloudWatchエージェントから使用できるように設定します。
vi /opt/aws/amazon-cloudwatch-agent/etc/common-config.toml
ここでは先程IAMユーザー認証情報を入力していた credentials を指定しています。
# [credentials] shared_credential_profile = "AmazonCloudWatchAgent" shared_credential_file = "<home>/.aws/credentials"
5. CloudWatch エージェントの設定
今回はCPU使用率などサーバーの syslog を CloudWatch から監視できるように設定します。
/opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-config-wizard
設定内容の詳細はAWS公式ユーザーガイドを参照してください。
docs.aws.amazon.com
以下は抜粋した今回の設定内容です。
設定内容
=============================================================== = Welcome to the Amazon CloudWatch Agent Configuration Manager = = = = CloudWatch Agent allows you to collect metrics and logs from = = your host and send thbaem to CloudWatch. Additional CloudWatch = = charges may apply. = ================================================================ On which OS are you planning to use the agent? 1. linux 2. windows 3. darwin default choice: [1]: 1 Trying to fetch the default region based on ec2 metadata... I! imds retry client will retry 1 timesAre you using EC2 or On-Premises hosts? 1. EC2 2. On-Premises default choice: [1]: 2 Which user are you planning to run the agent? 1. cwagent 2. root 3. others default choice: [1]: 2 Do you want to turn on StatsD daemon? 1. yes 2. no default choice: [1]: 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? WARNING: CollectD must be installed or the Agent will fail to start 1. yes 2. no default choice: [1]: Do you want to monitor any host metrics? e.g. CPU, memory, etc. 1. yes 2. no default choice: [1]: Do you want to monitor cpu metrics per core? 1. yes 2. no default choice: [1]: 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 default choice: [4]: Which default metrics config do you want? 1. Basic 2. Standard 3. Advanced 4. None default choice: [2]: 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 default choice: [1]: 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]: Do you want to monitor any log files? 1. yes 2. no default choice: [1]: Log file path: /var/log/syslog Log group name: default choice: [syslog] Log group class: 1. STANDARD 2. INFREQUENT_ACCESS default choice: [1]: Log stream name: default choice: [{instance_id}] i-090793e6b5cefd72c 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. 1096 18. 1827 19. 2192 20. 2557 21. 2922 22. 3288 23. 3653 default choice: [16]: Do you want to specify any additional log files to monitor? 1. yes 2. no default choice: [1]: 2 Do you want the CloudWatch agent to also retrieve X-ray traces? 1. yes 2. no default choice: [1]: 2 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]: What parameter store name do you want to use to store your config? (Use 'AmazonCloudWatch-' prefix if you use our managed AWS policy) default choice: [AmazonCloudWatch-linux] Trying to fetch the default region based on ec2 metadata... I! imds retry client will retry 1 timesWhich region do you want to store the config in the parameter store? default choice: [ap-northeast-1] Which AWS credential should be used to send json config to parameter store? 1. XXXXXXXXXXXXXXXXXXXX(From SDK) 2. Other default choice: [1]: Successfully put config to parameter store AmazonCloudWatch-linux. Program exits now.
6. collectd のインストール
apt-get install collectd
7. CloudWatch エージェントの実行
config.json のパスを指定して CloudWatch エージェントを実行します。
/opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl -a fetch-config -m onPremise -c file:/opt/aws/amazon-cloudwatch-agent/bin/config.json -s
エラーが発生する場合はログを参照してください。
cat /opt/aws/amazon-cloudwatch-agent/logs/amazon-cloudwatch-agent.log