grafana
grafana是一款采用go语言编写的开源应用,主要是用于大规模指标数据的可视化展现,是网络架构和应用分析中最流行的时序数据展示工具,目前已经支持绝大部分常用的时序数据库,如Elasticsearch, promethues, mysql和openTSDB等。
基本概念:
- Dashboard: 仪表盘,以各种图形的方式展示从datasource拿到的数据
- Row: 行, Dashboard的基本组成单元,展示一种信息或多种信息的组合
- Panel: 面板,row展示信息的方式,支持表格、列表、热图等多种方式
- Query Editor: 查询编辑器,用于获取指定数据
- organization: 组织,通过不同组织的设置以达到多租户、多配置的目的
prometheus
prometheus 是一套开源的监控&报警&时间序列数据库的组合。其原理是通过http协议周期性抓取被监控组件的状态,这样的好处是任意组件只要提供http接口就可以接入监控系统,不需要任何SDK或者其他的集成过程。
- prometheus server: 以多进程、多线程的方式用于收集和存储时间序列数据,整体属于c/s模型运行模式
- client library: 客户端库,为需要监控的服务生成相应的metrics并暴露给prometheus server
- push gateway: 主要用于短期的jobs。此类jobs可直接向prometheus server端推送它们的metrics。这种方式主要用于服务层面的metrics,对于机器层面的metries,需要使用node exporter
- exporters: 客户端(被监控机器)上安装的组件,相当于agent, 以守护进程的模式运行采集数据并暴露已有的第三方服务的metrics给prometheus。其本身是一个http_server可以对http请求作出响应,返回数据
- alertmanager: 从prometheus server端接收到alerts后,会进行去除重复数据、分组,并路由到对收的接受方式发出告警。
工作流程:
- prometheus server定期从配置好的jobs或者exporter中拉取metrics,或者接收来自pushgateway发过来的metrics,或者从其他的prometheus server中拉取metrics
- prometheus server在本地存储收集到的metrics,并运行已定义好的alert.rules,记录新的时间序列或者向alertmanager推送警报
- alertmanager 根据配置文件,对接收到的警报进行处理,发出告警
- 在图形界面中,可视化采集数据
概念
数据模型:
prometheus将时间序列数据存储在本地磁盘上, 是由metric的名字和一系列的label标签(键值对)唯一标识的,不同的标签代表不同的时间序列
四种metric类型:
counter: 一种累加的metric
gauge: 一种常规的metric
histogram: 对观察结果采样、分组及统计
summary: 提供观测值的count和sum功能