prometheus是采用TSDB(时序存储)来存储数据的
prometheus本身是个时序存储系统,这个系统带了数据抓取器,所以也类似是个数据库,在db-engines.com 数据库网站中也是有排名的,带有存储引擎
关系型数据库每次写入都有很大的性能消耗
zabbix就是采用关系型数据库存储数据的,当量上来的时候就会产生性能瓶颈
单个指标的参考价值不会特别大,需要将单个指标聚合起来,作统一分析
监控系统:周期性采集
监控系统一是怎么采集数据、采集哪些数据;二是采集到数据后,数据如何存储;三是把存储中的数据展示出来;四把异常的数据指标通知业务处理人员
采集:采集器、被监控端:监控代理、应用程序自带仪表盘;黑盒监控;SNMP(监控网络设备)
存储:SQL、NoSQL(k/v、document(文档存储)、colum(列式存储)、TSDB(时序存储))
额外:分析数据:DataOps、AIOps (根据采集过来的数据做聚合分析,大数据、人工智能那一套,超出监控范围了)
展示:grafana 支持多种数据源
报警(Alert):告警通知,媒介:Email、短信、Wechat、Dingtalk、Slack
db-engines.com/en/ranking 网站对各种数据库的采用指标做了排名
国外一本书:《监控的艺术》
常见的开源监控系统实现:
Cacti(监控网络设备居多)、Nagios(告警能力强大)、zabbix
Prometheus(有很好的服务发现能力,能动态纳入各个监控的对象,无需手动配置)CNCF项目
OpenFalcon 小米的,但是创始人已经跳槽到滴滴了,维护不力
夜莺,也是国产
CAT,美团点评的
Prometheus架构:
short-lived jobs:短期监控任务
Pushgateway:接收prometheus server不能直接拉取到的监控数据
service discovery:服务发现
Prometheus server:Retrieval、TSDB、HTTP server
Alertmanager:告警管理器
Prometheus web UI:告警展示
prometheus创始人是Goole前员工,后来到SoundCloud去了,模仿Borg的监控系统Borgmon开发的,k8S就是基于Borg二次开发的
2012年就开发研发了,2015年发布,2016.5 年加入CNCF
时间序列数据统称为metric,并且有独创的指标格式,Prometheus格式,程序在版本迭代时都内置一个仪表盘
一个程序要想被监控,一般有黑盒、白盒两种方式,白盒是指程序内建的指标,能够被采集的时候就直接暴露给监控系统使用,这种就是内建的仪表盘,或者内建的测量系统,现在很多程序在内建的仪表盘中的格式都是prometheus格式或者prometheus兼容的格式的
Metric支持多维度标签,每个独立的标签组合都代表一个独立的时间序列(时间序列就是样本数据采集下来的结果),也会称为时序数据
数据模型非常随意,不像mysql那样要定义好表、库之类的
在对应的指标上添加一个标签就会生成一个时序数据
内建时序数据的聚合、切割、切片功能
支持双精度浮点型数据;prometheus所存的数据都是双精度浮点型数据,所以是不能存文本的,就是不能支持存储log日志,zabbix可以存日志,es也是可以的
TSDB:时序存储
自带数据抓取器,抓取过来后存储到内建的时序数据库中
自带采集器,这个采集器有很灵活很高效的可配置能力,就是能对目标监控进行多维度的配置
时序存储是为了监控而设置的
默认存储保存的时间是有限的,默认一个月
可以对接远程存储系统
prometheus 完整名称应该是prometheus server,只是内置了数据抓取器、数据存储器的监控服务端,还需要其他组件
监控系统的数据采集模型:
Pull:拉数据,由监控系统主动联系被监控端,把数据拿过来 (你产生数据了,我过来拿)
Push:推数据,被监控端主动联系监控系统,把数据推给监控端(我产生数据了,推送给你)
两种方式各有优劣
zabbix支持两个agent,其实就是pull 和 push
prometheus架构组件:
prometheus server:监控服务端
Retrieval:内置的数据采集器,是基于http来实现的,即每一个被抓取的指标就得是http协议的,https的话就要配置证书,
TSDB:内置的数据存储,时序存储,这个存储只是短暂的,需要长期存储还得对接远程存储,或者存储到磁盘上 HDD/SSD
PromQL:内置数据处理语言
HTTP server:服务端
pushgateway:推送网关,有些短期任务或者批处理作业不能被prometheus server直接拉取数据,就会把数据先推送到pushgateway上,prometheus server再到pushgateway拉取数据
Alertmanager:监控管理器
prometheus web ui:自带的数据展示web,但是不够清晰,外接入grafana
service discovery:服务发现机制,
prometheus server 监控数据采集是基于pull模式的,就是是主动拉数据的,所以对server 端压力较大
但也有一些是拉不到的,比如批处理作业,这时候就得需要别的组件协助了,叫作Pushgateway,推送网关,批处理作业先把数据推送到pushgateway上,然后prometheus server再到pushgateway上拉取
prometheus server内置的TSDB存储数据只是短期的,需要长期存储的话需要对接远程存储系统,比如influencedb数据库
prometheus server 还内置有自己独特的查询语言 PromQL,告警也是建立在这个QL实现的
通过PromQL查询出现的数据展示出来,就这样一个web ui,用得上grafana
prometheus server自己通过PromQL清楚一些数据异常,判断告警,但不能实现告警,这就还需要一个告警管理器,Alertmanager
应用程序内置的仪表盘,就是内建了测量系统
简单理解就是程序本身就
export:指标暴露器,监控插件
单向认证,要配置对方的ca
双向认证,要配置客户端证书
基于HTTP call,从配置文件中指定的网络端点(endpoint)上周期性获取指标数据
网络端点即 ip:port/metrics
linux内核没有自带的web服务器,prometheus抓取不来内核数据
被抓取数据端得暴露http才行
prometheus支持通过三种类型的途径从目标上“抓取(Scrape)”指标数据:(即让被抓取端暴露http或者支持prometheus)
exporters:监控插件
instrumentation:应用程序内建的测量系统
pushgateway:推送网关
无论哪种方式,prometheus server端一定是pull metrics的
prometheus server —-> pull metrics —-> exporters
prometheus server —-> pull metrics —-> instrumentation
prometheus server —-> pull metrics —-> pushgateway <—- push metrics <—- batch jobs
微服务下不部分的服务都是通过http或者https工作的,就比较符合了
内存空间使用率
指标类型 metric types
prometheus使用4种方法来描述监视的指标
counter:计数器
gauge:仪表盘
histogram:直方图,支持分位数统计
summary:摘要,支持分位数统计
作业 实例 targe
promQL Prometheus Query Language
key由指标名称和id组成
PromQL支持两种向量 (向量就是带方向和大小的)
即时向量:最近一次的时间戳上跟踪的数据指标 (即时—实时—最近一次时间)
时间范围向量:指定时间范围内的所有时间戳上的数据指标
Alerts
抓取到异常值后,Prometheus支持通过“告警(Alert)”机制向用户发送反馈或告警,以触发用户能够即时采取应对措施
官方下载:prometheus.io/download
可以单独二进制安装
也可以通过yaml部署到k8s中
下载解压缩后查看目录内容
prometheus 服务端目录
promtool 客户端工具
consoles 控制台
consoles_libraries 控制台库
直接启动:./prometheus
查看启动端口:ss -tln
服务端口:9090
ip:9090 就是内置的web ui
每个数据时序都有两个标签,instance 表示监控端点,job表示监控作业
配置文件
全局的
数据采集时间间隔,默认1分钟采集一次
scrape configs:抓取配置项
定义targets有两种方式
一是静态指定,static_configs,就直接配置targets
二是动态发现,
安装node-exporter
./node-exporter —help
启动:./node-exporter
访问ip:9100/metrics
prometheus指标抓取的生命周期
服务发现—配置—重新标记relabel_configs—指标数据抓取—重新标记mertic_relabel_configs
prometheus可集成的服务发现机制
基于文件的服务发现:仅仅略优于静态配置的服务发现方式,它依赖于任务
基于DNS的服务发现
基于API的服务发现:kubernetes、consul、Azure
运维人员一定要把CMDB弄起来,即使只有几台服务器,有了CMDB,才能更好的进行项目、权限及各种配置管理
grafana 端口 3000
prometheus 端口 9000