Techfirm Cloud Architect Blog

テックファーム株式会社クラウドインフラグループのブログ

CloudWatch オブザーバビリティソリューションを使ってみる

はじめに

先日、システムの状況を観測するオブザーバビリティソリューションが提供開始されました。

オブザーバビリティソリューションは、AWS でのインフラストラクチャとアプリケーションの監視を迅速に立ち上げて実行するのに役立ちます。これらは、AWS サービス、カスタムアプリケーション、サードパーティーのワークロードを監視するための最適なオプションについて、意見に基づいたガイダンスを必要とする開発者を対象としています。オブザーバビリティソリューションには、インストルメンテーション、テレメトリ収集、カスタムダッシュボード、メトリックアラームの実施例が含まれます。

実際に機能を有効にして内容をみてみましょう。

使ってみる

公式のチュートリアルに沿って構築します。手順はチュートリアル通りですので、ポイントとなる部分のみ補足します。

  • 環境

Amazon Linux release 2023

NGINXメトリクスの公開設定

チュートリアルに沿ってステータスエンドポイントの設定を追記しましょう。

Prometheus メトリクスエクスポーター設定

Prometheusエクスポーターは2025年1月現在v1.4.1が公開されていますので、新しいバージョンでコマンドを置き換えると良いでしょう。

wget https://github.com/nginx/nginx-prometheus-exporter/releases/download/v1.4.1/nginx-prometheus-exporter_1.4.1_linux_amd64.tar.gz

ロール設定

AWS管理ロールである以下の権限相当がインスタンスに付与されていることを確認します。

  • AmazonEC2ReadOnlyAccess
  • AmazonSSMManagedInstanceCore
  • CloudWatchAgentServerPolicy

CloudWatchエージェント設定

CloudWatchエージェントインストール

CloudWatchエージェントは初期状態ではインストールされていないので、インストールします。

sudo dnf install amazon-cloudwatch-agent

パラメータ設定

サンプルを参照し、CloudWatchエージェント設定ファイル、Prometheus設定ファイルをそれぞれ作成し、AWS Systems Managerのパラメータストアに配置します。

  • CloudWatchエージェント設定ファイル(パラメータ名:AmazonCloudWatch-NGINX-CloudWatchAgent-Configuration)
{
"agent": {
  "metrics_collection_interval": 60
},
"logs": {
  "metrics_collected": {
      "prometheus": {
          "log_group_name": "nginx",
          "prometheus_config_path": "/opt/aws/amazon-cloudwatch-agent/etc/prometheus.yaml",
          "emf_processor": {
              "metric_declaration_dedup": true,
              "metric_namespace": "CWAgent",
              "metric_declaration":[
                  {
                      "source_labels":["InstanceId"],
                      "metric_selectors":["nginx_up", "nginx_http_requests_total", "nginx_connections*"],
                      "dimensions": [["InstanceId"]]
                  }
              ]
          }
      }
  }
}
}
  • Prometheus設定ファイル(パラメータ名:NGINX-Prometheus-Configuration)
global:
  scrape_interval: 30s
  scrape_timeout: 10s
  
scrape_configs:
- job_name: 'nginx'
  metrics_path: /metrics
  static_configs:
    - targets: ['localhost:9113']
  ec2_sd_configs:
    - port: 9113
  relabel_configs:
    - source_labels: ['__meta_ec2_instance_id']
      target_label: InstanceId
  metric_relabel_configs:
    - source_labels: ['__name__']
      regex: 'nginx_up|nginx_http_requests_total|nginx_connections_.*'
      action: keep

CloudFormationで展開

CloudFormationでエージェント設定を展開します。パラメータ設定項には以下の内容を設定します。

パラメータ 内容
CloudWatchAgentConfigSSM パラメータ設定項で設定したパラメータ(AmazonCloudWatch-NGINX-CloudWatchAgent-Configuration)
InstanceIds モニター対象インスタンスID
PrometheusConfigSSM パラメータ設定項で設定したパラメータ(NGINX-Prometheus-Configuration)

ダッシュボードのデプロイ

「CloudWatch」→「利用開始」を押下します。

利用開始

「オブザーバビリティソリューション - 新規」→「今すぐ始める」を押下します。

今すぐ始める

オブザーバビリティソリューションの中から「NGINX」を選択します。内容を確認し、「in CloudFormation」を押下し、ダッシュボードを作成します。

オブザーバビリティソリューション

スタック作成時のパラメータ項にDashboardNameParameterとしてダッシュボードの名前を設定できるので、必要に応じて変更します。

動作確認

「CloudWatch」→「Dashboards」→「NginxDashboard(デフォルトの場合)」を押下します。NGINXのメトリクスが反映されていることを確認します。

動作確認

おわりに

公式のテンプレートが用意されたことで、メトリクスの可視化が簡単になったと思います。活用していきましょう。