⭐⭐⭐ Spring Boot 项目实战 ⭐⭐⭐ Spring Cloud 项目实战
《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. 参考文档