opentelemetry、grafana、Prometheus、jaeger、victoria-metrics 介绍、关系与使用

news/2024/5/18 10:29:32 标签: grafana, prometheus

Opentelemetry

OTEL 是 OpenTelemetry 的简称, 是 CNCF 的一个可观测性项目,旨在提供可观测性领域的标准化方案,解决观测数据的数据模型、采集、处理、导出等的标准化问题,提供与三方 vendor 无关的服务。
OpenTelemetry 是一组标准和工具的集合,旨在管理观测类数据,如 Traces、Metrics、Logs 等 (未来可能有新的观测类数据类型出现)。目前已经是业内的标准。
在这里插入图片描述

1. 三个基本概念

1.1 Tracing

opentelemetry可以将trace的数据发送到jaeger去
Tracing 提供了从请求开始接收到处理完毕的整个生命周期的全貌。使用span最为跟踪数据,生成信息(元数据)
在这里插入图片描述

obs-opentelemetry 实现了什么:

- 支持在 hertz 服务端和客户端之间启用 http 链路追踪
- 支持通过设置 http header 以启动自动透明地传输对端服务

使用示例

package main

import (
    "github.com/cloudwego/hertz/pkg/app/server"
    hertztracing "github.com/hertz-contrib/obs-opentelemetry/tracing"
)

func main() {
    tracer, cfg := hertztracing.NewServerTracer()
    h := server.Default(tracer)
    h.Use(hertztracing.ServerMiddleware(cfg))
    // ...
    h.Spin()
}

1.2 Metric

简单说,cpu、内存、运行时候的信息,可以==通过Prometheus+导出器搞定 ==(发过去)

度量指标(Metric)包含了各种各样的方法和实现。

Metric 包括了追踪样本以及自动将指标与产生它们的追踪样本联系起来。手动将指标和追踪联系起来往往是一项繁琐且容易出错的任务。OpenTelemetry 自动执行这项任务将为运维人员节省大量的时间。
在这里插入图片描述

  • grafana与Prometheus
    Grafana是一个开源的可视化平台,用于创建、查询和展示时序数据的仪表盘和图表。它支持多种数据源,其中包括Prometheus。Grafana提供了丰富的可视化选项和灵活的仪表盘配置,可以根据需求创建各种类型的监控指标图表。借助Grafana,用户可以通过图表、面板和警报来监视和分析数据,并以直观和易于理解的方式展示。
    因此,Prometheus是一个用于收集和分析时间序列数据的监测系统,而Grafana是一个用于可视化和展示这些数据的工具。两者可以结合使用,使用户能够实时监控系统的性能、状态和指标,并通过仪表盘和图表直观地展示这些数据。

  • obs-opentelemetry 实现了什么:R.E.D (Rate, Errors, Duration) 定义了架构中的每个微服务测量的三个关键指标。OpenTelemetry 可以根据http.server.duration来计算R.E.D。

  • Rate:你的服务每秒钟所提供的请求数。
    例如: QPS(Queries Per Second)每秒查询率

sum(rate(http_server_duration_count{}[5m])) by (service_name, http_method)
  • Error:每秒失败的请求数。

例如:错误率

sum(rate(http_server_duration_count{status_code="Error"}[5m])) by (service_name, http_method) / 
sum(rate(http_server_duration_count{}[5m])) by (service_name, http_method)
  • Duration
    例如:P99 Latency
histogram_quantile(0.99, sum(rate(http_server_duration_bucket{}[5m])) by (le, service_name, http_method))

1.3 Logging

opentelemetry 发送到rockeyMQ等
在 logrus 的基础上适配了 hertz 日志工具
实现了链路追踪自动关联日志的功能

  • 三种常用log:Log:语言内置,logrus,zap
    在这里插入图片描述

2. 实现

2.1 docker-compose 部署依赖 && otel-collector 配置文件

docker-compse

version: "3.7"
services:

#  # Collector
  otel-collector:
    image: otel/opentelemetry-collector-contrib-dev:latest
    command: [ "--config=/etc/otel-collector-config.yaml", "${OTELCOL_ARGS}" ]
    volumes:
      - ./otel-collector-config.yaml:/etc/otel-collector-config.yaml
    ports:
      - "1888:1888"   # pprof extension
      - "8888"   # Prometheus metrics exposed by the collector
      - "8889:8889"   # Prometheus exporter metrics
      - "13133:13133" # health_check extension
      - "4317:4317"   # OTLP gRPC receiver
      - "55679" # zpages extension
    depends_on:
      - jaeger-all-in-one

  # Jaeger
  jaeger-all-in-one:
    image: jaegertracing/all-in-one:latest
    environment:
      - COLLECTOR_OTLP_ENABLED=true
    ports:
      - "16686:16686"
      - "14268"
      - "14250:14250"
      - "6831:6831"
    #  - "4317:4317"   # OTLP gRPC receiver

  # Victoriametrics
  victoriametrics:
    container_name: victoriametrics
    image: victoriametrics/victoria-metrics
    ports:
      - "8428:8428"
      - "8089:8089"
      - "8089:8089/udp"
      - "2003:2003"
      - "2003:2003/udp"
      - "4242:4242"
    command:
      - '--storageDataPath=/storage'
      - '--graphiteListenAddr=:2003'
      - '--opentsdbListenAddr=:4242'
      - '--httpListenAddr=:8428'
      - '--influxListenAddr=:8089'
    restart: always

  # Grafana
  grafana:
    image: grafana/grafana:latest
    environment:
      - GF_AUTH_ANONYMOUS_ENABLED=true
      - GF_AUTH_ANONYMOUS_ORG_ROLE=Admin
      - GF_AUTH_DISABLE_LOGIN_FORM=true
    ports:
      - "3000:3000"

otel-collector-config.yml

receivers:
  otlp:
    protocols:
      grpc:

exporters:
  prometheusremotewrite:
    endpoint: "http://victoriametrics:8428/api/v1/write"

  logging:
  
  otlp:
    endpoint: jaeger-all-in-one:4317
    tls:
      insecure: true


processors:
  batch:

extensions:
  health_check:
  pprof:
    endpoint: :1888
  zpages:
    endpoint: :55679

service:
  extensions: [ pprof, zpages, health_check ]
  pipelines:
    traces:
      receivers: [ otlp ]
      processors: [ batch ]
      exporters: [ logging, otlp ]
    metrics:
      receivers: [ otlp ]
      processors: [ batch ]
      exporters: [ logging, prometheusremotewrite ]

2.2 OTLP(OpenTelemetry Protocol )

OTLP(全称 OpenTelemetry Protocol )是 OpenTelemetry 原生的遥测信号传递协议,虽然在 OpenTelemetry 的项目中组件支持了Zipkin v2或Jaeger Thrift的协议格式的实现,但是都是以第三方贡献库的形式提供的。只有 OTLP 是 OpenTelemetry 官方原生支持的格式。OTLP 的数据模型定义是基于 ProtoBuf 完成的,如果你需要实现一套可以收集 OTLP 遥测数据的后端服务,那就需要了解里面的内容,对应可以参考代码仓库:opentelemetry-proto(https://github.com/open-telemetry/opentelemetry-proto)

otel-collector-config 中指定接收器部分,定义了数据如何被接收。在这里配置了 otlp 接收器,使用 gRPC 协议进行通信。

receivers:
  otlp:
    protocols:
      grpc:

2.3 Opentelemetry-Collector

OpenTelemetry Collector (以下简称“otel-collector”)针对如何接收、处理和导出遥测数据提供了与供应商无关的实现。它消除了运行、操作和维护多个代理/收集器的需要,以支持将开源可观察性数据格式(例如 Jaeger、Prometheus 等)发送到一个或多个开源或商业后端。此外,收集器让最终用户可以控制他们的数据。收集器是默认位置检测库导出其遥测数据。
在这里插入图片描述
在这里插入图片描述
docker中的部署

version: "3.7"
services:

#  # Collector
  otel-collector:
    image: otel/opentelemetry-collector-contrib-dev:latest
    command: [ "--config=/etc/otel-collector-config.yaml", "${OTELCOL_ARGS}" ]
    volumes:
      - ./otel-collector-config.yaml:/etc/otel-collector-config.yaml
    ports:
      - "1888:1888"   # pprof extension
      - "8888"   # Prometheus metrics exposed by the collector
      - "8889:8889"   # Prometheus exporter metrics
      - "13133:13133" # health_check extension
      - "4317:4317"   # OTLP gRPC receiver
      - "55679" # zpages extension
    depends_on:
      - jaeger-all-in-one

2.4 otel-exporter、service

exporters:

  prometheusremotewrite:
    endpoint: "http://victoriametrics:8428/api/v1/write"

  logging:

  otlp:
    endpoint: jaeger-all-in-one:4317
    tls:
      insecure: true
...
service:
  extensions: [ pprof, zpages, health_check ]
  pipelines:
    traces:
      receivers: [ otlp ]
      processors: [ batch ]
      exporters: [ logging, otlp ] # 通过otlp导出给jaeger
    metrics:
      receivers: [ otlp ]
      processors: [ batch ]
      exporters: [ logging, prometheusremotewrite ]
  • exporters:
    导出器部分,定义了数据如何被导出。在这里配置了三个导出器,分别是 prometheusremotewrite 、logging、 通过otlp导出到jaeger。
    prometheusremotewrite 导出器用于将指标数据导出到远程写入的 Prometheus 实例,而 logging 导出器将数据打印到日志中。
    OTLP(OpenTelemetry Protocol)导出器,它将数据导出到指定的 endpoint 中。在这里,endpoint 被配置为 jaeger-all-in-one:4317,即使用 jaeger-all-in-one 全部集成的 Jaeger 实例作为终端节点。此外,还配置了一个 tls 字段,表示该导出器是否启用 TLS/SSL 加密传输。
  • service:
    服务部分,定义了整个服务的配置。在这里配置了使用的扩展以及数据的流程。其中 pipelines 部分定义了多个数据流程,包括 traces 和 metrics。每个数据流程都有对应的接收器、处理器和导出器。

grafanaPrometheusjaegervictoriametrics__249">2.5 opentelemetry、grafana、Prometheus、jaeger、victoria-metrics 之间关系

OpenTelemetry、Grafana、Prometheus、Jaeger和VictoriaMetrics 是在观测性和监控领域中使用的一些工具,它们可以相互配合使用以提供全面的监控和观测能力。

  • OpenTelemetry:OpenTelemetry 是一个开源的观测性框架,用于在分布式系统中收集、处理和导出跟踪数据、指标数据和日志数据。它提供了一组库和工具,使开发人员能够在应用程序中插入代码以生成和导出数据,以便进行分析和监控。

  • Grafana:Grafana 是一个流行的开源数据可视化工具,用于创建、查询和可视化各种数据源中的监控指标、日志和其他数据。Grafana 提供了丰富的可视化选项和仪表板功能,使用户能够根据需要自定义显示和分析数据。

  • Prometheus:Prometheus 是一个开源的系统监控和警报工具,用于收集和存储时间序列数据。它具有内置的数据模型和查询语言,可对指标进行高效的存储和查询。Prometheus 支持各种数据源的数据采集,并和Grafana配合使用,可以创建实时监控仪表板,并进行数据可视化和警报。

  • Jaeger:Jaeger 是一个开源的分布式追踪系统,用于收集、存储和查询分布式应用程序的跟踪数据。它可以帮助开发人员理解应用程序中的服务调用关系和性能瓶颈。Jaeger 与 OpenTelemetry 配合使用,提供了对分布式跟踪数据的收集和展示功能。

  • VictoriaMetrics:VictoriaMetrics 是一个高性能、开源的时间序列数据库和监控系统,在处理大规模时间序列数据时表现出色。它兼容 Prometheus 的数据模型和查询语言,并提供了高度可扩展的存储和查询能力。可以将其作为 Prometheus 的后端存储,用于长期存储和检索时间序列数据。(可以代替Prometheus斜体样式

综上所述,OpenTelemetry 用于收集、处理和导出观测性数据,Prometheus 和 VictoriaMetrics 用于存储和查询时间序列数据,Grafana 用于将数据进行可视化展示,而 Jaeger 则用于收集和展示分布式追踪数据。这些工具可以相互配合使用,以构建全面的监控和观测解决方案。


http://www.niftyadmin.cn/n/5054804.html

相关文章

安装部署AD DS

安装部署AD DS 一、安装AD 重要!!!!!!!安装AD使用windows server操作系统!!! 我刚开始就是使用的widows10操作系统,很多功能都不全&#xff01…

知识图谱01——ubuntu22.04 neo4j安装配置

环境:ubuntu22.04 以上参照自 目录 下载安装包新建conda虚拟环境启动neo4j错误处理 远程配置文件修改可能出现的错误 远程启动python远程访问(下面内容还未尝试,先写) 下载安装包 进入网站https://neo4j.com/deployment-center/#community 由于是ubunt…

react ref获取dom节点

在React中,可以使用ref来获取DOM节点的引用。以下是一些示例代码,说明如何使用ref来获取DOM节点: 使用React.createRef()(React 16.3版本以及更高版本的推荐方法): import React, { Component } from react…

华为云HECS云服务器docker环境下安装nginx

前提:有一台华为云服务器。 华为云HECS云服务器,安装docker环境,查看如下文章。 华为云HECS安装docker-CSDN博客 一、拉取镜像 下载最新版Nginx镜像 (其实此命令就等同于 : docker pull nginx:latest ) docker pull nginx查看镜像 dock…

pyspark常用功能记录

前言 pyspark中很多常用的功能,过段时间没有使用就容易忘记,需要去网上搜索,这里总结一下,省的以后还去去搜,供自己以后参考。 withColumn def hot_func(info_str):if info_str:eturn "1"return "0&…

“构建高效的前端表单验证与增删改功能实现“

目录 引言1. 基础增删改功能代码展示后端代码 2. 表单验证基本表单验证自定义验证规则 总结 引言 在现代Web开发中,前端表单验证和增删改功能是不可或缺的核心要素。本文将介绍如何使用ElementUI库来实现高效的前端表单验证和增删改功能。我们将从基础开始&#xf…

Greenplum 对比 Hadoop

Greenplum属于MPP架构,和Hadoop一样都是为了解决大规模数据的并行计算而出现的技术,两者的相似点在于: 分布式存储,数据分布在多个节点服务器上分布式并行计算框架支持横向扩展来提高整体的计算能力和存储容量都支持X86开放集群架…

【ACL2023】Event Extraction as Question Generation and Answering

论文题目:Event Extraction as Question Generation and Answering 论文来源:ACL2023 论文链接:Event Extraction as Question Generation and Answering - ACL Anthology 代码链接:GitHub - dataminr-ai/Event-Extraction-as-…