我在.NET Web API中有一个控制器操作方法,在方法开头有一个日志语句,只记录已启动,这意味着执行已经开始。
然后,在返回响应之前,还有另一个记录已完成的日志语句,这意味着执行已完成。
现在,如果两个日志事件之间的时差超过特定数量,我想设置一个Sumo Logic通知警报。 10秒
基本上,我想要实现的是,如果我的API端点需要的时间超过特定的持续时间来发送响应,我希望得到通知。
答案 0 :(得分:1)
我不熟悉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代码中的其他逻辑来处理这个问题。可悲的是,我无法看到任何明显的文档。
答案 1 :(得分:0)
请原谅我,但是是什么阻止了你编码呢?你不能只从结束时间中减去开始时间并根据结果的秒数采取行动吗?
答案 2 :(得分:0)
join运算符可以实现这一点 实际上,如果您有2次搜索(一次用于开始事件,一次用于结束事件),您可以将它们连接在一起,然后从开始时间中减去完成时间以获得增量并从中触发事件。
Example
的输入强>
* | 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
<强>结果
<p-table [value]="teamList" [(selection)]="selectedTeam" [resizableColumns]="true" selectionMode="single" [paginator]="teamList.length > 5"
[rows]="5" [scrollable]="true" (onRowSelect)="onTeamSelected($event)"> ..... </p-table>
private onTeamSelected(event: any) {
if (this.team.unsavedWork) {
if (!!this.prevSelectedTeam) {
this.selectedTeam = this.prevSelectedTeam;
return;
}
}
// do implementation
// in case of saved work, to select the team back
// the previous selected team is being set
this.prevSelectedTeam = this.selectedTeam;
}