• 一、配置规则
  • 二、语法检查规则
  • 三、记录规则
    • 3.1 <rule_group>
    • 3.2  <rule>
  • 四、警报规则
    • 4.1 定义报警规则
    • 4.2 模板
    • 4.3 在运行时检查警报
    • 4.4 发送提醒通知

prometheus配置文件内容:

 global:
# 默认情况下抓取目标的频率.
[ scrape_interval: <duration> | default = 1m ] # 抓取超时时间.
[ scrape_timeout: <duration> | default = 10s ] # 评估规则的频率.
[ evaluation_interval: <duration> | default = 1m ] # 与外部系统通信时添加到任何时间序列或警报的标签
#(联合,远程存储,Alertma# nager).
external_labels:
[ <labelname>: <labelvalue> ... ] # 规则文件指定了一个globs列表.
# 从所有匹配的文件中读取规则和警报.
rule_files:
[ - <filepath_glob> ... ] # 抓取配置列表.
scrape_configs:
[ - <scrape_config> ... ] # 警报指定与Alertmanager相关的设置.
alerting:
alert_relabel_configs:
[ - <relabel_config> ... ]
alertmanagers:
[ - <alertmanager_config> ... ] # 与远程写入功能相关的设置.
remote_write:
[ - <remote_write> ... ] # 与远程读取功能相关的设置.
remote_read:
[ - <remote_read> ... ]

配置文件通用占位符:PS:本部分主要介绍rule_files的详细内容。

 通用占位符定义如下:
<boolean>:一个可以取值为true或false的布尔值
<duration>:与正则表达式匹配的持续时间[-] +(ms | [smhdwy])
<labelname>:与正则表达式匹配的字符串[a-zA-Z _] [a-zA-Z0- _] *
<labelvalue>:一串unicode字符
<filename>:当前工作目录中的有效路径
<host>:由主机名或IP后跟可选端口号组成的有效字符串
<path>:有效的URL路径
<scheme>:一个可以取值http或https的字符串
<string>:常规字符串
<secret>:一个秘密的常规字符串,例如密码
<tmpl_string>:在使用前进行模板扩展的字符串

一、配置规则

Prometheus支持两种类型的规则,这些规则可以定期配置,然后定期评估:记录规则和警报规则。 要在Prometheus中包含规则,请创建包含必要规则语句的文件,并让Prometheus通过Prometheus配置中的rule_files字段加载文件。 规则文件使用YAML。

通过将SIGHUP发送到Prometheus进程,可以在运行时重新加载规则文件。 仅当所有规则文件格式正确时才会应用更改。

二、语法检查规则

要在不启动Prometheus服务器的情况下快速检查规则文件在语法上是否正确,请安装并运行Prometheus的promtool命令行实用工具:

go get github.com/prometheus/prometheus/cmd/promtool
promtool check rules /path/to/example.rules.yml

当文件在语法上有效时,检查器将已解析规则的文本表示打印到标准输出,然后以0返回状态退出。

如果存在任何语法错误或无效的输入参数,则会向标准错误输出错误消息,并以1返回状态退出。

三、记录规则

记录规则允许您预先计算经常需要或计算上昂贵的表达式,并将其结果保存为一组新的时间序列。 因此,查询预先计算的结果通常比每次需要时执行原始表达式快得多。 这对于仪表板尤其有用,仪表板需要在每次刷新时重复查询相同的表达式。

记录和警报规则存在于规则组中。 组内的规则以固定间隔顺序运行。

规则文件的语法是:

groups:
[ - <rule_group> ]

3.1 <rule_group>

 # 组的名称。 在文件中必须是唯一的。
name: <string> # 评估组中的规则的频率。
[ interval: <duration> | default = global.evaluation_interval ] rules:
[ - <rule> ... ]

3.2  <rule>

记录规则的语法是:

 # 要输出的时间序列的名称。 必须是有效的度量标准名称。
record: <string> # 要评估的PromQL表达式。 每个评估周期都会在当前时间进行评估,并将结果记录为一组新的时间序列,其中度量标准名称由“记录”给出。
expr: <string> # 在存储结果之前添加或覆盖的标签。
labels:
[ <labelname>: <labelvalue> ]

一个简单的示例规则文件将是:

groups:
- name: sum
rules:
- record: job:up:sum
expr: sum(up) by (job)
lables:
rulesName: record

验证:

创建配置,并使其动态生效,通过prometheus可编辑浏览器查看,如下所示:

四、警报规则

警报规则允许您基于Prometheus表达式语言表达式定义警报条件,并将有关触发警报的通知发送到外部服务。 每当警报表达式在给定时间点生成一个或多个向量元素时,警报将计为这些元素的标签集的活动状态。

4.1 定义报警规则

警报规则在Prometheus中与记录规则相同的方式配置。

带警报的示例规则文件将是:

 # 警报的名称。 必须是有效的度量标准名称。
alert: <string> # 要评估的PromQL表达式。 每个评估周期都会在当前时间进行评估,并且所有结果时间序列都会成为待处理/触发警报。
expr: <string> # 警报一旦被退回这段时间就会被视为开启。
# 尚未解雇的警报被认为是未决的。
[ for: <duration> | default = 0s ] # 为每个警报添加或覆盖的标签。
labels:
[ <labelname>: <tmpl_string> ] # 要添加到每个警报的注释。
annotations:
[ <labelname>: <tmpl_string> ]

labels子句允许指定要附加到警报的一组附加标签。 任何现有的冲突标签都将被覆盖。 标签值可以是模板化的。
可选的for子句使Prometheus在第一次遇到新的表达式输出向量元素和将此警告作为此元素的触发计数之间等待一段时间。 在这种情况下,Prometheus将在每次评估期间检查警报是否继续处于活动状态10分钟,然后再触发警报。 处于活动状态但尚未触发的元素处于暂挂状态。

annotations子句指定一组信息标签,可用于存储更长的附加信息,例如警报描述或Runbook链接。 注释值可以是模板化的。

4.2 模板

可以使用控制台模板模板化标签和注释值。 $labels变量保存警报实例的标签键/值对,$value保存警报实例的评估值。

 # 要插入触发元素的标签值:
{{ $labels.<labelname> }}
# 要插入触发元素的数值表达式值:
{{ $value }}

例子:

 groups:
- name: example
rules: # 对于任何无法访问> 5分钟的实例的警报。
- alert: InstanceDown
expr: up ==
for: 5m
labels:
severity: page
annotations:
summary: "Instance {{ $labels.instance }} down"
description: "{{ $labels.instance }} of job {{ $labels.job }} has been down for more than 5 minutes." # 对中值请求延迟> 1s的任何实例发出警报。
- alert: APIHighRequestLatency
expr: api_http_request_latencies_second{quantile="0.5"} >
for: 10m
annotations:
summary: "High request latency on {{ $labels.instance }}"
description: "{{ $labels.instance }} has a median request latency above 1s (current value: {{ $value }}s)"

4.3 在运行时检查警报

要手动检查哪些警报处于活动状态(待处理或触发),请导航至Prometheus实例的"警报"选项卡。 这将显示每个定义的警报当前处于活动状态的确切标签集,如下所示:

对于待处理和触发警报,Prometheus还存储ALERTS{alertname="<alert name>",alertstate ="pending|firing",<additional alert labels>}形式的合成时间序列。 只要警报处于指示的活动(pending or firing(挂起或触发))状态,样本值就会设置为1,并且当不再是这种情况时,系列会标记为过时。

4.4 发送提醒通知

普罗米修斯的警报规则很好地判断当前发生的故障,但它们并不是一个完全成熟的通知解决方案。在简单的警报定义之上,还需要另一层来添加摘要,通知速率限制,静默和警报依赖性。 在Prometheus的生态系统中,Alertmanager担当了这个角色。 因此,Prometheus可以配置为定期将有关警报状态的信息发送到Alertmanager实例,该实例随后负责调度正确的通知。

Prometheus可以配置为通过其服务发现集成自动发现可用的Alertmanager实例。

5. 配置项:rule_files的更多相关文章

  1. SpringMVC配置项学习笔记

    1. <mvc:annotation-driven /> <mvc:annotation-driven />是一种简写形式,默认会注册DefaultAnnotationHand ...

  2. JSHint配置项说明

    转自:http://www.jianshu.com/p/4cb23f9e19d3 什么是JSHint? 官方网站这样介绍: JSHint, A Static Code Analysis Tool fo ...

  3. validate插件深入学习-03validate()方法配置项

    validate()方法配置项 rules 定义校验规则 messages 定义提示信息 上面这两个已经介绍过了 rules里隐藏的属性depends,只有符合条件(返回true)的时候才会执行 su ...

  4. 配置项setOption -- title

    标题组件,包含主标题和副标题.在 ECharts 3 中可以存在任意多个标题组件,这在需要标题进行排版,或者单个实例中的多个图表都需要标题时会比较有用. title.show boolean [ de ...

  5. Ext JS 4 新特性2:配置项属性(config)之二

    Ext JS 4 新特征2:配置项属性config之二 ☞ Config(自动的setters和getters) Ext JS 4介绍了config声明方式,在Ext JS 中也有几个例子:在运行程序 ...

  6. Ext JS 4 新特性2:配置项属性(config)之一

    Ext JS 4 新特征2:配置项属性config 最新版本的Ext JS 4.2的另外一个伟大的新特征就是增加了configuration配置项属性,当我们在创建一个新类的时候,经常性的要设置某某属 ...

  7. Redis应用配置项说明

    近期整理了下项目中Redis配置参数,以便学习备用~ #指定内存大小,格式为1k 1GB 1M,单位不区分大小写 # 1k  => 1000 bytes # 1kb => 1024 byt ...

  8. Mysql配置项的简单优化

    preface 众所周知,Mysql已经成为广泛使用的开源数据库了,so 公司阿里云的数据库为Mysql,在最开始的时候是直接yum安装,配置项都是默认的,没有任何调整,这次有时间就参考各路大神的资料 ...

  9. 【转】VS项目属性的一些配置项的总结

    首先,解决方案和项目文件夹包含关系(c++项目): VS解决方案和各个项目文件夹以及解决方案和各个项目对应的配置文件包含关系,假设新建一个项目ssyy,解决方案起名fangan,注意解决方案包括项目, ...

随机推荐

  1. JVM tomcat 性能调优

    1,新建web 测试项目并且发布到Tomcat,访问路径:http://127.0.0.1:8080/JvmWeb/index @WebServlet("/index") publ ...

  2. [React]Context机制

    在React中,Context机制是为了方便在组件树间传递数据. 例子 import React from 'react' const themes={ light:"亮色主题", ...

  3. 使用Spring管理数据库事务

    在整个JavaWeb项目开发中,事务是用来开发可靠性网络应用程序的最关键部分.当应用程序与后端资源进行交互时,就会用到事务,这里的后端资源包括数据库.MQ.ERP等.而数据库事务是最常见的类型,而我们 ...

  4. 关于java动态代理模式

    1. 动态代理 动态代理就是通过代理类是代理类与相关接口不直接发生联系,而在运行期(Runtime)实现动态关联. 动态代理主要用到java.lang.reflect包中的两个类,Invocation ...

  5. Python常用模块之模块的使用

      一 模块介绍 1.什么是模块? #常见的场景:一个模块就是一个包含了一组功能的python文件,比如spam.py,模块名为spam,可以通过import spam使用. #在python中,模块 ...

  6. Python执行js之PyexecJs

    利用Python执行js 爬虫中会经常碰到JS加密,当我们找到他加密的JS代码之后我们需要获取它的返回值,python虽然可以模仿js写一个python版本的加密,但是这样有点费时间,也有点费头发~ ...

  7. 2019NYIST计科第四次周赛

    YZJ的牛肉干 Description 今年的ACM暑期集训队一共有18人,分为6支队伍.其中有一个叫做 YZJ的大佬,在共同的集训生活中,大家建立了深厚的友谊, YZJ准备做点什么来纪念这段激情燃烧 ...

  8. Java 配 Shell 等于美酒加咖啡

    化学中我们得知「氢气加氧气在点燃的情况下会生成水」. 生活中我们得知「良辰加美景的情况下会得到千金春宵一刻」. 技术上又何尝不是如此呢?先假设一个场景:BOSS 让你实现一个服务监控的指挥室,能看到每 ...

  9. 1039 Course List for Student (25分)

    Zhejiang University has 40000 students and provides 2500 courses. Now given the student name lists o ...

  10. ASP.NET Core技术研究-探秘依赖注入框架

    ASP.NET Core在底层内置了一个依赖注入框架,通过依赖注入的方式注册服务.提供服务.依赖注入不仅服务于ASP.NET Core自身,同时也是应用程序的服务提供者. 毫不夸张的说,ASP.NET ...