美文网首页
Windows计划任务状态监控

Windows计划任务状态监控

作者: 不正经运维 | 来源:发表于2018-04-23 09:19 被阅读578次

    2018年4月23日 星期一

    08:17

    其实脚本早就写好了,但是一直没有根据知识体系进行拆分(我都写到一块去了)

    需求

    需要监控Windows中计划任务的执行状态,主要包括上一次的执行结果和计划任务状态。如下图所示。

    Windows计划任务

    思路

    计划任务的监控很简单也可以很难。简单在于你可以直接监控某任务,复杂在于自动发现并进行监控。

    和运维人员了解了下,大家监控的计划任务不止一个,为了省时省力,减少配置工作量,所以计划采用自动发现的方式来监控了。

    上面这条的主要原因就是,端口监控被团队的一个人员搞得惨不忍睹。

    自动发现(Discover)

    如何进行自动发现,这是个Zabbix的词汇,也暴露了我们内部使用的监控系统了。

    Zabbix自动发现原理就是调用Agent一个Key,Agent返回自动发现脚本执行的结果。

    通常,自动发现的结果如下,是个JSON格式的东东:

    {
        "data" : [
            {"{#NAME}": "Name1"},
            {"{#NAME}": "Name2"}
        ]
    }
    

    这里的{#NAME}就是我们在Zabbix中要引用的Key,我们要保证尽量不重名(虽然没这个规定,但是没看过代码,不确定Zabbix会不会抽个疯)。

    我这里计划返回的结果是这样子的:

    {
        "data" : [
            {"{#SCHTASKNAME}": "TaskName1"},
            {"{#SCHTASKNAME}": "TaskName2"}
        ]
    }
    

    如何实现?

    上面简单的介绍了下自动发现的原理,后面就好办了。因为Zabbix没有自带的计划任务接口,所以得我们自己编写脚本。

    实现步骤分为三步:

    1. 通过脚本获取符合条件的计划任务列表;
    2. 通过脚本查询指定计划任务状态上次运行结果
    3. 根据返回的结果,设置合适的触发器进行告警;

    具体实施

    各位看官,我本来计划用一篇文章全部说完的,但是没想到,Windows的各种问题导致我用了几种方法才解决。

    具体方法如下:

    1. batch通过schtasks.exe进行计划任务进行采集;
    2. powershell通过cmdlet进行计划任务信息采集;
    3. powershell通过COM对象进行计划任务信息采集;

    第3条路再不通的话,我计划试试vbs或者直接DotNet写程序了。

    因为问题解决了,所以就不再絮絮叨叨了。

    参考

    其实参考内容挺多的,主要是各种疑难杂症的处理。

    相关文章

      网友评论

          本文标题:Windows计划任务状态监控

          本文链接:https://www.haomeiwen.com/subject/ofrklftx.html