以前の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)を、監視するすべてのタスクでサイドカーとして展開します。

互換性と要件

  • AmazonECSコンテナエージェント1.21.0以降
  • Windowsはサポートされていません
  • Entity Explorerから情報を参照するためには、AWS Integrationが有効になっている必要があります。

インストールオプション

本統合機能のインストール方法は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起動タイプの場合:

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

次に、実際に監視したいタスク定義にダウンロードしたタスク定義の例の中から以下の部分を修正、追加します。

  • executionRoleArn: タスク起動に使用するIAM Roleであるタスク実行ロールのARNを指定します
  • containerDefinitions: newrelic-infraコンテナ部分を追加します
  • containerDefinitions - newrelic-infra - secret - valueFrom: New Relicのライセンスキーが格納されているSecretのARNを指定します

タスク実行ロール及びSecretのARNは、1でデプロイしたCloudformationで自動生成されています。

(stack名:NewRelicECSIntegration-NewRelicECSTaskExecutionRoleStack-XXXXXX)

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

 "executionRoleArn": "<1で自動生成されたタスク実行ロールのARN>",

  "containerDefinitions": [

      {

     <アプリケーションのコンテナ定義>

      },

      {

        "environment": [

          {

            "name": "NRIA_OVERRIDE_HOST_ROOT",

            "value": ""

          },

          {

            "name": "NRIA_IS_SECURE_FORWARD_ONLY",

            "value": "true"

          },

          {

            "name": "FARGATE",

            "value": "true"

          },

          {

            "name": "NRIA_PASSTHROUGH_ENVIRONMENT",

            "value": "ECS_CONTAINER_METADATA_URI,ENABLE_NRI_ECS,FARGATE"

          },

          {

            "name": "NRIA_CUSTOM_ATTRIBUTES",

            "value": "{\"nrDeployMethod\":\"downloadPage\"}"

          }

        ],

        "secrets": [

          {

            "valueFrom": "<1で作成されたしたシークレットのARN>",

            "name": "NRIA_LICENSE_KEY"

          }

        ],

        "cpu": 256,

        "memoryReservation": 512,

        "image": "newrelic/nri-ecs:latest",

        "name": "newrelic-infra"

      }



3. データを確認する

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