Prometheus简介
prometheus是一个监控、告警的开源系统。Prometheus收集并存储时序的指标数据。指标数据存储伴随一个timestamp和可选择key-values 队列标签
Prometheus特性:
一个时序的多维数据模型,被mertic name和 key/value pairs标签唯一定义
PromQL语言:利用维度的灵活查询语言
不依赖分布式存储;单个服务器节点是自治的
通过http协议pull模式进行时序采集
push时序数据通过中间的gateway支持
targets被发现通过服务发现或者静态配置
多种模式的绘图和仪表板支持
术语:
metrics:
metrics是数字测量,在prometheus中metric由name, labels(key/value pairs)和 数字测量组成。
metrics分为一下几种:
metrics命名方式:
Prometheus 最重要的规范就是指标命名方式,数据格式简单易读,统一的标签集表达方式是最通用、最灵活的。
虽然标签集很灵活,但是在实际落地时,我强烈建议你在公司推行一个标签定义规范,标签 Key 不能随便起名,该有的标签也不能缺失。既减少了理解成本,也保证了数据的规整完备,便于后续做数据分析。比如,对于应用层面的监控,可以要求必须具备这几个信息。
指标名称 metric
Prometheus 内置建立的规范就是叫 metric(即 __name__)。如果是 Counter 类型,单调递增的值,指标名称以 _total 结尾。
服务名称 service
服务名称 service 要全局唯一,比如 n9e-webapi,p8s-alertmanager,一般是系统名称加上模块名称,组成最终的服务名称。如果公司比较大,就需要一个全局的服务目录做参考,否则不同的团队可能会起相同的名称,我们可以考虑使用 Git 里的 GroupName + RepoName。系统名称最好也单独做成一个标签,比如 system=n9e system=p8s。
实例名称 instance
一个服务一般会部署多个实例,可以直接使用机器名或 Pod 名作为 instance 名称。如果在物理机部署,有实例混部的情况,就要把端口加上,比如实例一是 10.1.2.3:3306,实例二是 10.1.2.3:3307。
服务类型 job
比如所有的 MySQL 的监控数据,都统一打上 job=mysql 的标签,Redis 的监控数据,就打上 job=redis 的标签。如果是自研的模块,也可以使用 webserver backend frontend 这种分类方式。
地域可用区 zone
把地域信息放到标签里,有个巨大的好处,比如某个 zone 出问题了,就比较容易看出来,带有某个特定的 zone 的指标数据异常,快速执行切流止损即可。有了 zone 的信息,region 就可有可无了,zone 的前缀一般就是 region。
集群名称 cluster
有的时候一个可用区会部署多个集群,特别是一些中间件,比如 ElasticSearch,给每个重要的业务单独部署一个集群,一个大公司可能有几百套 ElasticSearch 集群,几千套 ZooKeeper 集群。
环境类型 env
环境类型 env 用来标识是生产环境还是测试环境。当然了,如果监控系统不复用(推荐这么做),生产用生产的监控系统,测试用测试的监控系统,就无需这个标签了
labels:
区别metric的一系列key-value
targets:
需要监控的实例,一个http端口
类型 | 说明 |
---|---|
gauge | 用于跟踪当前的计数或可以自然上升或下降的事物,例如内存使用情况、队列长度、正在进行的请求数或当前 CPU 使用情况。 |
counter | 用于跟踪多个事件或数量的累积总数,例如 HTTP 请求的总数或处理请求所花费的总秒数。重新启动时,计数器的值会重置为0。 |
histogram | 用于跟踪一组观察值(如请求延迟)在一组存储桶中的分布。它还跟踪观察值的总数,以及观察值的累积和。 |
summary | 用于跟踪一组观察值(如请求延迟)的分布,作为一组分位数/百分位数。与histogram一样,还跟踪观察值的总数,以及观察值的累积和。 |
Prometheus架构:
配置安装:
下载:
配置:
global:
scrape_interval: 15s
evaluation_interval: 15s
rule_files:
# - "first.rules"
# - "second.rules"
scrape_configs:
- job_name: prometheus
static_configs:
- targets: ['localhost:9090']
global:
rule_files:
scrape_configs:
启动:
./prometheus --config.file=prometheus.yml