Files
blog-press/docs/DevOps/OpenObserve部署和简单使用.md
Cxx0822 76683b470d
Some checks failed
Deploy Vitepress to Gitea Pages / build (push) Has been cancelled
Deploy Vitepress to Gitea Pages / deploy (push) Has been cancelled
feat:初始化工程
2025-11-26 15:16:03 +08:00

214 lines
10 KiB
Markdown
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

## 一、基础概念
### 1.1 Fluent Bit
  [Fluent Bit](https://fluentbit.io/) 是一个开源的、轻量级、高性能的日志处理器和转发器。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](https://openobserve.ai/) 是一个开源的、云原生的可观测性数据平台,旨在处理日志、指标、追踪和性能数据。它的目标是成为 Elasticsearch/Logstash/Kibana (ELK)Grafana LokiDatadog 等流行解决方案的​​更简单、更经济高效、更高性能​​的替代品。
  OpenObserve 是一个“一体化”的平台,你可以将所有的可观测性数据(日志、指标、追踪)都发送到它这里,然后通过统一的界面进行搜索、分析和可视化。
## 二、Docker部署
```yml
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配置文件
```conf
[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容器日志是否有错误正确的应该会有上传成功的提示。
![暂无图片](https://cxx0822.iepose.cn/rustfs/blog/a2cfe735a9245758daf6ea36a4c82f04.png '配置数据流.png')
### 3.2 配置邮件告警
  首先需要配置模板和邮箱地址。
  修改docker-compose.yml文件添加邮件服务器
```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:
```json
[Alert: {alert_name}] - Severity: {alert_type}
```
```json
[
{
"labels": {
"alertname": "{alert_name}",
"stream": "{stream_name}",
"organization": "{org_name}",
"alerttype": "{alert_type}",
"severity": "critical"
},
"annotations": {
"timestamp": "{timestamp}"
}
}
]
```
![暂无图片](https://cxx0822.iepose.cn/rustfs/blog/2b747fa01dd59a6dbd3da8d2cb3579f8.png '邮箱模板.png')
  **注:这里的`{}`里面的内容需要和日志里面的字段保持一致。**
  选择地址->添加地址->Email选择刚才的模板并填写收件人。
![暂无图片](https://cxx0822.iepose.cn/rustfs/blog/352d69738b7325637e5716425757ac87.png '邮箱地址.png')
  配置完模板和地址后,选择告警->添加告警例如可以选择当有level='critical'并且出现1次时触发报警并通知到指定邮箱。
![暂无图片](https://cxx0822.iepose.cn/rustfs/blog/05200db676132fd43d3346099facee1b.png '邮箱告警.png')
  周期:监控数据的时间窗口范围,即每次检查告警条件时,回溯多长时间的监控数据。如果周期 = 5分钟每次检查时分析最近 5 分钟的日志/指标数据。
  频率:告警规则检查的时间间隔,即每隔多久执行一次告警条件判断。
  通知后静默:触发告警并发送通知后,系统暂时停止重复通知的时间。
  也可以设置为实时告警,即当告警发生时就立即触发,不会有周期和频率参数设置。
### 3.3 配置WebHook
  首先配置模板和WebHook地址。
  打开控制台,选择右上角的设置按钮,选择模板->添加模板->Web Hook填写Body:
```json
{
"msgtype": "markdown",
"markdown": {
"content": "alertname: {alert_name} timestamp:{timestamp}"
}
}
```
![暂无图片](https://cxx0822.iepose.cn/rustfs/blog/5c6514f9d689f55aa1bf74f75f5ea806.png 'WebHook模板.png')
  选择地址->添加地址->WebHook选择刚才的模板并填写URL。
  这里可以使用企业微信的群消息推送功能添加成功后会提供一个WebHook地址。也可以自定义一个WebHook接收地址。
  配置完模板和地址后,选择告警->添加告警选择通知到刚才的WebHook地址即可。
### 3.4 通过API获取日志信息
  通过http://ip:5080/swagger/index.html#/ 即可访问OpenobserveAPI接口。
  例如要获取日志,可以使用/api/{origin_id}/_search的接口
```cmd
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。
![暂无图片](https://cxx0822.iepose.cn/rustfs/blog/d29ddbd369e32cb7c2770464e8d0a142.png 'API查看日志.png')
## 四、自定义日志告警服务
![暂无图片](https://cxx0822.iepose.cn/rustfs/blog/74d5efdb80f506395b81988258433d9d.png '日志框架.png')
  基本原理为通过提供一个HTTP的API接口当Openobserver触发告警时调用该接口并传入当前的alert_name和timestamp然后根据timestamp和Openobserver提供的API接口去查询最近一段时间内的所有日志信息并存储到SqLite数据库中。同时也可以选择是否同步推送到企业微信和邮箱。
  最后也需要提供一个查询历史日志告警信息的接口,并可视化显示,方便运维和开发查看。
  自定义服务参考代码:[log-alert-service](https://cxxgit.iepose.cn/Cxx0822/log-alert-service)