【问题标题】:Heartbeat activity for Windows ServiceWindows 服务的心跳活动
【发布时间】:2012-01-26 03:53:45
【问题描述】:

我有许多 Windows 服务(用 C# 4.0 编写),它们以不同的时间间隔连接到数据库并执行各种复杂的任务。其中一些任务每天仅每隔 X 小时发生一次。但是,服务器支持团队想知道 Windows 服务是否真的在运行,因为任务之间可能存在很大的间隔。他们基本上想要每个 Windows 服务的心跳。每隔 5 分钟,Windows 服务就会执行一些可由 Microsoft System Center Operation Manager (SCOM) 监控的操作。任何解决方案都必须由 SCOM 轻松监控,因为服务器支持团队依赖它。

实现这种功能的最佳方式是什么?我想过使用性能计数器并让 SCOM 监听这些,但不确定这是否是性能计数器的最佳用途。

UPDATE(完全忘了包括):目前每个服务都会向数据库写入此操作,但 SCOM 不太擅长监控数据库记录和区分哪个服务在做什么等。

【问题讨论】:

  • 运营经理可以monitor Windows services作为一项功能。您不必在代码中实现任何其他内容。
  • @ValAkkapeddi 是的,我知道 Operations Manager 和 SCOM 可以查看服务是否正在运行、停止、暂停,但是如果我的服务正在运行并且由于某种原因没有执行其任务怎么办。我想让 SCOM 知道我的任务是否正在执行。
  • @ScottWylie 我明白了,那么在这种情况下,性能计数器似乎并不是一个糟糕的方法。您甚至可以设置智能指标,例如任务执行时间或您有什么来帮助您的支持团队更主动地识别和解决问题。

标签: c# windows-services


【解决方案1】:

如果您的案例仅限于服务健康检查,我很确定这可以通过 Windows 工具(例如 Windows 性能监视器)来完成。收集他们的数据应该比在通常断开连接的环境中创建心跳更容易。
有很多服务器和服务监控工具。其中少数也是开源的,您可以选择它作为初始步骤。

【讨论】:

    【解决方案2】:

    简单地写入数据库或事件日志怎么样?

    【讨论】:

    • 抱歉看到更新的问题。这是由 DB 现在完成的,它不适用于 SCOM。
    • 如果这个数据库有一个包含两列的表:servicename 和 heartbeattime?每个服务都会每 x 分钟更新一次
    【解决方案3】:

    您可以将 SNMP 或 WMI 检测添加到您的服务 - 顺便说一下,这将允许您引发不仅仅是心跳消息 - 例如,当您遇到需要重试操作的瞬时故障时,您还可以引发事件。

    那里有大量的 SNMP 库,并且 WMI 支持内置于 .NET 框架中。

    【讨论】:

      【解决方案4】:

      仅供参考,我正在研究这个问题,因为我的做法是服务应用程序在轮询 Db 以获取新工作时每 X 秒记录一次心跳消息。午夜时分,所有超过一周的心跳消息都会从日志中删除。我确实有一个应用程序安排在早上 7 点,它检查最后一次心跳消息的发送时间,但看起来我将不得不不断运行它以定期检查......并通知 Solar Winds 发送警报,如果有一个问题。

      【讨论】:

        猜你喜欢
        • 2016-08-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-02-03
        • 1970-01-01
        相关资源
        最近更新 更多