引言:
项目最近要监控流量之类的东西,考虑到流量的快速监控,实现的复杂程度以及和k8s结合的程度,比较之下,选择了springboot+prometheus+grafana这一套监控方案,通过prometheus拉取数据,可自定义需要展示数据,再通过监控界面granfana实现各种图表数据的展示。
一.prometheus
1.简介
Prometheus(下称Prom)是一个基于 Metrics 的监控系统,与Kubernetes 同属CNCF(Cloud Native Computing Foundation),它提供了通用的数据模型和便捷的数据采集、存储和查询接口,同时基于Go 实现也大大降低了服务端的运维成本,可以借助一些优秀的图形化工具(如 Grafana)可以实现友好的图形化和报警。
Prometheus由Go语言编写而成,采用Pull方式获取监控信息,并提供了多维度的数据模型和灵活的查询接口。Prometheus不仅可以通过静态文件配置监控对象,还支持自动发现机制,能通过Kubernetes、Consl、DNS等多种方式动态获取监控对象。在数据采集方面,借助Go语音的高并发特性,单机Prometheus可以采取数百个节点的监控数据;在数据存储方面,随着本地时序数据库的不断优化,单机Prometheus每秒可以采集一千万个指标,如果需要存储大量的历史监控数据,则还支持远程存储。
2.原理浅析
Prometheus的基本原理是通过HTTP周期性抓取被监控组件的状态,任意组件只要提供对应的HTTP接口并符合Prometheus定义的数据格式,就可以介入Prometheus监控
Prometheus Server负载定时在目标上抓取metrics(指标)数据,每个抓取目标都需要暴露一个HTTP服务接口用于Prometheus定时抓取。
3.特点
Prometheus 相比于其他传统监控工具主要由以下几个特点:
1.具有由metric名称和键值对标示的时间序列数据的多位数据模型
2.有一个灵活的查询语言promQL
3.不依赖分布式存储,只和本地磁盘有关
4.通过HTTP的服务拉取时间序列数据
5.也支持推送的方式来添加时间序列数据
6.支持通过服务发现和静态配置发现目标
7.多种图形和仪表盘支持
4.组件
Prometheus由多个组件组成,但是其中许多组件是可选的;
1.Prometheus Server 用于抓取指标、存储时间序列数据
2.exporter 暴露指标让任务抓取
3.Pushgateway push的方式将指标数据推送到网关
4.alertmanager 处理报警的报警组件
5.adhoc 用于数据查询
二.grafana
1.简介
Grafana是一个跨平台的开源的度量分析和可视化工具,可以通过将采集的数据查询然后可视化的展示,并及时通知。
2.特点
1.展示方式:快速灵活的客户端图表,面板插件有许多不同方式的可视化指标和日志,官方库中具有丰富的仪表盘插件,比如热图、折线图、图表等多种展示方式;
2.数据源:Graphite,InfluxDB,OpenTSDB,Prometheus,Elasticsearch,CloudWatch和KairosDB等;
3.通知提醒:以可视方式定义最重要指标的警报规则,Grafana将不断计算并发送通知,在数据达到阈值时通过Slack、PagerDuty等获得通知;
4.混合展示:在同一图表中混合使用不同的数据源,可以基于每个查询指定数据源,甚至自定义数据源;
5.注释:使用来自不同数据源的丰富事件注释图表,将鼠标悬停在事件上会显示完整的事件元数据和标记;
6.过滤器:Ad-hoc过滤器允许动态创建新的键/值过滤器,这些过滤器会自动应用于使用该数据源的所有查询