/// <summary> /// 检查超时监控 /// </summary> /// <returns></returns> private async Task <AlarmOption> CheckResponseTimeOutMonitor(IMonitorJob job, MonitorJobPayload payload) { if (payload.ResponseTimeOutMonitor == null) { return(null); } var(now, start, end) = GetNowTimes(_monitorService.ParseJobCron(job.CronLike)); _logger.LogInformation("检查超时监控开始 " + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")); var timeoutCount = await _storage.GetTimeoutResponeCountAsync(new RequestCountFilterOption() { Nodes = job.Nodes.Split(','), StartTime = start, EndTime = end, }, payload.ResponseTimeOutMonitor.TimeOutMs).ConfigureAwait(false); var count = await _storage.GetRequestCountAsync(new RequestCountFilterOption() { Nodes = job.Nodes.Split(','), StartTime = start, EndTime = end, }).ConfigureAwait(false); if (count == 0) { return(null); } var percent = timeoutCount * 100.0 / count; _logger.LogInformation("检查超时监控结束 " + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + $" 检查结果 {(percent > payload.ResponseTimeOutMonitor.Percentage ? "预警":"正常")}"); if (percent > payload.ResponseTimeOutMonitor.Percentage) { return(new AlarmOption() { IsHtml = true, Content = $@" <br> <b>【响应超时】触发预警 </b> <p>超时率预警值:{payload.ResponseTimeOutMonitor.Percentage.ToString("F2")}% 当前值:{percent.ToString("F2")}% </p> <p>任务标题:{job.Title}</p> <p>监控节点:{job.Nodes}</p> <p>监控频率:{_monitorService.ParseJobCron(job.CronLike)} 分钟</p> <p>时间段:{start.ToStandardTime()}-{end.ToStandardTime()} </p>" }); } return(null); }
/// <summary> /// 检查超时监控 /// </summary> /// <returns></returns> private async Task <AlarmOption> CheckResponseTimeOutMonitor(IMonitorJob job, MonitorJobPayload payload) { if (payload.ResponseTimeOutMonitor == null) { return(null); } var(now, start, end) = GetNowTimes(_monitorService.ParseJobCron(job.CronLike)); _logger.LogInformation("CheckResponseTimeOutMonitor Start " + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")); var timeoutCount = await _storage.GetTimeoutResponeCountAsync(new RequestCountFilterOption() { Nodes = job.Nodes.Split(','), StartTime = start, EndTime = end, }, payload.ResponseTimeOutMonitor.TimeOutMs); var count = await _storage.GetRequestCountAsync(new RequestCountFilterOption() { Nodes = job.Nodes.Split(','), StartTime = start, EndTime = end, }); if (count == 0) { return(null); } var percent = timeoutCount * 100.0 / count; _logger.LogInformation("CheckResponseTimeOutMonitor End " + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + $" Result {(percent > payload.ResponseTimeOutMonitor.Percentage ? "预警":"正常")}"); if (percent > payload.ResponseTimeOutMonitor.Percentage) { return(new AlarmOption() { IsHtml = true, Content = $@" <br> <b>【{_lang.Monitor_Type_Timeout}】 </b> <p> {_lang.Warning_Threshold}:{payload.ResponseTimeOutMonitor.Percentage.ToString("F2")}% {_lang.Warning_Current}:{percent.ToString("F2")}% </p> <p>{_lang.Monitor_Title}:{job.Title}</p> <p>{_lang.Monitor_ServiceNode}:{job.Nodes}</p> <p>{_lang.Monitor_Frequency}:{_monitorService.ParseJobCronString(job.CronLike)} </p> <p>{_lang.Warning_TimeRange}:{start.ToStandardTime()}-{end.ToStandardTime()} </p>" }); } return(null); }
/// <summary> /// 检查超时监控 /// </summary> /// <returns></returns> private async Task <AlarmOption> CheckResponseTimeOutMonitor(MonitorJob job, MonitorJobPayload payload) { if (payload.ResponseTimeOutMonitor == null) { return(null); } var(now, start, end) = GetNowTimes(_monitorService.ParseJobCron(job.CronLike)); _logger.LogInformation("CheckResponseTimeOutMonitor Start " + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")); #region BuildService string LocalIP = ""; int LocalPort = 0; if (job.Instance.IsEmpty() || job.Instance == "ALL") { LocalIP = ""; LocalPort = 0; } else { LocalIP = job.Instance.Substring(0, job.Instance.LastIndexOf(':')); LocalPort = job.Instance.Substring(job.Instance.LastIndexOf(':') + 1).ToInt(); } #endregion var timeoutCount = await _storage.GetTimeoutResponeCountAsync(new RequestCountFilterOption() { Service = job.Service, LocalIP = LocalIP, LocalPort = LocalPort, StartTime = start, EndTime = end, }, payload.ResponseTimeOutMonitor.TimeOutMs); var count = await _storage.GetRequestCountAsync(new RequestCountFilterOption() { Service = job.Service, LocalIP = LocalIP, LocalPort = LocalPort, StartTime = start, EndTime = end, }); if (count == 0) { return(null); } var percent = timeoutCount * 100.0 / count; _logger.LogInformation("CheckResponseTimeOutMonitor End " + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + $" {(percent > payload.ResponseTimeOutMonitor.Percentage ? "Alert notification trigger" : "Pass")}"); if (percent > payload.ResponseTimeOutMonitor.Percentage) { return(new AlarmOption() { IsHtml = true, Content = $@" <br> <b>【{_lang.Monitor_Type_Timeout}】 </b> <p> {_lang.Warning_Threshold}:{payload.ResponseTimeOutMonitor.Percentage.ToString("F2")}% {_lang.Warning_Current}:{percent.ToString("F2")}% </p> <p>{_lang.Monitor_Title}:{job.Title}</p> <p>{_lang.Monitor_ServiceNode}:{job.Service}</p> <p>{_lang.Monitor_InstanceName}:{(job.Instance.IsEmpty() ? BasicConfig.ALLTag : job.Instance)}</p> <p>{_lang.Monitor_Frequency}:{_monitorService.ParseJobCronString(job.CronLike)} </p> <p>{_lang.Warning_TimeRange}:{start.ToStandardTime()}-{end.ToStandardTime()} </p>" }); } return(null); }