New RelicにはAWSインテグレーション機能があり、様々なAWSサービスのメトリクスを自動的に収集することができます。ECSもサポートされており、CloudWatchメトリクスをNew Relicへ登録することができます。これだけでも十分な情報を取得することはできますが、ECSにおけるタスクやコンテナレベルのメトリクスを収集したい場合があります。本Postでは、このような要件をNew Relicで実現する方法および手順についてご紹介します。

構成概要

New Relicではnr-ecs-agentというコンテナをサイドカーとして構成し、タスク内のコンテナレベルのメトリクスを収集します。nr-ecs-agentは、ECSのインターナルなメタデータエンドポイントからデータを取得し、New Relicのデータベース(NRDB)へデータを送信します。

ECS Agent構成概要

New RelicのECS Agentをサイドカーとして構成することで、AWSメタデータから値を取得してNRDBに登録します。

セットアップ手順

nr-ecs-agentコンテナイメージを作成してサイドカーとしてデプロイします。手順は以下の通りです。

  1. nr-ecs-agentパッケージを入手し、解凍します*
  2. エージェントの設定を行います(詳細は後述します)
  3. Dockerイメージをbuildし、お好みのレジストリにpushします
    # 東京リージョンのnr-ecs-agentというレジストリにpushする場合
    docker build -t 123456789012.dkr.ecr.ap-northeast-1.amazonaws.com/nr-ecs-agent .
    docker push 123456789012.dkr.ecr.ap-northeast-1.amazonaws.com/nr-ecs-agent
  4. ECS タスク定義に上記イメージをサイドカーとして追加します
    containerDefinitionsセクションに作成したイメージを起動するよう追加します。詳細はAWSドキュメントを参照してください
  5. タスクをデプロイします

これだけです。簡単ですね。

エージェントの設定項目

nr-ecs-agentの動作は次の2箇所で設定することができます。

コンフィグファイル(nr-ecs-agent.yml)で設定する方法

  • Insights_url: <your account id>部分をご利用のアカウントidに置換します
    • アカウントIDはNew Relicにログイン後のブラウザに表示されるURLから確認することができますhttps://rpm.newrelic.com/accounts/xxxxxx  ←末尾の数字がアカウントIDになります
  • Insights_key: New Relicへデータを登録するためのキーを設定します。設定方法はこちらを参照してください
  • Interval: データ取得間隔を設定します(default 15秒)
  • report_agent: エージェント自体のメトリクスを収集するか否か(default false)
  • custom_attribute: 個別のKey-Value値をNew Relicへ登録したい場合は設定します(アプリケーション名や環境など)

環境変数で設定する方法

上記コンフィグファイルの設定内容は、環境変数でも設定することができます。

  • NR_INSIGHTS_KEY
  • NR_INSIGHTS_URL
  • NR_INTERVAL
  • NR_REPORT_AGENT
  • Custom AttributeはNREA_<Key名>=<Value>とすることで複数のAttributeを設定可能です
    • NREA_OWNER=nr.expert.services
    • NREA_TEAM=loud

可視化する

nr-ecs-agentによって送信されたデータは、New RelicのecsContainerSampleというイベントとして登録されます。

以下は、タスク定義 / コンテナごとの平均CPU使用率を求めるクエリサンプルです。

FROM ecsContainerSample SELECT average(cpuPercent) FACET taskFamily, taskID, name TIMESERIES

このようなクエリを活用し、コンテナレベルのメトリクスを含んだ情報を可視化することができます。

ECS Agentで取得したデータの可視化例

NRDBに登録されたデータは自由に可視化することができます

もちろんこれらのデータを使ってアラートを設定することも可能ですので、もしタスク やコンテナレベルの情報で通知を行いたい場合などは、この仕組みを使って実現することが可能です。

 

 

まとめ

いかがでしたでしょうか?New Relicの進化はとても早いです。昨日できなかったことでも今日できるようになっているかもしれません。本Postはその一例と言えるでしょう。

コンテナ周りのアップデートはとても活発に行われておりますので、今後もご期待ください。

Happy monitoring!!!

 

* nr-ecs-agentパッケージの入手方法については、弊社までお気軽にお問い合わせください

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