Я установил наблюдателя 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, и сообщение отправляется на слабый канал. Не уверен, что мне не хватает.