Kibana Watcher обращается к Slack, что приводит к 400 - PullRequest
0 голосов
/ 28 мая 2020

Я установил наблюдателя Kibana, который должен посылать сообщение о резерве на канал при выполнении условия. Watcher, похоже, работает нормально, он может запрашивать журналы, получать хиты, готовить полезную нагрузку для отправки сообщения в канал Slack. Но вызов Slack приводит к ошибке 400 (недопустимая полезная нагрузка), тогда как когда та же самая полезная нагрузка пробуется через почтальона, кажется, все в порядке. (Единственная разница в наблюдателе Kibana, body json для вызова Slack POST рассматривается как String, тогда как при попытке через почтальона я должен использовать проанализированный объект json).

Watcher Action :

"condition": {
        "compare": {
          "ctx.payload.hits.total": {
            "gt": 0
          }
        }
    },
    "actions": {
        "send_trigger": {
          "throttle_period_in_millis": 60000,
          "transform": {
            "script": {
              "source": "def payload = ctx.payload; def msgData = ctx.payload.hits.hits.0._source.message.replace('\"', ''); msgData = msgData.replace('\\', ''); payload.msg = msgData; return payload;",
              "lang": "painless"
            }
          },
          "webhook": {
            "scheme": "https",
            "host": "hooks.slack.com",
            "port": 443,
            "method": "post",
            "path": "/services/********/*********/******************",
            "params": {},
            "headers": {
              "Content-type": "application/json"
            },
            "body": "{\"channel\": \"alert-channel-name\",\"username\": \"slackKibanaUser\",    \"attachments\": [ { \"color\": \"danger\", \"title\": \" Alert Title For Event Occurance \", \"title_link\" : \"https://kibana.whatever.biz.com/app/kibana\", \"text\": \" *Detail:* \n ``` {{ ctx.payload.msg}} \n ``` \", \"fields\": [ {\"title\": \"Traceid\", \"value\": \"`{{ ctx.payload.hits.hits.0._source.traceId}}`\", \"short\": true}, { \"title\": \"Environment\", \"value\": \"{{ctx.payload.hits.hits.0._source.fields.environment}}\", \"short\": false }], \"footer\": \"{{ctx.payload.hits.hits.0.fields.environment}}\", \"footer_icon\": \"https://platform.slack-edge.com/img/default_application_icon.png\" }]} "
          }
        }
    }

Ответ, записанный в ошибке наблюдателя:

"reason": "received [400] status code",
        "webhook": {
          "request": {
            "host": "hooks.slack.com",
            "port": 443,
            "scheme": "https",
            "method": "post",
            "path": "/services/********/*********/******************",
            "headers": {
              "Content-type": "application/json"
            },
            "body": "{\"channel\": \"alert-channel-name\",\"username\": \"slackKibanaUser\",    \"attachments\": [ { \"color\": \"danger\", \"title\": \" Alert Title For Event Occurance \", \"title_link\" : \"https://kibana.whatever.biz.com/app/kibana\", \"text\": \" *Detail:* \n ``` 2020-05-28T00:00:00.000Z\tsome-random-numbers \tERROR\tInvoke Error\t{errorType:MyCustomError,errorMessage:{\\errorMessage\\:\\Something went wrong while processing : More error details goes here.\\,\\payload\\:\\[id=undefined, key1=value1, key2=value2, timestampRecorded=12/10/2019, 02:00:00, timestampActual=12/10/2019, 01:59:00, key3=value3, key4=v:a:l:u:e:4, key5=v:a:l:u:e:5]\\},name:MyCustomError,stack:[MyCustomError: {\\errorMessage\\:\\Something went wrong while processing : More error details goes here.\\,\\payload\\:\\[id=undefined, key1=value1, key2=value2, timestampRecorded=12/10/2019, 02:00:00, timestampActual=12/10/2019, 01:59:00, key3=value3, key4=v:a:l:u:e:4, key5=v:a:l:u:e:5]\\},    at Runtime.exports.functionOne (/var/task/index.js:49:9)]} \n ``` \", \"fields\": [ {\"title\": \"Traceid\", \"value\": \"``\", \"short\": true}, { \"title\": \"Environment\", \"value\": \"test-env\", \"short\": false }], \"footer\": \"\", \"footer_icon\": \"https://platform.slack-edge.com/img/default_application_icon.png\" }]} "
          },
          "response": {
            "status": 400,
            "headers": {
                ...
              "referrer-policy": [
                "no-referrer"
              ],
              "connection": [
                "keep-alive"
              ],
              "content-type": [
                "text/html"
              ]
            },
            "body": "invalid_payload"
          }
        }

В то время как, если я использую то же поле тела сверху, анализирую его как json и выполняю пост-вызов, используя почтальон, я получаю ответ 200 Ok, и сообщение отправляется на слабый канал. Не уверен, что мне не хватает.

...