Prometheus简介
启动:
./prometheus --config.file=prometheus.yml
其它启动参数:
--web.enable-lifecycle 启用 /reload接口(调用可以触发Prometheus配置和规则文件的重新加载)
--web.max-connections=512 最大链接数
--web.read-timeout=5m 请求连接的最大等待时间, 防止太多的空闲链接,占用资源
--query.timeout=2m 查询超时时间
--query.max-concurrency=200 最大查询并发
Prometheus需要与许多其它组件集成:
-
Jobs/Exporters
部分系统直接以prometheus兼容的格式暴露数据,可以直接监控
部分系统则需通过不同的Exporter进行数据汇报,它们统一命名格式为:xx_exporter
-
Pushgateway
Prometheus采用pull模式,可能由于不在一个子网或防火墙导致无法直接拉取各target数据
可以通过client SDK或者Restful API将数据先推送到pushgateway汇总后,再由Prometheus统一收集
pushgateway可以持久化推送给它的所有监控数据
但prometheus拉取状态up只针对pushgateway,无法做到对每个节点有效。
-
其它Prometheus Server
Prometheus Server可以从其它Prometheus Server拉取数据
-
Web UI
常用Grafana
-
Alertmanager
将相应的报警信息通过邮件或者短信的方式进行数据的一个告警。
启动时,使用--config.file参数指定一份配置文件
调用webhook程序的方法:
receivers:
- name: 'paas.web.hook'
webhook_configs:
- url: 'http://132.252.37.10:9156/alert'
route:
group_interval: 5m
group_wait: 30s
receiver: paas.web.hook
repeat_interval: 3h
--config.file参数指定的prometheus.yml配置文件写法:
-
全局配置
global:
scrape_interval: xxx # 设置采集数据的时间间隔,默认是1分钟
evaluation_interval: xxx # 评估一次rule的时间间隔,默认是1分钟
scrape_timeout: xxx # 拉取一个target的超时时间。
evaluation_interval: xxx # 额外的属性,会添加到拉取的数据并存到数据库中
-
Alertmanager配置
alerting:
alertmanagers:
- static_configs:
- targets:
- alertmanager:9093
alert_relabel_configs:动态修改 alert 属性的规则配置。
alertmanagers:用于动态发现alertmanager的配置。
-
scrape_configs
主要用于配置拉取数据节点
同一个job下可能包含很多相同类型的instance,每一个都是一个独立的数据源(target)称之为实例(instance)。
scrape_configs:
- job_name: 'prometheus'
scrape_interval: 5s
static_configs:
- targets: ['192.168.48.130:9090']
job_name:任务名称
honor_labels:prometheus在采集数据的同时,会自动在时序的基础上添加job和instance的标签,作为数据源(target)的标识,以便区分。如果其中任一标签已经在此前采集的数据中存在,那么将会根据 honor_labels设置选项来决定新标签。当设置为 true,以拉取数据为准;否则以服务配置为准
params:数据拉取访问时带的请求参数
scrape_interval、scrape_timeout:会覆盖全局配置
metrics_path:拉取节点的metric路径,默认为/metrics
scheme:拉取数据访问协议,如果是https,可能还需要配置证书等
sample_limit:存储的数据标签个数限制,如果超过限制,该数据将被忽略,不入存储;默认值为0,表示没有限制
tls_config:连接target使用的tls配置,包括ca_file、cert_file、key_file;或者可以通过设定insecure_skip_verify为false允许不安全的连接
relabel_configs:拉取数据重置标签配置,可以用来重置、过滤、删除标签
source_labels:源标签
target_labels:要替换的目标标签
separator:多个标签间的分隔符,默认为分号
regex:匹配源标签里的值
replacement:
modules:???
action:分为keep、replace、drop、labeldrop、labelkeep等
static_configs:直接写死targets地址
xxx__sd_configs:Prometheus在代码上就已经对Kubernetes、consul、dockerswarm、openstack等有了原生的支持,可以通过服务发现的形式来自动监控集群
以kubernetes_sd_configs为例:以role来定义,从k8s restful api检索目标,并保持与集群的同步状态。
支持的role包括:node、service、pod、endpoints、ingress
每种role取到的监控数据有不同标签,可以根据需要进行相应relabel操作,详见官方文档
-
remote_write和remote_read
-
规则
Prometheus可以配置rules,然后定时查询数据,当条件触发的时候,会将alert推送到配置的alertmanager
可以先把规则写到独立的文件里,在把文件名写进来:
rule_files:
# - "first_rules.yml"
# - "second_rules.yml"
规则文件写法:
groups:
- name: sum
rules:
- record: job:up:sum
expr: sum(up) by (job)
lables:
rulesName: record
每一个group包括若干条rule
每条rule包括:
alert:这一条告警的名字
expr:表达式
for:第一次告警触发后会等待若干时间
labels:向告警中添加标签
annotations:也是一系列标签,用于存放较长的信息
prometheus在localhost:9090/metrics暴露自身指标
同时在localhost:9090/graph提供了图形化接口,可以展示所有的Runtime&Build info、启动的命令行参数、配置文件、Rules、Targets、Service Discovery