Наблюдатель упр - PullRequest
       25

Наблюдатель упр

0 голосов
/ 29 февраля 2020

Я создаю наблюдателя для отправки предупреждений на основе того, когда этот индекс получает отчеты о неудачной работе. На вкладке «Обнаружение» дата NextRunDate отображается отлично:

JobName      MyJobName
NextRunDate  Feb 29, 2020 @ 06:30 AM

Но когда я пытаюсь вытащить ее с помощью наблюдателя, она как-то отстает:

"key" : "MyJobName",
"NextRunDate" : {
"doc_count_error_upper_bound" : 0,
"sum_other_doc_count" : 0,
"buckets" : [
    {
    "key_as_string" : "Feb 29 @ 11:30 AM (Minus 5 hours)",
    "doc_count" : 24,
    "key" : 1582975800000
    }
  ]
}

I ' Нам пришлось добавить часть ((минус 5 часов) »в запрос, чтобы он правильно отображался на данный момент. Вот полный наблюдатель:

POST _watcher/watch/_execute
{
    "watch": {
        "trigger": {
            "schedule": {
                "hourly": {
                    "minute": [
                        0,
                        15,
                        30,
                        45
                    ]
                }
            }
        },
        "input": {
            "search": {
                "request": {
                    "search_type": "query_then_fetch",
                    "indices": [
                        "prod-jobs-*"
                    ],
                    "rest_total_hits_as_int": true,
                    "body": {
                        "size": 0,
                        "query": {
                            "bool": {
                                "filter": {
                                    "range": {
                                        "timestamp": {
                                            "gte": "now-15h"
                                        }
                                    }
                                },
                                "must": [
                                    {
                                        "match_all": {}
                                    }
                                ]
                            }
                        },
                        "aggs": {
                            "JobName": {
                                "terms": {
                                    "field": "JobName.keyword",
                                    "size": 5000,
                                    "order": {
                                        "_key": "desc"
                                    }
                                },
                                "aggs": {
                                    "PackageName": {
                                        "terms": {
                                            "field": "Package_Name.keyword",
                                            "size": 5000,
                                            "order": {
                                                "_key": "desc"
                                            }
                                        },
                                        "aggs": {
                                            "Error_Message": {
                                                "terms": {
                                                    "field": "Error_Message.keyword",
                                                    "size": 5000,
                                                    "order": {
                                                        "_key": "desc"
                                                    }
                                                }
                                            }
                                        }
                                    },
                                    "FailedDate": {
                                        "terms": {
                                            "field": "StopExecutionDate",
                                            "format": "MMM d @ h:mm a '(Minus 5 hours)'"
                                        }
                                    },
                                    "NextRunDate": {
                                        "terms": {
                                            "field": "NextRunDate",
                                            "format": "MMM d @ h:mm a '(Minus 5 hours)'"
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        },
        "condition": {
            "compare": {
                "ctx.payload.hits.total": {
                    "gt": 0
                }
            }
        },
        "actions": {
            "email_1": {
                "email": {
                    "profile": "standard",
                    "to": [],
                    "subject": "{{ctx.metadata.name}} has triggered",
                    "body": {
                        "html": "<html> <head> <style> body { font-family: 'Lucida Sans', 'Lucida Sans Regular', 'Lucida Grande', 'Lucida Sans Unicode', 'Geneva', 'Verdana', 'sans-serif'; } table { margin-left: 15px; border-left: 1.5px solid gray } tr, th { font-size: x-small; white-space: nowrap; text-align: left; padding: 7.5px; } td { font-size: x-small; text-align: left; padding: 7.5px; } </style> </head> <body> <h3>Job Failures with Errors</h3> {{#ctx.payload.aggregations.JobName.buckets}} <table style='border-collapse: collapse; border-spacing: 0;'> <tr> <th>Job Name</th> <td>{{key}}</td> <tr> <th>{{#PackageName.buckets}}Package Name</th> <td>{{key}}</td> </tr> <tr> <th>Error Message(s)</th> <td>{{#Error_Message.buckets}}{{key}}<br>{{/Error_Message.buckets}}</td>{{/PackageName.buckets}} </tr> <tr> <th>Job Fail Date/Time: </th> <td>{{#FailedDate.buckets}}{{key_as_string}}</td>{{/FailedDate.buckets}} </tr> <tr> <th>Next Run Date/Time: </th> <td>{{#NextRunDate.buckets}}{{key_as_string}}</td>{{/NextRunDate.buckets}} </tr> </table> <br>{{/ctx.payload.aggregations.JobName.buckets}}<br> </body> </html>"
                    }
                }
            }
        },
        "metadata": {
            "time_window": "5m",
            "time_period": "1m"
        }
    }
}

Не уверен, в чем проблема, поскольку сама кибана правильно отображает дату на вкладке Обнаружение. Мое format поле выключено?

1 Ответ

1 голос
/ 05 апреля 2020

Итак, через некоторое время, играя с этим, я получил помощь от команды поддержки elasti c, и вот результат:

Наблюдатели, хотя иногда настроенные в кибане, в конечном итоге функция эластичного поиска . Что вкратце означает, что время, которое наблюдатель извлекает при вызове ("key" : 1582975800000), является временем от фактического узла эластичного поиска.

Поэтому мне пришлось создать свойство transform в моем наблюдателе, например, так:

return 
[ 
    'new_payload': ctx.payload.aggregations.JobName.buckets.stream().map(job -> 
    { 
        return [ 
        'JobName': job.key, 
        'FailedDate': LocalDateTime.ofEpochSecond((job.FailedDate.buckets[0].key) / 1000 , 0, ZoneOffset.of(\"-04:00\")).format(DateTimeFormatter.ofPattern('MMM d @ h:mm a')), 
        'PackageName': job.PackageName.buckets.0.key, 
        'ErrorMessages': job.PackageName.buckets.0.Error_Message.buckets.stream().map(errors -> { return errors }).collect(Collectors.toList()), 
        'NextRunOffset': LocalDateTime.ofEpochSecond((job.NextRunDate.buckets[0].key) / 1000 , 0, ZoneOffset.of(\"-04:00\")).format(DateTimeFormatter.ofPattern('MMM d @ h:mm a')) 
    ]}).collect(Collectors.toList()) 
]
...