使用 OpenTelemetry 和 Loki 实现高效的应用日志采集和分析 ...

水军大提督  金牌会员 | 2024-3-3 11:44:39 | 来自手机 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 744|帖子 744|积分 2232


在之前的文章陆续介绍了 如何在 Kubernetes 中使用 Otel 的自动插桩 以及 Otel 与 服务网格协同实现分布式跟踪,这两篇的文章都将目标聚焦在分布式跟踪中,而作为可观测性三大支柱之一的日志也是我们经常使用的系统观测手段,今天这篇文章就来体验下应用日志的操作闭环。
背景

OpenTelemetry 简介

OpenTelemetry (以下简称 Otel)是一个开源项目,旨在为分布式追踪、度量和日志提供统一的标准,简化应用程序的观测性(Observability)。它提供了一系列工具和 API,用于收集和传输应用程序的性能数据和日志,帮助开发者和运维团队更好地理解系统的行为。功能包括自动和手动检测应用程序的追踪数据,收集关键度量指标,以及捕获和传输日志。Otel 支持多种编程语言和框架,可以与多个后端系统集成,如 Prometheus、Jaeger、Elasticsearch 等。
Log 是 OpenTelemetry 项目的一部分,旨在提供一种标准化的方式来收集、传输和存储日志数据。
Loki 简介

LokiGrafana Labs 开发的一个水平可扩展、高可用性、多租户的日志聚合系统,专为效率和易用性而设计。与传统的日志聚合系统不同,Loki 主要索引日志内容的元数据而不是内容本身,这使得它既轻量又高效。Loki 采用了与 Prometheus 类似的标签系统,使得日志查询更加灵活和强大。常用于存储和查询大量日志数据,特别是与 Grafana 结合使用时,提供了强大的日志可视化和分析能力。
演示

在本演示中将使用 Java 应用进行日志闭环操作的演示,在 Otel Log 支持的语言 中,Java 是的最全面的语言之一。
架构



  • Otel Operator 通过自动插桩的配置,为 Java 工作负载安装探针并加载配置
  • 应用通过 otlp 端点上报日志到 Otel collector
  • Otel collector 将日志输出到 Loki
  • grafana 将 Loki 作为数据源进行日志的可视化展示
前置条件


  • Kubernetes 集群
  • kubectl cli
  • helm cli
安装 Loki 和 Grafana

安装 Grafana helm 库。
  1. helm repo add grafana https://grafana.github.io/helm-charts
  2. helm repo update
复制代码
准备 Loki 的配置文件 values.yaml。
  1. loki:
  2.   auth_enabled: false
  3.   commonConfig:
  4.     replication_factor: 1
  5.   storage:
  6.     type: 'filesystem'
  7. singleBinary:
  8.   replicas: 1
复制代码
安装 Loki。
  1. helm install --values values.yaml loki grafana/loki
复制代码
安装 Grafana。
  1. helm install grafana grafana/grafana
复制代码
通过 port forward 可以访问 Grafana  http://localhost:3000
  1. POD_NAME="$(kubectl get pod -l app.kubernetes.io/name=grafana -o jsonpath='{.items[0].metadata.name}')"
  2. kubectl --namespace default port-forward $POD_NAME 3000
复制代码
在 Grafana 中配置 Loki 数据源,指向上面部署 Loki。

安装 Otel Operator

Otel Operator 依赖 cert-manager 进行证书的管理,安装 operator 之前需要安装 cert-manager。
  1. kubectl apply -f https://github.com/cert-manager/cert-manager/releases/download/v1.13.2/cert-manager.yaml
复制代码
执行下面命令安装 Otel Operator
  1. kubectl apply -f https://github.com/open-telemetry/opentelemetry-operator/releases/latest/download/opentelemetry-operator.yaml
复制代码
配置 Instrumentation

成功安装 Otel Operator 之后,接下来就是配置探针的安装和配置了,详细的配置说明,可以参考 Instrumentation API 文档
Instrumentation 是 Otel Operator 的另一个 CRD,用于自动安装 Otel 探针和配置。本演示虽然主要聚焦在日志,但我们依然保留了之前使用的分布式跟踪的配置,保证链路信息的传递。

  • propagators 用于配置跟踪信息在上下文的传递方式。
  • sampler 采样器
  • env 和 [language].env 添加到容器的环境变量
针对 Java 应用,通过环境变量 OTEL_EXPORTER_OTLP_ENDPOINT 设置 oltp 的端点,以及 OTEL_LOGS_EXPORTER 设置应用 日志的输出方式 oltp。也可以设置为 logging、oltp,将日志输出到控制台以及 oltp 端点。
[code]kubectl apply -f -

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

水军大提督

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表