有些KQL 我们不会写, 可以借助官方的工具,特别方便。
比如我们要过滤某个 容器的日志是否出现 error 信息
我们先在discover 中 查找一下
如何设置discoer 索引 可以参考 es 安装 kibana 安装 tar.gz (推荐) : 连接
1- 比如查找 zookeeper pod 的 error
kubernetes.container_name:"container-cloud-service-prod" and log: "error"
然后点击 "检查"
然后点击 "请求"
把这个复制一下, 我们只要
query 字段的信息,然后在粘贴到我们 watcher 中
注意时间范围
不然写死了,就容易发生死循环,一直告警。
"@timestamp": {
"from": "{{ctx.trigger.scheduled_time}}||-15m",
"to": "{{ctx.trigger.triggered_time}}"
}
5分钟执行一次, 最近5分钟的日志是否有error 出现
{
"trigger": {
"schedule": {
"interval": "5m"
}
},
"input": {
"search": {
"request": {
"search_type": "query_then_fetch",
"indices": [
"ks-logstash*"
],
"rest_total_hits_as_int": true,
"body": {
"query": {
"bool": {
"must": [],
"filter": [
{
"bool": {
"filter": [
{
"bool": {
"should": [
{
"match_phrase": {
"kubernetes.container_name": "container-zookeeper-v2-prod"
}
}
],
"minimum_should_match": 1
}
},
{
"bool": {
"should": [
{
"match_phrase": {
"log": "error"
}
}
],
"minimum_should_match": 1
}
}
]
}
},
{
"range": {
"@timestamp": {
"from": "{{ctx.trigger.scheduled_time}}||-5m",
"to": "{{ctx.trigger.triggered_time}}"
}
}
}
],
"should": [],
"must_not": []
}
}
}
}
}
},
"condition": {
"compare": {
"ctx.payload.hits.total": {
"gte": 0
}
}
},
"actions": {
"webhook_1": {
"webhook": {
"scheme": "http",
"host": "192.168.1.250",
"port": 80,
"method": "post",
"params": {},
"headers": {},
"body": """{"msgtype": "text","text": {"content": "生产-cloudservice-error监控---container-zookeeper-v2-prod--- 日志出现 error 请尽快处理 "}, "errmsg": "aa"}"""
}
}
}
}