当前位置:首页 > 科技  > 软件

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

来源: 责编: 时间:2023-12-25 17:29:10 148观看
导读背景OpenTelemetry 简介OpenTelemetry[1] (以下简称 Otel)是一个开源项目,旨在为分布式追踪、度量和日志提供统一的标准,简化应用程序的观测性(Observability)。它提供了一系列工具和 API,用于收集和传输应用程序的性能数据

背景

OpenTelemetry 简介

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

Log 是 OpenTelemetry 项目的一部分,旨在提供一种标准化的方式来收集、传输和存储日志数据。BdL28资讯网——每日最新资讯28at.com

Loki 简介

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

演示

在本演示中将使用 Java 应用进行日志闭环操作的演示,在 Otel Log 支持的语言[5] 中,Java 是的最全面的语言之一。BdL28资讯网——每日最新资讯28at.com

架构

图片图片BdL28资讯网——每日最新资讯28at.com

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

前置条件

  • Kubernetes 集群
  • kubectl cli
  • helm cli

安装 Loki 和 Grafana

安装 Grafana helm 库。BdL28资讯网——每日最新资讯28at.com

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

准备 Loki 的配置文件 values.yaml。BdL28资讯网——每日最新资讯28at.com

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

安装 Loki。BdL28资讯网——每日最新资讯28at.com

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

安装 Grafana。BdL28资讯网——每日最新资讯28at.com

helm install grafana grafana/grafana

通过 port forward 可以访问 Grafana http://localhost:3000 。BdL28资讯网——每日最新资讯28at.com

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。BdL28资讯网——每日最新资讯28at.com

图片图片BdL28资讯网——每日最新资讯28at.com

安装 Otel Operator

Otel Operator 依赖 cert-manager 进行证书的管理,安装 operator 之前需要安装 cert-manager。BdL28资讯网——每日最新资讯28at.com

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

执行下面命令安装 Otel OperatorBdL28资讯网——每日最新资讯28at.com

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

配置 Instrumentation

成功安装 Otel Operator 之后,接下来就是配置探针的安装和配置了,详细的配置说明,可以参考 Instrumentation API 文档[6]。BdL28资讯网——每日最新资讯28at.com

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

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

针对 Java 应用,通过环境变量 OTEL_EXPORTER_OTLP_ENDPOINT 设置 oltp 的端点,以及 OTEL_LOGS_EXPORTER 设置应用 日志的输出方式[7] oltp。也可以设置为 logging、oltp,将日志输出到控制台以及 oltp 端点。BdL28资讯网——每日最新资讯28at.com

kubectl apply -f - <<EOFapiVersion: opentelemetry.io/v1alpha1kind: Instrumentationmetadata:  name: instrumentation-samplespec:  propagators:    - tracecontext    - baggage    - b3  sampler:    type: parentbased_traceidratio    argument: "1"  env:    - name: OTEL_EXPORTER_OTLP_ENDPOINT      value: otel-collector.default:4318  java:        env:      - name: OTEL_EXPORTER_OTLP_ENDPOINT        value: http://otel-collector.default:4317         - name: OTEL_LOGS_EXPORTER        value: otlpEOF

配置 OpenTelemetry Collector

在我们的设计用,Otel Collector 会将日志输出到 Loki,实际上是通过 Loki 的 HTTP API[8] 来发送日志,因此需要使用适配 Loki API 的 exporter[9]:lokiexporter[10]。BdL28资讯网——每日最新资讯28at.com

lokiexporter 来自 Otel Collector 的 Contrib 库[11],并不在官方的 release 中。要想在 collector 中使用 lokiexporter 有两种方式:BdL28资讯网——每日最新资讯28at.com

  • 使用官方提供的工具 OpenTelemetry Collector Builder (ocb)[12] 在构建 collector 的二进制时将 lokiexporter 加入其中。
  • 使用 官方提供的发行包 otelcol-contrib[13],这个包中包含了 Contrib 库所有的第三方组件。但不推荐在生产环境中使用,仅供测试。我们的演示中将会使用该发行包。

Otel 收集器的详细配置可以参考 官方文档[14]。BdL28资讯网——每日最新资讯28at.com

  • 接收器(receiver),我们配置 otlp 来接收来自应用程序的跟踪信息。
  • 处理器(processor),将日志中的部分资源属性作为 loki 的标签,比如服务名、容器名、命名空间、pod 名。
  • 输出器(exporter),配置 Loki 的 HTTP API 端点 http://loki.default:3100/loki/api/v1/push。
  • 管道服务(pipeline service),使用 otlp 作为输入源,将 loki 作为输出目的地。
kubectl apply -f - <<EOFapiVersion: opentelemetry.io/v1alpha1kind: OpenTelemetryCollectormetadata:  name: otelspec:  image: ghcr.io/open-telemetry/opentelemetry-collector-releases/opentelemetry-collector-contrib:0.90.1  config: |    receivers:      otlp:        protocols:          grpc:          http:    processors:      resource:        attributes:          - action: insert            key: loki.resource.labels            value: service.name, k8s.container.name, k8s.namespace.name, k8s.pod.name    exporters:      debug:        verbosity: detailed      loki:        endpoint: "http://loki.default:3100/loki/api/v1/push"        tls:          insecure: true        default_labels_enabled:          exporter: true          job: true       service:      pipelines:        logs:          receivers: [otlp]          processors: [resource]          exporters: [loki]          EOF

部署示例应用

这是一个非常简单的 Java 应用,监听 8080 端口,在响应请求时打印日志。BdL28资讯网——每日最新资讯28at.com

@SpringBootApplication@Slf4j@RestControllerpublic class SpringBootRestApplication { public static void main(String[] args) {  SpringApplication.run(SpringBootRestApplication.class, args); } @GetMapping("/") public String hello() {  log.info("Hello World");  return "Hello World"; }}

在 Maven 的 pom 中只引入了两个依赖 :spring-boot-starter-web 和 lombok。BdL28资讯网——每日最新资讯28at.com

<dependencies>  <dependency>   <groupId>org.springframework.boot</groupId>   <artifactId>spring-boot-starter-web</artifactId>  </dependency>        <dependency>            <groupId>org.projectlombok</groupId>            <artifactId>lombok</artifactId>            <version>1.18.28</version>        </dependency>    </dependencies>

部署应用。BdL28资讯网——每日最新资讯28at.com

kubectl apply -f - <<EOFapiVersion: apps/v1kind: Deploymentmetadata:  name: java-samplespec:  replicas: 1  selector:    matchLabels:      app: java-sample  template:    metadata:      labels:        app: java-sample      annotations:        instrumentation.opentelemetry.io/inject-java: "true"    spec:      containers:      - name: java-sample        image: addozhang/spring-boot-rest        imagePullPolicy: Always        ports:        - containerPort: 8080EOF

应用部署完成后,通过端口转发可以成功访问应用。BdL28资讯网——每日最新资讯28at.com

curl localhost:8080Hello World

测试

Grafana 配置完 Loki 的数据源之后,在 Explore 中选择配置的 Loki 数据源,然后在下方的 Label Filters 中选择过滤器名 service_name 和值 java-sample。BdL28资讯网——每日最新资讯28at.com

图片图片BdL28资讯网——每日最新资讯28at.com

点击 Run queryBdL28资讯网——每日最新资讯28at.com

总结

在本文中,我们探讨了如何利用 OpenTelemetry 的自动检测功能来高效采集应用日志,通过 OpenTelemetry Collector 进行处理,并利用 Loki Exporter 将日志数据发送到 Loki。最后,我们展示了如何使用 Grafana 对这些日志进行深入的查询和分析。这一过程不仅优化了日志管理流程,还提升了数据的可视化和可用性。这种集成为开发者和运维团队提供了一个全面的视角,帮助他们更有效地理解和优化他们的应用和基础设施。特别是,如果将分布式跟踪的 traceid、spanid 等信息作为 Loki 日志的标签,将极大地增强了日志数据的可追踪性和可分析性。BdL28资讯网——每日最新资讯28at.com

参考资料

[1] OpenTelemetry: https://opentelemetry.ioBdL28资讯网——每日最新资讯28at.com

[2] Loki: https://grafana.com/oss/loki/BdL28资讯网——每日最新资讯28at.com

[3] Grafana Labs: https://grafana.comBdL28资讯网——每日最新资讯28at.com

[4] Prometheus: https://prometheus.ioBdL28资讯网——每日最新资讯28at.com

[5] Otel Log 支持的语言: https://opentelemetry.io/docs/concepts/signals/logs/#language-supportBdL28资讯网——每日最新资讯28at.com

[6] Instrumentation API 文档: https://github.com/open-telemetry/opentelemetry-operator/blob/main/docs/api.md#instrumentationBdL28资讯网——每日最新资讯28at.com

[7] 日志的输出方式: https://github.com/open-telemetry/opentelemetry-java/tree/main/sdk-extensions/autoconfigure#exportersBdL28资讯网——每日最新资讯28at.com

[8] Loki 的 HTTP API: https://grafana.com/docs/loki/latest/reference/api/#push-log-entries-to-lokiBdL28资讯网——每日最新资讯28at.com

[9] exporter: https://opentelemetry.io/docs/collector/configuration/#exportersBdL28资讯网——每日最新资讯28at.com

[10] lokiexporter: https://github.com/open-telemetry/opentelemetry-collector-contrib/tree/main/exporter/lokiexporterBdL28资讯网——每日最新资讯28at.com

[11] Otel Collector 的 Contrib 库: https://github.com/open-telemetry/opentelemetry-collector-contribBdL28资讯网——每日最新资讯28at.com

[12] OpenTelemetry Collector Builder (ocb): https://github.com/open-telemetry/opentelemetry-collector/tree/main/cmd/builderBdL28资讯网——每日最新资讯28at.com

[13] 官方提供的发行包 otelcol-contrib: https://github.com/open-telemetry/opentelemetry-collector-releasesBdL28资讯网——每日最新资讯28at.com

[14] 官方文档: https://opentelemetry.io/docs/collector/configuration/BdL28资讯网——每日最新资讯28at.com

本文链接:http://www.28at.com/showinfo-26-54012-0.html使用 OpenTelemetry 和 Loki 实现高效的应用日志采集和分析

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: jstat,一把Java程序员必备的瑞士军刀

下一篇: C++中使用宏定义一个函数:灵活性与风险并存

标签:
  • 热门焦点
  • MIX Fold3包装盒泄露 新机本月登场

    MIX Fold3包装盒泄露 新机本月登场

    小米的全新折叠屏旗舰MIX Fold3将于本月发布,近日该机的真机包装盒在网上泄露。从图上来看,新的MIX Fold3包装盒在外观设计方面延续了之前的方案,变化不大,这也是目前小米旗舰
  • 分布式系统中的CAP理论,面试必问,你理解了嘛?

    分布式系统中的CAP理论,面试必问,你理解了嘛?

    对于刚刚接触分布式系统的小伙伴们来说,一提起分布式系统,就感觉高大上,深不可测。而且看了很多书和视频还是一脸懵逼。这篇文章主要使用大白话的方式,带你理解一下分布式系统
  • 企业采用CRM系统的11个好处

    企业采用CRM系统的11个好处

    客户关系管理(CRM)软件可以为企业提供很多的好处,从客户保留到提高生产力。  CRM软件用于企业收集客户互动,以改善客户体验和满意度。  CRM软件市场规模如今超过580
  • 这款新兴工具平台,让你的电脑效率翻倍

    这款新兴工具平台,让你的电脑效率翻倍

    随着信息技术的发展,我们获取信息的渠道越来越多,但是处理信息的效率却成为一个瓶颈。于是各种工具应运而生,都在争相解决我们的工作效率问题。今天我要给大家介绍一款效率
  • 大厂卷向扁平化

    大厂卷向扁平化

    来源:新熵作者丨南枝 编辑丨月见大厂职级不香了。俗话说,兵无常势,水无常形,互联网企业调整职级体系并不稀奇。7月13日,淘宝天猫集团启动了近年来最大的人力制度改革,目前已形成一
  • 2299元起!iQOO Pad明晚首销:性能最强天玑平板

    2299元起!iQOO Pad明晚首销:性能最强天玑平板

    5月23日,iQOO如期举行了新品发布会,除了首发安卓最强旗舰处理器的iQOO Neo8系列新机外,还在发布会上推出了旗下首款平板电脑——iQOO Pad,其最大的卖点
  • iQOO Neo8 Pro即将开售:到手价3099元起 安卓性能最强旗舰

    iQOO Neo8 Pro即将开售:到手价3099元起 安卓性能最强旗舰

    5月23日,iQOO如期举行了新品发布会,全新的iQOO Neo8系列也正式与大家见面,包含iQOO Neo8和iQOO Neo8 Pro两个版本,其中标准版搭载高通骁龙8+,而Pro版更
  • OPPO K11样张首曝:千元机影像“卷”得真不错!

    OPPO K11样张首曝:千元机影像“卷”得真不错!

    一直以来,OPPO K系列机型都保持着较为均衡的产品体验,历来都是2K价位的明星机型,去年推出的OPPO K10和OPPO K10 Pro两款机型凭借各自的出色配置,堪称有
  • 利用职权私自解除被封帐号 Meta开除20多名员工

    利用职权私自解除被封帐号 Meta开除20多名员工

    11月18日消息,据外媒援引知情人士表示,过去一年时间内,Facebook母公司Meta解雇或处罚了20多名员工以及合同工,指控这些人通过内部系统以不当方式重置用户帐号,其
Top