将 Kubernetes 事件和容器控制台日志接入 OpenObserve 完整指南

作者:Administrator 发布时间: 2025-10-16 阅读量:2 评论数:0

将 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.com
  • github.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 将自动执行以下任务:

  1. 收集 Kubernetes 集群指标:收集集群、节点、Pod 和容器的性能指标
  2. 收集 Kubernetes 事件:捕获集群中发生的所有事件,如 Pod 创建、删除、错误等
  3. 收集 Kubernetes 集群日志:收集容器控制台日志,包括应用程序日志和系统日志
  4. 支持自动注入链路追踪:无需修改代码,即可为多种编程语言的应用程序添加链路追踪功能

使用 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 是否正常工作:

  1. 检查 Collector Pod 状态:

    kubectl get pods -n openobserve-collector
    
  2. 查看 Collector 日志:

    kubectl logs -n openobserve-collector -l app.kubernetes.io/name=openobserve-collector
    
  3. 在 OpenObserve UI 中检查是否收到来自 Kubernetes 集群的数据
    注:需要先导入k8s_event仪表盘https://github.com/openobserve/dashboards/tree/main/Kubernetes(openobserve-collector)

https://gitproxy.click/https://github.com/openobserve/dashboards/blob/main/Kubernetes(openobserve-collector)/Kubernetes%20_%20Events.dashboard.json

image
image

故障排除

如果遇到问题,请检查以下几点:

  1. 确保所有必需的 CRDs 已正确安装。
  2. 检查 OpenObserve 服务器的连接性和认证凭据。
  3. 验证 OpenTelemetry Operator 和 Collector 的日志中是否有错误信息。
  4. 确保网络策略允许 Collector 与 OpenObserve 服务器通信。
  5. 如果因网络问题无法下载 GitHub 上的 YAML 文件,请尝试替换为 其他加速镜像,或检查您所使用的加速服务是否可用。

总结

通过本指南,您已成功将 Kubernetes 事件和容器控制台日志接入 OpenObserve。现在,您可以:

  • 在 OpenObserve 中查看和分析 Kubernetes 集群事件
  • 搜索和过滤容器日志,快速定位问题
  • 利用 OpenTelemetry 自动注入功能为应用程序添加链路追踪
  • 通过统一的可观测性平台全面了解您的 Kubernetes 环境

OpenObserve 提供了强大的查询和分析功能,帮助您更好地理解和管理 Kubernetes 集群。

本文作者:运维技术团队:辣个男人Devin
发布日期:2025年10月17日
适用系统:Ubuntu 24.04 LTS

评论