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

2023年 12月 25日 22.8k 0

背景

OpenTelemetry 简介

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

Log 是 OpenTelemetry 项目的一部分,旨在提供一种标准化的方式来收集、传输和存储日志数据。

Loki 简介

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

演示

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

架构

图片图片

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

    • Kubernetes 集群
    • kubectl cli
    • helm cli

    安装 Loki 和 Grafana

    安装 Grafana helm 库。

    helm repo add grafana https://grafana.github.io/helm-charts
    helm repo update

    准备 Loki 的配置文件 values.yaml。

    loki:
      auth_enabled: false
      commonConfig:
        replication_factor: 1
      storage:
        type: 'filesystem'
    singleBinary:
      replicas: 1

    安装 Loki。

    helm install --values values.yaml loki grafana/loki

    安装 Grafana。

    helm install grafana grafana/grafana

    通过 port forward 可以访问 Grafana http://localhost:3000 。

    POD_NAME="$(kubectl get pod -l app.kubernetes.io/name=grafana -o jsnotallow='{.items[0].metadata.name}')"
    kubectl --namespace default port-forward $POD_NAME 3000

    在 Grafana 中配置 Loki 数据源,指向上面部署 Loki。

    图片图片

    安装 Otel Operator

    Otel Operator 依赖 cert-manager 进行证书的管理,安装 operator 之前需要安装 cert-manager。

    kubectl apply -f https://github.com/cert-manager/cert-manager/releases/download/v1.13.2/cert-manager.yaml

    执行下面命令安装 Otel Operator

    kubectl apply -f https://github.com/open-telemetry/opentelemetry-operator/releases/latest/download/opentelemetry-operator.yaml

    配置 Instrumentation

    成功安装 Otel Operator 之后,接下来就是配置探针的安装和配置了,详细的配置说明,可以参考 Instrumentation API 文档[6]。

    Instrumentation 是 Otel Operator 的另一个 CRD,用于自动安装 Otel 探针和配置。本演示虽然主要聚焦在日志,但我们依然保留了之前使用的分布式跟踪的配置,保证链路信息的传递。

    • propagators 用于配置跟踪信息在上下文的传递方式。
    • sampler 采样器
    • env 和 [language].env 添加到容器的环境变量

    针对 Java 应用,通过环境变量 OTEL_EXPORTER_OTLP_ENDPOINT 设置 oltp 的端点,以及 OTEL_LOGS_EXPORTER 设置应用 日志的输出方式[7] oltp。也可以设置为 logging、oltp,将日志输出到控制台以及 oltp 端点。

    kubectl apply -f -

    相关文章

    JavaScript2024新功能:Object.groupBy、正则表达式v标志
    PHP trim 函数对多字节字符的使用和限制
    新函数 json_validate() 、randomizer 类扩展…20 个PHP 8.3 新特性全面解析
    使用HTMX为WordPress增效:如何在不使用复杂框架的情况下增强平台功能
    为React 19做准备:WordPress 6.6用户指南
    如何删除WordPress中的所有评论

    发布评论