feat: add more otel services

This commit is contained in:
Sun-ZhenXing
2026-01-11 23:42:34 +08:00
parent ea5eadfcec
commit 51fd7ea08b
28 changed files with 2358 additions and 70 deletions
+247
View File
@@ -0,0 +1,247 @@
# OpenTelemetry Collector
[English](README.md) | [中文](README.zh.md)
OpenTelemetry Collector 是一个与供应商无关的服务,用于接收、处理和导出遥测数据(追踪、指标和日志)。它支持多种协议,可以将数据发送到各种后端系统。
## 功能特性
- **协议支持**OTLP、Jaeger、Zipkin、Prometheus 等
- **灵活处理**:过滤、转换和丰富遥测数据
- **多种导出器**:将数据发送到各种可观测性后端
- **高性能**:高效的数据处理,开销低
- **可扩展**:丰富的接收器、处理器和导出器生态系统
- **供应商中立**:与任何兼容 OpenTelemetry 的后端配合使用
## 快速开始
1. 复制环境文件并根据需要调整:
```bash
cp .env.example .env
```
2. 创建配置文件 `config.yaml`
```bash
# 参见下面的示例或使用提供的模板
```
3. 启动收集器:
```bash
docker compose up -d
```
## 默认端口
| 协议 | 端口 | 描述 |
| ------------------ | ----- | ------------------------------- |
| OTLP gRPC | 4317 | 基于 gRPC 的 OpenTelemetry 协议 |
| OTLP HTTP | 4318 | 基于 HTTP 的 OpenTelemetry 协议 |
| Jaeger gRPC | 14250 | Jaeger gRPC 接收器 |
| Jaeger Thrift HTTP | 14268 | Jaeger Thrift HTTP 接收器 |
| Zipkin | 9411 | Zipkin HTTP 接收器 |
| Prometheus | 8888 | 内部指标端点 |
| Health Check | 13133 | 健康检查端点 |
## 配置说明
### 环境变量
主要环境变量(完整列表请查看 `.env.example`):
- `OTEL_COLLECTOR_VERSION`:收集器版本(默认:0.115.1)
- `OTEL_COLLECTOR_OTLP_GRPC_PORT_OVERRIDE`OTLP gRPC 端口(默认:4317
- `OTEL_COLLECTOR_OTLP_HTTP_PORT_OVERRIDE`OTLP HTTP 端口(默认:4318
- `OTEL_COLLECTOR_GOMEMLIMIT`:收集器的 Go 内存限制
### 配置文件
创建 `config.yaml` 文件来定义收集器管道。以下是一个最小示例:
```yaml
receivers:
otlp:
protocols:
grpc:
endpoint: 0.0.0.0:4317
http:
endpoint: 0.0.0.0:4318
processors:
batch:
timeout: 10s
send_batch_size: 1024
exporters:
logging:
loglevel: info
# 示例:导出到 Jaeger
# otlp/jaeger:
# endpoint: jaeger:4317
# tls:
# insecure: true
# 示例:导出到 Prometheus
# prometheusremotewrite:
# endpoint: http://prometheus:9090/api/v1/write
extensions:
health_check:
endpoint: 0.0.0.0:13133
pprof:
endpoint: 0.0.0.0:1777
service:
extensions: [health_check, pprof]
pipelines:
traces:
receivers: [otlp]
processors: [batch]
exporters: [logging]
metrics:
receivers: [otlp]
processors: [batch]
exporters: [logging]
logs:
receivers: [otlp]
processors: [batch]
exporters: [logging]
```
对于生产环境,请为您的可观测性后端配置适当的导出器(例如 Jaeger、Prometheus、Grafana Tempo、DataDog 等)。
### 常用接收器
- **OTLP**:原生 OpenTelemetry 协议(gRPC 和 HTTP
- **Jaeger**Jaeger 原生格式
- **Zipkin**Zipkin JSON 格式
- **Prometheus**Prometheus 抓取
- **Kafka**:从 Kafka 主题接收
### 常用处理器
- **Batch**:在导出前批处理遥测数据
- **Memory Limiter**:防止内存溢出情况
- **Resource Detection**:自动检测资源属性
- **Attributes**:修改遥测数据的属性
- **Sampling**:基于各种策略对追踪进行采样
### 常用导出器
- **OTLP**:发送到兼容 OTLP 的后端
- **Jaeger**:导出到 Jaeger
- **Zipkin**:导出到 Zipkin
- **Prometheus**:公开指标供 Prometheus 抓取
- **Prometheus Remote Write**:推送指标到 Prometheus
- **Logging**:将遥测数据记录到控制台(用于调试)
## 向收集器发送数据
### 使用 OpenTelemetry SDK
配置您的应用程序将数据发送到收集器:
**环境变量**
```bash
export OTEL_EXPORTER_OTLP_ENDPOINT=http://localhost:4317
export OTEL_EXPORTER_OTLP_PROTOCOL=grpc
```
**Python 示例**
```python
from opentelemetry import trace
from opentelemetry.exporter.otlp.proto.grpc.trace_exporter import OTLPSpanExporter
from opentelemetry.sdk.trace import TracerProvider
from opentelemetry.sdk.trace.export import BatchSpanProcessor
provider = TracerProvider()
processor = BatchSpanProcessor(OTLPSpanExporter(endpoint="localhost:4317", insecure=True))
provider.add_span_processor(processor)
trace.set_tracer_provider(provider)
```
**Node.js 示例**
```javascript
const { NodeTracerProvider } = require('@opentelemetry/sdk-trace-node');
const { OTLPTraceExporter } = require('@opentelemetry/exporter-trace-otlp-grpc');
const provider = new NodeTracerProvider();
const exporter = new OTLPTraceExporter({
url: 'http://localhost:4317',
});
provider.addSpanProcessor(new BatchSpanProcessor(exporter));
provider.register();
```
## 资源需求
最低推荐资源:
- **CPU**0.5 核
- **内存**1GB RAM
对于高吞吐量环境,请相应增加资源。
## 数据持久化
收集器本身是无状态的。数据持久化取决于配置的导出器和后端系统。
## 安全注意事项
- 生产部署时配置 TLS
- 在可用时使用身份验证(例如 API 密钥、mTLS)
- 限制对必要端口的网络访问
- 考虑使用 `memory_limiter` 处理器防止 OOM
- 检查并最小化暴露的端口
- 对敏感配置使用密钥管理
## 健康检查
收集器在端口 13133 上公开健康检查端点:
- `http://localhost:13133/` - 整体健康状态
## 监控收集器
收集器在 Prometheus 指标端点(默认端口 8888)上公开自己的指标:
- `http://localhost:8888/metrics`
需要监控的关键指标:
- `otelcol_receiver_accepted_spans`:接受的 span 数量
- `otelcol_receiver_refused_spans`:拒绝的 span 数量
- `otelcol_exporter_sent_spans`:发送的 span 数量
- `otelcol_processor_batch_batch_send_size`:批处理大小
## 故障排查
1. **未接收到数据**:检查接收器配置和端口绑定
2. **内存使用过高**:配置 `memory_limiter` 处理器
3. **处理速度慢**:调整批处理器设置
4. **导出失败**:检查导出器配置和后端连接性
## 性能调优
- 使用 `batch` 处理器提高效率
- 配置 `memory_limiter` 防止 OOM
- 根据吞吐量要求调整队列大小
- 对高容量追踪数据使用采样处理器
- 监控收集器指标以发现瓶颈
## 许可证
OpenTelemetry Collector 采用 Apache 2.0 许可证。详情请参阅 [官方仓库](https://github.com/open-telemetry/opentelemetry-collector)。
## 参考资料
- [官方文档](https://opentelemetry.io/docs/collector/)
- [GitHub 仓库](https://github.com/open-telemetry/opentelemetry-collector)
- [Collector Contrib 仓库](https://github.com/open-telemetry/opentelemetry-collector-contrib)
- [配置参考](https://opentelemetry.io/docs/collector/configuration/)