prometheus配置看着一篇就够了

一、prometheus_config

配置热加载:
#1.  kill -HUP pid
#2.  curl -X POST http://IP/-/reload

job_name

  • 如果一个job里有多台主机,只需要在targets里配置多个ip和端口即可,使用逗号隔开
  • 过滤不需要收集的指标。 如下,只收集和返回cpu和内存相关的指标
- job_name: 'node'
    static_configs:
    - targets: ['192.168.68.17:9100']
    params:
      collect[]:
        - cpu
        - meminfo
  • 每次增加 Target 时会自动增加一个 instance 标签,而 instance 标签的内容刚好对应 Target 实例的 address
  • honor_labels主要用于解决prometheus server的label与exporter端用户自定义label冲突的问题
看看官方怎么说:

#If honor_labels is set to "true", label conflicts are resolved by keeping label
# values from the scraped data and ignoring the conflicting server-side labels.
#
# If honor_labels is set to "false", label conflicts are resolved by renaming
# conflicting labels in the scraped data to "exported_<original-label>" (for
# example "exported_instance", "exported_job") and then attaching server-side
# labels. This is useful for use cases such as federation, where all labels
# specified in the target should be preserved.

relabel_config

看官网说明 看官网例子
路人理解:relabel_config发生在抓取之前,metric_relabel_configs发生在抓取之后

重新标记,可以在目标的标签集被抓取之前重写它,每个采集配置可以配置多个重写标签设置,并按照配置的顺序来应用于每个目标的标签集。
Relabel 的配置允许你选择你想抓取的目标和这些目标的标签是什么。所以说如果你想要抓取这种类型的服务器而不是那种,可以使用relabel_configs

source_labels指定需要处理的源标签
target_labels指定要replace后的标签名字
action指定relabel动作,这里使用replace替换动作
regex去匹配源标签(__hostname__)的值,"(.*)"代表__hostname__这个标签是什么值都匹配的
replacement指定的替换后的标签(target_label)对应的数值

系统使用的标签
	__address__:		当前Target实例的访问地址[host]:[port]
	__scheme__:		采集目标服务访问地址的HTTP Scheme,HTTP或者HTTPS
	__metrics_path__:	采集目标服务访问地址的访问路径
	__param_:			采集任务目标服务的中包含的请求参数
	__name__: 			此标签是标识指标名称的预留标签

action:
	replace:   对标签和标签值进行替换。
	keep: 	   满足特定条件的实例进行采集,其他的不采集。
	drop: 	   满足特定条件的实例不采集,其他的采集。
	hashmod:  将 target_label 设置为关联的 source_label 的哈希模块。
	labelmap: 根据 regex 去匹配 Target 实例所有标签的名称(注意是名称),并且将捕获到的内容作为为新的标签名称,regex 匹配到标签的的值作为新标签的值。
	labeldrop:对抓取的实例特定标签进行删除。
	labelkeep:对抓取的实例特定标签进行保留,其他标签删除。
标签其实可以理解是一个key-value对组成。
默认的:
	target的job标签设置为配置文件里的job_name的值;
	__address__设置为配置里的targets的值;
	而instance标签的值,是重定义标签操作之后__address__的值,instance的值会比__address__多一个端口号 ;
	__scheme__和__metrics_path__标签的值,也是从配置里取值的;
	__param_<name>标签的值,是传给URL的查询参数<name>的值;

relabel_configs:
  - source_labels: [__address__]
    target_label: __param_target
  - source_labels: [__param_target]
    target_label: instance
  - target_label: __address__
    replacement: 192.168.56.200:9116 # snmp_exporter 服务IP地址
上面example的作用就是把 __address__标签替换成__param_target,value不变,只不过是key变了,
最后的 replacement 表示把标签__address__的value替换成 192.168.56.200:9116

在scrape_configs标签下,params.module中可以配置需要抓取的模块,不配置表示全部抓取。

二、rule_config

需要将指标做相应计算后再进行返回。这时候我们就需要添加记录规则

  • 坑1:这背后与 rate() 的实现方式有关:

rate() 在设计上假定对应的指标是一个 Counter,也就是只有 incr(增加) 和 reset(归0) 两种行为。
而做了 sum() 或其他聚合之后,得到的就不再是一个 Counter 了,举个例子,比如 sum() 的计算对象中有一个归0了,
那整体的和会下降,而不是归零,这会影响 rate() 中判断 reset(归0) 的逻辑,从而导致错误的结果。写 PromQL 时这个坑容易避免,
但碰到 Recording Rule 就不那么容易了,因为不去看配置的话大家也想不到 new_metric 是怎么来的。

要完全规避这个坑,可以遵守一个原则:Recording Rule 一步到位,直接算出需要的值,避免算出一个中间结果再拿去做聚合。

三、alert_config

  • global

全局配置,主要配置告警方式,如邮件、webhook

  • route

prometheus的告警先是到达alertmanager的根路由(route),alertmanager的根路路由不能包含任何匹配项,因为根路由是所有告警的入口点。另外,根路由需要匹配一个接收器(receiver),用来处理哪些没有匹配到任何子路由的告警(如果没有配置子路由,则全部由根路由发送告警)

  • group_by

用于分组聚合,对告警通知按标签(label)进行分组,将具有相同标签或相同告警名称(alertname)的告警通知
聚合在一个组,然后作为一个通知发送。如果想完全禁用聚合,可以设置为group_by:[…]

  • group_wait

当一个新的告警组被创建时,需要等待’group_wait’后才发送初始通知。这样可以确保在发送等待前能收集更
多具有相同标签的告警,最后合并为一个通知发送

坑1:用于控制同一个 group 内的警报最快多久通知一次
这里有一个问题是 firing(激活) 和 resolved(已消除) 的警报通知是共享同一个 group 的。也就是说,假设我们的 group_interval 是默认的 5 分钟,那么一条警报激活十几秒后立马就消除了,它的消除通知会在报警通知的 5 分钟之后才到,因为在发完报警通知之后,这个 Group 需要等待 5 分钟的 group_interval 才能进行下一次通知。

cat > alertmanager.yml <<EOF
global:
  resolve_timeout: 5m
route:
  receiver: webhook
  group_wait: 30s
  group_interval: 5m
  repeat_interval: 4h
  group_by: [alertname]
  routes:
  - receiver: webhook
    group_wait: 10s
    match:
      team: node
receivers:
- name: webhook
  webhook_configs:
  - url: 'http://apollo/hooks/dingtalk/'
    send_resolved: true
  - url: 'http://apollo/hooks/prome/'
    send_resolved: true
EOF

cat > /usr/lib/systemd/system/alertmanager.service <<EOF
[Unit]
Description=alertmanager

[Service]
ExecStart=/root/go/bin/alertmanager --config.file=/root/go/bin/config.yml --storage.path=/usr/local/alertmanager/data --web.listen-address=:9093 --data.retention=120h
Restart=on-failure

[Install]
WantedBy=multi-user.target
EOF

四、time

  • 为了避免时区的混乱,prometheus所有的组件内部都强制使用Unix时间,对外展示使用UTC时间。如果想改变时区,可以在UI改为合适的时区时间。
  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
一、prometheus简介 Prometheus是一个开源的系统监控和告警系统,现在已经加入到CNCF基金会,成为继k8s之后第二个在CNCF维护管理的项目,在kubernetes容器管理系统中,通常会搭配prometheus进行监控,prometheus支持多种exporter采集数据,还支持通过pushgateway进行数据上报,Prometheus再性能上可支撑上万台规模的集群。 二、prometheus架构图 三、prometheus组件介绍 1.Prometheus Server: 用于收集和存储时间序列数据。 2.Client Library: 客户端库,检测应用程序代码,当Prometheus抓取实例的HTTP端点时,客户端库会将所有跟踪的metrics指标的当前状态发送到prometheus server端。 3.Exporters: prometheus支持多种exporter,通过exporter可以采集metrics数据,然后发送到prometheus server端 4.Alertmanager: 从 Prometheus server 端接收到 alerts 后,会进行去重,分组,并路由到相应的接收方,发出报警,常见的接收方式有:电子邮件,微信,钉钉, slack等。 5.Grafana:监控仪表盘 6.pushgateway: 各个目标主机可上报数据到pushgatewy,然后prometheus server统一从pushgateway拉取数据。 四、课程亮点 五、效果图展示 六、讲师简介 先超(lucky):高级运维工程师、资深DevOps工程师,在互联网上市公司拥有多年一线运维经验,主导过亿级pv项目的架构设计和运维工作 主要研究方向: 1.云计算方向:容器 (kubernetes、docker),虚拟化(kvm、Vmware vSphere),微服务(istio),PaaS(openshift),IaaS(openstack)等2.系统/运维方向:linux系统下的常用组件(nginx,tomcat,elasticsearch,zookeeper,kafka等),DevOps(Jenkins+gitlab+sonarqube+nexus+k8s),CI/CD,监控(zabbix、prometheus、falcon)等 七、课程大纲

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值