文档章节

SQL Server自动化运维系列——监控跑批Job运行状态

moki_oschina
 moki_oschina
发布于 2016/07/15 10:18
字数 1143
阅读 19
收藏 3

需求描述

在我们的生产环境中,大部分情况下需要有自己的运维体制,包括自己健康状态的检测等。如果发生异常,需要提前预警的,通知形式一般为发邮件告知。

在上一篇文章中已经分析了SQL SERVER中关于邮件的基础配置,本篇将利用此功能对多台Server的跑批Job进行监控。

本篇实现

1、每天检查服务器中的SQL Server跑批Job的运行状态,如果跑批失败,则发邮件告诉管理员失败的明细

2、解决多台服务器同时检查

 监控脚本

 首先我们来解决第二个问题,关于多台服务器的问题:

 <1>一般监控我们需要监控很多台服务器的JOb,所以对于服务器的量控制我们需要生成一个配置文件。

<computernames>
        <computername>
                wuxuelei-pc </computername> </computernames>

配置文件名字:computername.xml,这样就解决很多服务器的问题,只需要在配置文件中增加就可以,因为我在本地测试,所以就配置了我的本地电脑

<2>利用Power Shell脚本,抓取出每台服务器的Job的状态,并且将Job的运行时间、运行状态、描述以及错误的步骤等信息整理,形成汇总邮件。

脚本如下:

复制代码

$server = "(local)"
$uid = "sa"
$db="master"
$pwd="password"
$mailprfname = "TestMail"
$recipients = "787449667@qq.com"
$subject = "老大,快去看看这些服务器的Job跑失败了!"
$computernamexml = "F:\PowerShell\发送邮件\computername.xml"

function GetServerName($xmlpath)
{
    $xml = [xml] (Get-Content $xmlpath)
    $return = New-Object Collections.Generic.List[string]
    for($i = 0;$i -lt $xml.computernames.ChildNodes.Count;$i++)
    {
        if ( $xml.computernames.ChildNodes.Count -eq 1)
        {
            $cp = [string]$xml.computernames.computername
        }
        else
        {
            $cp = [string]$xml.computernames.computername[$i]
        }
        $return.Add($cp.Trim())
    }
    $return
}

function GetAlterCounter($xmlpath)
{
    $xml = [xml] (Get-Content $xmlpath)
    $return = New-Object Collections.Generic.List[string]
    $list = $xml.counters.Counter
}

function CreateAlter($message)
{
    $SqlConnection = New-Object System.Data.SqlClient.SqlConnection 
    $CnnString ="Server = $server; Database = $db;User Id = $uid; Password = $pwd" 
    $SqlConnection.ConnectionString = $CnnString 
    $CC = $SqlConnection.CreateCommand(); 
    if (-not ($SqlConnection.State -like "Open")) { $SqlConnection.Open() } 
    
    $cc.CommandText=
            " EXEC msdb..sp_send_dbmail 
             @profile_name  = '$mailprfname'
            ,@recipients = '$recipients'
            ,@body = '$message'
            ,@subject = '$subject'
            "
    $cc.ExecuteNonQuery()|out-null 
    $SqlConnection.Close();
}

$report = ""
$item = New-Object Collections.Generic.List[string]
$names = GetServerName($computernamexml)
foreach($cp in $names)
{
$srv=New-Object "Microsoft.SqlServer.Management.Smo.Server" "(local)"
$item=$srv.jobserver.jobs | where-object {$_.lastrunoutcome -eq "Failed" -and $_.isenabled -eq $TRUE} |  select OriginatingServer,name,Description,lastrunoutcome,lastrundate,JobSteps  
#Write-Host $item.JobSteps.name 
$report += " 服务器:"+$item.OriginatingServer+"  Job名称:"+$item.name+"  Job描述:"+$item.Description +"  Job最后运行状态:"+$item.lastrunoutcome  +"  Job最后运行时间:"+$item.lastrundate +"  Job失败的步骤名称:"+$item.JobSteps.name  + "`n"
}
#生产警告
CreateAlter $report

复制代码

通过上述脚本,生成跑批任务,就可以定时监控多台服务器的Job了。

当然,建议放在所有Job的运行完成之后,进行检测。

上述代码中,有两个技术点:

1、需要自己配置SQL Server邮件代理,具体方法参照我上一篇:点击此

2、需要自己配置跑批计划,方法自己网上搜,很简单。

 

本篇所监控的Job状态,利用的是上一篇我们创建的Job,跑批肯定失败的。

效果图如下

点击来看一下邮件明细内容:

给出的失败信息还是挺详细的。

另外,因为我只建立了一个失败的Job,所以邮件中只是发送一个条。

其实关于此监控,还有一些状态是可以监控的:

1、比如:可以指定服务器上的部分Job进行监控

2、监控Job的状态:失败或者正常等

以上内容,可以自己根据需要灵活配置。

结语 

本篇就列举了一下利用PowerShell实现自动化运维和检测。算作抛砖引玉了吧,自己另有需求可以自己灵活实现。

另外关于Job,一般除了SQL Server的Agent会存在,还有一部分是操作系统的计划任务也需要检测,我们后面的文章解决此问题。

关于SQL Server自动化运维和检测的内容很广泛,其中很多都是从日常的经验中出发,一步步的从手动到自动的过程。

后面的文章,我们将会更深入关于SQL Server的自动化优化运维进行分析。有兴趣的童鞋,可以提前关注。

 

文章的最后,给出该系列其它的一些监控方式,皆为原创

SQL Server需要监控哪些计数器

SQL Server自动化运维系列——监控性能指标脚本(Power Shell)

SQL Server自动化运维系列——监控磁盘剩余空间及SQL Server错误日志(Power Shell)

SQL Server自动化运维系列——关于邮件通知那点事(.Net开发人员的福利)

 

如果您看了本篇博客,觉得对您有所收获,请不要吝啬您的“推荐”。 

本文转载自:http://www.cnblogs.com/zhijianliutang/archive/2015/04/15/4428018.html

共有 人打赏支持
moki_oschina
粉丝 24
博文 180
码字总数 22482
作品 0
成都
程序员
运维工程师到底是个什么鬼

———————————————上篇———————————————— 前言 现在最前面,这篇文章一共分为两部分,第一部分主要是介绍运维工程师到底是个神马鬼工程师,他真的是每天跑机房,...

东丶
2017/08/24
0
0
在Google使用Borg进行大规模集群的管理 1-2

原作:Abhishek Vermay, Luis Pedrosaz, Madhukar Korupolu,David Oppenheimer, Eric Tune, John Wilkes http://research.google.com/pubs/pub43438.html 译者:难易 http://my.oschina.net/Ha......

难易
2015/10/10
3.1K
5
数据中心的自动运维之路

自动化运维其实也算是老生常谈,一谈谈了十几年,但却一直没有质的提升。数据中心的运维工作反而变得越来越繁重与复杂,当然这和这些年数据中心巨大的变化紧密相关,数据中心承载的各种应用越...

智和网管平台
2016/10/12
33
0
美团数据库运维自动化系统构建之路

【目录】 构建前的苦恼 数据库运维的多、杂、烦 构建中的坎坷和思考 第一次吃螃蟹:1.0版系统 吃螃蟹之后的反思 2.0版系统的架构设计&典型功能实现案例(三个) 构建后的效果&后期计划 构建前...

真爱2015
2016/09/28
25
2
分布式定时任务Elastic-Job框架在SpringBoot工程中的应用实践(二)

文章摘要:在生产环境中部署Elastic-Job集群后,那么如何来运维监控线上跑着的定时任务呢? 如果在生产环境的大规模服务器集群上部署了集成Elastic-Job的业务工程,而没有相应的运维监控工具...

癫狂侠
05/15
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

kernel version does not match DSO version

错误信息: kernel version 384.11 does not match DSO version 384.130.0 原因是: cuda driver版本太低,不匹配DSO 简单有效的修复方法,升级nvidia driver, 步骤如下: 1. google seach ...

刘小米
今天
0
0
maven坐标和依赖

一、maven坐标详解 <groupId>com.fgt.club</groupId><artifactId>club-common-service-facade</artifactId><version>3.0.0</version><packaging>jar</packaging> maven的坐标元素说......

老韭菜
今天
1
0
springmvc-servlet.xml配置表功能解释

问:<?xml version="1.0" encoding="UTF-8" ?> 答: xml version="1.0"表示是此xml文件的版本是1.0 encoding="UTF-8"表示此文件的编码方式是UTF-8 问:<!DOCTYPE beans PUBLIC "-//SPRING//......

隐士族隐逸
今天
1
0
基于TP5的微信的公众号获取登录用户信息

之前讲过微信的公众号自动登录的菜单配置,这次记录一下在TP5项目中获取自动登录的用户信息并存到数据库的操作 基本的流程为:微信设置自动登录的菜单—>访问的URL指定的函数里获取用户信息—...

月夜中徘徊
今天
0
0
youTrack

package jetbrains.teamsys.license.runtime; 计算lis package jetbrains.ring.license.reader; 验证lis 安装后先不要生成lis,要把相关文件进行替换 ring-license-checker-1.0.41.jar char......

max佩恩
今天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部