使用自定义 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

相关文章

java图像识别工具类(ImageRecognitionUtils)使用实例详解

《java图像识别工具类(ImageRecognitionUtils)使用实例详解》:本文主要介绍如何在Java中使用OpenCV进行图像识别,包括图像加载、预处理、分类、人脸检测和特征提取等步骤... 目录前言1. 图像识别的背景与作用2. 设计目标3. 项目依赖4. 设计与实现 ImageRecogni

python管理工具之conda安装部署及使用详解

《python管理工具之conda安装部署及使用详解》这篇文章详细介绍了如何安装和使用conda来管理Python环境,它涵盖了从安装部署、镜像源配置到具体的conda使用方法,包括创建、激活、安装包... 目录pytpshheraerUhon管理工具:conda部署+使用一、安装部署1、 下载2、 安装3

Mysql虚拟列的使用场景

《Mysql虚拟列的使用场景》MySQL虚拟列是一种在查询时动态生成的特殊列,它不占用存储空间,可以提高查询效率和数据处理便利性,本文给大家介绍Mysql虚拟列的相关知识,感兴趣的朋友一起看看吧... 目录1. 介绍mysql虚拟列1.1 定义和作用1.2 虚拟列与普通列的区别2. MySQL虚拟列的类型2

使用MongoDB进行数据存储的操作流程

《使用MongoDB进行数据存储的操作流程》在现代应用开发中,数据存储是一个至关重要的部分,随着数据量的增大和复杂性的增加,传统的关系型数据库有时难以应对高并发和大数据量的处理需求,MongoDB作为... 目录什么是MongoDB?MongoDB的优势使用MongoDB进行数据存储1. 安装MongoDB

关于@MapperScan和@ComponentScan的使用问题

《关于@MapperScan和@ComponentScan的使用问题》文章介绍了在使用`@MapperScan`和`@ComponentScan`时可能会遇到的包扫描冲突问题,并提供了解决方法,同时,... 目录@MapperScan和@ComponentScan的使用问题报错如下原因解决办法课外拓展总结@

mysql数据库分区的使用

《mysql数据库分区的使用》MySQL分区技术通过将大表分割成多个较小片段,提高查询性能、管理效率和数据存储效率,本文就来介绍一下mysql数据库分区的使用,感兴趣的可以了解一下... 目录【一】分区的基本概念【1】物理存储与逻辑分割【2】查询性能提升【3】数据管理与维护【4】扩展性与并行处理【二】分区的

使用Python实现在Word中添加或删除超链接

《使用Python实现在Word中添加或删除超链接》在Word文档中,超链接是一种将文本或图像连接到其他文档、网页或同一文档中不同部分的功能,本文将为大家介绍一下Python如何实现在Word中添加或... 在Word文档中,超链接是一种将文本或图像连接到其他文档、网页或同一文档中不同部分的功能。通过添加超

Linux使用fdisk进行磁盘的相关操作

《Linux使用fdisk进行磁盘的相关操作》fdisk命令是Linux中用于管理磁盘分区的强大文本实用程序,这篇文章主要为大家详细介绍了如何使用fdisk进行磁盘的相关操作,需要的可以了解下... 目录简介基本语法示例用法列出所有分区查看指定磁盘的区分管理指定的磁盘进入交互式模式创建一个新的分区删除一个存

C#使用HttpClient进行Post请求出现超时问题的解决及优化

《C#使用HttpClient进行Post请求出现超时问题的解决及优化》最近我的控制台程序发现有时候总是出现请求超时等问题,通常好几分钟最多只有3-4个请求,在使用apipost发现并发10个5分钟也... 目录优化结论单例HttpClient连接池耗尽和并发并发异步最终优化后优化结论我直接上优化结论吧,

SpringBoot使用Apache Tika检测敏感信息

《SpringBoot使用ApacheTika检测敏感信息》ApacheTika是一个功能强大的内容分析工具,它能够从多种文件格式中提取文本、元数据以及其他结构化信息,下面我们来看看如何使用Ap... 目录Tika 主要特性1. 多格式支持2. 自动文件类型检测3. 文本和元数据提取4. 支持 OCR(光学