我在.NET Web API中有一个控制器操作方法,在方法的开头有一个日志语句,它只是记录已启动,这意味着执行已开始。
然后,就在返回响应之前,还有另一个日志语句记录 Done,这意味着执行已完成。
现在,我想设置一个Sumo Logic通知警报,如果两个日志事件之间的时间差超过特定数字,例如10秒。
基本上,我想从中实现的是,如果我的 API 端点花费的时间超过特定持续时间来发送响应,我希望收到通知。
我不熟悉SumoLogic,所以不知道是否有办法让它在日志中搜索具有相同ID的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