public override void Run() { GlobalConfig.MonitorPlatformManageConnectString = AppConfig["MonitorPlatformManageConnectString"]; int EveryGrowErrorNum = Convert.ToInt32(AppConfig["EveryGrowErrorNum"]); SqlHelper.ExcuteSql(GlobalConfig.MonitorPlatformManageConnectString, (c) => { tb_database_config_dal dal = new tb_database_config_dal(); var list = dal.GetModelList(c); UnityLogConnectString = XXF.BaseService.Monitor.SystemRuntime.DbShardingHelper.GetDataBase(list, XXF.BaseService.Monitor.SystemRuntime.DataBaseType.UnityLog); }); int errornum = 0; SqlHelper.ExcuteSql(UnityLogConnectString, (c) => { tb_error_log_dal dal = new tb_error_log_dal(); errornum = dal.GetGrawErrorNum(c, lastscantime); }); if (errornum > EveryGrowErrorNum) { TaskLogHelper.Error("错误预警任务", string.Format("【{0}】-【{1}】期间平台错误日志增加{2}条", lastscantime, DateTime.Now, errornum), "错误预警任务"); } lastscantime = DateTime.Now; }
/// <summary> /// 检查api的接口性能 /// </summary> private void CheckPerformanceOfApi(string connectstring, Domain.PlatformManage.Model.tb_database_config_model configmodel) { try { DateTime dtime = DateTime.Now; string msg = ""; Dictionary <string, tb_timewatchlog_api_dayreport_model> dic = new Dictionary <string, tb_timewatchlog_api_dayreport_model>(); List <string> urls = new List <string>(); SqlHelper.ExcuteSql(connectstring, (c) => { tb_timewatchlog_api_dayreport_dal dal = new tb_timewatchlog_api_dayreport_dal(); var models = dal.GetDayReport(c, dtime.Date.AddDays(-1)); models.ForEach(o => { string key = o.date.Date.ToString("yyyyMMdd") + o.url.ToLower(); if (!dic.Keys.Contains(key)) { dic.Add(key, o); } if (!urls.Contains(o.url.ToLower())) { urls.Add(o.url.ToLower()); } }); }); foreach (var u in urls) { string keynow = dtime.Date.ToString("yyyyMMdd") + u.ToLower(); string keyyestoday = dtime.Date.AddDays(-1).ToString("yyyyMMdd") + u.ToLower(); if (dic.ContainsKey(keynow) && dic.ContainsKey(keyyestoday)) { var per = (dic[keyyestoday].avgtime == 0 ? 0 : ((dic[keynow].avgtime - dic[keyyestoday].avgtime) / dic[keyyestoday].avgtime)); if (per > 0.2) { msg += string.Format("【{1}】上升{0}%({2}s,{3}s)\r\n", (per * 100).ToString("f2"), u, dic[keynow].avgtime.ToString("f2"), dic[keyyestoday].avgtime.ToString("f2")); } } } if (msg != "") { TaskLogHelper.Error("检查api的接口性能", "【" + configmodel.dblocalname + "】Api接口性能检查(与昨日对比平均耗时)" + "\r\n" + msg, "耗时性能预警任务"); } } catch (Exception exp) { this.OpenOperator.Error("【耗时性能预警任务】检查api的接口性能", exp); } }
/// <summary> /// 检查监控信息的预警 /// </summary> private void CheckMonitorInfoWarning() { try { string waringmsg = ""; List <tb_cluster_model> clusters = new List <tb_cluster_model>(); SqlHelper.ExcuteSql(GlobalConfig.MonitorPlatformManageConnectString, (c) => { tb_cluster_dal dal = new tb_cluster_dal(); clusters = dal.GetAllList(c); }); clusters.ForEach(o => { if (o.ifmonitor == true) { tb_cluster_monitorinfo_model monitorinfo = null; SqlHelper.ExcuteSql(MonitorClusterConnectString, (c) => { tb_cluster_monitorinfo_dal dal = new tb_cluster_monitorinfo_dal(); monitorinfo = dal.GetByServerId(c, o.id); }); if (monitorinfo != null) { var collectconfigs = new XXF.Serialization.JsonHelper().Deserialize <List <CollectConfig> >(o.monitorcollectconfigjson); foreach (var config in collectconfigs) { waringmsg += GetWarnningInfo(config, monitorinfo, o); } } } }); if (waringmsg != "") { TaskLogHelper.Error("检查监控信息的预警", "服务器性能检查(预警值检查)" + "\r\n" + waringmsg, "集群性能预警任务"); } } catch (Exception exp) { this.OpenOperator.Error("【集群性能预警任务】检查监控信息的预警", exp); } }
/// <summary> /// 检查Cluster的接口性能 /// </summary> private void CheckPerformanceOfCluster() { try { Dictionary <int, tb_cluster_model> clusters = new Dictionary <int, tb_cluster_model>(); SqlHelper.ExcuteSql(GlobalConfig.MonitorPlatformManageConnectString, (c) => { tb_cluster_dal dal = new tb_cluster_dal(); var cs = dal.GetAllList(c); foreach (var o in cs) { clusters.Add(o.id, o); } }); DateTime dtime = DateTime.Now; string msg = ""; Dictionary <string, tb_performance_dayreport_model> dic = new Dictionary <string, tb_performance_dayreport_model>(); List <int> serverids = new List <int>(); SqlHelper.ExcuteSql(MonitorClusterConnectString, (c) => { tb_performance_dayreport_dal dal = new tb_performance_dayreport_dal(); var models = dal.GetDayReport(c, dtime.Date.AddDays(-1)); models.ForEach(o => { string key = o.date.Date.ToString("yyyyMMdd") + o.serverid; if (!dic.Keys.Contains(key)) { dic.Add(key, o); } if (!serverids.Contains(o.serverid)) { serverids.Add(o.serverid); } }); }); foreach (var u in serverids) { if (!clusters.ContainsKey(u) || !clusters[u].ifmonitor) { continue; } string keynow = dtime.Date.ToString("yyyyMMdd") + u; string keyyestoday = dtime.Date.AddDays(-1).ToString("yyyyMMdd") + u; if (dic.ContainsKey(keynow) && dic.ContainsKey(keyyestoday)) { #region 性能对比 var per = PerformanceComparisonPer((double)dic[keynow].avgcpu, (double)dic[keyyestoday].avgcpu); if (per > 0.2) { msg += string.Format("【id:{1},{2}】【avgcpu】上升{0}%", (per * 100).ToString("f2"), u, clusters[u].servername) + "\r\n"; } per = PerformanceComparisonPer((double)dic[keynow].avgioread, (double)dic[keyyestoday].avgioread); if (per > 0.2) { msg += string.Format("【id:{1},{2}】【avgioread】上升{0}%", (per * 100).ToString("f2"), u, clusters[u].servername) + "\r\n"; } per = PerformanceComparisonPer((double)dic[keynow].avgiowrite, (double)dic[keyyestoday].avgiowrite); if (per > 0.2) { msg += string.Format("【id:{1},{2}】【avgiowrite】上升{0}%", (per * 100).ToString("f2"), u, clusters[u].servername) + "\r\n"; } per = PerformanceComparisonPer((double)dic[keyyestoday].avgmemory, (double)dic[keynow].avgmemory);//这里的内存是可用内存 所以是昨天的与今天对比 if (per > 0.2) { msg += string.Format("【id:{1},{2}】【avgmemory】(可用内存)下降{0}%", (per * 100).ToString("f2"), u, clusters[u].servername) + "\r\n"; } per = PerformanceComparisonPer((double)dic[keynow].avgnetworkdownload, (double)dic[keyyestoday].avgnetworkdownload); if (per > 0.2) { msg += string.Format("【id:{1},{2}】【avgnetworkdownload】上升{0}%", (per * 100).ToString("f2"), u, clusters[u].servername) + "\r\n"; } per = PerformanceComparisonPer((double)dic[keynow].avgnetworkupload, (double)dic[keyyestoday].avgnetworkupload); if (per > 0.2) { msg += string.Format("【id:{1},{2}】【avgnetworkupload】上升{0}%", (per * 100).ToString("f2"), u, clusters[u].servername) + "\r\n"; } #endregion } } if (msg != "") { TaskLogHelper.Error("检查Cluster性能", "服务器性能检查(性能与昨日对比性能)" + "\r\n" + msg, "集群性能预警任务"); } } catch (Exception exp) { this.OpenOperator.Error("【集群性能预警任务】检查Cluster性能", exp); } }