Сумо Логика Рассчитать время между двумя событиями журнала
У меня есть метод действия контроллера в.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
Извините за вопрос, но что помешало вам его кодировать? Разве вы не можете просто вычесть время начала из времени окончания и принять меры в зависимости от количества секунд результата?