es-xpack-watch-user

October 17, 2018

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}}"
      }
    }
    }
  }

参考文档


LRF 记录学习、生活的点滴