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
若需要自定义邮件主题和列名称以及邮件的描述,可向下表插入相关信息。
INSERT INTO [dbo].[M_MailFormart] ([Subject],[Formart],[Desc],[Inserttime])
VALUES (<Subject>,<Formart>,<Desc>,<Inserttime>)
(2)添加邮件内容M_SendMailItem
上述已经说明了邮件内容格式,M_MailFormart邮件格式表中的Subject内容一定要与M_sendmailitem邮件信息表的Subject对应上,且表格列名称要与邮件内容对应上。
如下定义了四列,也要在M_MailFormart的ForMart字段定义四列。添加完后邮件就会发送。
/*邮件内容定义*/
DECLARE @body VARCHAR(MAX)
SET @body=
'<tr>'+
'<td width=80 style="height:18pt"></td>'+
'<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>'+
'<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>'+
'<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>'+
'<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>'+
'<td width=80 style="height:18pt"></td>'+
'</tr>'
/*添加邮件记录*/
INSERT INTO SQLMONITOR.dbo.m_sendmailitem
(messagetype,
message,
servername,
jobcode,
jobname,
stepid,
createdate,
senddate,
sendstatu,
subject,
sendername,
recipients,
copyrecipients,
bodyformat,
importance,
servertype)
SELECT 'Info',
@body,
'服务器名称',
'主题内容',
'主题内容',
NULL,
GETDATE(),
NULL,
'F',
'主题内容',
'SqlMonitor',
REPLACE(Stuff((SELECT DISTINCT ';' + email
FROM dbdmonitor.dbo.memberlist m WITH (NOLOCK)
WHERE id > 9000AND m.issendmail = 'T'
FOR XML PATH('')),1,1,''),'''','''''' ) AS recipients,
NULL,
'HTML',
'Normoal',
'P'
报警邮件内容脚本
以下为用户异常登录自定义的邮件内容。
5.2方式二:通过作业失败添加邮件
若觉得邮件自动格式添加麻烦,可通过已经有的格式添加邮件信息。以作业失败为主题的报警,可直接调用存储过程spb_AutoGetJobError添加报警信息。
EXECUTE [dbo].[spb_AutoGetJobError]
@jobcode='TEST'--报警作业Jobcode,若没有作业,则可随便填写。
,@Messages='TEST'--报警内容
,@Flag=0 --报警类型,默认0:Error 1:Warning 其他:Info
测试结果如下图所示:报警主题是作业失败,报警格式是作业报警格式,在Error Message中显示了需要报警的信息。
SQL Server监控报警架构_如何添加报警的更多相关文章
- 《BI那点儿事》SQL Server 2008体系架构
Microsoft SQL Server是一个提供了联机事务处理.数据仓库.电子商务应用的数据库和数据分析的平台.体系架构是描述系统组成要素和要素之间关系的方式.Microsoft SQL Serve ...
- SQL Server 表的管理_关于数据增删查改的操作的详解(案例代码)
SQL Server 表的管理_关于数据增删查改的操作的详解(案例代码)-DML 1.SQL INSERT INTO 语句(在表中插入) INSERT INTO 语句用于向表中插入新记录. SQL I ...
- SQL Server 监控系列(文章索引)
一.前言(Introduction) SQL Server监控在很多时候可以帮助我们了解数据库做了些什么,比如谁谁在什么时候修改了表结构,谁谁在删除了某个对象,当这些事情发生了,老板在后面追着说这是谁 ...
- SQL Server监控清单
SQL Server监控清单 一. 服务器1. 状态监控(1) 服务器是否可访问?(2) 相应的数据库服务是否启用?(3) 操作系统事件日志中的错误或告警(4) 磁盘可用空间 服务器状态监控,不管使用 ...
- SQL Server 表的管理_关于事务的处理的详解(案例代码)
SQL Server 表的管理_关于事务的处理的详解(案例代码) 一.SQL 事务 1.1SQL 事务 ●事务是在数据库上按照一定的逻辑顺序执行的任务序列,既可以由用户手动执行,也可以由某种数据库程序 ...
- SQL Server 表的管理_关于表的操作增删查改的操作的详解(案例代码)
SQL Server 表的管理_关于表的操作增删查改的操作的详解(案例代码) 概述: 表由行和列组成,每个表都必须有个表名. SQL CREATE TABLE 语法 CREATE TABLE tabl ...
- 通过Visual Studio 2012 比较SQL Server 数据库的架构变更
一 需求 随着公司业务的发展,数据库实例也逐渐增多,数据库也会越来越多,有时候我们会发现正式生产数据库也测试数据库数据不一致,也有可能是预发布环境下的数据库与其他数据库架构不一致,或者,分布式数据库上 ...
- SQL Server 表的管理_关于事务操作的详解(案例代码)
SQL Server 表的管理_关于事务操作的详解(案例代码) 1.概念 事务(transaction): 是将多个修改语句组合在一起的方法,这个方法中的所有语句只有全部执行才能正确完成功能.即要么全 ...
- SQL Server 监控 使用sp_trace_create
监控前言 上一节我们提到了MSSQL的基于SQL Event的监控,但是有些时候我们需要更加详细.适用于调优排错的监控.SQL Server内部运行的可见性是的查询调整.优化和综合排查成为可能!这一节 ...
随机推荐
- Python来做应用题及思路
Python来做应用题及思路 最近找工作头疼没事就开始琢磨python解应用题应该可以,顺便还可以整理下思路当然下面的解法只是个人理解,也欢迎大佬们给意见或者指点更好的解决办法等于优化代码了嘛,也欢迎 ...
- Microsoft SQL Server 2008 R2 安装卸载
问题 问题1 标题: Microsoft SQL Server 2008 R2 安装程序 ------------------------------ 出现以下错误: Could not open k ...
- MMORPG大型游戏设计与开发(服务器 AI 逻辑设定和状态结点)
人工智能(AI)中往往都会有这么一个问题,那就是我要做什么?我该怎么做?我需要什么?所以这里所谓的智能就是赋予AI对象的判断力,以及它根据判断得到的相应反应.就好比,你去商店买东西,钱够别人才卖给你, ...
- Python mock
在测试过程中,为了更好地展开单元测试,mock一些数据跟对象在所难免,下面讲一下python的mock的简单用法. 关于python mock,网上有很多资料,这里不会讲的特别深,但一定会是实用为主, ...
- [LeetCode] Longest Palindrome 最长回文串
Given a string which consists of lowercase or uppercase letters, find the length of the longest pali ...
- [LeetCode] Rank Scores 分数排行
Write a SQL query to rank scores. If there is a tie between two scores, both should have the same ra ...
- JQuery Ajax调用asp.net后台方法
利用JQuery的$.ajax()可以很方便的调用asp.net的后台方法. 先来个简单的实例热热身吧. 1.无参数的方法调用 asp.net code: using System.Web.Scrip ...
- 基于C/S架构的3D对战网络游戏C++框架_05搭建系统开发环境与Boost智能指针、内存池初步了解
本系列博客主要是以对战游戏为背景介绍3D对战网络游戏常用的开发技术以及C++高级编程技巧,有了这些知识,就可以开发出中小型游戏项目或3D工业仿真项目. 笔者将分为以下三个部分向大家介绍(每日更新): ...
- WebApp 九宫格抽奖简易demo
代码如下: <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <met ...
- java-正则表达式过滤标签
String str="one <a href=u.php?action=show&uid=122113 target=_blank>超链接文本</a> tw ...