OpenTelemetry 和 Fluent Bit 集成,入门教程
关于 OpenTelemetry 和 FluentBit
OpenTelemetry 是一个开源可观察性工具,用于监视和跟踪分布式应用程序。它提供 API、库和代理来从应用程序和服务收集遥测数据,例如指标、日志和跟踪。 FluentBit 是一个高性能、轻量级的日志处理器和转发器,支持多种输入和输出插件,使其对不同的数据管道具有高度适应性。
OpenTelemetry 和 FluentBit 的优点
将 OpenTelemetry Collector 与 FluentBit 集成具有多种优势,包括……
- 全面的可观察性:将来自不同来源的日志、指标和跟踪合并到统一的数据管道中。
- 可扩展性:OpenTelemetry 和 FluentBit 都旨在以最少的资源消耗处理大量数据。
FluentBit 的 OpenTelemetry 插件
FluentBit 的 OpenTelemetry 输出插件使用户能够将日志、指标和跟踪发送到 OpenTelemetry Collector。它支持 OpenTelemetry HTTP 端点,可以轻松配置将数据转发到 OpenTelemetry Collector。
FluentBit OpenTelemetry 插件入门
本节将演示如何设置 OpenTelemetry Collector 和 FluentBit,以及如何使用 Docker Compose 将数据发送到 Jaeger UI 和 Prometheus。
在此计划中,我们将使用 AWS EC2 实例 (Amazon Linux) 的免费套餐。还可以使用 GCP 上的 Rocky Linux、CentOS 或 Ubuntu 创建类似的环境。
请注意,此设置正常工作需要先决条件:Docker 和 Docker Compose。必须在您的环境中安装这两个项目才能使安装顺利运行。
首先,使用提供的内容创建一个docker-compose.yaml文件。
version: "3"
services:
# Jaeger
jaeger:
image: jaegertracing/all-in-one:latest
container_name: jaeger
ports:
- "16686:16686"
- "14250:14250"
# Prometheus
prometheus:
image: prom/prometheus:latest
container_name: prometheus
volumes:
- ./prometheus.yaml:/etc/prometheus/prometheus.yml
ports:
- "9090:9090"
# OtelCollector
otel-collector:
image: otel/opentelemetry-collector:latest
container_name: otel-collector
command: ["--config=/etc/otel-collector-config.yaml"]
volumes:
- ./otel-collector-config.yaml:/etc/otel-collector-config.yaml
ports:
- "13133:13133" # Health_check extension
- "4318:4318" # OTLP http receiver
depends_on:
- jaeger
- prometheus
restart: on-failure
此文件定义 Jaeger、Prometheus 和 OpenTelemetry Collector 的服务。确保 OpenTelemetry Collector 容器公开了适当的端口,并且依赖于 Jaeger 和 Prometheus 服务。
接下来,使用提供的内容创建一个名为 flb-out-otel.conf 的 FluentBit 配置文件。
[SERVICE]
Flush 1
Log_level info
[INPUT]
Name node_exporter_metrics
Tag node_metrics
Scrape_interval 2
[INPUT]
Name event_type
Type traces
Tag node_metrics
[INPUT]
Name tail
Tag sample.log
Path /var/log/sample.log
Read_from_Head True
[OUTPUT]
Name opentelemetry
Match *
Host 127.0.0.1
Port 4318
Metrics_uri /v1/metrics
Traces_uri /v1/traces
Logs_uri /v1/logs
Log_response_payload True
此文件定义了 node_exporter_metrics 、 event_type traces和 tail 的输入,并配置 OpenTelemetry 输出插件以将数据发送到 OpenTelemetry Collector。
输入插件 node_exporter_metrics 将从操作系统收集系统级指标,例如CPU、磁盘、网络和进程统计信息。跟踪插件 event_type traces 将生成示例跟踪数据以用于演示目的。 tail 输入插件可以监控一个或多个文本文件。有关 tail 插件的更多信息,可以学习这篇文章:Fluentbit 入门教程(1):tail 插件。
使用提供的内容创建名为 otel-collector-config.yaml 的OpenTelemetry Collector 配置文件。
receivers:
otlp:
protocols:
http:
endpoint: 0.0.0.0:4318
exporters:
logging:
verbosity: detailed
otlp/jaeger:
endpoint: jaeger:14250
tls:
insecure: true
prometheus:
endpoint: 0.0.0.0:9090
send_timestamps: true
namespace: promexample
const_labels:
label1: value1
processors:
batch:
timeout: 10s
extensions:
health_check:
service:
extensions: [health_check]
pipelines:
traces:
receivers: [otlp]
processors: [batch]
exporters: [otlp/jaeger]
metrics:
receivers: [otlp]
processors: [batch]
exporters: [prometheus]
logs:
receivers: [otlp]
processors: [batch]
exporters: [logging]
此文件为 Jaeger、Prometheus 和日志记录设置 OTLP 接收器和导出器。以下是每个部分的细分。
- 接收器:本节定义收集器的输入接收器。在本例中,我们仅指定具有 HTTP 端点
0.0.0.0:4318
的 OTLP 接收器。 - 导出器:此部分定义收集器的输出导出器。它包括日志记录、Jaeger 和 Prometheus 的导出器。
- 处理器:本节定义将应用于数据的处理器。在这种情况下,仅使用批处理器,该处理器对传入数据进行批处理以最小化网络开销。
- Extensions:此部分定义服务将使用的任何扩展。在本例中,包含 health_check 扩展,它提供了健康检查的端点。
- service :此部分定义服务管道,指定如何处理和导出数据。定义了跟踪、指标和日志管道,每个管道都有各自的接收器、处理器和导出器。例如,跟踪管道从 OTLP 接收器接收数据,应用批处理器,并将其导出到 Jaeger 导出器。
最后,使用提供的内容创建一个名为 prometheus.yaml 的Prometheus 配置文件。
global:
scrape_interval: 15s
evaluation_interval: 15s
scrape_configs:
- job_name: prometheus
scrape_interval: 5s
scrape_timeout: 2s
honor_labels: true
static_configs:
- targets: ["localhost:9090"]
该文件设置 Prometheus 的全局抓取间隔、评估间隔和抓取配置。
所有配置文件就位后,运行 docker-compose up -d
启动服务。 FluentBit 现在将收集日志、指标和跟踪,并将它们转发到 OpenTelemetry Collector,后者又将数据导出到 Jaeger、Prometheus 和日志记录导出器。
接下来,您可以获取命令 fluent-bit -c flb-out-otel.conf
来启动 FluentBit。FluentBit 输出将显示连接状态。
[2023/03/27 17:25:41] [ info] [input:event_type:event_type.1] [OK] collector_time
[2023/03/27 17:25:42] [ info] [output:opentelemetry:opentelemetry.0] 127.0.0.1:4318, HTTP status=200
现在,您可以通过在 Web 浏览器中输入 http://localhost:16686
来访问 Jaeger UI。到达那里后,找到以服务名称 OTLPResourceNoServiceName 导出的跟踪。
访问 http://localhost:9090
可以检查 Prometheus 上可用的指标。您可以发现 Prometheus 公开的有关其自身活动的特定指标,称为 promhttp_metric_handler_requests_total。该指标记录了 Prometheus 服务器已处理的 /metrics
请求总数。
要监视 OpenTelmetry Collector 的输出日志,您可以使用命令 docker log -f otel-collector
来跟踪 FluentBit 的尾日志。
现在所有步骤都已完成。如果需要关闭进程并正常关闭 Docker Compose 堆栈,可以使用 docker-compose down
命令。此命令停止并删除由 docker-compose up
创建的容器、网络和卷。
总结
通过将 OpenTelemetry Collector 与 FluentBit 集成,用户可以简化其可观察性,并为日志、指标和跟踪创建高效、可扩展的数据管道。通过提供的配置文件和 Docker Compose 设置,开始使用这个强大的组合变得简单明了。
原文:https://fluentd.ctc-america.com/blog/first-steps-opentelemetry-collector-fluentbit