メインコンテンツへスキップ

Attribute Sensor for AWS ECS

Attribute ECS センサーは、クラスタ内の各 EC2 コンテナインスタンスごとに 1 つのタスクとして実行される eBPF センサーです。アプリケーションコードやカーネルモジュールを変更することなく、インスタンス上のネットワークおよびシステムレベルのイベントを監視し、そのインスタンス上でスケジュールされたすべてのタスクのトラフィックを把握し、タスクレベルのコストをそれらのタスクが使用するリソースにアトリビュートします。

How the Deployment Works

Attribute からは、ecs-sensor-<your-account>.json という名前の CloudFormation テンプレートが提供されます。インストールトークンとセンサーイメージのバージョンは、すでにパラメータのデフォルト値として入力されています — これらを入力・編集しないでください。

センサーのインストールは 2 つのステップで構成されます。

StepWhat You DoWhy It Is Separate
Deploy the CloudFormation stack対象とする ECS クラスタの地域でテンプレートからスタックを作成します。このスタックは IAM ロールとセンサーのタスク定義を作成します。
Create the ECS serviceスタックで作成されたタスク定義を使用して、クラスタ内に Daemon サービスを手動で作成します。どのクラスタでセンサーを実行するかを選択できるように、テンプレートではあえてサービスを作成していません。

両方のステップは、地域ごと・クラスタごとに繰り返す必要があります。対象とするクラスタが存在する各地域ごとに 1 つのスタックを作成し、その地域内の各クラスタごとに 1 つのサービスを作成します。

Important

スタックは必ず ECS クラスタと同じ地域 にデプロイしてください。タスク定義と、そのタスク定義が参照する IAM ロールは地域リソースであり、クラスタは他の地域のタスク定義を使用できません。

Requirements

RequirementDetails
Cluster capacityEC2 コンテナインスタンスを持つ ECS クラスタ。Fargate はこのガイドの対象外です — 詳細は Attribute Sensor for AWS Fargate を参照してください。
Container instancesLinux、カーネル 5.10 以降。センサーは x86_64arm64 の両方をサポートしますが、テンプレートが作成するタスク定義では 1 つのアーキテクチャのみを宣言します — 後述の注意を参照してください。
IAM permissionsカスタム名付きの IAM ロールを作成する権限(スタックには CAPABILITY_NAMED_IAM が必要)と、ECS タスク定義を登録する権限。
Outbound networkコンテナインスタンスから otel-endpoint.app.attrb.io への HTTPS(TCP 443)。
Image pullコンテナインスタンスが quay.io からイメージを pull できること。
Task placementセンサータスクは、特権モード・ホスト PID モード・ホストパスマウントで実行されます。

What the Template Creates

スタックは 2 つのリソースのみを作成し、それ以外は何も行いません。既存のクラスタ、サービス、タスク定義を変更することはありません。

  • IAM ロールAttributeECSZprobeDaemonSetRole-<region> という名前で、ecs-tasks.amazonaws.com によって引き受けられ、センサータスクのタスクロールおよび実行ロールの両方として使用されます。AmazonECSTaskExecutionRolePolicy(イメージの pull 用)と AmazonEC2ReadOnlyAccess(センサーが実行されているインスタンスの特定用)の AWS マネージドポリシーがアタッチされます。

  • ECS タスク定義:指定したファミリー名で作成され、quay.io/attribute/sensor を実行する zsense という 1 つのコンテナを含みます。EC2 起動タイプのタスク定義であり、ホスト PID モード、1024 MiB のメモリ制限、512 MiB のメモリ予約、予約 CPU なしで構成されます。

注意

ロール名は地域ごとに固定であるため、同じ地域内には同時に 1 つの Attribute ECS スタックしか存在できません。同一地域に 2 つ目のスタックを作成しようとすると、ロール名の競合により失敗します。同じ地域内でより多くのクラスタを対象にする場合は、既存スタックがすでに作成したタスク定義を再利用してください。

タスク定義にはログ設定が含まれていないため、センサーコンテナのログは CloudWatch ではなく、コンテナインスタンスのデフォルトの Docker ログドライバーに送られます。CloudWatch に出力する必要がある場合は、スタック作成後にタスク定義の新しいリビジョンを作成し、awslogs のログ設定を追加してください。

Architecture

センサー自体は x86_64arm64 の両方で動作しますが、ECS タスク定義では CpuArchitecture を 1 つだけ宣言できます。テンプレートでは X86_64 が設定されています。そのため、作成されたタスク定義は x86_64 コンテナインスタンスにのみ配置され、クラスタ内の arm64(Graviton)インスタンスはカバーされません。

クラスタで arm64 コンテナインスタンスを使用している場合は、デプロイ前に Attribute に連絡してください。ARM64 を宣言したタスク定義が必要であり、両方のアーキテクチャを含むクラスタでは、アーキテクチャごとに 1 つずつ、合計 2 つの Daemon サービスが必要になります。

Step 1: Deploy the CloudFormation Stack

  1. AWS コンソールで、対象とする ECS クラスタの地域に切り替えてください。

  2. CloudFormationStacksCreate stackWith new resources (standard) に移動してください。

  3. Choose an existing template を選択し、Upload a template file を選択して、ecs-sensor-<your-account>.json ファイルをアップロードしてください。

  4. スタックの詳細を入力します。

    FieldValue
    Stack name任意の名前(例:attribute-ecs-sensor)。
    AttributeTokenAttribute によって事前入力されています。そのまま変更せずに使用してください。
    TaskFamilyセンサーのタスク定義ファミリーの名前(例:attribute)。この値はステップ 2 で使用するため、控えておいてください。
    SensorVersion現在リリースされているセンサーバージョンが事前入力されています。Attribute から特定バージョンへの固定を依頼されている場合を除き、そのままにしてください。
  5. レビューページで、このスタックがカスタム名付きの IAM リソースを作成することを承認してください。

  6. スタックを送信し、状態が CREATE_COMPLETE になるまで待ってください。

Step 2: Create the ECS Service

スタックによってタスク定義は登録されていますが、まだ何も実行されていません。クラスタ内にサービスを作成し、各コンテナインスタンス上にセンサーをスケジュールしてください。

  1. ECSClusters > 対象クラスタ > ServicesCreate に移動してください。

  2. Compute configurationLaunch type を選択し、起動タイプを EC2 に設定してください。Capacity provider strategy は使用しないでください。

    ECS Compute configuration set to EC2 launch type, with the Deployment scheduling strategy set to Daemon

  3. Deployment configuration で次のように設定してください。

    • Task definition family: ステップ 1 で入力した TaskFamily の値。

    • Task definition revision: 最新のリビジョン。

    • Service name: 任意の名前(例:attribute)。

    • Scheduling strategy: Daemon。これにより、クラスタ内の各コンテナインスタンス(後から追加されたインスタンスも含む)上に、センサータスクがちょうど 1 つずつ配置・維持されます。

    ECS Service details form with the task definition family and service name both set to &quot;attribute&quot;

    注意

    スクリーンショットでは、タスク定義ファミリー名とサービス名の両方に attribute を使用しています。実際には、選択した TaskFamily の値に置き換えてください。

  4. Deployment failure detection で、Use the Amazon ECS deployment circuit breaker のチェックを外してください。

    Important

    Circuit breaker は必ずオフにしてください。混在クラスタでは、センサータスクを配置できないコンテナインスタンス(arm64 インスタンスや非対応 OS など)が個々のタスク失敗を引き起こします。Circuit breaker を有効にしていると、ECS はこれをデプロイ失敗とみなし、サービス全体をロールバックしてしまうため、正常に動作していたインスタンスからもセンサーが削除されます。オフにしておけば、センサーは実行可能なインスタンス上で動作し、残りのインスタンスは単にカバーされないだけになります。

  5. 残りの設定はデフォルトのままにして、サービスを作成してください。

Verifying the Installation

  1. クラスタの Tasks タブで、EC2 コンテナインスタンスごとに 1 つのセンサータスクが実行中であり、そのタスクが停止と再起動を繰り返すことなく RUNNING 状態を維持していることを確認してください。

  2. サービスの running count が desired count と一致していることを確認してください。Daemon サービスの場合、ECS は desired count を、対象となるコンテナインスタンスの数に設定します。

  3. タスクが RUNNING 状態になって間もなく、Attribute ダッシュボードにタスクレベルのデータが表示されます。何も表示されない場合は、コンテナインスタンスから otel-endpoint.app.attrb.io へのアウトバウンド HTTPS アクセスを確認してください。

Upgrading the Sensor

新しいセンサーバージョンが利用可能になると、Attribute から案内があります。

  1. CloudFormationStacks > 使用中の Attribute ECS スタック > Update に移動してください。

  2. Replace existing template を選択して新しいテンプレートをアップロードするか、現在のテンプレートを維持したまま、SensorVersion を Attribute から指定されたバージョンに設定してください。

  3. 更新を適用してください。CloudFormation によって、新しいリビジョンのタスク定義が登録されます。

  4. ECS サービスを新しいタスク定義リビジョンに更新してデプロイしてください。Daemon サービスは、各コンテナインスタンス上のセンサータスクを順次置き換えます。

Uninstalling

  1. センサーを実行している各クラスタで ECS サービスを削除してください。これにより、センサータスクが停止・削除されます。

  2. 各地域で CloudFormation スタックを削除してください。これにより、IAM ロールとセンサータスク定義が削除されます。


商標:AWS は Amazon.com, Inc. またはその関連会社の商標です。Docker は Docker, Inc. の商標です。その他すべての商標は、それぞれの所有者に帰属します。