最近公司项目介绍的时候看到了类似监控系统的展示页面,比如资源利用、GC次数、Kafka生产消费等,清晰明了,页面十分酷炫。这是怎么实现的呢?? 原来是Grafana!!这么好的东西,竟然现在才看到。 简介:Grafana是一款Go语言开发的开源数据可视化工具,可以做数据监控和数据统计,还提供了很多仪表板,可以实现很多炫酷且实用的可视化指标。 技术点:Springbootactuatormicrometer(收集)、Prometheus(存储聚合)、Grafana(可视化) 个人工作中目前应该不涉及到这方面的开发,所以暂时不做深究,先只是满足下好奇心,简单记录下基本的使用过程,更多细节原理,大家可自行了解。 推荐这篇参考文章:https:www。cnblogs。comthrowablep13257557。html,有关于度量指标框架Micrometer的详细介绍。核心思路 以springboot项目为例,SpringBootActuator提供了很多监控指标,可以通过RestFul的形式访问查看,但原始的为json数据,而非上图展示的页面。并且只是瞬时值,不能提供段时间内数据的的聚合分析等。当然这些也可以自行通过数据持久化,并开发前端页面的方式实现。而通过了解,目前已有这样的轮子,就是Prometheus,内部实现时序数据库,可以将收集到的监控数据存储,并且可以结合Grafana进行数据可视化,目前Prometheus已经成为热门且通用的监控解决方案。 关键组件之Exporter:作用类似转换器,各种被监控的对象可以基于共同的Prometheus提供的规范进行实现,从而让自己都能够接入到Prometheus。详细原理可参考文章https:zhuanlan。zhihu。comp273229856新建springboot项目 添加依赖 添加actuator是支持输出监控信息,micrometerregistryprometheus是能够把actuator监控信息,转化为prometheus能够处理的格式。!添加prometheus和actuator依赖dependencygroupIdio。micrometergroupIdmicrometerregistryprometheusartifactIddependencydependencygroupIdorg。springframework。bootgroupIdspringbootstarteractuatorartifactIddependency修改application。yml配置文件 在配置文件中,配置endpoint暴露Prometheus,并允许将指标metrics导入到Prometheus中。server:port:10010spring:application:应用名,后续会以此展示name:SpringBootMonitor监控相关配置开启监控management:endpoints:web:exposure:include:端点endpoint:prometheus:enabled:truehealth:showdetails:always指标metrics:export:prometheus:enabled:true添加指定的应用名 可以直接通过配置文件引用metrics:tags:application:{spring。application。name} 也可通过启动类,注入packagecom。panda00hi。importio。micrometer。core。instrument。MeterRimportorg。springframework。beans。factory。annotation。Vimportorg。springframework。boot。SpringAimportorg。springframework。boot。actuate。autoconfigure。metrics。MeterRegistryCimportorg。springframework。boot。autoconfigure。SpringBootAimportorg。springframework。context。annotation。BSpringBootApplicationpublicclassSpringBootMonitorApplication{publicstaticvoidmain(String〔〕args){SpringApplication。run(SpringBootMonitorApplication。class,args);}注册应用名,后续监控中展示该应用名paramapplicationName取配置文件中的应用名BeanMeterRegistryCustomizerMeterRegistryconfigure(Value({spring。application。name})StringapplicationName){return(registryregistry。config()。commonTags(application,applicationName));}}启动项目 访问http:localhost:10010actuator,已经可以得到监控信息,并且包含prometheus的可以访问 访问http:localhost:10010actuatorprometheus,也可以得到监控信息(prometheus格式的) 配置Prometheus 利用docker搭建。 参考官方文档:https:prometheus。iodocsprometheuslatestgettingstarted下载镜像dockerpullpromprometheus配置文件 创建本地用于挂载的数据卷目录mydataprometheus,并新建配置文件。 参考官方的配置。最后配置自己的应用配置。global:scrapeinterval:15sBydefault,scrapetargetsevery15seconds。Attachtheselabelstoanytimeseriesoralertswhencommunicatingwithexternalsystems(federation,remotestorage,Alertmanager)。externallabels:monitor:codelabmonitorAscrapeconfigurationcontainingexactlyoneendpointtoscrape:HereitsPrometheusitself。scrapeconfigs:Thejobnameisaddedasalabeljobjobnametoanytimeseriesscrapedfromthisconfig。jobname:prometheusOverridetheglobaldefaultandscrapetargetsfromthisjobevery5seconds。scrapeinterval:5sstaticconfigs:targets:〔localhost:9090〕额外添加的任务配置,每隔五秒钟抓取数据jobname:springbootprometheusscrapeinterval:5smetricspath:actuatorprometheusstaticconfigs:springboot服务运行的服务器地址。我是物理机运行的,填写的是本机地址targets:〔192。168。3。47:10010〕启动容器dockerrundnameprometheusp9090:9090vmydataprometheusprometheus。yml:etcprometheusprometheus。ymldpromprometheus 浏览器访问prometheus默认地址http:172。16。224。100:9090,可以正常访问首页,http:172。16。224。100:9090metrics可以获取到数据。 选择【status】》【targets】,即可看到之前配置文件中配置的springboot信息。 配置Grafana下载镜像dockerpullgrafanagrafana启动容器dockerrundnamegrafanap3000:3000grafanagrafana访问页面 默认端口是3000,默认用户名密码都是admin 172。16。224。100:3000 登陆成功,有那种感觉了,不得不说页面UI颜值真的很高。 添加prometheus数据源 添加数据源,选择prometheus,并配置URL 点击保存按钮,成功会提示 选择合适的仪表盘 官方提供了很多https:grafana。comgrafanadashboards 如,Grafana提供的JVM面板,记住右侧的编码。在自己的Grafana页面导入该编码即可。 导入编码 选择数据源prometheus,导入完成后即可看到效果。