背景介绍:
对于Kibana的一些数据我们有时候是想要对某些字段进行持续关注的,这时候通过报警的手段就可以大幅提升对这些信息状态了解的及时性及可靠性。使用Sentinl这个kibana开源插件,就可以帮助我们实现这个功能。这里记录一下我的实践过程,主要是对一些业务数据某些字段进行监控报警。
环境:
td-agent 1.0.2
elasticsearch 6.2.2
kibana 6.2.2
安装及简要说明
1
|
/usr/share/kibana/bin/kibana-plugin install https://github.com/sirensolutions/sentinl/releases/download/tag-6.2.2/sentinl-v6.2.2.zip
|

1
2
3
4
5
6
7
8
9
10
11
12
13
|
#vim /etc/kibana/kibana.yml
sentinl:
settings:
email:
active: true
user: xxx.xxx.cn
password: xxx
host: smtp.xxx.org
ssl: true
timeout: 10000
report:
active: true
tmp_path: /tmp/
|
- 配置说明
说到配置结合kibana上自带的
Dev Tools
会对调试非常有帮助,另外推荐使用json验证的网站对编写好的input进行重新编排检测,方便查看维护
关于配置项简要说明
Type |
描述 |
General |
包含Title监控的名称及Schedule执行的时间间隔 |
INPUT |
输入的数据源,可参照下面的例子 |
Condition |
判断条件参考官网示例 |
Transform |
How to Adapt or Post-Process data(暂时没有这个需求) |
ACTIONS |
条件满足后执行的动作 |
Raw |
一般不需要配置,这个是对前面的配置生成的json文件,当然你也可以直接编辑这个文件 |
配置注意点
- Condition
我这里基本使用
payload.hits.total
,由于不怎么熟悉ES的查询语句,刚开始这里有点迷糊,其实通过Kibana的Dev tools写个ES的查询DSL输出一下结果就明白了
{
“script”: {
“script”: “payload.hits.total > 1”
}
}
1
2
3
|
我这里配置的意思是前面INPUT匹配到的log条数大于1就触发action
- **ACTIONS**
我这里使用Email,注意Throttle这个参数如名字所示节流阀,当连续报警在这个范围内时,不会发送邮件,很人性化的一个设计
|
**提示:**指定index时可以使用*进行通配匹配,默认不指定index会匹配所有index
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
{
"search": {
"request": {
"index": [
"bilogs-logics-105*"
],
"body": {
"size": 100,
"query": {
"bool": {
"filter": {
"range": {
"@timestamp": {
"from": "now-2h"
}
}
}
}
}
}
}
}
}
|
- 过滤指定index最近2小时内不包含gid:101字段的log
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
|
{
"search": {
"request": {
"index": [
"bilogs-logics-105*"
],
"body": {
"size": 100,
"query": {
"bool": {
"must_not": [
{
"match": {
"gid": 101
}
}
],
"filter": {
"range": {
"@timestamp": {
"from": "now-2h"
}
}
}
}
}
}
}
}
}
|
- 过滤指定时间范围内指定index中info.VIP为2-10且info.Type字段为VI_HC且info.Value字段小于1000的log
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
|
{
"search": {
"request": {
"index": [],
"body": {
"size": 20,
"query": {
"bool": {
"must": [
{
"range": {
"info.VIP": {
"gte": 2,
"lte": 10
}
}
},
{
"match": {
"info.Type": "VI_HC"
}
},
{
"range": {
"info.Value": {
"lt": 1000
}
}
},
{
"range": {
"@timestamp": {
"gte": "2018-03-14T02:42:26.704Z",
"lte": "2018-03-14T20:42:26.704Z"
}
}
}
]
}
}
}
}
}
}
|
参考文档
Sentinl 官方文档
Elasticsearch 权威指南
Elastic 官方文档