SQL Server监控报警架构_如何添加报警

一、数据库邮件报警介绍

数据库邮件是从SQL Server数据库引擎发送电子邮件企业解决方案,使用简单传输协议(SMTP)发送邮件。发送邮件进程与数据库的进程隔离,因此可不用担心影响数据库服务器。

数据库邮件发送要求联网,考虑数据库服务器的安全性,不能将所有服务器的外网开启;处理如下图所示:1、监控服务器轮询每个SQL数据库服务器;2、将获取的数据在监控服务器上集中处理,3、然后通过监控服务器的邮件服务发送邮件。

二、邮件模块处理

笔者发送的邮件内容如下所示,可分为个部分:1、发送主体(发生者);2、发送主题;3、邮件内容(报警开头,报警内容,报警解释);4、邮件结尾,每个部分的都需要HTML脚本的实现。

2.1 发送主体

发送主体即为邮件发送者,主体名称在配置邮件服务的时候制定。在执行邮件发送时必须要指定发送,同时可通过msdb.dbo.sysmail_profile系统表查看邮件主体名称;如下邮件测试,指定邮件发送主体SQLmonitor。

2.2 发送主题

发送主题可了解为邮件的分类,现有主题分类与说明如下。


邮件主题


分类说明


JobError Monitor


作业失败报警


Block Monitor


阻塞报警


SSISError Monitor


轮询失败报警


Identity Monitor


自增长报警


T_Space Monitor


大表监控报警


AG Monitor


AlwayOn高可用监控报警


LoginError Monitor


登录失败报警


Cpu Monitor


Cpu报警


Disk Monitor


磁盘报警


User Connection Monitor


用户连接数报警


AbnormityLogin Monitor


异常用户登录报警


JobTimeout Monitor


作业超时报警

   

2.3 邮件内容

邮件内容由三部分组成,分别为报警开头,报警内容,报警解释。

此三部分的内容可自定义格式,只要向M_MailFormart表添加如下数据:subject为报警主题,可定位此为哪种邮件;Formart为报警表格的列名,用逗号隔开;Desc为报警解释,若要换行用逗号隔开即可。

2.3.1 报警开头

报警开头包括三大块;"DBA"大字体凸显,邮件主题:通过集中处理时添加主题内容,监控时间:当前监控时间。

2.3.2 报警内容

报警内容主要格式是表格,表格包括列名称和列内容。

列名称:由M_MailFormart表的Formart字段控制。通过逗号分隔每个列名称。

列内容:列内容由报警处理脚本用户自定义插入,需要注意的是,用户自定义是要与列名称统一 。

由于表格是以HTML脚本控制,<tr></tr>表示表格的每行,<td></td>表示行中的列。例如要表示2行3列可书写为:

<tr><td>内容1</td><td>内容2</td><td>内容3</td></tr>

<tr><td>内容1</td><td>内容2</td><td>内容3</td></tr>

为了邮件输出的美观,必须设置表格格式,笔者定义:‘<td width=100 valign=top style="border:solid lightgrey 1.0pt;border-top:none;height:18pt;font-size:8.0pt;font-family:微软雅黑;color:black"></td>‘

  • width=100valign=top: 宽度100;向上对齐
  • border:solid lightgrey 1.0pt; border-top:none: 1pt的灰色边框,去除上边框
  • height:18pt;font-size:8.0pt;font-family:微软雅黑;color:black : 字体大小8pt,微软雅黑,黑色

2.3.3 报警解释

邮件解释描述了报警机制,报警如何处理等方面,此定义通过M_MailFormart表指定,需要换行通过逗号指定即可。

2.4 邮件结尾

邮件结尾只是申明此邮件,已经写定。

三、邮件发送列表

上述说明了将所有服务器的信息收集到监控服务器,然后统一分析处理,例如阻塞,作业失败等等。将处理完成的信息插入到邮件发送配置表M_SendMailItem中。

表中记录了邮件的各个信息,邮件报警通过获取该表信息,确定是否发送报警和报警内容等等。


字段名称


字段解释


MessageID


自增ID


MessageType


报警类型Error,Info


Message


报警内容


ServerName


服务器名称


JobCode


作业code;若非作业则为主题名称


JobName


作业名称;若非作业则为主题名称


Stepid


作业步骤;若非作业则NULL


CreateDate


新建时间


SendDate


发送时间


SendStatu


发送状态:S成功 F未发送 W不发送


SubJect


邮件主题


SenderName


发送主体


Recipients


发送人


CopyRecipients


抄送人


BodyFormat


发送格式HTML


Importance


发送等级


ServerType


服务器类型

四、报警流程

作业名称为:[报警]JK136009YW 发送报警邮件;每分钟执行一次,通过执行spb_M_SendMial发送报警,该存储过程的处理流程如下所示。

五、如何添加邮件报警

5.1方式一:自定义邮件主题

(1)添加邮件格式M_MailFormart

若需要自定义邮件主题和列名称以及邮件的描述,可向下表插入相关信息。

1 INSERT INTO [dbo].[M_MailFormart] ([Subject],[Formart],[Desc],[Inserttime])
2 VALUES (<Subject>,<Formart>,<Desc>,<Inserttime>)

(2)添加邮件内容M_SendMailItem

上述已经说明了邮件内容格式,M_MailFormart邮件格式表中的Subject内容一定要与M_sendmailitem邮件信息表的Subject对应上,且表格列名称要与邮件内容对应上。

如下定义了四列,也要在M_MailFormart的ForMart字段定义四列。添加完后邮件就会发送。

 1 /*邮件内容定义*/
 2 DECLARE @body VARCHAR(MAX)
 3 SET @body=
 4   ‘<tr>‘+
 5   ‘<td width=80 style="height:18pt"></td>‘+
 6   ‘<td width=100  valign=top style="border:solid lightgrey 1.0pt;border-top:none;height:18pt;font-size:8.0pt;font-family:微软雅黑;color:black">‘+列1内容+‘</td>‘+
 7   ‘<td width=100  valign=top style="border:solid lightgrey 1.0pt;border-top:none;height:18pt;font-size:8.0pt;font-family:微软雅黑;color:black">‘+列2内容+‘</td>‘+
 8   ‘<td width=100  valign=top style="border:solid lightgrey 1.0pt;border-top:none;height:18pt;font-size:8.0pt;font-family:微软雅黑;color:black">‘+列3内容+‘</td>‘+
 9   ‘<td width=100  valign=top style="border:solid lightgrey 1.0pt;border-top:none;height:18pt;font-size:8.0pt;font-family:微软雅黑;color:black">‘+列n内容+‘</td>‘+
10   ‘<td width=80 style="height:18pt"></td>‘+
11   ‘</tr>‘
12 /*添加邮件记录*/
13 INSERT INTO SQLMONITOR.dbo.m_sendmailitem
14             (messagetype,
15              message,
16              servername,
17              jobcode,
18              jobname,
19              stepid,
20              createdate,
21              senddate,
22              sendstatu,
23              subject,
24              sendername,
25              recipients,
26              copyrecipients,
27              bodyformat,
28              importance,
29              servertype)
30  SELECT ‘Info‘,
31         @body,
32         ‘服务器名称‘,
33         ‘主题内容‘,
34         ‘主题内容‘,
35         NULL,
36         GETDATE(),
37         NULL,
38         ‘F‘,
39         ‘主题内容‘,
40         ‘SqlMonitor‘,
41         REPLACE(Stuff((SELECT DISTINCT ‘;‘ + email
42                               FROM   dbdmonitor.dbo.memberlist m WITH (NOLOCK)
43                               WHERE  id > 9000AND m.issendmail = ‘T‘
44                               FOR XML PATH(‘‘)),1,1,‘‘),‘‘‘‘,‘‘‘‘‘‘ ) AS recipients,
45         NULL,
46         ‘HTML‘,
47         ‘Normoal‘,
48         ‘P‘

报警邮件内容脚本

以下为用户异常登录自定义的邮件内容。

5.2方式二:通过作业失败添加邮件

若觉得邮件自动格式添加麻烦,可通过已经有的格式添加邮件信息。以作业失败为主题的报警,可直接调用存储过程spb_AutoGetJobError添加报警信息。

1 EXECUTE [dbo].[spb_AutoGetJobError]
2 @jobcode=‘TEST‘--报警作业Jobcode,若没有作业,则可随便填写。
3 ,@Messages=‘TEST‘--报警内容
4 ,@Flag=0 --报警类型,默认0:Error 1:Warning 其他:Info

测试结果如下图所示:报警主题是作业失败,报警格式是作业报警格式,在Error Message中显示了需要报警的信息。

时间: 2024-10-13 08:39:32

SQL Server监控报警架构_如何添加报警的相关文章

SQL Server监控全解析

SQL Server监控全解析 在SQL Server的日常管理中,让SQL Server高效运行,且性能良好,是DBA需要做的事.DBA需要了解数据库的日常运行情况,对性能进行分析和调优,需要对线上环境部署监控.那我们都需要监控哪些方面呢? SQL Server服务器的CPU.内存.IO.网络流量.缓存等资源性能怎么样,各个相关服务如SQL Server服务.SQL Server代理服务等是否正常运行,这些一般使用开源的监控软件Zabbix来设置告警,当然针对数据库服务器的特性,添加一些SQL

《BI那点儿事》SQL Server 2008体系架构

Microsoft SQL Server是一个提供了联机事务处理.数据仓库.电子商务应用的数据库和数据分析的平台.体系架构是描述系统组成要素和要素之间关系的方式.Microsoft SQL Server系统的体系结构是对Microsoft SQL Server的主要组成部分和这些组成部分之间关系的描述.Microsoft SQL Server 2008系统由4个主要部分组成,这4个部分被称为4个服务,这些服务分别是数据库引擎.分析服务.报表服务和集成服务,这些服务之间相互存在和相互应用,它们的关

SQL Server 监控统计阻塞脚本信息

原文:SQL Server 监控统计阻塞脚本信息 数据库产生阻塞(Blocking)的本质原因 :SQL语句连续持有锁的时间过长 ,数目过多, 粒度过大.阻塞是事务隔离带来的副作用,它是不可避免的,而且是一个数据库系统常见的现象. 但是阻塞的时间和出现频率要控制在一定的范围内,阻塞持续的时间过长或阻塞出现过多(过于频繁),就会对数据库性能产生严重的影响. 很多时候,DBA需要知道数据库在出现性能问题时,有没有发生阻塞? 什么时候开始的?发生在那个数据库上? 阻塞发生在那些SQL语句之间? 阻塞的

高级DBA之路——《SQL Server 监控和诊断》

编写各大终端的程序员常常有"SQL语言很简单,DBA工作很轻松"的错觉,用惯了SQLite及其扩展框架OrmLite和GreenDAO的Android程序员更是如此,尤其当一个Android程序员看见自己上大学时又挂科又留级的损友从事DBA工作之后:"不好好学习也就只能用SQL增删改查了". 然而和各大终端编写SQL代码仅为了给界面做缓存不同,在服务器端的SQL Server的日常管理中,DBA需要考虑的是如何让SQL Server高效运行,且性能良好:DBA不仅需

0. SQL Server监控清单

原文:0. SQL Server监控清单 数据库服务器的监控可大致分为两类: (1) 状态监控:数据库服务器有没有在健康地运行? (2) 性能监控:健康运行的同时,有没有性能问题?可不可以更快些? 一. 服务器 1. 状态监控 (1) 服务器是否可访问? (2) 数据库服务是否启用? (3) 操作系统事件日志中的错误或告警 (4) 磁盘可用空间 2. 性能监控 (1) IO压力 (2) 内存使用 (3) CPU使用 (4) 网络带宽占用 这1,2,3,4是按照容易出现瓶颈的顺序排列的,由于磁盘的

SQL Server 表的管理_关于表的操作增删查改的操作的详解(案例代码)

SQL Server 表的管理_关于表的操作增删查改的操作的详解(案例代码) 概述: 表由行和列组成,每个表都必须有个表名. SQL CREATE TABLE 语法 CREATE TABLE table_name ( column_name1 data_type(size), column_name2 data_type(size), column_name3 data_type(size), .... ); 1.查看表 exec sp_help table1; 2.创建表 create tab

通过Visual Studio 2012 比较SQL Server 数据库的架构变更

一 需求 随着公司业务的发展,数据库实例也逐渐增多,数据库也会越来越多,有时候我们会发现正式生产数据库也测试数据库数据不一致,也有可能是预发布环境下的数据库与其他数据库架构不一致,或者,分布式数据库上线,发现某些不可预知的原因,也会导致数据库之间架构不一致等等.因此,在复杂的数据库对象中,迅速全部找出数据库的差异是DBA的一个职业技能.目前,这种比较工具很多,但是下面我们演示是开发人员通过常用工具Visual Studio 2012来比较SQL Server 数据库的架构变更差异情况. 二 比较

SQL Server 监控 使用sp_trace_create

监控前言 上一节我们提到了MSSQL的基于SQL Event的监控,但是有些时候我们需要更加详细.适用于调优排错的监控.SQL Server内部运行的可见性是的查询调整.优化和综合排查成为可能!这一节主要和大家说说SQL Server跟踪(SQL Server Profile)的一些监控方式和途径. 使用场景     记得某次给一家公司调优的时候,负责人发给我一堆业务的T-SQL脚本,我面对海量脚本还是从容,虽然不了解内部复杂的业务,但是我们得专注问题的关键 "慢",我们根据查询的&q

sql server监控清单

数据库服务器的监控可大致分为两类: (1) 状态监控:数据库服务器有没有在健康地运行? (2) 性能监控:健康运行的同时,有没有性能问题?可不可以更快些? 一. 服务器 1. 状态监控 (1) 服务器是否可访问? (2) 数据库服务是否启用? (3) 操作系统事件日志中的错误或告警 (4) 磁盘可用空间 2. 性能监控 (1) IO压力 (2) 内存使用 (3) CPU使用 (4) 网络带宽占用 这1,2,3,4是按照容易出现瓶颈的顺序排列的,由于磁盘的读写速度限制,通常IO是最容易出现瓶颈的地