Сумо Логика Рассчитать время между двумя событиями журнала

У меня есть метод действия контроллера в.NET Web API, где в начале метода есть оператор log, который просто регистрирует Started, что означает, что выполнение началось.

Затем, непосредственно перед возвратом ответа, есть еще одна инструкция log, которая регистрирует Finished, что означает, что выполнение завершено.

Теперь я хочу настроить оповещение Sumo Logic, если разница во времени между двумя событиями журнала превышает определенное число, например, 10 секунд.

По сути, я хочу добиться того, чтобы для отправки ответа моей конечной точке API потребовалось больше времени, чем определенное время, я хочу получать уведомления.

3 ответа

Решение

Я не знаком с SumoLogic, поэтому не знаю, есть ли способ сделать так, чтобы он просматривал логи для Started а также Ended Событие с тем же идентификатором (т. е. что-то, что указывает на найденное Завершенное, относится к тому же запросу, что и Запущенный), затем сравните время.

Однако, похоже, он позволяет вам запускать оповещения на основе отдельных записей журнала: https://help.sumologic.com/Dashboards-and-Alerts/Alerts/03-Create-a-Real-Time-Alert

public T MyApiFunction()
{
    T result;
    var id = Guid.NewGuid(); //id used so we can tie up related start and end events if that option's possible
    var startedAt = DateTime.UtcNow;
    logger.Log("Started", id, startedAt);

    //...

    var completedAt = DateTime.UtcNow;
    logger.Log("Completed", id, completedAt);
    var secondsTaken = end.Subtract(start).TotalSeconds;
    if (secondsTaken > AlertThresholdSeconds)
    {
        logger.Error(String.Format("API call time exceeded threshold: {0} seconds", secondsTaken),id);
    }
    return result;
}

Я подозреваю, что есть лучшие варианты / что SumoLogic предлагает опции, которые отслеживают вызов снаружи, вместо того, чтобы требовать дополнительной логики в коде API для обработки этого. К сожалению, я не мог видеть никакой очевидной документации для этого все же.

Это возможно с оператором соединения.
Фактически, если у вас есть 2 поиска (один для события начала и один для события окончания), вы можете объединить их вместе, а затем вычесть время окончания из времени начала, чтобы получить дельту и запустить событие из этого.

пример
вход

starting stream from stream-2454 starting stream from stream-7343 starting search search-733434 from parent stream stream-2454 starting search search-854343 from parent stream stream-7343 starting stream from stream-6543 starting search search-455563 from parent stream stream-6543 starting search search-32342 from parent stream stream-7343

Код
* | join (parse "starting stream from *" AS a) AS T1, (parse "starting search * from parent stream *" AS b, c) AS T2 on T1.a = T2.c

Результаты
a b c stream-2454 search-733434 stream-2454 stream-7343 search-854343 stream-7343 stream-7343 search-32342 stream-7343 stream-6543 search-854343 stream-6543

Извините за вопрос, но что помешало вам его кодировать? Разве вы не можете просто вычесть время начала из времени окончания и принять меры в зависимости от количества секунд результата?

Другие вопросы по тегам