Files
blog-press/docs/DevOps/OpenObserve.md
2025-12-16 18:07:42 +08:00

10 KiB
Raw Blame History

title, date
title date
OpenObserve部署和使用 2025-11-26

一、基础概念

1.1 Fluent Bit

Fluent Bit 是一个开源的、轻量级、高性能的日志处理器和转发器。Fluent Bit 的核心任务是:​​从各种来源收集日志、指标和追踪数据,进行处理和过滤,然后将其发送到一个或多个目的地。​

1.1.1 特点

  1. 极致的轻量级​
    Fluent Bit 是用 C 语言编写的,运行时内存占用极低(通常只有几百 KBCPU 使用率也非常低。这使得它成为在资源受限环境如边缘计算、IoT 设备、容器侧车)中运行的理想选择。
  2. 高性能​
    其核心架构经过高度优化,处理数据的速度极快,能够轻松应对高吞吐量的日志流。
  3. 可插拔架构​
    Fluent Bit 的功能通过“插件”来扩展。

1.1.2 插件类型

  1. Input输入
    定义数据来源例如从文件、标准输入、TCP/UDP、系统指标CPU/内存、Docker 容器、Windows 事件日志等收集数据。
  2. Filter过滤器
    在数据传递过程中进行处理,例如解析(如将非结构化文本解析为 JSON、丰富如添加 Kubernetes 元数据)、修改(如重命名字段)、采样等。
  3. Output输出
    定义数据目的地,例如 Elasticsearch、Splunk、Kafka、Datadog、Loki、S3、另一个 Fluentd/Fluent Bit 实例等。

1.1.3 核心架构与数据流

  1. Input输入
    一个或多个输入插件持续地从数据源收集数据。每条数据被读入后,会带上时间戳和标签等信息,被包装成一个内部的事件记录。
  2. Parser解析器
    (可选)输入插件可以使用解析器,将非结构化的日志数据(如 Nginx 访问日志)转换为结构化的 JSON 格式。
  3. Filter过滤
    (可选)数据会经过一个或多个过滤器插件。这些插件可以修改、丰富或删除记录。过滤器是按顺序执行的。
  4. Router路由
    根据每条记录的标签Tag路由器将其匹配到相应的输出插件。一个记录可以被路由到多个输出多路复用
  5. Buffer缓冲
    在发送到输出之前,数据可能会在内存或文件系统中进行缓冲。
  6. Output输出
    最终,输出插件将处理好的数据发送到配置的目的地。

1.2 OpenObserve

OpenObserve 是一个开源的、云原生的可观测性数据平台,旨在处理日志、指标、追踪和性能数据。它的目标是成为 Elasticsearch/Logstash/Kibana (ELK)Grafana LokiDatadog 等流行解决方案的​​更简单、更经济高效、更高性能​​的替代品。
OpenObserve 是一个“一体化”的平台,你可以将所有的可观测性数据(日志、指标、追踪)都发送到它这里,然后通过统一的界面进行搜索、分析和可视化。

二、Docker部署

services:
  fluent-bit:
    image: fluent/fluent-bit:4.0.7
    container_name: fluent-bit
    restart: unless-stopped
    volumes:
      - ./fluent-bit/config:/fluent-bit/etc
    ports:
      - "24422:24422"
    environment:
      - TZ=Asia/Shanghai
    networks:
      - devops

  openobserve:
    image: public.ecr.aws/zinclabs/openobserve:v0.14.0
    container_name: openobserve
    restart: unless-stopped
    volumes:
      - ./openobserve-data:/data
    environment:
      - ZO_ROOT_USER_EMAIL=1556464090@qq.com
      - ZO_ROOT_USER_PASSWORD=19940822Cxx
      - TZ=Asia/Shanghai
    ports:
      - "5080:5080"
    networks:
      - devops

networks:
  devops:
    driver: bridge
    
volumes:
  openobserve-data:
      driver: local

fluent bit配置文件

[SERVICE]
    Flush         5
    Log_Level     info
    Daemon        off
    Parsers_File  parsers.conf

[INPUT]
    Name          forward
    Listen        0.0.0.0
    Port          24422
    Tag           external

[OUTPUT]
    Name          http
    Match         *
    Host          openobserve
    Port          5080
    URI           /api/default/default/_json
    http_user     1556464090@qq.com
    http_passwd   19940822Cxx
    Format        json
    json_date_key timestamp
    json_date_format iso8601

INPUT为日志输入源监听24422端口。
OUTPUT为日志输出源将日志发送到openobserve中这里使用的是容器名称URI表示openobserve接收数据的api路径default/default表示组织名称/流名称可以更改为其他的名称。_json表示以json的格式。

三、简单使用

3.1 配置数据流

  打开控制台,选择数据流->添加数据流输入fluent bit配置文件中的流名称选择数据流类型为Logs。
  在新添加的数据流中,点击查看,跳转到日志页面即可看到上次的日志信息。
如果没有日志请检查FluentBit容器日志是否有错误正确的应该会有上传成功的提示。
暂无图片

3.2 配置邮件告警

  首先需要配置模板和邮箱地址。
修改docker-compose.yml文件添加邮件服务器

openobserve:
    image: public.ecr.aws/zinclabs/openobserve:v0.14.0
    container_name: openobserve
    restart: unless-stopped
    volumes:
      - ./openobserve-data:/data
    environment:
      - ZO_ROOT_USER_EMAIL=njcxx0822@163.com
      - ZO_ROOT_USER_PASSWORD=19940822Cxx
      - TZ=Asia/Shanghai

      - ZO_SMTP_ENABLED=true
      - ZO_SMTP_HOST=smtp.163.com
      - ZO_SMTP_PORT=25
      - ZO_SMTP_USER_NAME=njcxx0822@163.com
      - ZO_SMTP_PASSWORD=NBZzx6jXtZ2G6wrB
      - ZO_SMTP_FROM_EMAIL=njcxx0822@163.com
      #- ZO_SMTP_ENCRYPTION=starttls
    ports:
      - "5080:5080"
    networks:
      - devops

这里配置587端口会有问题使用了25端口并且去掉了安全认证。
  注意配置的邮件地址需要和用户名一致。
  打开控制台,选择右上角的设置按钮,选择模板->添加模板->Email填写标题和Body:

[Alert: {alert_name}] - Severity: {alert_type}
[
  {
    "labels": {
        "alertname": "{alert_name}",
        "stream": "{stream_name}",
        "organization": "{org_name}",
        "alerttype": "{alert_type}",
        "severity": "critical"
    },
    "annotations": {
        "timestamp": "{timestamp}"
    }
  }
]

暂无图片 注:这里的{}里面的内容需要和日志里面的字段保持一致。

  选择地址->添加地址->Email选择刚才的模板并填写收件人。 暂无图片

  配置完模板和地址后,选择告警->添加告警例如可以选择当有level='critical'并且出现1次时触发报警并通知到指定邮箱。 暂无图片
  周期:监控数据的时间窗口范围,即每次检查告警条件时,回溯多长时间的监控数据。如果周期 = 5分钟每次检查时分析最近 5 分钟的日志/指标数据。
  频率:告警规则检查的时间间隔,即每隔多久执行一次告警条件判断。
  通知后静默:触发告警并发送通知后,系统暂时停止重复通知的时间。
  也可以设置为实时告警,即当告警发生时就立即触发,不会有周期和频率参数设置。

3.3 配置WebHook

首先配置模板和WebHook地址。
  打开控制台,选择右上角的设置按钮,选择模板->添加模板->Web Hook填写Body:

{
  "msgtype": "markdown",
  "markdown": {
    "content": "alertname: {alert_name} timestamp:{timestamp}"
  }
}

暂无图片

  选择地址->添加地址->WebHook选择刚才的模板并填写URL。
这里可以使用企业微信的群消息推送功能添加成功后会提供一个WebHook地址。也可以自定义一个WebHook接收地址。
  配置完模板和地址后,选择告警->添加告警选择通知到刚才的WebHook地址即可。

3.4 通过API获取日志信息

  通过http://ip:5080/swagger/index.html#/ 即可访问OpenobserveAPI接口。
  例如要获取日志,可以使用/api/{origin_id}/_search的接口

curl -X 'POST' \
  'http://127.0.0.1:5080/api/default/_search' \
  -H 'accept: application/json' \
  -H 'Content-Type: application/json' \
  -d '{
  "query": {
    "end_time": 1759115401962000,
    "from": 0,
    "size": 10,
    "sql": "select * from default",
    "start_time": 1759029001962000
  }
}'

注意这里要加上Basic auth认证并提供username和password。
暂无图片

四、自定义日志告警服务

暂无图片 基本原理为通过提供一个HTTP的API接口当Openobserver触发告警时调用该接口并传入当前的alert_name和timestamp然后根据timestamp和Openobserver提供的API接口去查询最近一段时间内的所有日志信息并存储到SqLite数据库中。同时也可以选择是否同步推送到企业微信和邮箱。
  最后也需要提供一个查询历史日志告警信息的接口,并可视化显示,方便运维和开发查看。
  自定义服务参考代码:log-alert-service