在 open-falcon 监控系统中,judge 模块负责告警判断,它会定期向 hbs 请求告警策略信息,然后将告警信息推送到 redis ,本文向大家介绍 judge 是如何进行告警诊断的,希望对你有帮助。
阅读前需要了解的概念:
1. 监控数据分类
- GAUGE:实测值,直接使用采集的原始数值,比如气温;
- COUNTER:记录连续增长的数据,只增不减。比如汽车行驶里程,网卡流出流量,cpu_idle等;
- DERIVE:变化率,类似COUNTER ,但是可增可减;
GAUGE 类型的值在进行告警诊断的时候直接与告警值比较即可,另外两种则需要根据差值进行判断。
2. 数据模型
open-falcon的"监控项"模型如下:
{
metric: cpu.busy, // 监控项名称
endpoint: open-falcon-host, // 目标服务器的主机名
tags: srv=falcon,group=az1, // tag标签,作用是聚合和归类,在配报警策略时会比较方便。
value: 10, // 监控项数值
timestamp: `date +%s`, // 采集时间
counterType: GAUGE, // 监控项类型。 只能是COUNTER或者GAUGE二选一,前者表示该数据采集项为计时器类型,后者表示其为原值 (注意大小写)
step: 60 // 采集间隔。 秒。
}
这种模型有两个好处:
-
一是方便从多个维度来配置告警
比如tag的使用起到了给机器进行归类的作用,比如有3台机器:host1、host2和host3,如果tags依次配置为"group=java", "group=java"和"group=erlang",那么配置报警策略"metric=cpu/group=java“时就只会对java标签的机器(即host1,host2)生效。 -
二是可以灵活的进行自主数据采集。
由于agent会自发现的采集很多基本的系统指标,但是对业务应用等需要研发人员自己写脚本收集和上报。这里openfalcon定义了监控项模型,相当于定义了一个规范,当研发人员需要监控某个对象(比如mysql、redis等),只需采集数据,并遵守规范包装成监控项模型,再上报即可。
3. 告警模板参数说明
type Strategy struct {
Id int `json:"id"`
Metric string `json:"metric"` // 告警适用的 metric
Tags map[string]string `json:"tags"` // 告警适用的 tag
Func string `json:"func"` // e.g. max(#3) all(#3)
Operator string `json:"operator"` // e.g. < !=
RightValue float64 `json:"rightValue"` // 告警阈值
MaxStep int `json:"maxStep"` // 表示该数据采集项的汇报周期,这对于后续的配置监控策略很重要,必须明确指定。
Priority int `json:"priority"` // 比如P0/P1/P2等等,每个及别的报警都会对应不同的redis队列
Note string `json:"note"` // 告警信息
Tpl *Template `json:"tpl"`
}
需要重点说的是 func 参数,下面是 func 参数可以配置的类型:
-
max 根据最大值判断是否触发告警。
max(#3): 对于最新的3个点,其最大值满足阈值条件则报警 -
min 根据最小值判断是否触发告警。
min(#3): 对于最新的3个点,其最小值满足阈值条件则报警 -
all
all(#3): 最新的3个点都满足阈值条件则报警 -
sum 根据和判断是否触发告警。
sum(#3): 对于最新的3个点,其和满足阈值条件则报警 -
avg 根据平均值判断是否触发告警。
avg(#3): 对于最新的3个点,其平均值满足阈值条件则报警 -
diff 只要有一个点的diff触发阈值,就报警,diff是当前值减去历史值
diff(#3): 拿最新push上来的点(被减数),与历史最新的3个点(3个减数)相减,得到3个差,只要有一个差满足阈值条件则报警 -
pdiff
pdiff(#3): 拿最新push上来的点,与历史最新的3个点相减,得到3个差,再将3个差值分别除以减数,得到3个商值,只要有一个商值满足阈值则报警 -
lookup
lookup(#2,3): 最新的3个点中有2个满足条件则报警; -
stddev
离群点检测函数,更多请参考3-sigma算法:https://en.wikipedia.org/wiki/68%E2%80%9395%E2%80%9399.7_rule stddev(#10) = 3 //取最新 **10** 个点的数据分别计算得到他们的标准差和均值,分别计为 σ 和 μ,其中当前值计为 X,那么当 X 落在区间 [μ-3σ, μ+3σ] 之外时则报警。
4. falcon_protal 数据库表结构

一、 judge 模块的启动流程
1. 加载配置文件
{
"debug": true,
"debugHost": "nil",
"remain": 11,
"http": {
"enabled": true,
"listen": "0.0.0.0:6081"
},
"rpc": {
"enabled": true,
"listen": "0.0.0.0:6080"
},
"hbs": {
"servers": ["127.0.0.1:6030"], # hbs最好放到lvs vip后面,所以此处最好配置为vip

本文深入解析Open-Falcon监控系统中Judge模块的工作原理,包括监控数据分类、数据模型、告警模板参数、模块启动流程及告警检测机制,为理解与优化系统性能提供全面指南。
最低0.47元/天 解锁文章

被折叠的 条评论
为什么被折叠?



