近期我们对两个环境中的OpenTelemetry Collector进行了版本升级,从v0.114.0升级到了v0.121.0。这次升级涉及一些配置变化,本文将记录一些升级过程中的关键点和经验总结。
环境信息
这两套环境采用了相同的部署架构:首先通过Helm安装opentelemetry-operator,然后利用OpenTelemetry Collector的CRD(自定义资源定义)创建OpenTelemetryCollector资源。opentelemetry-operator会根据这些资源定义,在Kubernetes集群的每个节点上以DaemonSet的形式部署OpenTelemetry Collector Pod,实现分布式的遥测数据采集。
主要的软件版本信息如下:
- OpenTelemetry Operator Helm Chart: v0.82.1
- 相关组件镜像版本:
- RBAC Proxy:
quay.io/brancz/kube-rbac-proxy:v0.18.1 - OpenTelemetry Operator:
open-telemetry/opentelemetry-operator/opentelemetry-operator:0.120.0 - OpenTelemetry Collector:
otel/opentelemetry-collector-contrib:v0.121.0
- RBAC Proxy:
OpenTelemetry Collector Contrib 0.114.0到0.121.0的一些重要变化
组件移除和废弃
- OpenCensus exporter和receiver已被废弃,建议迁移到OTLP exporter和receiver
- 以下组件被标记为未维护状态:
- exporter/kineticaexporter
- exporter/opensearchexporter
- extension/observer/ecstaskobserver
- receiver/awscloudwatchmetricsreceiver
- receiver/rabbitmqreceiver
- receiver/jmxreceiver
配置变更
- Elasticsearch Exporter:
- 移除了
index配置选项 (自 v0.60.0 起已废弃) - 移除了
dedup配置设置 (自 v0.104.0 起已废弃) - 移除了对 none、raw 和 bodymap 映射模式下的指标支持
- 现在要求最低版本为ES7.17.x
- 移除了
- AWS S3 Exporter:
s3_partition选项被替换为更灵活的s3_partition_format- 如果未提供
s3_prefix,导出器将不会在存储桶中创建 “/” 文件夹
- Prometheus Receiver:
- 现在使用 Prometheus 3.0的scrapers
- 指标开始时间调整功能已被废弃,将由metricstarttime processor 替代
- 其他重要变更:
- SignalFx Exporter: 移除了已废弃的
translation_rules配置选项 - Routing Connector: 移除了
match_once配置参数 - K8s Attributes Processor:
k8sattr.fieldExtractConfigRegex.disallow特性门(feature gate)已移至稳定版
- SignalFx Exporter: 移除了已废弃的
实际升级过程中涉及到的配置变更
在实际升级过程中,我们主要对以下几个方面进行了配置调整:
1. 版本升级
- OpenTelemetry Operator 从
0.114.0升级到0.120.0 - OpenTelemetry Collector Contrib 从
0.114.0升级到0.121.0
2. Elasticsearch Exporter配置变更
根据新版本的要求,移除了已废弃的配置项:
mapping: # 移除此配置
dedup: true # 移除此配置
dedot: false # 移除此配置重试策略参数调整
重试配置参数名称发生变化:
- 将
max_requests改名为max_retries
retry:
enabled: true
max_retries: 5 # 原为max_requests
initial_interval: 100ms
max_interval: 1m3. 指标收集配置更新
在指标配置中添加了级别设置:
service:
telemetry:
logs:
level: "info"
metrics:
level: normal
address: 127.0.0.1:8888
# https://github.com/open-telemetry/opentelemetry-operator/issues/3730
# https://github.com/open-telemetry/opentelemetry-operator/pull/3744
# readers:
# - pull:
# exporter:
# prometheus:
# host: 127.0.0.1
# port: 8888由于service.telemetry.metrics.address已经废弃了,应该使用service.telemetry.metrics.readers。
但由于OpenTelemetry Operator的Issue #3730,目前暂时注释掉了Prometheus相关的读取器配置。这个问题在未来的版本中可能会得到解决。
4. loki exporter已经废弃
在OpenTelemetry Collector Contrib的最新版本中,loki exporter已被标记为废弃状态,并将在未来版本中移除。这一变更源于Loki v3已经原生支持OTLP(OpenTelemetry Protocol)日志摄取功能。
Loki v3引入的OpenTelemetry日志格式为用户带来了显著优势:
- 原生支持OpenTelemetry日志结构,无需JSON解析即可直接查询,大大提升了查询效率
- 采用标准OTLP协议传输数据,简化了配置流程,提高了系统可维护性
如果您当前正在使用Loki exporter,我们强烈建议您参考以下资源,尽快完成向OTLP原生摄取方式的迁移: