c#实现服务器性能监控并发送邮件保存日志


在C#中实现服务器性能监控并发送邮件保存日志,你可以使用.NET框架中的几个关键组件:`System.Diagnostics` 来监控性能,`System.Net.Mail` 来发送邮件,以及`System.IO` 来处理文件操作。

下面是一个简化的示例,展示了如何监控CPU使用率,并在CPU使用率超过某个阈值时发送邮件并保存日志。

首先,你需要在项目中添加对`System.Net.Mail`的引用(如果你使用的是.NET Core或.NET 5/6等较新版本,可能需要通过NuGet安装`System.Net.Mail`或使用`MailKit`等库,因为`System.Net.Mail`在.NET Core及更高版本中不是直接支持的)。


using System;
using System.Diagnostics;
using System.IO;
using System.Net;
using System.Net.Mail;
using System.Threading;

class ServerMonitor
{
    private const int ThresholdCpuUsage = 80; // CPU使用率阈值
    private const string MailFrom = "your-email@example.com";
    private const string MailTo = "recipient-email@example.com";
    private const string MailSubject = "Server Performance Alert";
    private const string SmtpServer = "smtp.example.com";
    private const int SmtpPort = 587;
    private const string SmtpUsername = "your-smtp-username";
    private const string SmtpPassword = "your-smtp-password";

    static void Main(string[] args)
    {
        while (true)
        {
            try
            {
                // 监控CPU使用率
                float cpuUsage = GetCpuUsage();

                if (cpuUsage > ThresholdCpuUsage)
                {
                    // 发送邮件并保存日志
                    string logMessage = $"Alert: CPU usage is {cpuUsage}% at {DateTime.Now}";
                    SendEmail(logMessage);
                    SaveLog(logMessage);
                }

                // 等待一段时间再次检查
                Thread.Sleep(60000); // 每60秒检查一次
            }
            catch (Exception ex)
            {
                // 记录错误或发送错误邮件(这里简单打印到控制台)
                Console.WriteLine($"Error: {ex.Message}");
            }
        }
    }

    private static float GetCpuUsage()
    {
        // 这里简化处理,实际可能需要更复杂的逻辑来获取CPU使用率
        // 示例:这里直接返回一个模拟值
        return 75.0f; // 假设的CPU使用率
    }

    private static void SendEmail(string message)
    {
        using (var client = new SmtpClient(SmtpServer, SmtpPort))
        {
            client.Credentials = new NetworkCredential(SmtpUsername, SmtpPassword);
            client.EnableSsl = true; // 根据你的SMTP服务器配置可能需要启用SSL

            using (var mail = new MailMessage(MailFrom, MailTo, MailSubject, message))
            {
                client.Send(mail);
            }
        }
    }

    private static void SaveLog(string message)
    {
        string logPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments), "ServerLogs.txt");
        File.AppendAllText(logPath, $"{message}\n");
    }
}

**注意**:

1. `GetCpuUsage` 方法在这个示例中只是返回了一个模拟的CPU使用率。在实际应用中,你可能需要使用更复杂的逻辑来准确获取CPU使用率,如通过读取性能计数器(`PerformanceCounter` 类)。

2. 邮件发送部分使用了SMTP协议,你需要根据你的邮件服务器提供商的指示修改SMTP服务器地址、端口、用户名和密码等信息。

3. 日志文件保存在用户的“我的文档”文件夹中,你也可以根据需要修改这个路径。

4. 这个示例程序会持续运行并每60秒检查一次CPU使用率,如果超过阈值,则发送邮件并保存日志。你可能需要将其部署为Windows服务或类似的后台任务,以确保它在没有用户交互的情况下运行。