Watcher
Es 安装了官方x-pack的插件,可以用来做业务监控。第一次使用请先阅读下面的注意事项。
使用
1、进入kibana
页面,从management
进入,有一个Watcher
的按钮,进入之后就可以进行watcher
添加.
2、点击Addr
进入页面之后添加一个ID
和name
.之后编辑watch Json
内容。
{
"trigger": {
"schedule": {
"interval": "30m"
}
},
"input": {
"search": {
"request": {
"body": {
"size": 0,
"query": {
"match_all": {}
}
},
"indices": [
"*"
]
}
}
},
"condition": {
"compare": {
"ctx.payload.hits.total": {
"gte": 10
}
}
},
"actions": {
"my-logging-action": {
"logging": {
"text": "There are {{ctx.payload.hits.total}} documents in your index. Threshold is 10."
}
}
}
}
一个Watcher
由四部分组成.
Schedule
:查询和检查的定时任务Query
:查询的语句,支持es
的完整查询语句。Condition
:判断条件,是否满足Actions
:满足条件之后触发的动作
1、上面的定时任务是30
分钟,可以改为10s
,1h
,不建议这个值太小,这样对es
服务器压力比较大,并且没有太大意义。
2、上面的query
就是查询所有index
的所以数据,具体的查看语句需要自己写。
3、比较条件,上面的是比较ctx.payload.hits.total
这个返回的值是否大于10
,大于等于用gte
,大于用gt
,小于用lt
,小于等于用lte
.
4、触发动作,上述的触发动作是打印日志。触发动作可以选择发送邮件。
场景用列
- 业务系统中一个关键节点异常告警
- 监控
nginx
一分钟之内code
为500
出现次数10次以上则告警
注意事项
- 新建的
watcher
的id
和name
,不要和已有的重名,不然会把人家的给覆盖掉,并且不能恢复回来,必须重写。所以写的人也要注意,自己写了的也要保存一份。 - 定时任务时间不到太短
- 上述查询返回是没有内容的,之后返回查询命中多少条,如果要返回多少条,请修改
query
中的size
字段,这个值不要给太大,最好不要超过100
,太大,会把服务器内存耗尽。如果需要只返回前面的几条数据即可。 - 每个
watch
语句最好都在开发环境上测试一下,开发环境有同样的工具。 - 如果
query
语句比较复杂,请在Dev Tools
控制面板中先写好测试过了之后再使用,添加到线上之前请再三进行测试一下。
其他问题
- 如果要获取返回的数据并且序列化为一个字符串需要使用
"actions": {
"my_webhook": {
"transform": {
"script": {
"inline": "return ctx.payload.hits.hits.stream().map(p -> p._source.message).collect(Collectors.toList())",
"lang": "painless"
}
},
"my-logging-action": {
"logging": {
"text": "{{#toJson}}ctx.payload{{/toJson}}"
}
}
}
}