ImageVerifierCode 换一换
格式:DOCX , 页数:20 ,大小:19.48KB ,
资源ID:8964217      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/8964217.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(c实现服务器性能监控并发送邮件保存日志课案.docx)为本站会员(b****7)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

c实现服务器性能监控并发送邮件保存日志课案.docx

1、c实现服务器性能监控并发送邮件保存日志课案c#实现服务器性能监控并发送邮件保存日志这篇文章主要介绍了c#实现服务器性能监控并发送邮件保存日志的示例,代码分为客户端和服务端,客户端可安装为本地服务形式启动客户端代码复制代码 代码如下:using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Diagnostics;using System.ServiceProcess;using System.Text;using System.Threadin

2、g;using System.Management;using System.Configuration;using System.Net;using System.IO;namespace MON.WS public partial class Service : ServiceBase /post 11.9 /卸载服务 /installutil /u F:XLFX-2XLFXMON.WSbindebugMON.WS.EXE /安装服务 /installutil F:XLFX-2XLFXMON.WSbindebugMON.WS.EXE object threadObj; Thread job

3、Thread; Dictionary dicCounter; Dictionary dicDisk; public Service() InitializeComponent(); / / 服务启动 / / protected override void OnStart(string args) threadObj = new object(); dicCounter = new Dictionary(); dicDisk = new Dictionary(); jobThread = new Thread(new ThreadStart(Job); jobThread.IsBackgroun

4、d = true; jobThread.Start(); / / 服务停止 / protected override void OnStop() if (jobThread.IsAlive) jobThread.Abort(); jobThread.Join(); foreach (var obj in dicCounter.Values) obj.Dispose(); foreach (var obj in dicDisk.Values) obj.Dispose(); dicDisk.Clear(); dicCounter.Clear(); / / 监控线程 / void Job() whi

5、le (true) lock (threadObj) /监控开始 try var obj = new MONServiceClient.MONService(); var hn = Dns.GetHostName(); var ips = GetIpv4Address(hn); if (ips.Count 1) obj.Dispose(); Thread.Sleep(60000);/如果服务器出错,那么就每分钟去检查一次 WriteLog(一个IPV4的地址也没有得到); continue; DataSet ds = GetConfigDS(hn,ips,obj); if (ds = null

6、) obj.Dispose(); Thread.Sleep(60000); WriteLog(请检查WEBService和全局变量设置); continue; int sleepTime; try sleepTime = Convert.ToInt32(ds.Tables0.Rows0LOG_CIRC) * 1000;/毫秒 catch sleepTime = 60000; if (sleepTime 关闭 obj.Dispose(); continue; var arr = getWatchValue(ds).ToArray(); obj.UpdateServerStatus(arr); o

7、bj.Dispose(); catch (Exception ex) WriteLog(ex.Message); /监控结束 / / 获取配置信息 / / / DataSet GetConfigDS(string hn,List ips,MONServiceClient.MONService obj) DataSet ds; try if (ips.Count 1) ds = obj.GetMachineConfig(hn, ips0.ToString(), ips1.ToString(); else ds = obj.GetMachineConfig(hn, ips0.ToString(),

8、 ); catch ds = null; return ds; / / 获取性能数组 / / / List getWatchValue(DataSet ds) var result = new List(); result.Add(ds.Tables1.Rows0LIST_ID.ToString(); result.Add(GetValue(ds.Tables1.Rows0S_CPU.ToString().ToString(F2); result.Add(GetDiskValue(ds.Tables1.Rows0S_DISK_APP.ToString().ToString(F2); resul

9、t.Add(GetDiskValue(System.Environment.SystemDirectory.Substring(0, 2).ToString(F2); result.Add(GetValue(ds.Tables1.Rows0S_MEMORY.ToString().ToString(F2); result.Add(GetValue(ds.Tables1.Rows0S_FLOW_IN.ToString().ToString(F2); result.Add(GetValue(ds.Tables1.Rows0S_FLOW_OUT.ToString().ToString(F2); res

10、ult.Add(GetValue(ds.Tables1.Rows0S_WEB_PORT.ToString().ToString(F2); result.Add(GetValue(ds.Tables1.Rows0S_SQL_CONNECT.ToString().ToString(F2); result.Add(ds.Tables1.Rows0CAMP_ID.ToString(); result.Add(ds.Tables1.Rows0CICODE.ToString(); result.Add(ds.Tables1.Rows0S_KIND.ToString(); return result; /

11、/ 获取IPV4的地址 / / / List GetIpv4Address(string hn) var result = new List(); var ips = Dns.GetHostAddresses(hn); foreach (var ip in ips) if (ip.AddressFamily = System.Net.Sockets.AddressFamily.InterNetwork) result.Add(ip); return result; / / 获取性能计数器的值 / / / double GetValue(string configStr) try if (!di

12、cCounter.ContainsKey(configStr) var arr = configStr.Split(#); var pc = new PerformanceCounter(); pc.CategoryName = arr0; pc.CounterName = arr1; pc.InstanceName = arr2; dicCounter.Add(configStr, pc); return dicCounterconfigStr.NextValue(); catch (Exception ex) WriteLog(string.Format(计数器取值错误:012, conf

13、igStr, Environment.NewLine, ex.Message); return -1; / / 获取磁盘信息的值 / / / double GetDiskValue(string key) try if (!dicDisk.ContainsKey(key) ManagementObject DiskInfo = new ManagementObject(string.Format(win32_logicaldisk.deviceid=0, key); dicDisk.Add(key, DiskInfo); dicDiskkey.Get(); var s = Convert.To

14、Double(dicDiskkeySize); var l = Convert.ToDouble(dicDiskkeyFreeSpace); var d = (s - l) / s * 100; return d; catch (Exception ex) WriteLog(string.Format(获取磁盘信息值错误:012, key, Environment.NewLine, ex.Message); return -1; / / 写本地日志 / / void WriteLog(string text) try var logDic = ConfigurationManager.AppS

15、ettingsLogDic; int logDays; try logDays = Convert.ToInt32(ConfigurationManager.AppSettingsLogDays); catch logDays = 7; if (logDays 1) logDays = 7; var fs = LogFileMon(logDic, logDays); StreamWriter writer = new StreamWriter(fs); writer.WriteLine(DateTime.Now.ToString(); writer.WriteLine(text); write

16、r.WriteLine(-); writer.Flush(); writer.Close(); fs.Close(); catch /写日志出错就没办法了 / / 维护日志文件 / / / FileStream LogFileMon(string logDic, int dayCount) DirectoryInfo di = new DirectoryInfo(logDic); /如果日志文件夹不存在则创建日志文件夹; if (!di.Exists) di.Create(); /当前应保存的日志数据 List days = new List(); for (var i = 0; i dayC

17、ount; i+) var d = DateTime.Now.AddDays(0 - i).ToString(yyyy-MM-dd); days.Add(string.Format(0.log, d); /删除没用的历史数据 foreach (var f in di.GetFiles() if (!days.Contains(f.Name) f.Delete(); /返回当前日志文件的数据流 var fileName = Path.Combine(logDic, days0); var fs = File.Open(fileName, FileMode.Append,FileAccess.Wr

18、ite); return fs; 服务端代码 复制代码 代码如下:Imports System.Web.ServicesImports System.Web.Services.ProtocolsImports System.ComponentModelImports System.ThreadingImports System.Collections.GenericImports System.Text 若要允许使用 ASP.NET AJAX 从脚本中调用此 Web 服务,请取消对下行的注释。 _ _ _ _Public Class MONService Inherits System.Web

19、.SWebService _ Public Function GetMachineConfig(ByVal HostName As String, ByVal IP1 As String, ByVal IP2 As String) As DataSet Dim sqlda As New data_source.WebTao.Public.SqlServerData Try Dim sSQL As String = select * from mon_server_list & _ where S_HOSTNAME = & HostName & and IP1 = & IP1 & and IP2

20、 = & IP2 & Dim dt As DataTable = sqlda.GetMytable(sSQL) If dt.Rows.Count 1 Then sqlda.runSql(insert into mon_server_list (S_HOSTNAME,IP1,IP2,S_ISWATCH,CICODE,S_NAME,CAMP_ID,S_KIND,STATUS) values ( & HostName & , & IP1 & , & IP2 & ,0,待确定,待确定,-1,0,0) dt = sqlda.GetMytable(sSQL) sqlda.runSql(INSERT INT

21、O MON_INFO (LIST_ID,S_CPU,S_DISK_APP,S_DISK_SYS,S_MEMORY,S_FLOW_IN,S_FLOW_OUT,S_WEB_PORT,S_SQL_CONNECT,IN_TIME) VALUES ( & dt.Rows(0)(LIST_ID).ToString() & ,-1,-1,-1,-1,-1,-1,-1,-1, & Now.ToString() & ) ) End If Dim result As DataSet = sqlda.GetMyDataSet(select * from MON_PARAMETER) result.Tables.Ad

22、d(dt) Return result Catch ex As Exception Return Nothing End Try End Function _ Public Function UpdateServerStatus(ByVal ParamArray ValueArr() As String) Dim sqlda As New data_source.WebTao.Public.SqlServerData Try Dim sSQL As String = UPDATE MON_INFO & _ SET & _ S_CPU = & ValueArr(1) & _ ,S_DISK_AP

23、P = & ValueArr(2) & _ ,S_DISK_SYS = & ValueArr(3) & _ ,S_MEMORY = & ValueArr(4) & _ ,S_FLOW_IN = & ValueArr(5) & _ ,S_FLOW_OUT = & ValueArr(6) & _ ,S_WEB_PORT = & ValueArr(7) & _ ,S_SQL_CONNECT = & ValueArr(8) & _ ,IN_TIME = & Now.ToString() & & _ WHERE LIST_ID = & ValueArr(0) sqlda.runSql(sSQL) 没有策

24、略 If ValueArr(9).Trim() = -1 Or String.IsNullOrEmpty(ValueArr(9).Trim() Then Return 0 End If 找到策略 sSQL = select * from MON_CAMPAIGN_LIST where CAMP_ID = & ValueArr(9) Dim dt As DataTable = sqlda.GetMytable(sSQL) Dim Dic As New Dictionary(Of String, String) Dic.Add(S_PRIORITY, dt.Rows(0)(S_PRIORITY).ToString() Dic.Add(S_ACTION, dt.Rows(0)(S_ACTION).ToString() 验证策略 sSQL = select count(*) from MON_INFO where 1=1 and & dt.Rows(0)(S_NAME).ToString & an

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1