将 Kubernetes 事件和容器控制台日志接入 OpenObserve 完整指南
引言
OpenObserve 是一个现代化的可观测性平台,能够收集、存储和分析来自 Kubernetes 集群的指标、事件、日志和链路追踪数据。本指南将详细介绍如何将 Kubernetes 事件和容器控制台日志接入 OpenObserve,以便全面监控您的 Kubernetes 环境。
通过 OpenObserve,您可以获得对集群运行状况的全面了解,快速识别问题,并利用 OpenTelemetry 的自动注入功能为您的应用程序添加链路追踪能力,而无需修改代码。
前置条件
在开始安装之前,请确保您已满足以下条件:
- 已有可用的 Kubernetes 集群
- 已安装并配置 kubectl 命令行工具,能够访问您的 Kubernetes 集群
- 已安装 Helm 3.x
- 拥有集群管理员权限
- 准备好 OpenObserve 服务器的访问地址和认证凭据
- 国内机器安装,提前准备好内网镜像
重要提示:关于 GitHub 链接加速
由于国内网络环境原因,直接从 GitHub 下载资源可能会很慢或失败。为了确保安装过程顺畅,本指南中的所有 GitHub 链接均已使用 gitproxy.click 服务进行加速。
加速原理:将原始 URL 中的 github.com 替换为 gitproxy.click/github.com。
示例:
- 原始链接:
https://github.com/open-telemetry/opentelemetry-operator/releases/latest/download/opentelemetry-operator.yaml - 加速后链接:
https://gitproxy.click/https://github.com/open-telemetry/opentelemetry-operator/releases/latest/download/opentelemetry-operator.yaml
备用方案:如果 gitproxy.click 服务不可用,您可以尝试替换为其他加速镜像,例如:
gitclone.comgithub.com.cnpmjs.org
只需将命令中的 gitproxy.click 替换为上述任一域名即可。
镜像拉取(quay.io/ghcr.io)
针对国内优化(内网仓库是harbor.test.com)
# opentelemetry-operator
crictl pull harbor.test.com/ghcr/open-telemetry/opentelemetry-operator/opentelemetry-operator:0.136.0
ctr -n k8s.io i tag harbor.test.com/ghcr/open-telemetry/opentelemetry-operator/opentelemetry-operator:0.136.0 ghcr.io/open-telemetry/opentelemetry-collector-releases/opentelemetry-collector-contrib:0.136.0
# opentelemetry-collector-releases/opentelemetry-collector-contrib
crictl pull harbor.test.com/ghcr/open-telemetry/opentelemetry-collector-releases/opentelemetry-collector-contrib:0.136.0
ctr -n k8s.io i tag harbor.test.com/ghcr/open-telemetry/opentelemetry-collector-releases/opentelemetry-collector-contrib:0.136.0 ghcr.io/open-telemetry/opentelemetry-collector-releases/opentelemetry-collector-contrib:0.136.0
# cert-manager-cainjector
crictl pull harbor.test.com/quay/jetstack/cert-manager-cainjector:v1.16.1
ctr -n k8s.io i tag harbor.test.com/quay/jetstack/cert-manager-cainjector:v1.16.1 quay.io/jetstack/cert-manager-cainjector:v1.16.1
# cert-manager-controller
crictl pull harbor.test.com/quay/jetstack/cert-manager-controller:v1.16.1
ctr -n k8s.io i tag harbor.test.com/quay/jetstack/cert-manager-controller:v1.16.1 quay.io/jetstack/cert-manager-controller:v1.16.1
# kube-rbac-proxy
crictl pull harbor.test.com/quay/brancz/kube-rbac-proxy:v0.13.1
ctr -n k8s.io i tag harbor.test.com/quay/brancz/kube-rbac-proxy:v0.13.1 quay.io/brancz/kube-rbac-proxy:v0.13.1
# opentelemetry-operator/autoinstrumentation-java
crictl pull harbor.test.com/ghcr/open-telemetry/opentelemetry-operator/autoinstrumentation-java:1.33.6
ctr -n k8s.io i tag harbor.test.com/ghcr/open-telemetry/opentelemetry-operator/autoinstrumentation-java:1.33.6 ghcr.io/open-telemetry/opentelemetry-operator/autoinstrumentation-java:1.33.6
也可以使用通用脚本进行转换,更方便
MIRROR=harbor.test.com
IMAGES=(
"ghcr/open-telemetry/opentelemetry-operator/opentelemetry-operator:0.136.0"
"ghcr/open-telemetry/opentelemetry-collector-releases/opentelemetry-collector-contrib:0.136.0"
"quay/jetstack/cert-manager-cainjector:v1.16.1"
"quay/jetstack/cert-manager-controller:v1.16.1"
"quay/brancz/kube-rbac-proxy:v0.13.1"
"ghcr/open-telemetry/opentelemetry-operator/autoinstrumentation-java:1.33.6"
)
for img in "${IMAGES[@]}"; do
crictl pull $MIRROR/$img
repo=$(echo $img | cut -d':' -f1)
tag=$(echo $img | cut -d':' -f2)
ctr -n k8s.io i tag $MIRROR/$img $repo:$tag
done
安装步骤
1. 安装 Cert-Manager
Cert-Manager 是一个 Kubernetes 证书管理工具,OpenObserve 需要它来管理 TLS 证书。
# 已使用 gitproxy.click 加速
kubectl apply -f https://gitproxy.click/https://github.com/cert-manager/cert-manager/releases/download/v1.16.1/cert-manager.yaml
安装后,请等待约 2 分钟,确保 cert-manager 的 webhook 准备就绪。
2. 更新 Helm 仓库
添加 OpenObserve 的 Helm 仓库并更新:
helm repo add openobserve https://charts.openobserve.ai
helm repo update
3. 安装 Prometheus Operator CRDs
OpenTelemetry Operator 依赖 Prometheus Operator 的自定义资源定义 (CRDs),因此需要先安装这些 CRDs:
# 已使用 gitproxy.click 加速
kubectl create -f https://gitproxy.click/https://raw.githubusercontent.com/prometheus-operator/prometheus-operator/main/example/prometheus-operator-crd/monitoring.coreos.com_servicemonitors.yaml
kubectl create -f https://gitproxy.click/https://raw.githubusercontent.com/prometheus-operator/prometheus-operator/main/example/prometheus-operator-crd/monitoring.coreos.com_podmonitors.yaml
kubectl create -f https://gitproxy.click/https://raw.githubusercontent.com/prometheus-operator/prometheus-operator/refs/heads/main/example/prometheus-operator-crd/monitoring.coreos.com_scrapeconfigs.yaml
kubectl create -f https://gitproxy.click/https://raw.githubusercontent.com/prometheus-operator/prometheus-operator/refs/heads/main/example/prometheus-operator-crd/monitoring.coreos.com_probes.yaml
4. 安装 OpenTelemetry Operator
OpenTelemetry Operator 用于管理 OpenTelemetry Collector 的生命周期:
# 已使用 gitproxy.click 加速
kubectl apply -f https://gitproxy.click/https://github.com/open-telemetry/opentelemetry-operator/releases/latest/download/opentelemetry-operator.yaml
5. 创建命名空间
为 OpenObserve Collector 创建一个专用的命名空间:
kubectl create ns openobserve-collector
6. 安装 OpenObserve Collector
使用 Helm 安装 OpenObserve Collector,并配置相关参数:
helm --namespace openobserve-collector \
install o2c openobserve/openobserve-collector \
--set k8sCluster=cluster-prod \
--set exporters."otlphttp/openobserve".endpoint=https://192.168.0.123:15080/api/default \
--set exporters."otlphttp/openobserve".headers.Authorization="Basic YWRtaW5AcHJvLmNvbTp2UUhMb3VHWUJpaGc4YVRb" \
--set exporters."otlphttp/openobserve_k8s_events".endpoint=https://192.168.0.123:15080/api/default \
--set exporters."otlphttp/openobserve_k8s_events".headers.Authorization="Basic YWRtaW5AcHJvLmNvbTp2UUhMb3VHWUJpaGc4YVRb"
在上述命令中,我们配置了以下参数:
k8sCluster=cluster1: 指定 Kubernetes 集群的名称,您可以根据实际情况修改exporters."otlphttp/openobserve".endpoint: 指定 OpenObserve 服务器的 API 端点exporters."otlphttp/openobserve".headers.Authorization: 提供访问 OpenObserve 的认证凭据exporters."otlphttp/openobserve_k8s_events": 专门用于 Kubernetes 事件的导出器配置
请根据您的实际环境修改这些参数,特别是端点和认证信息。
功能介绍
安装完成后,OpenObserve Collector 将自动执行以下任务:
- 收集 Kubernetes 集群指标:收集集群、节点、Pod 和容器的性能指标
- 收集 Kubernetes 事件:捕获集群中发生的所有事件,如 Pod 创建、删除、错误等
- 收集 Kubernetes 集群日志:收集容器控制台日志,包括应用程序日志和系统日志
- 支持自动注入链路追踪:无需修改代码,即可为多种编程语言的应用程序添加链路追踪功能
使用 OpenTelemetry 自动注入功能
OpenObserve Collector 支持通过 OpenTelemetry 自动注入功能为应用程序添加链路追踪能力。只需在 Pod 或命名空间中添加相应的注解即可:
Java 应用程序
instrumentation.opentelemetry.io/inject-java: "openobserve-collector/openobserve-java"
.NET 应用程序
instrumentation.opentelemetry.io/inject-dotnet: "openobserve-collector/openobserve-dotnet"
Node.js 应用程序
instrumentation.opentelemetry.io/inject-nodejs: "openobserve-collector/openobserve-nodejs"
Python 应用程序
instrumentation.opentelemetry.io/inject-python: "openobserve-collector/openobserve-python"
Go 应用程序(使用 eBPF)
instrumentation.opentelemetry.io/inject-go: "openobserve-collector/openobserve-go"
instrumentation.opentelemetry.io/otel-go-auto-target-exe: "/path/to/container/executable"
示例:为应用程序添加日志和链路追踪
以下是一个示例部署,展示了如何为应用程序启用日志收集和链路追踪:
apiVersion: apps/v1
kind: Deployment
metadata:
name: sample-app
namespace: default
spec:
replicas: 1
selector:
matchLabels:
app: sample-app
template:
metadata:
labels:
app: sample-app
annotations:
# 启用 Java 应用程序的自动链路追踪注入
instrumentation.opentelemetry.io/inject-java: "openobserve-collector/openobserve-java"
spec:
containers:
- name: sample-app
image: your-sample-app-image:latest
ports:
- containerPort: 8080
验证安装
安装完成后,您可以通过以下步骤验证 OpenObserve Collector 是否正常工作:
-
检查 Collector Pod 状态:
kubectl get pods -n openobserve-collector -
查看 Collector 日志:
kubectl logs -n openobserve-collector -l app.kubernetes.io/name=openobserve-collector -
在 OpenObserve UI 中检查是否收到来自 Kubernetes 集群的数据
注:需要先导入k8s_event仪表盘https://github.com/openobserve/dashboards/tree/main/Kubernetes(openobserve-collector)


故障排除
如果遇到问题,请检查以下几点:
- 确保所有必需的 CRDs 已正确安装。
- 检查 OpenObserve 服务器的连接性和认证凭据。
- 验证 OpenTelemetry Operator 和 Collector 的日志中是否有错误信息。
- 确保网络策略允许 Collector 与 OpenObserve 服务器通信。
- 如果因网络问题无法下载 GitHub 上的 YAML 文件,请尝试替换为 其他加速镜像,或检查您所使用的加速服务是否可用。
总结
通过本指南,您已成功将 Kubernetes 事件和容器控制台日志接入 OpenObserve。现在,您可以:
- 在 OpenObserve 中查看和分析 Kubernetes 集群事件
- 搜索和过滤容器日志,快速定位问题
- 利用 OpenTelemetry 自动注入功能为应用程序添加链路追踪
- 通过统一的可观测性平台全面了解您的 Kubernetes 环境
OpenObserve 提供了强大的查询和分析功能,帮助您更好地理解和管理 Kubernetes 集群。
本文作者:运维技术团队:辣个男人Devin
发布日期:2025年10月17日
适用系统:Ubuntu 24.04 LTS