Act/Stb 構成のインスタンスのメトリクスを繋げてみた

2024.02.13

はじめに

Active/Standby 等の構成を取っている EC2 インスタンスにて、Active インスタンスと Standby インスタンスが交代しても同じメトリクスに値を出力し続けたいケースがあるかと思います。
今回は CloudWatchAgent を使用して取得できるメトリクスを対象に、こちらを実現する方法を確認してみました。

先にまとめ

CloudWatch エージェントの設定ファイルにて、同じ値の名前空間とディメンションを利用してメトリクスを発行するように設定することで実現できました。

検証

調べたこと

はじめに、CloudWatch メトリクスは「メトリクス名」と、「名前空間」、「ディメンション」の値と組み合わせによって一意に定義されています。 1

メトリクス - Amazon CloudWatch の概念

メトリクスは名前、名前空間、0 以上のディメンションで一意に定義されます。

そのため、上記の値と組み合わせが一致していれば、同じ CloudWatch メトリクスとして扱われるようにできるので、続いてその方法を調査しました。

メトリクス名

メトリクス名については、エージェント設定ファイルで指定した名前が利用される 2 ため、特に追加で必要な設定はありませんでした。

名前空間

名前空間については、エージェント設定ファイル内にある Metrics セクションのオプション namespace 3 にて、 両インスタンスで共通の名前空間の値を設定することで、同じ値の名前空間を利用してメトリクスを発行できます。

CloudWatch エージェント設定ファイル: Metrics セクション

namespace - オプション。エージェントによって収集されるメトリクスに使用する名前空間。

ディメンション

ディメンションについては、エージェント設定ファイルにて以下の 2 つのオプションを設定することで、同じ名前と組み合わせを利用できるようになります。 

  • omit_hostname
    こちらのオプションは、インスタンスのホスト名をディメンションとして発行するかしないかを選択するオプションです。4
    この値が false となっていると、インスタンスのホスト名がディメンションとして追加された状態でメトリクスを発行するため、 対象インスタンスのホスト名が異なる場合はディメンションの値と組み合わせが一致せず、別のメトリクスとして扱われます。
    この項目はデフォルトで false となっているため、true に設定することで、インスタンスごとに変動するディメンションの発行をなくすことができます。

CloudWatch エージェント設定ファイル: Agent セクション

omit_hostname - オプション。デフォルトでは、append_dimensions セクション内の metrics フィールドを使用している場合を除き、ホスト名はエージェントによって収集されるメトリクスのディメンションとして発行されます。omit_hostname を true に設定すると、append_dimensions を使用していなくても、ホスト名がディメンションとして発行されません。デフォルト値は、「false」です。

  • append_dimensions
    こちらのオプションは、任意の値のディメンションを追加してメトリクスを発行するためのオプションです。3
    omit_hostname にてインスタンスにより変動するディメンションをなくした状態で、こちらの項目にて両インスタンスで共通の値を設定することで、 両インスタンスで同じ値と組み合わせのディメンションを発行できるようになります。

CloudWatch エージェント設定ファイル: Metrics セクション

append_dimensions - オプション。cpu メトリクスにのみ使用する追加のディメンション。このフィールドを指定した場合、エージェントによって収集されるすべてのタイプのメトリクスに使用されるグローバルフィールド append_dimensions で指定されたディメンションに加えて使用されます。

実際にやってみる

上記で調べたことをもとに、エージェント設定ファイルを作成してみました。
今回の検証では Amazon Linux 2023 のインスタンスを利用します。

{
  "agent": {
    "logfile": "/opt/aws/amazon-cloudwatch-agent/logs/amazon-cloudwatch-agent.log",
    "omit_hostname": true
  },
  "metrics": {
    "namespace": "Test",
    "metrics_collected": {
      "mem": {
        "measurement": [
          "mem_available"
        ],
        "append_dimensions": {
          "HostName": "Linux"
        }
      }
    }
  }
}

Active/Standby 構成を再現するために、同じ構成のインスタンス(Linux1,Linux2)を 2 つ作成し、上記の内容のエージェント設定ファイルを読み込んでおきます。
また、Active/Standby 構成なので、片方のインスタンス(Linux2)を Standby として停止した状態にしておきます。

この状態のメトリクスを見てみると、以下のような状態です。

それでは、現在 Active 状態のインスタンス(Linux1)を停止して、Standby のインスタンス(Linux2)を起動していきます。

少し待つと、元 Standby のインスタンス(Linux2)の値が同じメトリクスとして記録されるようになりました。

アノテーション株式会社について

アノテーション株式会社はクラスメソッドグループのオペレーション専門特化企業です。サポート・運用・開発保守・情シス・バックオフィスの専門チームが、最新 IT テクノロジー、高い技術力、蓄積されたノウハウをフル活用し、お客様の課題解決を行っています。当社は様々な職種でメンバーを募集しています。「オペレーション・エクセレンス」と「らしく働く、らしく生きる」を共に実現するカルチャー・しくみ・働き方にご興味がある方は、アノテーション株式会社 採用サイトをぜひご覧ください。