MDaemon 宕机自动告警教程:用 Windows 性能监视器 + PowerShell 实现零成本服务监控

  • 2026-08-19 12:43:27

MDaemon 宕机自动告警教程:用 Windows 性能监视器 + PowerShell 实现零成本服务监控

当 MDaemon 服务(SMTP、Webmail、ActiveSync 或任何其他组件)意外停止时,每一分钟的沉默都意味着用户无法发送或接收邮件。很多管理员往往要等到用户投诉后才发现故障。其实你不需要第三方监控工具,也能在第一时间收到通知。

Windows 自带的性能监视器(Performance Monitor)可以监控服务是否停止,并在检测到异常后立即触发告警。这篇教程将带你完成全套端到端设置:创建性能计数器警报、将其关联到发送通知邮件的 PowerShell 脚本,并测试整条链路,搭建一套零成本的 MDaemon 服务监控方案。

警报链路一览

在开始配置之前,先看清你将构建的整体流程。每个框代表你要配置的 Windows 组件,按配置顺序列出:

为什么选择性能监视器?

性能监视器(perfmon)是每个受支持的 Windows Server 版本都自带的组件,无需额外采购或部署第三方平台,就能完成基础的服务监控与异常告警。它可以监视计数器(例如 MDaemon 进程是否正在运行),并在该计数器跨过阈值时触发操作。结合任务计划程序(Task Scheduler)和一段简短的 PowerShell 脚本,它就变成一个轻量级、零成本的自动告警系统,直接运行在邮件服务器本地。

本文介绍的方法适用于:

  • MDaemon 核心服务
  • MDaemon Webmail (WorldClient)
  • MDaemon 远程管理 (WebAdmin)
  • MDaemon ActiveSync
  • MDaemon XMPP 服务
  • Security Gateway 组件(如适用)

开始之前的准备工作

你需要准备好以下内容:

  1. 运行 MDaemon 的 Windows Server 的管理员权限。
  2. 一个独立于被监控 MDaemon 服务器之外的可用 SMTP 服务器——如果 MDaemon 服务宕机,你将无法通过它发送警报邮件。告警邮件同样走 SMTP 投递,如果还需要区分实际投递地址和用户看到的发件人/收件人,可先阅读:SMTP 信封与邮件头有什么区别?MDaemon 邮件投递原理与排查实战
  3. PowerShell 5.1 或更高版本(Windows Server 2016 及更高版本已内置)。
  4. 明确你的环境中哪些 MDaemon 服务是业务关键型服务。

第 1 步:确定要监控的进程

性能监视器通过可执行文件名称(不带 .exe 扩展名)来跟踪进程。对于最常见的 MDaemon 服务,它们分别是:

  • MDaemon — 核心邮件引擎
  • WorldClient — Webmail 邮件系统
  • WebAdmin — 远程管理
  • MDSpamD — ActiveSync 服务
  • WCXMPPServer — XMPP/即时通讯服务

在 MDaemon 服务器上打开任务管理器,在“详细信息”选项卡下确认确切的进程名称。如果你要同时监控多个服务,需要为每个服务重复以下步骤。

第 2 步:创建警报邮件脚本

在构建警报本身之前,先创建它将要运行的 PowerShell 脚本。将以下代码保存为 C:\Scripts\Send-MDaemonAlert.ps1,并根据你的环境调整参数:

param(
    [string]$ServiceName = "MDaemon"
)

$smtpServer = "smtp.yourrelay.com"
$smtpPort   = 587
$smtpUser   = "alerts@example.com"
$smtpPass   = ConvertTo-SecureString "YOUR-APP-PASSWORD" -AsPlainText -Force
$credential = New-Object System.Management.Automation.PSCredential($smtpUser, $smtpPass)

$from    = "alerts@example.com"
$to      = "admin@example.com"
$subject = "[警报] MDaemon 服务 '$ServiceName' 在 $env:COMPUTERNAME 上已宕机"
$body    = @"
服务器 $env:COMPUTERNAME 上的性能监视器警报检测到:
MDaemon 相关进程 '$ServiceName' 当前未运行。

检测时间 : $(Get-Date -Format 'yyyy-MM-dd HH:mm:ss')
服务器   : $env:COMPUTERNAME
服务     : $ServiceName

请立即进行排查。
"@

Send-MailMessage -From $from -To $to -Subject $subject -Body $body `
    -SmtpServer $smtpServer -Port $smtpPort -UseSsl `
    -Credential $credential

几点重要说明:

  • 密码安全: 在脚本中以明文形式存储密码很方便,但不够安全。对于生产环境,可以使用 Export-CliXml 导出凭据并在运行时导入,或者使用 Windows 凭据管理器(Windows Credential Manager)。
  • Cmdlet 说明: 微软已将 Send-MailMessage 标记为过时(legacy),但它仍可正常使用,并且是此类脚本中最简单的方法。如果你喜欢现代化替代方案,可以从 PowerShell Gallery 安装 Send-MailKitMessage 模块并替换此命令。
  • 非常关键:请勿通过 MDaemon 本身进行中继!

    请将中继指向被监控的 MDaemon 服务器之外的其他 SMTP 服务。如果 MDaemon 恰好是宕机的服务,通过它发出的警报将永远无法离开服务器。这是人们设置此功能时最常犯的错误。 告警链路不能依赖故障源本身,否则一旦服务中断,管理员将完全收不到通知。

在继续下一步之前,先单独测试脚本:

powershell.exe -ExecutionPolicy Bypass -File "C:\Scripts\Send-MDaemonAlert.ps1" -ServiceName "MDaemon (测试)"

如果成功收到测试邮件,说明可以继续。

第 3 步:将脚本封装到计划任务中

性能监视器警报只能触发计划任务,而不能直接运行脚本。我们需要创建性能监视器将调用的任务:

  1. 打开任务计划程序taskschd.msc)。
  2. 在右侧“操作”面板中,选择创建任务(不要选“创建基本任务”)。
  3. 常规选项卡中:
    • 命名为 MDaemon-Down-Alert
    • 选择 “不管用户是否登录都要运行”
    • 勾选 “使用最高权限运行”
  4. 跳过“触发器”选项卡——性能监视器会自动提供触发信号。
  5. 操作选项卡中,点击“新建”并进行如下配置:
    • 操作:启动程序
    • 程序/脚本powershell.exe
    • 添加参数-ExecutionPolicy Bypass -File "C:\Scripts\Send-MDaemonAlert.ps1" -ServiceName "MDaemon"
  6. 设置选项卡中,取消勾选“如果运行时间长于以下时间,则停止任务”,防止因 SMTP 中继延迟导致邮件被强制中断。
  7. 点击“确定”,并在弹出的提示框中输入服务账户凭据。

在任务计划程序中手动运行一次该任务,确认其能够正常发送邮件。

第 4 步:创建性能计数器警报

现在来到最核心的部分:监控进程并触发任务的警报。

  1. 打开性能监视器perfmon.msc)。
  2. 在左侧面板中,展开 数据收集器组用户定义
  3. 右键点击“用户定义”,选择 新建数据收集器组
  4. 命名为 MDaemon Service Alert,选择 手动创建(高级),然后点击“下一步”。
  5. 选择 性能计数器警报,点击“下一步”。
  6. 点击“添加”,展开 Process(进程),选择计数器 ID Process,并在“选定对象的实例”下选择 MDaemon(或你要监控的进程)。点击“添加”,然后点击“确定”。
  7. “警报条件” 设置为 “低于”“限制” 设置为 1。这意味着:“只要进程没有有效的 PID(即进程未运行),就触发警报。”
  8. 点击“下一步”,保持默认保存位置,点击“完成”。

调整采样频率与操作关联

默认情况下,警报每 15 秒才检查一次。你可以根据需求缩短或延长该间隔:

  1. 在“用户定义”下,点击刚创建的 MDaemon Service Alert
  2. 在右侧面板中,右键点击 DataCollector01,打开 属性
  3. 警报 选项卡中,确认计数器和阈值设置无误。
  4. 警报操作 选项卡中,勾选 “在应用程序事件日志中记录条目”,这样即使邮件发送成功,也能留下审计轨迹。
  5. 警报任务 选项卡中,输入 MDaemon-Down-Alert(即第 3 步创建的任务名称)。在“任务参数”中可以传入 MDaemon 或其他标签,以便邮件明确标出具体的服务。
  6. 在父级数据收集器组的属性中,将 采样间隔 设置为一个合理的值——通常为 30 秒或 60 秒。采样过密会增加系统开销,采样过疏则会导致感知故障的时间变长。右键点击 MDaemon Service Alert 数据收集器组,选择 启动

提示: 为了让警报在服务器重启后依然有效,请打开其属性,在 计划 选项卡中添加启动计划;或者直接在数据收集器组的“属性”→“常规”选项卡中配置为随系统自动启动。

第 5 步:为每个关心的服务重复操作

对于 Webmail (WorldClient)、WebAdminActiveSync 或任何其他组件,都可以沿用相同的模式。你可以选择:

  • 方案 A: 为每个服务创建一个数据收集器组,分别指向一个传递不同 -ServiceName 参数的任务(推荐,排错逻辑更清晰);
  • 方案 B: 创建一个包含多个计数器(每个进程一个)的单一数据收集器组,由脚本统一记录哪个进程触发了警报。

第 6 步:进行端到端测试

测试步骤如下:

  1. 打开服务控制台(services.msc)。
  2. 手动停止 MDaemon 服务。
  3. 在你设定的采样间隔时间内,你应该会看到:
    • 应用程序事件日志 中出现来自 Diagnosis-PLA 事件源的记录,表明警报已触发;
    • 管理员收件箱收到了来自 PowerShell 脚本的通知邮件;
    • MDaemon-Down-Alert 计划任务的历史记录显示运行成功。
  4. 测试完成后重新启动服务。如果链条中的任何环节失败,MDaemon 服务器上的事件日志通常是查找原因的最快途径。

生产环境加固建议

基础功能搞定后,以下几个小改进能大幅提升生产环境下的可靠性:

  1. 将 Windows 服务恢复机制作为第一道防线:

    services.msc 中打开 MDaemon 服务的属性,切换到 恢复 选项卡,将“第一次失败”和“第二次失败”都设置为 “重新启动服务”。这通常能在警报触发之前就解决宕机问题——但警报依然需要保留,因为你必须要知道曾经发生过故障。

  2. 将警报发送到邮件组,而非个人邮箱:

    如果接收警报的唯一管理员正好休假,警报就形同虚设。

  3. 考虑引入第二通知渠道:

    邮件通知在工作时间很有效,但在夜间很容易被忽略。只需要多写几行代码,相同的 PowerShell 脚本就可以将消息推送至 Microsoft Teams Webhook、通过 Twilio 触发短信,或发布到 Slack 频道。

  4. 监控“监控者本身”:

    配置每周一次的定期测试;哪怕只是让计划任务发送一封带有“这是一次测试”主题的邮件,也能确保中继凭据没有过期、脚本依旧可以正常执行。

告警解决的是“第一时间知道宕了”。如果还希望主服务器故障后业务能自动切走,需要把监控和集群、故障转移一起规划,可继续阅读:邮件服务器宕机怎么办?MDaemon 高可用(HA)与故障转移完整方案

总结

借助于性能监视器任务计划程序以及一段简短的 PowerShell 脚本,无需安装任何额外的第三方软件,仅使用 Windows 系统自带的工具,就能实现与专业监控套件相同的“故障即时通知”功能,完成一套零成本和 MDaemon 服务监控与自动告警。

首次配置大约只需要 15 分钟,后续扩展到其他 MDaemon 组件也只需要几分钟。对于极其依赖 MDaemon 进行日常沟通的企业而言,只要它在用户发觉前捕获到一次故障,这项投入就物超所值。

相关阅读

 

上海云璨:提供 MDaemon 企业邮件服务器服务

上海云璨信息技术有限公司提供 MDaemon 产品代理、技术咨询与部署支持服务,围绕企业邮件服务器建设、系统部署、高可用、故障转移及邮件迁移等场景,帮助企业搭建稳定可靠的邮件系统。

如果您的企业正在规划或优化 MDaemon 邮件服务器,欢迎联系上海云璨了解产品与实施方案。

咨询电话:021-50583875

咨询邮箱:service@yuncan.com

了解 MDaemon 企业邮件服务器及产品资料

如果您同时希望在邮件抵达服务器和用户之前加强垃圾邮件、钓鱼邮件及恶意软件防护,也可以了解 SecurityGateway 邮件安全网关解决方案。

了解 SecurityGateway 邮件安全网关解决方案

联系我们
电话 021-50583875
扫码咨询
扫码咨询