《Dubbo 实现原理与源码解析 —— 精品合集》 《Netty 实现原理与源码解析 —— 精品合集》
《Spring 实现原理与源码解析 —— 精品合集》 《MyBatis 实现原理与源码解析 —— 精品合集》
《Spring MVC 实现原理与源码解析 —— 精品合集》 《数据库实体设计合集》
《Spring Boot 实现原理与源码解析 —— 精品合集》 《Java 面试题 + Java 学习指南》

摘要: 原创出处 https://lengrongfu.github.io/2018/10/17/es-xpack-watch-user/ 「菜鸟随笔」欢迎转载,保留摘要,谢谢!


🙂🙂🙂关注微信公众号:【芋道源码】有福利:

  1. RocketMQ / MyCAT / Sharding-JDBC 所有源码分析文章列表
  2. RocketMQ / MyCAT / Sharding-JDBC 中文注释源码 GitHub 地址
  3. 您对于源码的疑问每条留言将得到认真回复。甚至不知道如何读源码也可以请教噢
  4. 新的源码解析文章实时收到通知。每周更新一篇左右
  5. 认真的源码交流微信群。

Watcher

Es 安装了官方x-pack的插件,可以用来做业务监控。第一次使用请先阅读下面的注意事项。

使用

1、进入kibana页面,从management进入,有一个Watcher的按钮,进入之后就可以进行watcher添加.

2、点击Addr进入页面之后添加一个IDname.之后编辑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 一分钟之内code500出现次数10次以上则告警

注意事项

  • 新建的watcheridname,不要和已有的重名,不然会把人家的给覆盖掉,并且不能恢复回来,必须重写。所以写的人也要注意,自己写了的也要保存一份。
  • 定时任务时间不到太短
  • 上述查询返回是没有内容的,之后返回查询命中多少条,如果要返回多少条,请修改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}}"
    }
    }
    }
    }

参考文档

文章目录
  1. 1. Watcher
    1. 1.1. 使用
    2. 1.2. 场景用列
    3. 1.3. 注意事项
    4. 1.4. 其他问题
    5. 1.5. 参考文档