Amazon ECSにおけるコンテナレベルメトリクス収集を正式サポートしました

以前のPostでECS Fargateにおけるコンテナレベルのメトリクスを収集する方法を紹介しました。投稿時点ではBeta提供となっておりましたが、この度、正式な機能としてリリースされましたので改めてご紹介します。

Amazon ECS統合とは?

Amazon ECSは、コンテナを簡単に実行、停止、管理できるようにするスケーラブルなコンテナ管理サービスです。New Relicでは、Amazon ECSオブジェクトからのメトリックをレポートすることにより、基盤となるコンテナインスタンス(EC2起動タイプ)とコンテナレイヤーを計測します。もちろん、Fargateにも対応しています。本機能により、ECSインスタンス、タスク、サービス、およびコンテナに関する洞察が得られます。

構成概要

EC2起動タイプの場合

New Relicのインフラストラクチャエージェント(newrelic-infra)のタスクが、デーモンスケジューリングを使用してサービスとしてECSクラスターにデプロイされます。このタスクは、クラスターのすべてのコンテナインスタンスにインフラストラクチャエージェントをインストールします。こうすることでインフラストラクチャエージェントはECSおよびコンテナを監視が可能になります。

Fargate起動タイプの場合

New Relicのインフラストラクチャエージェント(newrelic-infra)を、監視するすべてのタスクでサイドカーとして展開します。

互換性と要件

インストールオプション

本統合機能のインストール方法は3つあります。
  1. AWSCloudFormationを使用してインストールする方法
  2. 自動スクリプトを使用してインストールする方法
  3. 手動でインストールする方法

本PostではCloud formationを使用してインストールする方法をご紹介します。

インストール手順

1. 準備リソースの作成

このCloudformationテンプレートにより、New RelicのECS統合タスクを実現するために必要な各種リソースをデプロイします(予めAWSでログインし、スタックを目的のリージョンにデプロイしていることを確認してください)。
なお、このスタックのパラメーターとして、New Relicのライセンスキーが必要になりますので、こちらから予め確認しておきましょう。
このスタックは、次のリソースを作成します。
  1. ライセンスキーを保存するシークレット
  2. ライセンスキーが保存されているシークレットにアクセスするためのIAMポリシー
  3. 2のポリシーがアタッチされたタスク実行ロール
  4. EC2起動タイプの場合:New Relic InfrastructureECS統合タスク

詳細は公式ドキュメントを参照してください

2. ECS統合タスクの作成・起動

EC2起動タイプの場合:

このスタックをデプロイします 。各コンテナインスタンスで1つずつNew Relicインフラストラクチャエージェントが起動するタスクを実行するサービスを作成します。

Fargate起動タイプの場合:

展開するサイドカーコンテナを含むタスク定義の例をダウンロードします。

次に、タスク定義(newrelic-infra)内に定義されているコンテナを、実際に監視したいタスク定義にサイドカーとして追加するとともに、タスク起動に使用するIAM Roleであるタスク実行ロールのARNを指定します。

以下がタスク定義に追加するコンテナ定義の例です。

 

 "executionRoleArn": "<1で自動生成されたタスク実行ロールのARN>",
  "containerDefinitions": [
      {
     <アプリケーションのコンテナ定義>
      },
      {
        "environment": [
          {
            "name": "NRIA_OVERRIDE_HOST_ROOT",
            "value": ""
          },
          {
            "name": "NRIA_IS_SECURE_FORWARD_ONLY",
            "value": "true"
          },
          {
            "name": "FARGATE",
            "value": "true"
          },
          {
            "name": "ENABLE_NRI_ECS",
            "value": "true"
          },
          {
            "name": "NRIA_PASSTHROUGH_ENVIRONMENT",
            "value": "ECS_CONTAINER_METADATA_URI,ENABLE_NRI_ECS,FARGATE"
          },
          {
            "name": "NRIA_CUSTOM_ATTRIBUTES",
            "value": "{\"nrDeployMethod\":\"downloadPage\"}"
          }
        ],
        "secrets": [
          {
            "valueFrom": "/aws/reference/secretsmanager/<1で作成されたしたシークレット名>",
            "name": "NRIA_LICENSE_KEY"
          }
        ],
        "cpu": 256,
        "memoryReservation": 512,
        "image": "newrelic/infrastructure-bundle:1.5.0",
        "name": "newrelic-infra"
      }

3. データを確認する

エージェントを起動して数分後にはNew Relicへデータが送信されます。Entity explorerからECS Clusterを選択することで、予め用意されたダッシュボードで情報を確認することが可能です。
ダッシュボードではコンテナレベルのメトリクスを確認できます。
組込のECSダッシュボード例
また、コンテナレベルの情報はContainerSampleに格納されます。自由にクエリして可視化したりアラートを発砲することも可能です。
例えば、コンテナレベルでのCPU高負荷であったり、タスクレベルでのCPU負荷だったりを簡単に把握することができます。
サンプルアラートとクエリは公式ドキュメントにも例がありますので、ぜひ参考にしてみてください。

SIerにてシステム開発プロジェクトのPMやインフラ設計・構築などを歴任。その後、クラウドインテグレーション組織の立ち上げを行い、多くのお客様システムのクラウド移行を支援。近年はDevOpsやクラウドネイティブ化へ向けたコンテナやKubernetes、CI/CDなどの技術要素の導入支援を行い、現職。現在はDevRelを通じた文化醸成に興味を持っている。 View posts by .