使用OpenTelemetry Collector来获取ECS的度量指标
简要摘要
最近我了解到了一个叫OpenTelemetry的东西。在这里我将记录有关OpenTelemetry的调查内容,以及将ECS的度量数据发送到prometheus的设置。
OpenTelemetry 是什么
OpenTelemetry可以实现与供应商无关的遥测数据处理。以往,遥测数据由不同产品如Prometheus、Datadog、CloudWatch等独立处理,存在移植性等问题。通过提供统一处理遥测数据的方法,OpenTelemetry旨在解决这一问题。详细说明请参考此处。
开放遥测采集器
OpenTelemetry正在开发的OpenTelemetryCollector负责获取、转换和发送遥测数据。例如,您可以使用Prometheus exporter获取的数据将其发送到Datadog和Prometheus。数据获取部分称为receiver,转换部分称为processor,发送部分称为exporter。开发了各种类型的receiver和exporter,因此可以灵活地进行数据获取和发送。遗憾的是,目前似乎还没有实施Datadog Agent的receiver。虽然发起了Pull Request,但已被关闭。
AWS ECS容器度量接收器
AWS ECS容器度量接收器是用于获取ECS度量的接收器。它从ECS元数据终端节点获取任务的度量。
AWS Prometheus 远程写出口程序
AWS Prometheus Remote Write导出器可以将指标发送到Amazon Managed Service for Prometheus。它内部使用Prometheus Remote Write导出器,并添加了AWS认证等处理。
设定文件
我对OpenTelemetry Collector的设置如下所示。
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以外的所有标签。如果不设置此配置,将会丢失任务名称等所有信息。
将数据转化为图表
为了确认是否成功获取到数据,我在Grafana上进行了可视化。
感觉不错。我想尝试添加一个到Datadog的导出器,或者将数据转发到CloudWatch,以及尝试其他各种可能性。
通过插入OpenTelemetry Collector,我之前一直在使用Datadog,但现在可以更轻松地尝试使用Prometheus+Grafana之类的工具了,可能会变得更容易。