Prometheus介绍
一、 Prometheus简介
prometheus
是一个开源的系统监控和报警系统。现已经加入到CNCF(Cloud Native Computing Foundation)云原生计算基金会。成为继K8s之后第二个在CNCF托管的项目。在Kubernetes容器管理系统中,通常会搭配Prometheus进行监控,同时也支持多种exporter
采集数据,还支持pushgateway
进行数据上报,Prometheus性能足够支撑上万台规模的集群。
二、Prometheus特点
2.1 Prometheus特点
-
多维度数据模型。
每一个时间序列数据都有
metric
度量指标名称和它的标签labels
键值对集合唯一确定:这个metric度量指标名称指定监控目标系统的测量特征。(如:http_requests_total
- 接收http请求的总计数)。labels开启了Prometheus的多维数据模型:对于相同的度量名称,通过不同标签列表的结合, 会形成特定的度量维度实例。(例如:所有包含度量名称为/api/tracks的http请求,打上method=POST的标签,则形成了具体的http请求)。这个查询语言在这些度量和标签列表的基础上进行过滤和聚合。改变任何度量上的任何标签值,则会形成新的时间序列图) -
灵活的查询语言(
PromQL
):可以对采集的metrics指标进行加法、乘法。连接等操作; -
可以直接在本地部署,不依赖其他分布式存储;
-
可以基于HTTP的
pull
方式采集时序数据; -
可以通过中间网关
pushgateway
的方式把时间序列数据推送到prometheus server端。 -
可以通过服务发现或者静态配置来发现目标服务对象。(如对接cursor)。
-
有多种可视化图形界面,比如Grafana等。
-
高效的数据存储。没个采样数据占3.5bytes左右,300w的时间序列,30s间隔,保留60天,消耗磁盘大约200G
-
高可用。可以对数据做异地备份,联邦集群。部署多套Prometheus、pushgateway上报数据。
2.2 什么是样本
样本 :在时间序列中的每一个点称为一个样本(sample)。一个样本由以下三部分组成
- 指标 (`metric`):指标名称和描述当前样本特征的label sets。
- 时间戳(`timestamp`):一个精确到毫秒的时间戳。
- 样本值(`value`): 一个float64的浮点型数据表示当前样本的值。
表示方式:通过如下表达式方式表示指定 指标名称
和指定标签集合
的时间序列:
三、Prometheus架构图
- Prometheys Server: Prometheus组件中的核心部分,负责实现对监控数据的获取,存储以及查询。
- Exporters:prometheus支持多种exporter,通过exporter可以采集metrics数据,然后发送到prometheus server端,所有想prometheus server提供监控数据的程序都可以成为exporter。
- AlertManager:从Prometheus server接瘦到alerts后,会进行去重,分组,并路由相应的接收方。发出报警。常见的接收方式有:电子邮件,微信,钉钉,短信通知等。
- Grafana:监控仪表盘,可视化监控数据。
- PushGateway:各个目标主机可上报数据到pushGateway, 然后Prometheus Server统一从PushGateway拉取数据。
从架构图中可以看到。Prometheus整个生态圈组成主要包括Prometheus Server、exporter、pushgateway、alertManager、Grafana、Web UI界面。Prometheus Server由三个部分组成,Retrieval
、Storage
、PromQL
。
- Retrieval:负责在活跃的target目标主机上抓取监控指标数据。
- Storage:主要是把采集到的数据存储到磁盘中。
- PromQL:是Prometheus提供的查询语言模块。
四、Prometheus 工作流程
- Prometheus Server可以定期从活跃状态(up目标主机上(target)拉取监控指标数据。目标主机的监控数据可以通过配置静态job或者服务发现的方式被prometheus server采集到,这种方式默认的pull方式拉取指标数据,也可以通过pushgateway把采集到的数据汇报到prometheus server中。还可以通过一些组件自带的exporter采集响应组件的数据。如Node_exporter、Nginx_exporter。
- Prometheus server把采集到的监控指标数据保存到本地磁盘或时序数据库。
- Prometheus采集的监控指标数据按时间序列存储,通过配置报警规则,将触发的报警发送到alert Manager
- Alert Manager通过配置报警接收方,发送报警到邮件、短信、钉钉或者企业微信。
- Prometheus自带的Web UI界面提供PromQL查询语言,可查询监控数据。
- Grafana可接入Prometheus数据源,把监控到的数据以可视化大屏方式展示。
五、Prometheus和Zabbix对比
Zabbix | Prometheus | |
---|---|---|
定制化 | 后端采用C开发,界面采用PHP开发,定制化难度很高。 | 后端用GoLang开发,界面主推Grafana(JSON编辑即可解决)。定制化难度较低。 |
集群规模 | 集群规模上线为10000个节点。 | 支持更大的集群规模。 |
云原生组件支持 | 监控数据存储在关系型数据库如MySQL中。很难从现有数据中扩展维度。 | 监控数据存储在基于时间序列的数据库内,便于对已有数据进行新的聚合。 |
安装难易 | 安装简单,Zabbix-server一个软件中包含了所有的服务端功能。 | 安装相对复杂,监控、告警和界面都分属于不同的组件。 |
图形化支持 | 图形化界面比较成熟,界面上基本能够完成全部的配置操作 | 界面相对较弱,很多配置需要修改配置文件。 |
成熟度 | 发展时间更长,对于很多监控场景,都有线程的解决方案。 | 2015年后开始迅速发展,但发展时间短,成熟度不及Zabbix |
六、Prometheus部署模式
6.1 基本高可用模式
该模式只能确保Prometheus服务的可用性问题,不能解决Prometheus Server之间的数据一致性问题以及数据持久化问题(数据丢失后无法回复),也无法进行动态扩展。因此这种模式适合监控规模不大,Prometheus Server也不会频繁发生迁移的情况,并且只需要保存短周期内监控数据的场景。
6.2 基本高可用+远程存储
解决了Prometheus服务可用性的基础上,提供了数据持久化存储方案。当Prometheus Server发生宕机后,可以迅速的恢复。同时Prometheus Server可以进行迁移。因此,该方案适用于用户监控规模不大,但是希望能够监控数据持久化,同时能确保Prometheus Server可迁移性的场景。
6.4 基本高可用+远程存储+联邦集群解决方案
Prometheus的性能瓶颈主要在于大量的采集任务,因此用户需要利用prometheus联邦集群的特性,将不同类型的采集任务划分到不同的Prometheus子服务中,从而实现功能分区。
七、Prometheus能监控哪些数据
# Databases---数据库
Aerospike exporter
ClickHouse exporter
Consul exporter (official)
Couchbase exporter
CouchDB exporter
ElasticSearch exporter
EventStore exporter
Memcached exporter (official)
MongoDB exporter
MSSQL server exporter
MySQL server exporter (official)
OpenTSDB Exporter
Oracle DB Exporter
PgBouncer exporter
PostgreSQL exporter
ProxySQL exporter
RavenDB exporter
Redis exporter
RethinkDB exporter
SQL exporter
Tarantool metric library
Twemproxy
# Hardware related---硬件相关
apcupsd exporter
Collins exporter
IBM Z HMC exporter
IoT Edison exporter
IPMI exporter
knxd exporter
Netgear Cable Modem Exporter
Node/system metrics exporter (official)
NVIDIA GPU exporter
ProSAFE exporter
Ubiquiti UniFi exporter
# Messaging systems---消息服务
Beanstalkd exporter
Gearman exporter
Kafka exporter
NATS exporter
NSQ exporter
Mirth Connect exporter
MQTT blackbox exporter
RabbitMQ exporter
RabbitMQ Management Plugin exporter
# Storage---存储
Ceph exporter
Ceph RADOSGW exporter
Gluster exporter
Hadoop HDFS FSImage exporter
Lustre exporter
ScaleIO exporter
# HTTP---网站服务
Apache exporter
HAProxy exporter (official)
Nginx metric library
Nginx VTS exporter
Passenger exporter
Squid exporter
Tinyproxy exporter
Varnish exporter
WebDriver exporter
# APIs
AWS ECS exporter
AWS Health exporter
AWS SQS exporter
Cloudflare exporter
DigitalOcean exporter
Docker Cloud exporter
Docker Hub exporter
GitHub exporter
InstaClustr exporter
Mozilla Observatory exporter
OpenWeatherMap exporter
Pagespeed exporter
Rancher exporter
Speedtest exporter
# Logging---日志
Fluentd exporter
Google's mtail log data extractor
Grok exporter
# Other monitoring systems
Akamai Cloudmonitor exporter
Alibaba Cloudmonitor exporter
AWS CloudWatch exporter (official)
Cloud Foundry Firehose exporter
Collectd exporter (official)
Google Stackdriver exporter
Graphite exporter (official)
Heka dashboard exporter
Heka exporter
InfluxDB exporter (official)
JavaMelody exporter
JMX exporter (official)
Munin exporter
Nagios / Naemon exporter
New Relic exporter
NRPE exporter
Osquery exporter
OTC CloudEye exporter
Pingdom exporter
scollector exporter
Sensu exporter
SNMP exporter (official)
StatsD exporter (official)
# Miscellaneous---其他
ACT Fibernet Exporter
Bamboo exporter
BIG-IP exporter
BIND exporter
Bitbucket exporter
Blackbox exporter (official)
BOSH exporter
cAdvisor
Cachet exporter
ccache exporter
Confluence exporter
Dovecot exporter
eBPF exporter
Ethereum Client exporter
Jenkins exporter
JIRA exporter
Kannel exporter
Kemp LoadBalancer exporter
Kibana Exporter
Meteor JS web framework exporter
Minecraft exporter module
PHP-FPM exporter
PowerDNS exporter
Presto exporter
Process exporter
rTorrent exporter
SABnzbd exporter
Script exporter
Shield exporter
SMTP/Maildir MDA blackbox prober
SoftEther exporter
Transmission exporter
Unbound exporter
Xen exporter
# Software exposing Prometheus metrics---Prometheus度量指标
App Connect Enterprise
Ballerina
Ceph
Collectd
Concourse
CRG Roller Derby Scoreboard (direct)
Docker Daemon
Doorman (direct)
Etcd (direct)
Flink
FreeBSD Kernel
Grafana
JavaMelody
Kubernetes (direct)
Linkerd