成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

使用 OpenTelemetry 和 Loki 實(shí)現(xiàn)高效的應(yīng)用日志采集和分析

開(kāi)發(fā) 開(kāi)發(fā)工具
在本文中,我們探討了如何利用 OpenTelemetry 的自動(dòng)檢測(cè)功能來(lái)高效采集應(yīng)用日志,通過(guò) OpenTelemetry Collector 進(jìn)行處理,并利用 Loki Exporter 將日志數(shù)據(jù)發(fā)送到 Loki。

背景

OpenTelemetry 簡(jiǎn)介

OpenTelemetry[1] (以下簡(jiǎn)稱(chēng) Otel)是一個(gè)開(kāi)源項(xiàng)目,旨在為分布式追蹤、度量和日志提供統(tǒng)一的標(biāo)準(zhǔn),簡(jiǎn)化應(yīng)用程序的觀測(cè)性(Observability)。它提供了一系列工具和 API,用于收集和傳輸應(yīng)用程序的性能數(shù)據(jù)和日志,幫助開(kāi)發(fā)者和運(yùn)維團(tuán)隊(duì)更好地理解系統(tǒng)的行為。功能包括自動(dòng)和手動(dòng)檢測(cè)應(yīng)用程序的追蹤數(shù)據(jù),收集關(guān)鍵度量指標(biāo),以及捕獲和傳輸日志。Otel 支持多種編程語(yǔ)言和框架,可以與多個(gè)后端系統(tǒng)集成,如 Prometheus、Jaeger、Elasticsearch 等。

Log 是 OpenTelemetry 項(xiàng)目的一部分,旨在提供一種標(biāo)準(zhǔn)化的方式來(lái)收集、傳輸和存儲(chǔ)日志數(shù)據(jù)。

Loki 簡(jiǎn)介

Loki[2] 是 Grafana Labs[3] 開(kāi)發(fā)的一個(gè)水平可擴(kuò)展、高可用性、多租戶(hù)的日志聚合系統(tǒng),專(zhuān)為效率和易用性而設(shè)計(jì)。與傳統(tǒng)的日志聚合系統(tǒng)不同,Loki 主要索引日志內(nèi)容的元數(shù)據(jù)而不是內(nèi)容本身,這使得它既輕量又高效。Loki 采用了與 Prometheus[4] 類(lèi)似的標(biāo)簽系統(tǒng),使得日志查詢(xún)更加靈活和強(qiáng)大。常用于存儲(chǔ)和查詢(xún)大量日志數(shù)據(jù),特別是與 Grafana 結(jié)合使用時(shí),提供了強(qiáng)大的日志可視化和分析能力。

演示

在本演示中將使用 Java 應(yīng)用進(jìn)行日志閉環(huán)操作的演示,在 Otel Log 支持的語(yǔ)言[5] 中,Java 是的最全面的語(yǔ)言之一。

架構(gòu)

圖片圖片

  1. Otel Operator 通過(guò)自動(dòng)插樁的配置,為 Java 工作負(fù)載安裝探針并加載配置
  2. 應(yīng)用通過(guò) otlp 端點(diǎn)上報(bào)日志到 Otel collector
  3. Otel collector 將日志輸出到 Loki
  4. grafana 將 Loki 作為數(shù)據(jù)源進(jìn)行日志的可視化展示

前置條件

  • Kubernetes 集群
  • kubectl cli
  • helm cli

安裝 Loki 和 Grafana

安裝 Grafana helm 庫(kù)。

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

準(zhǔn)備 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

通過(guò) port forward 可以訪問(wèn) 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 數(shù)據(jù)源,指向上面部署 Loki。

圖片圖片

安裝 Otel Operator

Otel Operator 依賴(lài) cert-manager 進(jìn)行證書(shū)的管理,安裝 operator 之前需要安裝 cert-manager。

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

執(zhí)行下面命令安裝 Otel Operator

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

配置 Instrumentation

成功安裝 Otel Operator 之后,接下來(lái)就是配置探針的安裝和配置了,詳細(xì)的配置說(shuō)明,可以參考 Instrumentation API 文檔[6]。

Instrumentation 是 Otel Operator 的另一個(gè) CRD,用于自動(dòng)安裝 Otel 探針和配置。本演示雖然主要聚焦在日志,但我們依然保留了之前使用的分布式跟蹤的配置,保證鏈路信息的傳遞。

  • propagators 用于配置跟蹤信息在上下文的傳遞方式。
  • sampler 采樣器
  • env 和 [language].env 添加到容器的環(huán)境變量

針對(duì) Java 應(yīng)用,通過(guò)環(huán)境變量 OTEL_EXPORTER_OTLP_ENDPOINT 設(shè)置 oltp 的端點(diǎn),以及 OTEL_LOGS_EXPORTER 設(shè)置應(yīng)用 日志的輸出方式[7] oltp。也可以設(shè)置為 logging、oltp,將日志輸出到控制臺(tái)以及 oltp 端點(diǎn)。

kubectl apply -f - <<EOF
apiVersion: opentelemetry.io/v1alpha1
kind: Instrumentation
metadata:
  name: instrumentation-sample
spec:
  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: otlp
EOF

配置 OpenTelemetry Collector

在我們的設(shè)計(jì)用,Otel Collector 會(huì)將日志輸出到 Loki,實(shí)際上是通過(guò) Loki 的 HTTP API[8] 來(lái)發(fā)送日志,因此需要使用適配 Loki API 的 exporter[9]:lokiexporter[10]。

lokiexporter 來(lái)自 Otel Collector 的 Contrib 庫(kù)[11],并不在官方的 release 中。要想在 collector 中使用 lokiexporter 有兩種方式:

  • 使用官方提供的工具 OpenTelemetry Collector Builder (ocb)[12] 在構(gòu)建 collector 的二進(jìn)制時(shí)將 lokiexporter 加入其中。
  • 使用 官方提供的發(fā)行包 otelcol-contrib[13],這個(gè)包中包含了 Contrib 庫(kù)所有的第三方組件。但不推薦在生產(chǎn)環(huán)境中使用,僅供測(cè)試。我們的演示中將會(huì)使用該發(fā)行包。

Otel 收集器的詳細(xì)配置可以參考 官方文檔[14]。

  • 接收器(receiver),我們配置 otlp 來(lái)接收來(lái)自應(yīng)用程序的跟蹤信息。
  • 處理器(processor),將日志中的部分資源屬性作為 loki 的標(biāo)簽,比如服務(wù)名、容器名、命名空間、pod 名。
  • 輸出器(exporter),配置 Loki 的 HTTP API 端點(diǎn) http://loki.default:3100/loki/api/v1/push。
  • 管道服務(wù)(pipeline service),使用 otlp 作為輸入源,將 loki 作為輸出目的地。
kubectl apply -f - <<EOF
apiVersion: opentelemetry.io/v1alpha1
kind: OpenTelemetryCollector
metadata:
  name: otel
spec:
  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

部署示例應(yīng)用

這是一個(gè)非常簡(jiǎn)單的 Java 應(yīng)用,監(jiān)聽(tīng) 8080 端口,在響應(yīng)請(qǐng)求時(shí)打印日志。

@SpringBootApplication
@Slf4j
@RestController
public 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 中只引入了兩個(gè)依賴(lài) :spring-boot-starter-web 和 lombok。

<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>

部署應(yīng)用。

kubectl apply -f - <<EOF
apiVersion: apps/v1
kind: Deployment
metadata:
  name: java-sample
spec:
  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: 8080
EOF

應(yīng)用部署完成后,通過(guò)端口轉(zhuǎn)發(fā)可以成功訪問(wèn)應(yīng)用。

curl localhost:8080
Hello World

測(cè)試

Grafana 配置完 Loki 的數(shù)據(jù)源之后,在 Explore 中選擇配置的 Loki 數(shù)據(jù)源,然后在下方的 Label Filters 中選擇過(guò)濾器名 service_name 和值 java-sample。

圖片圖片

點(diǎn)擊 Run query

總結(jié)

在本文中,我們探討了如何利用 OpenTelemetry 的自動(dòng)檢測(cè)功能來(lái)高效采集應(yīng)用日志,通過(guò) OpenTelemetry Collector 進(jìn)行處理,并利用 Loki Exporter 將日志數(shù)據(jù)發(fā)送到 Loki。最后,我們展示了如何使用 Grafana 對(duì)這些日志進(jìn)行深入的查詢(xún)和分析。這一過(guò)程不僅優(yōu)化了日志管理流程,還提升了數(shù)據(jù)的可視化和可用性。這種集成為開(kāi)發(fā)者和運(yùn)維團(tuán)隊(duì)提供了一個(gè)全面的視角,幫助他們更有效地理解和優(yōu)化他們的應(yīng)用和基礎(chǔ)設(shè)施。特別是,如果將分布式跟蹤的 traceid、spanid 等信息作為 Loki 日志的標(biāo)簽,將極大地增強(qiáng)了日志數(shù)據(jù)的可追蹤性和可分析性。

參考資料

[1] OpenTelemetry: https://opentelemetry.io

[2] Loki: https://grafana.com/oss/loki/

[3] Grafana Labs: https://grafana.com

[4] Prometheus: https://prometheus.io

[5] Otel Log 支持的語(yǔ)言: https://opentelemetry.io/docs/concepts/signals/logs/#language-support

[6] Instrumentation API 文檔: https://github.com/open-telemetry/opentelemetry-operator/blob/main/docs/api.md#instrumentation

[7] 日志的輸出方式: https://github.com/open-telemetry/opentelemetry-java/tree/main/sdk-extensions/autoconfigure#exporters

[8] Loki 的 HTTP API: https://grafana.com/docs/loki/latest/reference/api/#push-log-entries-to-loki

[9] exporter: https://opentelemetry.io/docs/collector/configuration/#exporters

[10] lokiexporter: https://github.com/open-telemetry/opentelemetry-collector-contrib/tree/main/exporter/lokiexporter

[11] Otel Collector 的 Contrib 庫(kù): https://github.com/open-telemetry/opentelemetry-collector-contrib

[12] OpenTelemetry Collector Builder (ocb): https://github.com/open-telemetry/opentelemetry-collector/tree/main/cmd/builder

[13] 官方提供的發(fā)行包 otelcol-contrib: https://github.com/open-telemetry/opentelemetry-collector-releases

[14] 官方文檔: https://opentelemetry.io/docs/collector/configuration/

責(zé)任編輯:武曉燕 來(lái)源: 云原生指北
相關(guān)推薦

2025-01-06 10:38:04

2024-02-04 00:00:00

Loki性能查詢(xún)

2023-08-30 07:20:58

2024-03-11 00:01:00

PromtailLoki服務(wù)器

2021-06-02 06:02:50

Loki 源碼分析日志

2022-06-28 08:40:16

LokiPromtail日志報(bào)警

2024-02-01 09:48:17

2023-08-31 07:46:54

KubernetesLoki

2023-11-28 18:03:01

SQLUDF

2022-12-29 08:00:26

Loki網(wǎng)絡(luò)設(shè)備

2025-03-31 00:00:00

MCPAPI服務(wù)器通信

2017-10-10 15:52:17

前端FlexboxCSS Grid

2024-12-23 14:12:41

2024-08-28 08:09:13

contextmetrics類(lèi)型

2010-09-07 15:51:25

PPPPPPoE

2024-04-10 12:56:00

C#批量插入開(kāi)發(fā)

2023-02-16 09:52:46

journalctlsystemdLinux

2023-09-05 07:28:02

Java自動(dòng)埋點(diǎn)

2024-12-03 14:38:07

CaffeineRedis二級(jí)緩存
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 日韩精品一区二区三区 | 成人h免费观看视频 | 91久久北条麻妃一区二区三区 | 视频一区在线观看 | 国产高清精品一区二区三区 | 精品国产免费一区二区三区演员表 | 欧美成人在线免费 | 91精品国产美女在线观看 | av大片在线观看 | 一级毛片在线播放 | 日韩国产欧美视频 | 日韩精品一二三 | 国产伊人久久久 | 成年免费在线观看 | a国产一区二区免费入口 | 日日夜夜精品视频 | 成人毛片网站 | 国产精品视频久久久久 | 欧美日韩高清在线观看 | 久久精品小视频 | 丝袜美腿一区 | 成人精品视频99在线观看免费 | 99久久精品免费看国产四区 | 日韩成人久久 | 欧美激情精品久久久久久免费 | 在线2区 | 自拍亚洲 | 欧美无乱码久久久免费午夜一区 | 日韩一级二级片 | 国产精品www | 久久久91精品国产一区二区精品 | 日本不卡免费新一二三区 | 亚洲精品v日韩精品 | 婷婷激情五月网 | 看片国产 | 亚洲一区二区三区在线播放 | 精品国产一区二区三区久久久蜜月 | 久久国产麻豆 | 在线看亚洲| 欧美精品欧美精品系列 | 成人水多啪啪片 |