ELK x-package watcher webhook配置

我们在配置watcher的时候,有时候期望将事件触发给自己写的服务来进行进一步的处理,这时候就需要写一些webhook了。

这里写个配置的例子。

{
"actions": {
    "test_webhook": {
      "webhook": {
        "scheme": "http",
        "host": "10.255.255.101",
        "port": 3000,
        "method": "post",
        "path": "/",
        "params": {},
        "headers": {
          "Content-Type": "application/json"
        },
        "body": "{\"text\":{{#toJson}}ctx.payload{{/toJson}},\"channel\":\"123123@chatroom\",\"username\":\"{{ctx.metadata.name}}\"}",
        "connection_timeout_in_millis": 5000,
        "read_timeout_millis": 5000
      }
    }
  }
}

参考文档

ELK x-package watcher 正文JSON配置

x-package的监控还是很强大的,但是对于告警内容的二次过滤和开发能力较弱。某些情况下,我们可能需要将数据拿出来,和我们自己开发的数据处理平台对接,对数据进行清洗之后发送告警信息给管理员。

默认从ctx.payload拿到的数据是一种很奇怪的格式,我们可以通过toJson将数据转换成标准JSON格式进行解析。

{
  "trigger": {
    "schedule": {
      "interval": "1m"
    }
  },
  "input": {
    "search": {
      "request": {
        "search_type": "query_then_fetch",
        "indices": [
          "5ag-access-info*"
        ],
        "types": [],
        "body": {
          "query": {
            "bool": {
              "must": {
                "match": {
                  "statusCode": 500
                }
              },
              "must_not": [
                {
                  "match": {
                    "requestURI": "/prst"
                  }
                },
                {
                  "match": {
                    "requestURI": "/eep/api/weixin/getAcode"
                  }
                },
                {
                  "match": {
                    "requestURI": "/xsh/es-service/skuProduct/extendedWarrantyList"
                  }
                }
              ],
              "filter": {
                "range": {
                  "@timestamp": {
                    "from": "{{ctx.trigger.scheduled_time}}||-10000m",
                    "to": "{{ctx.trigger.triggered_time}}"
                  }
                }
              }
            }
          }
        }
      }
    }
  },
  "condition": {
    "compare": {
      "ctx.payload.hits.total": {
        "gt": 0
      }
    }
  },
  "actions": {
    "notify-slack": {
      "slack": {
        "message": {
          "to": [
            "9581033544@chatroom"
          ],
          "text": "{{#toJson}}ctx.payload{{/toJson}}"
        }
      }
    }
  }
}

参考资料