OpenObserve日志分析平台

一、概述

OpenObserve 是一款开源的云原生可观测性平台,专为日志、指标和追踪数据分析设计,相较于Elasticsearch,其存储成本降低了约140倍,支持PB级数据处理,并提供高性能分析与易用部署方案。

包含的组件如下:

562987-20250302112645278-352672793

为啥要用OpenObserve呢?因为接触到项目,资源有限,部署elk太耗资源了。所以需要一个支持链路追踪,同时能收集java日志的。OpenObserve就可以完美实现了。

看一下效果图

链路追踪

image

 java日志

image

 k8s pod监控

image

二、安装

这里使用k8s安装,准备以下yaml文件

secret.yaml

apiVersion: v1
kind: Secret
metadata:
  name: oo-admin
  namespace: default
type: Opaque
data:
  # echo -n 'abcd@1234' | base64 -w0
  password: YWJjZEAxMjM0

 说明:

这里密码使用base64加密,使用上面的命令,就可以得到加密字符串。

StatefulSet.yaml

apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: openobserve
  namespace: default
spec:
  serviceName: openobserve
  replicas: 1
  selector:
    matchLabels:
      app: openobserve
  template:
    metadata:
      labels:
        app: openobserve
    spec:
      containers:
      - name: openobserve
        image: public.ecr.aws/zinclabs/openobserve:latest
        ports:
        - containerPort: 5080
          name: http
        env:
        - name: ZO_COMPACT_ENABLED
          value: "true"
        - name: ZO_COMPACT_INTERVAL
          value: "3600"            # 秒,1 小时检查一次
        - name: ZO_COMPACT_DATA_RETENTION_DAYS
          value: "30"              # 保留 30 天
        - name: ZO_ROOT_USER_EMAIL
          value: "root@example.com"
        - name: ZO_ROOT_USER_PASSWORD
          valueFrom:
            secretKeyRef:
              name: oo-admin
              key: password
        - name: ZO_DATA_DIR
          value: "/data"
        resources:
          limits:
            cpu: 1000m
            memory: 2Gi
          requests:
            cpu: 250m
            memory: 500Mi
        volumeMounts:
        - name: data
          mountPath: /data
      volumes:
      - name: data
        persistentVolumeClaim:
          claimName: pvc-dev

注意:这里数据是挂载在pvc的/data目录。 pvc云平台已经创建好了,这里直接使用。 如果你没有pvc,请手动创建好。

注意:挂载到数据目录/data,首次加载后,密码会写入到文件,之后就不能修改密码了。如果要修改,只能清空/data目录,重新加载即可。

这里设定的是OpenObserve登录用户名为root@example.com,密码就是上面的abcd@1234,数据保留30天。

service.yaml

apiVersion: v1
kind: Service
metadata:
  name: openobserve
  namespace: default
spec:
  type: NodePort
  ports:
  - port: 5080
    targetPort: 5080
    name: http
  selector:
    app: openobserve

 启动OpenObserve

kubectl apply -f secret.yaml
kubectl apply -f service.yaml
kubectl apply -f StatefulSet.yaml

等待几分钟,查看pod是否运行正常

# kubectl get pods
NAME            READY   STATUS    RESTARTS   AGE
openobserve-0   1/1     Running   0          162m

使用ingress发布域名访问,这里直接云平台,点点点就完成了。

访问页面:http://域名

输入用户名和密码

image

 登录之后,默认是空数据,需要进行接入。

三、java程序接入

下载agent,访问github,下载最新版本

https://github.com/open-telemetry/opentelemetry-java-instrumentation/releases

启动命令模板

java -javaagent:./opentelemetry-javaagent.jar \
     -Dotel.exporter.otlp.endpoint=http://<OpenObserve_IP>:5080/api/default \
     -Dotel.exporter.otlp.protocol=http/protobuf \
     -Dotel.exporter.otlp.compression=gzip \
     -Dotel.exporter.otlp.headers="Authorization=Basic <base64(用户:TOKEN)>,stream-name=<你的流名>" \
     -Dotel.service.name=my-java-app \
     -jar your-app.jar

参数说明

  • <base64(用户:TOKEN)>:例如 root@example.com:abcd@1234 → cm9vdEBleGFtcGxlLmNvbTphYmNkQDEyMzQ=
  • stream-name:OpenObserve 里用来区分业务的数据流,可随意起,查询时会当成表名。

计算base64,使用以下命令

echo -n 'root@example.com:abcd@1234' | base64 -w0

以上命令太长了,可以直接通过k8s环境变量注入进去

- name: OTEL_EXPORTER_OTLP_ENDPOINT
  value: "http://openobserve.default:5080/api/default"
- name: OTEL_EXPORTER_OTLP_PROTOCOL
  value: "http/protobuf"
- name: OTEL_EXPORTER_OTLP_COMPRESSION
  value: "gzip"
- name: OTEL_EXPORTER_OTLP_HEADERS
  value: "Authorization=Basic cm9vdEBleGFtcGxlLmNvbTphYmNkQDEyMzQ=,stream-name=你的应用名"
- name: OTEL_SERVICE_NAME
  value: "你的应用名"
- name: OTEL_LOGS_EXPORTER
  value: "otlp"
- name: OTEL_METRICS_EXPORTER
  value: "otlp"

然后java的dockerfile,启动命令为:

java $JAVA_OPTS -javaagent:/opentelemetry-javaagent.jar -jar /app.jar

等应用都发布完成之后,就可以看到日志了

image

点击数据流,这里可以看到你接入了多少应用

image

三、数据源Kubernetes

点击数据源,选择Kubernetes

image

 以上命令,都是要执行的,但是缺少helm命令

安装helm,使用官方脚本

curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3
chmod 700 get_helm.sh
./get_helm.sh

剩下就是,将以上页面出现的所有命令,都执行一遍,就可以了

最后一步Install OpenObserve collector,这里会根据你安装OpenObserve设定的token,自动生成安装命令,直接复制粘贴执行即可。

四、仪表盘

默认仪表盘是空的,需要手动导入。

官方仪表盘已经放到github了,链接:https://github.com/openobserve/dashboards

image

这里有N多仪表盘,但是目前我只需要k8s的,进入文件夹Kubernetes(openobserve-collector)

image

 将这里面的8个json文件,下载下来。

点击导入

image

 点击添加

image

 输入k8s

image

上传json文件,选择k8s文件夹,点击导入

image

 导入完成后,可以看到8个

image

 点击第7个,刷新数据,效果如下:

image

<think> 首先,用户的问题是:“我想了解openobserve收集日志的方法或相关信息 请问openobserve如何收集日志”。这需要我根据提供的引用信息来回答。 回顾系统级指令: - 所有行内数学表达式使用$...$。 - 独立公式使用$$...$$。 - LaTeX语法正确。 - 使用中文回答。 - 生成相关问题。 - 在回答中引用的段落末尾自然地添加引用标识,如[^1]。 用户可见层指令: - 回答结构清晰,帮助用户逐步解决问题。 - 保证回答真实可靠。 提供的引用: - [^1]: OpenObserve日志收集与存储机制。 - [^2]: OpenObserve的安装与使用场景,提到日志搜索、可观察性、成本降低等。 - [^3]: OpenObserve与Spark集成,包括部署步骤、核心优势等。 - [^4]: 阿里云的日志服务作为对比,但这不是OpenObserve的内容。 用户的问题聚焦在OpenObserve如何收集日志,所以我需要从引用中提取相关信息。 关键点从引用: - 从[^1]: “日志收集与存储机制” – 这直接相关。 - 从[^2]: 提到使用日志转发器如fluentbit、fluentd、vector等。 - 从[^3]: 提到与Spark集成,包括数据写入OpenObserve的步骤。 - [^4]是关于阿里云的,不相关,我应该忽略。 总结OpenObserve收集日志的方法: 1. 使用日志转发器:如fluentbit、fluentd、vector等(来自[^2])。 2. 部署OpenObserve服务:涉及启动服务(来自[^3])。 3. 数据写入:通过API或集成,如Spark集成(来自[^3])。 结构清晰的回答: - 逐步解释:先介绍方法,然后详细步骤。 - 使用中文。 - 在引用处添加[^n]标识。 生成相关问题:结束时添加相关问题。 回答大纲: 1. 介绍OpenObserve收集日志的基本方法。 2. 详细步骤:如何部署和使用日志转发器。 3. 集成示例:如Spark集成。 4. 总结。 5. 添加相关问题。 确保真实可靠:基于提供的引用,不添加额外信息。 行内数学表达式:用户的问题不涉及数学,但如果有数学内容,要用$...$。例如,如果有公式,但在日志收集中可能不涉及。所以可能不需要。 独立公式:同样,可能不需要。 相关问题生成:如"如何优化日志收集?"或"与其他工具的对比?"等。 最终回答结构: - 开头:直接回答问题。 - 主体:分步骤解释。 - 结尾:总结和生成相关问题。 </think> ### OpenObserve日志收集方法 OpenObserve 是一个高性能的日志、指标和追踪数据处理系统,它通过多种方式实现高效的日志收集。以下是其核心日志收集机制,基于引用信息逐步解析: 1. **使用日志转发器(Log Forwarders)** OpenObserve 支持多种开源日志转发工具,如 FluentBit、Fluentd 或 Vector。这些工具负责从源头(如应用程序、服务器)收集日志数据,并通过 HTTP 或 gRPC 协议转发到 OpenObserve 服务。例如,用户可以在配置文件中指定 OpenObserve 的端点地址,实现无缝数据传输。这种方式降低了日志摄入成本,并支持高吞吐量(每秒数十万条日志处理)[^2]。 2. **部署 OpenObserve 服务** 首先需要部署 OpenObserve 服务实例,作为日志的接收和存储中枢。部署步骤如下(基于引用中的详细步骤): - 克隆 OpenObserve 仓库: ```bash git clone https://gitcode.com/GitHub_Trending/op/openobserve cd openobserve ``` - 启动服务(使用 Rust 的 Cargo 工具): ```bash cargo run --release ``` 此命令启动 OpenObserve 的 `ingester` 模块,负责实时接收和预处理日志数据。服务启动后,会暴露 API 端点(如 `http://localhost:5080`)用于日志摄入[^3]。 3. **数据写入与集成** - **API 方式**:OpenObserve 提供 RESTful API,允许直接通过 HTTP POST 请求发送日志数据。示例代码(使用 Python): ```python import requests endpoint = "http://localhost:5080/api/v1/logs" headers = {"Authorization": "Basic <your_api_key>"} data = { "stream": "my_app_logs", "values": [{"timestamp": "2023-01-01T00:00:00Z", "message": "示例日志消息"}] } response = requests.post(endpoint, json=data, headers=headers) print(response.status_code) # 成功返回200 ``` - **分布式系统集成**:OpenObserve 可与 Spark 等大数据处理框架集成。Spark 通过 DataFrame API 将日志数据批量或流式写入 OpenObserve。关键配置包括设置 OpenObserve 的数据目录(`config/src/lib.rs`)和处理逻辑(`handler/http/mod.rs`)。例如,Spark 作业可以将处理后的日志以 Parquet 格式压缩存储,显著减少空间占用(比传统方案降低 93%)[^3]。 4. **核心优势与机制** - **存储效率**:日志以 Parquet 格式压缩存储,支持高吞吐量摄入和低成本查询。 - **实时处理**:`ingester` 模块确保日志秒级可见,适用于监控和告警场景。 - **多源兼容**:除转发器外,还支持自定义脚本、云服务(如 AWS CloudWatch)等来源[^1][^2]。 通过以上方法,OpenObserve 实现了高效、灵活的日志收集,适用于从兆字节到 PB 级的数据规模。用户可通过分析系统日志(如摄入、存储、查询记录)监控运行状态,确保服务稳定性[^1]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值