• /
  • EnglishEspañolFrançais日本語한국어Português
  • ログイン今すぐ開始

この機械翻訳は、参考として提供されています。

英語版と翻訳版に矛盾がある場合は、英語版が優先されます。詳細については、このページを参照してください。

問題を作成する

OpenTelemetryでEC2上のECSをモニターする

OpenTelemetry Collector Contribをサイドカーコンテナとしてデプロイすることで、EC2インスタンス上で実行されているAmazon ECSタスクをモニターします。この包括的なガイドでは、ECS on EC2ワークロード用のタスク定義の作成、コレクターの設定、および監視の設定について説明します。

インストレーション手順

ECS on EC2タスクの監視を設定するには、次の手順に従います。

あなたが始める前に

環境が次の要件を満たしていることを確認してください。

New Relicライセンスキーを保存する

OpenTelemetry Collectorの認証情報を安全に保存するために、ライセンスキーをSystems Manager(SSM)パラメーターとして保存します:

bash
$
aws ssm put-parameter \
>
--name "/newrelic-infra/ecs/license-key" \
>
--type SecureString \
>
--description 'New Relic license key for ECS monitoring' \
>
--value "YOUR_NEW_RELIC_LICENSE_KEY"

IAMポリシーと実行ロールの作成

  1. ECSコンテナがNew Relicライセンスキーを安全に取得できるように、IAMポリシーを作成します:

    bash
    $
    aws iam create-policy \
    >
    --policy-name "NewRelicSSMLicenseKeyReadAccess" \
    >
    --policy-document '{"Version":"2012-10-17","Statement":[{"Effect":"Allow","Action":["ssm:GetParameters"],"Resource":["arn:aws:ssm:*:*:parameter/newrelic-infra/ecs/license-key"]}]}' \
    >
    --description "Provides read access to the New Relic SSM license key parameter"
  2. タスク実行ロールとして使用するIAMロールを作成します。

    bash
    $
    aws iam create-role \
    >
    --role-name "NewRelicECSTaskExecutionRole" \
    >
    --assume-role-policy-document '{"Version":"2012-10-17","Statement":[{"Effect":"Allow","Principal":{"Service":"ecs-tasks.amazonaws.com"},"Action":"sts:AssumeRole"}]}' \
    >
    --description "ECS task execution role for New Relic infrastructure"
  3. 必要なマネージドポリシーをロールにアタッチします:

    bash
    $
    # Attach the standard ECS task execution policy
    $
    aws iam attach-role-policy \
    >
    --role-name "NewRelicECSTaskExecutionRole" \
    >
    --policy-arn "arn:aws:iam::aws:policy/service-role/AmazonECSTaskExecutionRolePolicy"
    $
    $
    # Attach the New Relic SSM license key read access policy
    $
    aws iam attach-role-policy \
    >
    --role-name "NewRelicECSTaskExecutionRole" \
    >
    --policy-arn "arn:aws:iam::$(aws sts get-caller-identity --query Account --output text):policy/NewRelicSSMLicenseKeyReadAccess"

コレクターの設定を保存する

コンテナイメージを再ビルドせずに設定を管理および更新できるように、OpenTelemetry Collector の設定を AWS Systems Manager Parameter Store に保存します:

bash
$
aws ssm put-parameter \
>
--name "/ecs/otel-collector/ec2-config" \
>
--type "String" \
>
--value "$(cat <<EOF
$
receivers:
$
awsecscontainermetrics:
$
collection_interval: <COLLECTION_INTERVAL>
$
hostmetrics:
$
collection_interval: <COLLECTION_INTERVAL>
$
scrapers:
$
cpu:
$
metrics:
$
system.cpu.time:
$
enabled: false
$
system.cpu.utilization:
$
enabled: true
$
load:
$
memory:
$
metrics:
$
system.memory.utilization:
$
enabled: true
$
paging:
$
metrics:
$
system.paging.utilization:
$
enabled: false
$
system.paging.faults:
$
enabled: false
$
filesystem:
$
metrics:
$
system.filesystem.utilization:
$
enabled: true
$
disk:
$
metrics:
$
system.disk.merged:
$
enabled: false
$
system.disk.pending_operations:
$
enabled: false
$
system.disk.weighted_io_time:
$
enabled: false
$
network:
$
metrics:
$
system.network.connections:
$
enabled: false
$
$
processors:
$
metricstransform/containers:
$
transforms:
$
- include: container.cpu.utilized
$
action: insert
$
new_name: container.cpu.utilization
$
- include: container.memory.usage
$
action: insert
$
new_name: container.memory.usage.total
$
- include: container.storage.read_bytes
$
action: insert
$
new_name: container.blockio.io_service_bytes_recursive
$
operations:
$
- action: add_label
$
new_label: operation
$
new_value: read
$
- include: container.storage.write_bytes
$
action: insert
$
new_name: container.blockio.io_service_bytes_recursive
$
operations:
$
- action: add_label
$
new_label: operation
$
new_value: write
$
metricstransform:
$
transforms:
$
- include: system.cpu.utilization
$
action: update
$
operations:
$
- action: aggregate_labels
$
label_set: [ state ]
$
aggregation_type: mean
$
- include: system.paging.operations
$
action: update
$
operations:
$
- action: aggregate_labels
$
label_set: [ direction ]
$
aggregation_type: sum
$
filter/exclude_cpu_utilization:
$
metrics:
$
datapoint:
$
- 'metric.name == \"system.cpu.utilization\" and attributes[\"state\"] == \"interrupt\"'
$
- 'metric.name == \"system.cpu.utilization\" and attributes[\"state\"] == \"nice\"'
$
- 'metric.name == \"system.cpu.utilization\" and attributes[\"state\"] == \"softirq\"'
$
filter/exclude_memory_utilization:
$
metrics:
$
datapoint:
$
- 'metric.name == \"system.memory.utilization\" and attributes[\"state\"] == \"slab_unreclaimable\"'
$
- 'metric.name == \"system.memory.utilization\" and attributes[\"state\"] == \"inactive\"'
$
- 'metric.name == \"system.memory.utilization\" and attributes[\"state\"] == \"cached\"'
$
- 'metric.name == \"system.memory.utilization\" and attributes[\"state\"] == \"buffered\"'
$
- 'metric.name == \"system.memory.utilization\" and attributes[\"state\"] == \"slab_reclaimable\"'
$
filter/exclude_memory_usage:
$
metrics:
$
datapoint:
$
- 'metric.name == \"system.memory.usage\" and attributes[\"state\"] == \"slab_unreclaimable\"'
$
- 'metric.name == \"system.memory.usage\" and attributes[\"state\"] == \"inactive\"'
$
filter/exclude_filesystem_utilization:
$
metrics:
$
datapoint:
$
- 'metric.name == \"system.filesystem.utilization\" and attributes[\"type\"] == \"squashfs\"'
$
filter/exclude_filesystem_usage:
$
metrics:
$
datapoint:
$
- 'metric.name == \"system.filesystem.usage\" and attributes[\"type\"] == \"squashfs\"'
$
- 'metric.name == \"system.filesystem.usage\" and attributes[\"state\"] == \"reserved\"'
$
filter/exclude_filesystem_inodes_usage:
$
metrics:
$
datapoint:
$
- 'metric.name == \"system.filesystem.inodes.usage\" and attributes[\"type\"] == \"squashfs\"'
$
- 'metric.name == \"system.filesystem.inodes.usage\" and attributes[\"state\"] == \"reserved\"'
$
filter/exclude_system_disk:
$
metrics:
$
datapoint:
$
- 'metric.name == \"system.disk.operations\" and IsMatch(attributes[\"device\"], \"^loop.*\") == true'
$
- 'metric.name == \"system.disk.merged\" and IsMatch(attributes[\"device\"], \"^loop.*\") == true'
$
- 'metric.name == \"system.disk.io\" and IsMatch(attributes[\"device\"], \"^loop.*\") == true'
$
- 'metric.name == \"system.disk.io_time\" and IsMatch(attributes[\"device\"], \"^loop.*\") == true'
$
- 'metric.name == \"system.disk.operation_time\" and IsMatch(attributes[\"device\"], \"^loop.*\") == true'
$
filter/exclude_system_paging:
$
metrics:
$
datapoint:
$
- 'metric.name == \"system.paging.usage\" and attributes[\"state\"] == \"cached\"'
$
- 'metric.name == \"system.paging.operations\" and attributes[\"type\"] == \"cached\"'
$
filter/exclude_network:
$
metrics:
$
datapoint:
$
- 'IsMatch(metric.name, \"^system.network.*\") == true and attributes[\"device\"] == \"lo\"'
$
$
attributes/exclude_system_paging:
$
include:
$
match_type: strict
$
metric_names:
$
- system.paging.operations
$
actions:
$
- key: type
$
action: delete
$
$
cumulativetodelta:
$
$
transform/host:
$
metric_statements:
$
- context: metric
$
statements:
$
- set(metric.description, \"\")
$
- set(metric.unit, \"\")
$
$
transform:
$
trace_statements:
$
- context: span
$
statements:
$
- truncate_all(span.attributes, <ATTRIBUTE_TRUNCATION_LIMIT>)
$
- truncate_all(resource.attributes, <RESOURCE_ATTRIBUTE_TRUNCATION_LIMIT>)
$
log_statements:
$
- context: log
$
statements:
$
- truncate_all(log.attributes, <ATTRIBUTE_TRUNCATION_LIMIT>)
$
- truncate_all(resource.attributes, <RESOURCE_ATTRIBUTE_TRUNCATION_LIMIT>)
$
$
memory_limiter:
$
check_interval: <MEMORY_LIMITER_CHECK_INTERVAL>
$
limit_mib: \${env:NEW_RELIC_MEMORY_LIMIT_MIB:-<MEMORY_LIMIT_MIB>}
$
batch:
$
send_batch_size: <SEND_BATCH_SIZE>
$
timeout: <BATCH_TIMEOUT>
$
resource:
$
attributes:
$
- key: ClusterName
$
from_attribute: aws.ecs.cluster.name
$
action: insert
$
- key: ServiceName
$
from_attribute: aws.ecs.service.name
$
action: insert
$
- key: TaskId
$
from_attribute: aws.ecs.task.id
$
action: insert
$
- key: TaskDefinitionFamily
$
from_attribute: aws.ecs.task.family
$
action: insert
$
- key: LaunchType
$
from_attribute: aws.ecs.launch_type
$
action: insert
$
$
resourcedetection:
$
detectors:
$
- env
$
- ecs
$
- ec2
$
- system
$
timeout: <RESOURCE_DETECTION_TIMEOUT>
$
override: false
$
$
exporters:
$
otlphttp:
$
endpoint: https://otlp.nr-data.net:443
$
headers:
$
api-key: \${NEW_RELIC_LICENSE_KEY}
$
$
debug:
$
verbosity: basic
$
$
service:
$
pipelines:
$
metrics/containers:
$
receivers: [awsecscontainermetrics]
$
processors: [metricstransform/containers, resource, batch]
$
exporters: [otlphttp, debug]
$
metrics/host:
$
receivers: [hostmetrics]
$
processors:
$
- memory_limiter
$
- metricstransform
$
- filter/exclude_cpu_utilization
$
- filter/exclude_memory_utilization
$
- filter/exclude_memory_usage
$
- filter/exclude_filesystem_utilization
$
- filter/exclude_filesystem_usage
$
- filter/exclude_filesystem_inodes_usage
$
- filter/exclude_system_disk
$
- filter/exclude_network
$
- attributes/exclude_system_paging
$
- transform/host
$
- resourcedetection
$
- cumulativetodelta
$
- batch
$
exporters: [otlphttp, debug]
$
EOF
$
)"

設定パラメーター

OpenTelemetry Collectorの設定では、以下のパラメーターをカスタマイズできます:

パラメータ

説明

<COLLECTION_INTERVAL>

ECSコンテナおよびホストのメトリクスエンドポイントからメトリクスを収集する間隔。

<MEMORY_LIMIT_MIB>

MiB単位のOpenTelemetry Collectorのメモリ制限

<MEMORY_LIMITER_CHECK_INTERVAL>

メモリリミッターが現在のメモリ使用量を確認する間隔

<SEND_BATCH_SIZE>

New Relicに送信する前にバッチ処理するメトリクスの数

<BATCH_TIMEOUT>

バッチを送信するまでの最大待ち時間

<RESOURCE_DETECTION_TIMEOUT>

リソース検出プロセッサのタイムアウト

<ATTRIBUTE_TRUNCATION_LIMIT>

切り捨てられる前のスパンおよびログ属性値の最大長。デフォルト:4095

<RESOURCE_ATTRIBUTE_TRUNCATION_LIMIT>

切り詰められる前のリソース属性値の最大長。デフォルト:4095

タスク定義を作成

OpenTelemetry Collectorサイドカーコンテナを含む新しいECSタスク定義を作成します。コンテナプラットフォームに適切なタスク定義を選択します:

タスク定義パラメーター

ECSタスク定義では、以下のパラメーターをカスタマイズできます:

パラメータ

説明

<TASK_CPU>

EC2タスクの合計CPUユニット

<TASK_MEMORY>

EC2タスクの合計メモリ(MiB単位)

<APP_CPU>

アプリケーションコンテナに割り当てられたCPUユニット

<APP_MEMORY>

アプリケーションコンテナに割り当てられたメモリ(MiB単位)

<COLLECTOR_CPU>

OpenTelemetry Collectorに割り当てられたCPUユニット

<COLLECTOR_MEMORY>

OpenTelemetry Collectorに割り当てられたメモリ(MiB)

<APP_LOG_GROUP>

アプリケーションコンテナのCloudWatchロググループ名

<COLLECTOR_LOG_GROUP>

OpenTelemetry Collector 用の CloudWatch ロググループ名

<AWS_REGION>

CloudWatchログ用のAWSリージョン

<APP_LOG_STREAM_PREFIX>

アプリケーションコンテナのログストリームプレフィックス

<COLLECTOR_LOG_STREAM_PREFIX>

OpenTelemetry Collector 用のログストリームプレフィックス

ヒント

networkModeはLinuxコンテナの場合は"host"に設定されており、Windowsコンテナの場合は"default"にする必要があります。ホストモードにより、EC2インスタンス上のシステムメトリクスへのアクセスが向上します。

重要

YOUR_ACCOUNTとリージョンの値を、実際のAWSアカウントIDとAWSリージョンに置き換えてください。

タスクをデプロイして実行する

タスク定義をECSクラスタにデプロイします:

  1. タスク定義を登録します。

    bash
    $
    aws ecs register-task-definition --cli-input-json file://task-definition.json
  2. デーモンスケジューリング戦略を使用してサービスを作成します:

    bash
    $
    aws ecs create-service \
    >
    --cluster your-cluster-name \
    >
    --service-name otel-monitoring-service \
    >
    --task-definition otel-ecs-ec2-sidecar-metrics:1 \
    >
    --scheduling-strategy DAEMON \
    >
    --launch-type EC2

    ヒント

    デーモンスケジューリング戦略は、クラスタ内のすべてのEC2インスタンスで1つの監視タスクが実行されることを保証し、包括的なinfrastructureモニタリングのカバレッジを提供します。

データ収集を確認する

データがNew Relicに取り込まれていることを確認します:

次のステップ

監視を設定した後、次のことができます:

Copyright © 2026 New Relic株式会社。

This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.