文档章节

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

moki_oschina
 moki_oschina
发布于 2016/07/15 10:18
字数 1143
阅读 18
收藏 3
点赞 0
评论 0

需求描述

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

在上一篇文章中已经分析了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
博文 169
码字总数 22482
作品 0
成都
程序员
运维工程师到底是个什么鬼

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

东丶 ⋅ 2017/08/24 ⋅ 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 ⋅ 5

美团数据库运维自动化系统构建之路

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

真爱2015 ⋅ 2016/09/28 ⋅ 2

SiteView“倾心护航”运营商业务系统

由于业务服务越来越繁多,网络规模日渐复杂,用户对服务质量的要求也越来越高,运营商对IT运维系统的要求已经提升到全方位、多层次的境界,如何保障用户业务系统的稳定运行成为运营商IT运维系...

zhangzj ⋅ 2006/11/29 ⋅ 0

数据中心的自动运维之路

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

智和网管平台 ⋅ 2016/10/12 ⋅ 0

分布式定时任务Elastic-Job框架在SpringBoot工程中的应用实践(二)

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

癫狂侠 ⋅ 05/15 ⋅ 0

智能运维 | 百度自动化运维是怎么做的(上)——概念以及标准从何而来?

摘要:百度运维诞生于2008年,截至目前共打造了三代运维平台,百度的运维技术也经历了web化、开放化、智能化三个阶段。2014年,百度运维在行业率先提出智能运维理念,百度智能运维(IOP)团队...

百度云 ⋅ 05/04 ⋅ 0

大众点评运维架构详大揭秘!

今天分享专题大纲如图所示,从5个方面跟大家一起探讨: 1、点评运维团队的配置 目前我们运维分为4个组,相信跟大部分公司一样,运维团队分为:应用运维、系统运维、运维开发和监控运维,当然还...

让往事随风 ⋅ 2016/05/09 ⋅ 0

【干货】大众点评运维架构的图文详解

分享内容 今天分享专题大纲如图所示,从5个方面跟大家一起探讨: 1、点评运维团队的配置 目前我们运维分为4个组,相信跟大部分公司一样,运维团队分为:应用运维、系统运维、运维开发和监控运...

运维技术 ⋅ 2015/11/25 ⋅ 1

从0到1 | 滴滴DB自动化运维实践了解一下

一.滴滴DB架构介绍 一般来说,自动化运维都会根据自己原有的架构来设计自动化运维平台,上图是滴滴DB的架构图,最上面是TGW LVS,也就是大家所熟悉的VIP,接下来是代理层dbproxy。代理层下面...

技术小能手 ⋅ 05/11 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Spring Cloud构建微服务架构—创建“服务注册中心”

创建一个基础的Spring Boot工程,命名为eureka-server,并在pom.xml中引入需要的依赖内容: <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-par......

itcloud ⋅ 23分钟前 ⋅ 0

拖动

<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>event</title> <style> #box { width: 100px; height: 100px; background-color: aquamarine; position: absolute; } </style......

fyliujj ⋅ 25分钟前 ⋅ 0

es6 polyfill array

polyfill之javascript函数的兼容写法——Array篇 1. Array.isArray(obj) if (!Array.isArray) { Array.isArray = function(arg) { return Object.prototype.toString.call(arg) === '[objec......

球球 ⋅ 27分钟前 ⋅ 0

kibana启动异常

检查一下:kibana.yml 每一对key:value中,冒号之后应有空格。

增删改查1 ⋅ 29分钟前 ⋅ 0

js修改img的src属性刷新图片时的图片缓存问题

问题:上传一张图片,通过js更新src属性刷新图片使其即时显示时, 当img的src当前的url与上次地址无变化时(只更改图片,名称不变,不同图片名称相同)图片不变化(仍显示原来的图片) 但通过...

HaierBrother ⋅ 29分钟前 ⋅ 0

Mysql

1.Jdbc Url 设置allowMultiQueries为true和false mysql的批量更新是要我们主动去设置的, 就是在数据库的连接url上设置一下,加上* &allowMultiQueries=true *即可。 参数名称 参数说明 缺省...

瑟青豆 ⋅ 33分钟前 ⋅ 0

mysql导出导入表结构与数据

当我们需要进行数据迁移时,mysql自带的mysqldump会是最好的方式。 1.导出某张表的结构和数据 首先,我们应当使用服务器,打开终端,连接到所需要导出的表所在的服务器上。执行命令: mysqld...

hengbao5 ⋅ 33分钟前 ⋅ 0

世界杯也走向“比拼”大数据的时代

《日本经济新闻》6月19日报道称,俄罗斯足球世界杯已于6月14日揭开战幕。作为第21次举办的足球世界杯,如何活用大数据有可能成为决定各支球队胜负的重要因素。从对阵球队的分析到战术建议,还...

加米谷大数据 ⋅ 33分钟前 ⋅ 0

金额转为千分制,金额转中文大写

金额转关为大写 /** 数字金额大写转换(可以处理整数,小数,负数) */ function digitUppercase(n){ if(!n) reutrn "" let fraction = ['角', '分']; let digit = [...

YXMBetter ⋅ 36分钟前 ⋅ 0

开发利器JRebel部署SpringBoot项目

不要以为年纪轻轻就跌倒了人生谷底,未来还有更大的下降空间等着你。 idea下载和安装JRebel 激活JRebel 访问https://my.jrebel.com/ 使用facebook或twitter登录 勾选 Build project automati...

郑龙飞 ⋅ 42分钟前 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部