OpenTelemetry 和 Fluent Bit 集成,入门教程

译文 2024-10-16 12:05:08

关于 OpenTelemetry 和 FluentBit

OpenTelemetry 是一个开源可观察性工具,用于监视和跟踪分布式应用程序。它提供 API、库和代理来从应用程序和服务收集遥测数据,例如指标、日志和跟踪。 FluentBit 是一个高性能、轻量级的日志处理器和转发器,支持多种输入和输出插件,使其对不同的数据管道具有高度适应性。

opentelemetry-integrate-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 导出的跟踪。

Jaeger UI

访问 http://localhost:9090 可以检查 Prometheus 上可用的指标。您可以发现 Prometheus 公开的有关其自身活动的特定指标,称为 promhttp_metric_handler_requests_total。该指标记录了 Prometheus 服务器已处理的 /metrics 请求总数。

Prometheus UI

要监视 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

快猫星云 联系方式 快猫星云 联系方式
快猫星云 联系方式
快猫星云 联系方式
快猫星云 联系方式
快猫星云
OpenSource
开源版
Flashcat
Flashcat
FlashDuty
Flashduty