ECS on Fargate 環境の各種メトリクスを New Relic で収集して可視化する

2021-06-02
ビジネス x クラウド

会澤 康二

近年はコンテナでアプリケーションを稼働させるケースが増えています。本番環境でコンテナアプリケーションを信頼性高く稼働させるためにはオーケストレーションサービスが欠かせません。AWS から提供されているコンテナオーケストレーションサービスは Amazon Elastic Container Service (ECS) と Amazon Elastics Kubernetes Serivice (EKS) の 2 つがあります。ECS も EKS も、共にコントロールプレーンとデータプレーンと呼ばれるコンポーネントに別れます。さらに、AWS ではデータプレーンは Amazon EC2 と AWS Fargate という 2 種類のタイプに別れます。全部で 4 パターンになります。

本記事では、ECS on Fargate 環境の各種メトリクスを New Relic を使って可視化する手順について解説します。

このクラウドレシピ (ハンズオン記事) を無料でお試しいただけます »

毎月提供されるクラウドレシピのアップデート情報とともに、クレジットコードを受け取ることができます。 


1. ECS on Fargate 環境から New Relic に各種メトリクスを取り込む手順

本記事では、以下の作業を行います。

  • AWS Integration の有効化
    CloudWatch メトリクスのデータを New Relic に連携します
  • ECS Integration の有効化
    Amazon CloudWatch の標準メトリクスでは収集できないタスク・コンテナレベルのメトリクスを収集できるようにします

それでは始めましょう。

クリックすると拡大します


2. Step 1 : AWS Integration の有効化

まず、New Relic の画面から [Add more data] をクリックして AWS 連携を選択します。基本的にはこのガイドに沿って操作するだけです。具体的な流れを見ていきます。

クリックすると拡大します

2-1. IAM Role の作成

Management Console にログインし、画面に表示されている通りの手順で IAM Role を作成します。

  • Another AWS Account というタイプを選択します
  • Account ID に 754728514883 を入力します
  • Require external ID にチェックを入れます
  • External ID に 2528582 と入力します

ここまで入力できたら、New Relic 画面の [Next] をクリックします。

クリックすると拡大します

次に、この IAM Role にアタッチするポリシーを選択します。たくさんのポリシーがありますので、ReadOnlyAccess を選択します。そして New Relic 側で [Next] をクリックします。

クリックすると拡大します

IAM Role 名を入力します。New Relic 連携用であることをはっきりさせる為に、NewRelicInfrastructure-Integrations というような名前を推奨しています。

クリックすると拡大します

作成された IAM Role の ARN を控えておきます。

クリックすると拡大します

(Option) AWS Budget の情報も連携させる場合は、以下のインラインポリシーを追加します。

{
"Statement": [
{
"Action": [
"budgets:ViewBudget"
],
"Effect": "Allow",
"Resource": "*"
}
],
"Version": "2012-10-17"
}

最後に、New Relic 側の画面で、New Relic 側で一意になる名前と控えておいた ARN をコピー & ペーストします。

クリックすると拡大します

以上で AWS 連携設定は完了です。

2-2. データを確認する

数分後には New Relic 側の画面で各種メトリクスが確認できるようになります。

クリックすると拡大します

利用している AWS リソースのダッシュボードをみてデータが来ていることを確認してみましょう。例えば EC2 であればリージョンごとの EC2 台数やステータス状況、タイプごとの起動台数などが確認できます。

クリックすると拡大します

2-3. 連携サービスの選択

初期セットアップが完了した時点では、該当 AWS アカウントの全てのサービスの全てのリソースのメトリクスが連携されます。

アクセス制御の観点から必要最低限のサービスやリソースに限定したい、もしくは厳密にコスト管理などを行っている場合は、対象となるリージョンやサービスを絞り込むことができます。その中でも所定のタグが付与されているもののみ連携する、など、柔軟な連携設定を行うことができます。

クリックすると拡大します

なお、今回は ECS / ECR の連携が有効になっている必要があります。少なくともこれは無効化しないようにしてください (画面上は ECS が有効になっていれば ECS /ECR の情報を連携します)。

クリックすると拡大します


3. Step 2 : ECS Integration の有効化

3-1. 準備リソースの作成

この AWS Cloudformation テンプレートから、New Relic の ECS 統合タスクを実現するために必要な各種リソースをデプロイします (予め AWS でログインし、スタックを目的のリージョンにデプロイしていることを確認してください)。なお、このスタックのパラメーターとして、New Relic のライセンスキーが必要になりますので、こちらから予め確認しておきましょう。

このスタックは、次のリソースを作成します。

  • ライセンスキーを保存する AWS Secret Manager のシークレット
  • ライセンスキーが保存されているシークレットにアクセスするための IAM ポリシー
  • 2 のポリシーがアタッチされたタスク実行ロール

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

3-2. タスク定義に ECS エージェントをサイドカーとして追加する

まず、ECS エージェントをサイドカーコンテナとして設定しているタスク定義の例をここからダウンロードします。このタスク定義の例は、busybox コンテナに ECS エージェントをサイドカーとして追加しています。

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

  • executionRoleArn
    タスク起動に使用する IAM Role であるタスク実行ロールの ARN を修正します(*)
  • containerDefinitions
    newrelic-infra コンテナ部分を追加します
  • containerDefinitions – newrelic-infra – secret – valueFrom
  • 追加した 2 の部分のうち、New Relic のライセンスキーが格納されている Secret の ARN 部分を修正します(*)

タスク実行ロール及び Secret の ARN は、「3.1. 準備リソースの作成」でデプロイした Cloudformation で自動生成されています (stack 名 : NewRelicECSIntegration-NewRelicECSTaskExecutionRoleStack-XXXXXX)。

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

"executionRoleArn": "<1で自動生成されたタスク実行ロールのARN>",
"containerDefinitions": [
{
<アプリケーションのコンテナ定義>
<ここは実際に開発しているアプリケーションのコンテナ定義を指定します>
},
{
"image": "newrelic/infrastructure-bundle:1.5.0",
"name": "newrelic-infra",
"cpu": 256,
"memoryReservation": 512,
"secrets": [
{
"valueFrom": "<1で作成されたしたシークレットのARN>",
"name": "NRIA_LICENSE_KEY"
}
],
"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\"}"
}
]
}

3-3. タスク定義の更新・デプロイ

出来上がったタスク定義を更新、デプロイします。AWS マネジメントコンソール 上のタスク定義の作成・更新画面の [Configure via JSON] ボタンから作成・更新します。

クリックすると拡大します

クリックすると拡大します

いよいよ作成したタスク定義をクラスターにデプロイしましょう。クラスターの [Run Task] から作成したタスク定義を選択してデプロイします。

クリックすると拡大します

問題なければ指定した数のタスクが RUNNING になります。

クリックすると拡大します

3-4. データを確認する

エージェントを起動して数分後には New Relic へデータが送信されます。Explorer から ECS Cluster を選択することで、予め用意されたダッシュボードで情報を確認することが可能です。

クリックすると拡大します

タスク・コンテナ単位の CPU/Memory 使用率を見ることができるようになっています。

クリックすると拡大します

また、コンテナレベルの情報は New Relic の Telemetry Data Platform の ContainerSample に格納されます。自由にクエリして可視化したりアラートを発砲することも可能です。例えば、コンテナレベルでの CPU 高負荷であったり、タスクレベルでの CPU 負荷だったりを簡単に把握することができます。

クリックすると拡大します


4. ハンズオンセミナーで体験しよう

いかがでしたでしょうか ? New Relic を使うと、ECS on Fargate 環境のアプリケーションであっても、タスク・コンテナレベルのメトリクスを簡単に取得することができます。また、New Relic はインフラの情報だけでなく、アプリケーションパフォーマンスの状況やユーザー体験も可視化することができます。サービス全体を End to End で Full-stack に観測し続けることで、より迅速なトラブルの検知・対応が可能になります。

7 月 27 日 (火) 16:00~17:00、「AWS Well-Architected フレームワーク」のベストプラクティス ~パフォーマンス効率を高める計測・評価方法~と題して、アプリケーションやワークロード毎に高い安全性、パフォーマンス、障害耐性、効率性を備えたインフラストラクチャを構築する際に役立つ「AWS Well-Architected フ レームワーク」について学ぶとともに、フレームワークを構成する 5 本の柱 (運用効率、セキュリティ、信頼性、パフォーマンス効率、コスト最適化) に関連した計測・評価方法について、New Relic One を実装した際のユースケースをご説明いたします。ぜひご参加ください。

New Relic for AWS 共催ハンズオンセミナー 申し込みページはこちら »


builders.flash メールメンバーへ登録することで
AWS のベストプラクティスを毎月無料でお試しいただけます

筆者紹介

会澤 康二
New Relic 株式会社 Solutions Consultant

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

AWS のベストプラクティスを毎月無料でお試しいただけます

さらに最新記事・デベロッパー向けイベントを検索

下記の項目で絞り込む
1

AWS を無料でお試しいただけます

AWS 無料利用枠の詳細はこちら ≫
5 ステップでアカウント作成できます
無料サインアップ ≫
ご不明な点がおありですか?
日本担当チームへ相談する