概要
- こんにちわ、今回は担当案件でオンプレミスとAWS 環境を接続する構成がありまして、オンプレミスのサーバーからAWS のリソースへアクセスを行います。事前に検証した知見を記事にまとめますね。
- 今回の記事では、オンプレミスのLinuxサーバーのメトリクスをAWS環境のCloudWatch に出力する方法を記載します。なお、クレデンシャルはアクセスキーを使用せず、 AWS Systems Manager のハイブリッドアクティベーションで管理しています。
前提条件
- AWS Systems Manager のハイブリッドアクティベーションを作成し、ハイブリッドアクティベーションに設定されているIAMロールにCloudWatch にメトリクス出力が可能な権限を設定します。
- 詳細は、以下の記事を参照ください。
オンプレミスを AWS Systems Manager で管理する
ハイブリッドアクティベーションのクレデンシャル
- ハイブリッドアクティベーションは、IAM ユーザーのアクセスキーではなく、IAM STS の一時的な認証情報を使用するため、安全にAWS 環境の認証を提供します。
- ハイブリッドアクティベーションで管理されるマネージドノードは、Linux の場合、“/root/.aws/credentials” に認証情報が格納されます。この認証情報は、SSM Agent によって、30分間隔で更新されます。
オンプレ Linux のCloudWatch Agent設定方法
- amazon-cloudwatch-agent をインストールします。yumなどのOSパッケージ管理コマンドを使用するか、Systems ManagerのRun Command を使用します。
- 以下は、amazon-cloudwatch-agent をインストールするyumコマンドです。
- rpm ファイルをダウンロードする場合は、こちらのドキュメントにダウンロードリンクが記載されています。
- Systems ManagerのRun Command を使用してインストールする場合、コマンドドキュメントに「AWS-ConfigureAWSPackage」を使用し、Actionに「Install」、Nameに「AmazonCloudWatchAgent」を指定します。
$ sudo yum install amazon-cloudwatch-agent $ yum list installed amazon-cloudwatch-agent Loaded plugins: extras_suggestions, langpacks, priorities, update-motd 65 packages excluded due to repository priority protections Installed Packages amazon-cloudwatch-agent.x86_64 1.300043.0b781-1 installed
- /opt/aws/amazon-cloudwatch-agent/etc/common-config.toml を編集します。
- 「shared_credential_profile」、「shared_credential_file」を以下の様に設定します。
[credentials]
shared_credential_profile = “default”
shared_credential_file = “/root/.aws/credentials”
$ sudo vi /opt/aws/amazon-cloudwatch-agent/etc/common-config.toml $ cat /opt/aws/amazon-cloudwatch-agent/etc/common-config.toml # This common-config is used to configure items used for both ssm and cloudwatch access ## Configuration for shared credential. ## Default credential strategy will be used if it is absent here: ## Instance role is used for EC2 case by default. ## AmazonCloudWatchAgent profile is used for onPremise case by default. # [credentials] # shared_credential_profile = "{profile_name}" # shared_credential_file = "{file_name}" [credentials] shared_credential_profile = "default" shared_credential_file = "/root/.aws/credentials" ## Configuration for proxy. ## System-wide environment-variable will be read if it is absent here. ## i.e. HTTP_PROXY/http_proxy; HTTPS_PROXY/https_proxy; NO_PROXY/no_proxy ## Note: system-wide environment-variable is not accessible when using ssm run-command. ## Absent in both here and environment-variable means no proxy will be used. # [proxy] # http_proxy = "{http_url}" # https_proxy = "{https_url}" # no_proxy = "{domain}" # [ssl] # ca_bundle_path = "{ca_bundle_file_path}" # # [imds] # imds_retries = 1
- /root/.aws/config にregion を設定します。
$ sudo vi /root/.aws/config $ sudo cat /root/.aws/config [default] region = "ap-northeast-1"
- CloudWatch Agent の設定を /opt/aws/amazon-cloudwatch-agent/etc に配置します。検証に使用したjsonは、以下参照ください。
- agent にrun_as_user を設定し、root を指定します。その他、metric の設定は、要件に応じて行ってください。
$ sudo vi /opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.json $ ls -l /opt/aws/amazon-cloudwatch-agent/etc total 20 drwxr-xr-x 2 root root 21 Jul 2 22:49 amazon-cloudwatch-agent.d -rw-r--r-- 1 root root 656 Aug 25 08:34 amazon-cloudwatch-agent.json -rw-r--r-- 1 root root 1070 Aug 25 08:30 common-config.toml $ cat /opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.json { "agent": { "metrics_collection_interval": 60, "run_as_user": "root" }, "metrics": { "metrics_collected": { "collectd": { "metrics_aggregation_interval": 60 }, "cpu": { "measurement": [ "cpu_usage_idle", "cpu_usage_iowait", "cpu_usage_user", "cpu_usage_system" ], "metrics_collection_interval": 60, "resources": [ "*" ], "totalcpu": false } } } }
- こちら発見が難しいのですが、OSにcollectd がインストールされていなければエラーとなります。collectd のインストールを行います。
- Amazon Linux の場合は、amazon-linux-extras コマンドを使用します。
$ sudo amazon-linux-extras install collectd $ sudo systemctl enable collectd $ sudo systemctl start collectd $ sudo systemctl status collectd ● collectd.service - Collectd statistics daemon Loaded: loaded (/usr/lib/systemd/system/collectd.service; enabled; vendor preset: disabled) Active: active (running) since Sun 2024-08-25 08:56:39 UTC; 8s ago Docs: man:collectd(1) man:collectd.conf(5) Main PID: 26058 (collectd) Memory: 1.6M CGroup: /system.slice/collectd.service mq26058 /usr/sbin/collectd Aug 25 08:56:39 niikawa-test-linux collectd[26058]: Available write targets: ... Aug 25 08:56:39 niikawa-test-linux collectd[26058]: Available write targets: ... Aug 25 08:56:39 niikawa-test-linux collectd[26058]: Available write targets: ... Aug 25 08:56:39 niikawa-test-linux collectd[26058]: Available write targets: ... Aug 25 08:56:39 niikawa-test-linux collectd[26058]: Available write targets: ... Aug 25 08:56:39 niikawa-test-linux collectd[26058]: Available write targets: ... Aug 25 08:56:39 niikawa-test-linux collectd[26058]: Available write targets: ... Aug 25 08:56:39 niikawa-test-linux collectd[26058]: Available write targets: ... Aug 25 08:56:39 niikawa-test-linux collectd[26058]: Available write targets: ... Aug 25 08:56:39 niikawa-test-linux systemd[1]: Started Collectd statistics d.... Hint: Some lines were ellipsized, use -l to show in full.
- amazon-cloudwatch-agent-ctl -a fetch-config -m onPremise コマンドを使用し、amazon-cloudwatch-agent の設定を指定してサービス起動を行います。
- 実行結果にエラーはなく、rootで実行され、Configuration validation succeeded と表示されることを確認します。
$ sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl -a fetch-config -m onPremise -c file:/opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.json -s ****** processing amazon-cloudwatch-agent ****** Got Home directory: /root I! Set home dir Linux: /root I! SDKRegionWithCredsMap region: ap-northeast-1 Successfully fetched the config and saved in /opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.d/file_amazon-cloudwatch-agent.json.tmp Start configuration validation... 2024/08/25 08:57:09 Reading json config file path: /opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.d/file_amazon-cloudwatch-agent.json.tmp ... 2024/08/25 08:57:09 I! Valid Json input schema. 2024/08/25 08:57:09 Configuration validation first phase succeeded I! Detecting run_as_user... Got Home directory: /root I! Set home dir Linux: /root I! SDKRegionWithCredsMap region: ap-northeast-1 /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 succeeded Configuration validation succeeded amazon-cloudwatch-agent has already been stopped Created symlink from /etc/systemd/system/multi-user.target.wants/amazon-cloudwatch-agent.service to /etc/systemd/system/amazon-cloudwatch-agent.service. $ systemctl status amazon-cloudwatch-agent -l ● amazon-cloudwatch-agent.service - Amazon CloudWatch Agent Loaded: loaded (/etc/systemd/system/amazon-cloudwatch-agent.service; enabled; vendor preset: disabled) Active: active (running) since Sun 2024-08-25 08:57:11 UTC; 27s ago Main PID: 26281 (amazon-cloudwat) Memory: 91.0M CGroup: /system.slice/amazon-cloudwatch-agent.service mq26281 /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent -config /opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.toml -envconfig /opt/aws/amazon-cloudwatch-agent/etc/env-config.json -otelconfig /opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.yaml -pidfile /opt/aws/amazon-cloudwatch-agent/var/amazon-cloudwatch-agent.pid Aug 25 08:57:12 niikawa-test-linux start-amazon-cloudwatch-agent[26281]: I! imds retry client will retry 1 timesI! Detected the instance is EC2 Aug 25 08:57:12 niikawa-test-linux start-amazon-cloudwatch-agent[26281]: 2024/08/25 08:57:12 Reading json config file path: /opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.json ... Aug 25 08:57:12 niikawa-test-linux start-amazon-cloudwatch-agent[26281]: 2024/08/25 08:57:12 Reading json config file path: /opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.d/file_amazon-cloudwatch-agent.json ... Aug 25 08:57:12 niikawa-test-linux start-amazon-cloudwatch-agent[26281]: 2024/08/25 08:57:12 I! Valid Json input schema. Aug 25 08:57:12 niikawa-test-linux start-amazon-cloudwatch-agent[26281]: I! Detecting run_as_user... Aug 25 08:57:12 niikawa-test-linux start-amazon-cloudwatch-agent[26281]: Got Home directory: /root Aug 25 08:57:12 niikawa-test-linux start-amazon-cloudwatch-agent[26281]: I! Set home dir Linux: /root Aug 25 08:57:12 niikawa-test-linux start-amazon-cloudwatch-agent[26281]: I! SDKRegionWithCredsMap region: ap-northeast-1 Aug 25 08:57:12 niikawa-test-linux start-amazon-cloudwatch-agent[26281]: 2024/08/25 08:57:12 Configuration validation first phase succeeded Aug 25 08:57:12 niikawa-test-linux start-amazon-cloudwatch-agent[26281]: I! Detecting run_as_user...
CloudWatch メトリクス確認
- CloudWatch メトリクスを確認します。
- メトリクスが出力される名前空間は、「CWAgent」になります。
- オンプレミスのLinux からメトリクス出力が確認できました。
参考資料
- 前提となるハイブリッドアクティベーションの設定は、以下の記事を参照ください。
- Linux の一般的なCloudWatch Agent の設定は、以下の記事を参照ください。