Sumo Logic 计算两个日志事件之间的时间
Sumo Logic Calculate time between two log events
我在 .NET Web API 中有一个控制器操作方法,在方法的开头有一个日志语句,它只记录 Started,这意味着执行已经开始了。
然后,就在返回响应之前,还有另一个日志语句记录 Finished,这意味着执行已完成。
现在,我想在两个日志事件之间的时间差超过特定数字时设置 Sumo Logic 通知警报,例如10 秒。
基本上,我想由此实现的是,如果我的 API 端点花费的时间超过特定持续时间来发送响应,我希望得到通知。
请原谅我这么问,是什么阻止了您对它进行编码?您不能只用结束时间减去开始时间,然后根据结果的秒数采取行动吗?
我不熟悉 SumoLogic,所以不知道是否有办法让它在日志中搜索具有相同 ID 的 Started
和 Ended
事件(即要指示的内容Ended 发现与 Started 相关的查询)然后比较时间。
但是它看起来允许您根据单个日志条目触发警报: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 的代码中需要额外的逻辑来处理这个。遗憾的是,我看不到任何明显的文档。
这可以通过 join 运算符实现。
实际上,如果您有 2 次搜索(一次用于开始事件,一次用于结束事件),您可以将它们连接在一起,然后从开始时间减去结束时间以获得增量并从中触发事件。
Example
输入
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
我在 .NET Web API 中有一个控制器操作方法,在方法的开头有一个日志语句,它只记录 Started,这意味着执行已经开始了。
然后,就在返回响应之前,还有另一个日志语句记录 Finished,这意味着执行已完成。
现在,我想在两个日志事件之间的时间差超过特定数字时设置 Sumo Logic 通知警报,例如10 秒。
基本上,我想由此实现的是,如果我的 API 端点花费的时间超过特定持续时间来发送响应,我希望得到通知。
请原谅我这么问,是什么阻止了您对它进行编码?您不能只用结束时间减去开始时间,然后根据结果的秒数采取行动吗?
我不熟悉 SumoLogic,所以不知道是否有办法让它在日志中搜索具有相同 ID 的 Started
和 Ended
事件(即要指示的内容Ended 发现与 Started 相关的查询)然后比较时间。
但是它看起来允许您根据单个日志条目触发警报: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 的代码中需要额外的逻辑来处理这个。遗憾的是,我看不到任何明显的文档。
这可以通过 join 运算符实现。
实际上,如果您有 2 次搜索(一次用于开始事件,一次用于结束事件),您可以将它们连接在一起,然后从开始时间减去结束时间以获得增量并从中触发事件。
Example
输入
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