使用自定义 Grafana 面板监控 Consul

2024-09-05 09:48

本文主要是介绍使用自定义 Grafana 面板监控 Consul,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

使用自定义 Grafana 面板监控 Consul

使用 Prometheus和 Grafana监控 Consul,Dashboard 中的基本都是Consul 自身的状态,除此之外,还需要一些业务相关的监控,比如当前注册的服务数量,健康和不健康的服务数量,拉取服务请求响应时间等数据

使用已有的 Dashboard

如使用 consul server 这个面板,这个面板数据非常齐全,但是在 Prometheus 中添加了任务之后,发现很多数据都没有,如集群中 server的数量 consul_serf_lan_members 这个数据,从 Consul 的 Metrics 中 http://localhost:8500/v1/agent/metrics?format=prometheus拉取也没有相关的数据,是因为Consul并没有提供相应的数据检测

针对这种问题,可以使用 consul_exporter 这个项目,该项目会通过 Consul 的API 拉取相应的数据,在整理后通过自己的接口提供相应的统计数据

  • 通过 Docker 启动
docker run --name exporter -d -p 9107:9107 prom/consul-exporter --consul.server=host.docker.internal:8500
  • 检查数据
curl localhost:9107/metrics

会返回相应的监控数据,这样就可以将 Consul中未提供的数据添加到 Prometheus中了

自定义监控数据

如果数据仍然不满足,可以基于consul_exporter 这个项目进行扩展,添加自定义的统计数据;如现在需要统计集群的响应时间,可以通过统计请求consul的耗时来实现:

  1. 添加自定义的统计项

在常量中添加一个新的统计项

    responseTime = prometheus.NewDesc(prometheus.BuildFQName(namespace, "", "response_time"),"Time spend for a request ",[]string{"node", "server_ip"}, nil,)
  1. 实现统计方法
func (e *Exporter) collectResponseTime(ch chan<- prometheus.Metric) bool {start := time.Now().Nanosecond()serverIp, err := e.client.Status().Leader()if err != nil {_ = level.Error(e.logger).Log("msg", "Failed to query leader data", "err", err)return false}costTime := time.Now().Nanosecond() - startch <- prometheus.MustNewConstMetric(responseTime, prometheus.GaugeValue, float64(costTime), "leader", serverIp)return true
}
  1. 将统计项添加到 CollectDescribe
func (e *Exporter) Describe(ch chan<- *prometheus.Desc) {ch <- responseTime
}func (e *Exporter) Collect(ch chan<- prometheus.Metric) {ok = e.collectResponseTime(ch) && ok
}

这样,就会在启动后获取相应的数据,之后在 Prometheus 和 Grafana 中可以看到相应的数据

自定义 Dashboard

自定义的 Dashboard 是通过展示 PromQL 查询的结果来实现的

如在应用中有错误请求的统计,是通过累加错误的请求次数实现的,如统计值 consul_response_time

  • 原始数据:
# HELP consul_response_time Time spend for a request
# TYPE consul_response_time gauge
consul_response_time{node="leader",server_ip="172.19.0.2:8300"} 2.238e+06
  • 现在要统计所有的错误请求次数,可以在 Prometheus 的查询面板中查询:
consul_response_time

grafana-custom-dashboard-cosnul-reponse-time-prometheus.png

这样,就可以得到相应的错误数据,接下来只需要在Grafana中展示就可以

  • 添加看板

添加一个 Dashboard,并添加一个 Panel,在 Panel 的 Metrics 中添加刚才的查询语句

grafana-custom-dashboard-cosnul-reponse-time-grafana.png

执行查询后,会看到有图表生成,变量的名称通过 Legend 字段指定,如这里是 {instance="host.docker.internal:9107", job="consul-exporter", node="leader", server_ip="172.19.0.2:8300"},需要显示IP,即 server_ip 的值,可以设置 Legend 为 {{server_ip}},这样会显示正确的名称

其他的显示单位,显示效果等以及面板的名称可以通过旁边的设置选项进行配置

监控服务信息

可以根据 Consul 和 consul_exporter 对服务状态进行监控,只需要根据不同的数据进行聚合配置就可以实现

  • 节点信息
sum(consul_health_node_status)
  • 健康节点信息
sum(consul_health_node_status{status="passing"})
  • 不健康节点信息
sum(consul_health_node_status{status!="passing"})
  • 服务信息
count(sum(consul_health_service_status) by (service_name))
  • 实例数量
sum(consul_health_service_status)
  • 健康实例数量
sum(consul_health_service_status{status="passing"})
  • 不健康实例数量
sum(consul_health_service_status{status!="passing"})
  • 响应延时
consul_response_time/1000000
  • 服务状态
sum(consul_health_service_status{status!="passing"}) by (service_name)sum(consul_health_service_status) by (service_name)
  • 服务注册信息
sum(consul_health_service_status)sum(consul_health_service_status{status="passing"})sum(consul_health_service_status{status!="passing"})
  • 节点信息
sum(consul_health_node_status)sum(consul_health_node_status{status="passing"})sum(consul_health_node_status{status!~"passing"})

最终效果

grafana-custom-dashboard-cosnul-panel.png

  • 面板的 JSON文件

根据 Dashboard 的JSON配置文件 导入即可快速使用这个 Dashboard

这篇关于使用自定义 Grafana 面板监控 Consul的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1138619

相关文章

Prometheus+cpolar如何在手机上也能监控服务器状态?

《Prometheus+cpolar如何在手机上也能监控服务器状态?》本文强调了通过Cpolar这一内网穿透工具,轻松突破Prometheus仅限于局域网访问的限制,实现外网随时随地访问监控数据,教你... 目录前言1.安装prometheus2.安装cpolar实现随时随地开发3.配置公网地址4.保留固定

Python数据验证神器Pydantic库的使用和实践中的避坑指南

《Python数据验证神器Pydantic库的使用和实践中的避坑指南》Pydantic是一个用于数据验证和设置的库,可以显著简化API接口开发,文章通过一个实际案例,展示了Pydantic如何在生产环... 目录1️⃣ 崩溃时刻:当你的API接口又双叒崩了!2️⃣ 神兵天降:3行代码解决验证难题3️⃣ 深度

Linux内核定时器使用及说明

《Linux内核定时器使用及说明》文章详细介绍了Linux内核定时器的特性、核心数据结构、时间相关转换函数以及操作API,通过示例展示了如何编写和使用定时器,包括按键消抖的应用... 目录1.linux内核定时器特征2.Linux内核定时器核心数据结构3.Linux内核时间相关转换函数4.Linux内核定时

python中的flask_sqlalchemy的使用及示例详解

《python中的flask_sqlalchemy的使用及示例详解》文章主要介绍了在使用SQLAlchemy创建模型实例时,通过元类动态创建实例的方式,并说明了如何在实例化时执行__init__方法,... 目录@orm.reconstructorSQLAlchemy的回滚关联其他模型数据库基本操作将数据添

Spring配置扩展之JavaConfig的使用小结

《Spring配置扩展之JavaConfig的使用小结》JavaConfig是Spring框架中基于纯Java代码的配置方式,用于替代传统的XML配置,通过注解(如@Bean)定义Spring容器的组... 目录JavaConfig 的概念什么是JavaConfig?为什么使用 JavaConfig?Jav

Java使用Spire.Doc for Java实现Word自动化插入图片

《Java使用Spire.DocforJava实现Word自动化插入图片》在日常工作中,Word文档是不可或缺的工具,而图片作为信息传达的重要载体,其在文档中的插入与布局显得尤为关键,下面我们就来... 目录1. Spire.Doc for Java库介绍与安装2. 使用特定的环绕方式插入图片3. 在指定位

Springboot3 ResponseEntity 完全使用案例

《Springboot3ResponseEntity完全使用案例》ResponseEntity是SpringBoot中控制HTTP响应的核心工具——它能让你精准定义响应状态码、响应头、响应体,相比... 目录Spring Boot 3 ResponseEntity 完全使用教程前置准备1. 项目基础依赖(M

Java使用Spire.Barcode for Java实现条形码生成与识别

《Java使用Spire.BarcodeforJava实现条形码生成与识别》在现代商业和技术领域,条形码无处不在,本教程将引导您深入了解如何在您的Java项目中利用Spire.Barcodefor... 目录1. Spire.Barcode for Java 简介与环境配置2. 使用 Spire.Barco

Android使用java实现网络连通性检查详解

《Android使用java实现网络连通性检查详解》这篇文章主要为大家详细介绍了Android使用java实现网络连通性检查的相关知识,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录NetCheck.Java(可直接拷贝)使用示例(Activity/Fragment 内)权限要求

C# 预处理指令(# 指令)的具体使用

《C#预处理指令(#指令)的具体使用》本文主要介绍了C#预处理指令(#指令)的具体使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学... 目录1、预处理指令的本质2、条件编译指令2.1 #define 和 #undef2.2 #if, #el