LoginSignup
3
1

More than 1 year has passed since last update.

OpenTelemetry CollectorでECSのメトリクスを取得する

Posted at

概要

最近OpenTelemetryというものを知りました。ここではOpenTelemetryについて調べた内容と、ECSのメトリクスをprometheusへ送信してみた際の設定内容を記載します。

OpenTelemetryとは

OpenTelemetryはベンダーに依存しないテレメトリーデータの取り扱いを可能にしてくれます。これまでテレメトリーデータはPrometheusやDatadog、CloudWatchなど、かくプロダクトによって独自に扱われていたため、移植性などに課題がありました。OpenTelemetryではテレメトリーデータを統一的に扱う方法を提供することで、この課題を解決しようとしています。詳しい説明はこちらで

OpenTelemetry Collector

OpenTelemetryが開発しているOpentelemetryCollectorは、テレメトリーデータを取得、変換、送信を行います。例えばprometheus exporterで取得したデータをdatadogとprometheusへ送信する、といった使い方ができます。データ取得部分がreceiver, 変換部分がprocesser,送信部分がexporterと呼ばれています。様々なreceiver, exporterが開発されており、柔軟にデータの取得送信ができそうです。残念ながら現時点でDatadog Agentのreceiverは実装されていない様です。PullRequestが作られていましたが、閉じられてしまっています。

AWS ECS Container Metrics Receiver

AWS ECS Container Metrics Receiverは、ECSのメトリクスを取得するためのreceiverです。ECSのメタデータエンドポイントからタスクのメトリクスを取得してくれます。

AWS Prometheus Remote Write Exporter

AWS Prometheus Remote Write Exporterは、Amazon Managed Service for Prometheusに対してメトリクスを送信してくれます。内部でPrometheus Remote Write Exporterを使っていて、AWSの認証などの処理を追加している様です。

設定ファイル

OpenTelemetry Collectorの設定はコード以下の様にしました。

config.yaml
receivers:
  awsecscontainermetrics:
processors:
  resource:
    attributes:
      - key: aws.ecs.service.name
        value: "${ECS_SERVICE_NAME}"
        action: upsert
exporters:
  awsprometheusremotewrite:
    endpoint: https://aps-workspaces.ap-northeast-1.amazonaws.com/workspaces/{workspace_id}/api/v1/remote_write
    resource_to_telemetry_conversion:
      enabled: true
service:
  pipelines:
    metrics:   
      receivers: [awsecscontainermetrics]
      processors: [resource]
      exporters: [awsprometheusremotewrite]
FROM debian
RUN apt-get update
RUN apt-get install -y wget
RUN wget https://github.com/open-telemetry/opentelemetry-collector-releases/releases/download/v0.42.0/otelcol-contrib_0.42.0_linux_amd64.deb
RUN dpkg -i otelcol-contrib_0.42.0_linux_amd64.deb
COPY config.yaml /etc/otelcol-contrib/config.yaml
CMD ["otelcol-contrib","--config=/etc/otelcol-contrib/config.yaml"]

config.yamlのexporter.awsprometheusremotewrite.resource_to_telemetry_conversionの設定は必須です。どうやらprometheus exporterはjob, instance以外のラベルを全て捨ててしまうようです。この設定を入れないとtask名などの情報が全て抜け落ちてしまいます。

グラフ化

データが取得できたことの確認のために、grafanaで可視化しました。

graph.png

いい感じです。ここからdatadogへのexporterを追加してみたり、cloudwatchに転送してみたりと色々試していきたいです。
opentelemetry collectorを間に挟むことで、datadogを使っていたけれどprometheus+grafanaを試してみる、とかそういうことが今までよりも簡単にできるようになるかもしれないです。

3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1