ECS on Fargate 環境の各種メトリクスを New Relic で収集して可視化する
会澤 康二
近年はコンテナでアプリケーションを稼働させるケースが増えています。本番環境でコンテナアプリケーションを信頼性高く稼働させるためにはオーケストレーションサービスが欠かせません。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 を使って可視化する手順について解説します。
目次
3. Step 2 : ECS Integration の有効化
3-1. 準備リソースの作成
3-2. タスク定義に ECS エージェントをサイドカーとして追加する
3-3. タスク定義の更新・デプロイ
3-4. データを確認する
ご注意
本記事で紹介する AWS サービスを起動する際には、料金がかかります。builders.flash メールメンバー特典の、クラウドレシピ向けクレジットコードプレゼントの入手をお勧めします。
このクラウドレシピ (ハンズオン記事) を無料でお試しいただけます »
毎月提供されるクラウドレシピのアップデート情報とともに、クレジットコードを受け取ることができます。
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 株式会社 Solutions Consultant
SIer にてシステム開発プロジェクトの PM やインフラ設計・構築などを歴任。その後、クラウドインテグレーション組織の立ち上げを行い、多くのお客様システムのクラウド移行を支援。近年は DevOps やクラウドネイティブ化へ向けたコンテナや Kubernetes、CI/CD などの技術要素の導入支援を行い、現職。
AWS を無料でお試しいただけます