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

本文涉及的产品
云数据库 RDS SQL Server,基础系列 2核4GB
RDS SQL Server Serverless,2-4RCU 50GB 3个月
推荐场景:
简介: 原文:SQL Server自动化运维系列——关于邮件通知那点事(.Net开发人员的福利)需求描述 在我们的生产环境中,大部分情况下需要有自己的运维体制,包括自己健康状态的检测等。如果发生异常,需要提前预警的,通知形式一般为发邮件告知。
原文: SQL Server自动化运维系列——关于邮件通知那点事(.Net开发人员的福利)

需求描述

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

邮件作为一种非常便利的预警实现方式,在及时性和易用性方面也有着不可替代的优点。

所以,在本篇中将详细的分析下在SQL Server中的邮件通知功能及使用方式等。 

本篇实现

1、通过SQL Server自带的邮件功能实现运维的预警及检测

2、利用数据库邮件组件代替传统的C#发送邮件的弊端

3、实现Job任务运行状态的检测

4、利用PowerShell实现Job任务计划的检测

<1>基础配置

首先,我们来配置下SQL Server中的邮件组件的基础服务项。SQL Server自从05版本起,邮件功能就不需要开启外配配置管理器了,它有着自己的组件,实现邮件发送的功能。

如果,没使用过,可以按照以下步骤进行配置,步骤很简单。

右键,配置数据库邮件

然后直接下一步就行,然后新建一个账户

然后,下一步完成就可以,步骤很简单,这里面有几个概念需要理清楚,对于SQL Server的邮件账户是由权限控制的,目的是实现不同的人使用不同的邮件账户,比如大型数据库的管理一般有好几个DBA负责运维,分职责之后的运行,发送预警邮件也就产生了区分,总不能模块中出现了任何问题都发送给一个人。

跟你一毛钱关系都没有的异常,天天给你发邮件,是不是很不爽??....这种管理方式是灰常暴力的!

为了解决上述问题,SQL Server对邮件的账户进行了分类:

 

分为公共账户和专用账户。

一般如果管理人员少,就配置一个公共账户就可以,有问题都发送到该邮箱就可以。

至此,你已经完成了数据库邮件模块的配置,步骤很简单。这里可以发送一封测试邮件,来测试下邮件的连通性。

提示:SQL Server邮件组件的运行需呀SQL Server Age运行执行,所以需要确保此服务正在运行。

在“数据库邮件”上右键,发送测试电子邮件,输入目标邮箱的地址,然后单击发送就可以。

 

至此,你的SQL Server已经完成邮件组件的基础配置,然后剩下的工作就是如何利用该组件进行部分工作的完成了。

 

<2>c#调用数据库邮件组件进行邮件的发送 

还记得当年刚毕业的时候,对于发送邮件这块功能当时是异常的痴迷,各种的研究和各种的调试。

后来的终归在废了九牛二虎之力之后,终于在一个午夜梦回之时看到了我梦寐以求的测试邮件发送通知,想想一个字描述:草!

大体我记得需要引用以下几个命名空间:using System.Net;  using System.Net.Mail; 

然后利用C#提供的SmtpClient类进行组装成邮件实体,而后一个Send()方法,这其中的痛苦点在于各种编码规范等。

我相信现在也有很多程序猿依然再采用着这种方式。

今天提供另外一种灵活的实现方式,利用SQL Server数据库的邮件组件进行邮件的发送。

关于上面第一个步骤提供的邮件组件的调用,其实在SQL Server中是提供系统自带的存储过程进行实现的。方法如下:

该存储过程提供了发送邮件的的各种参数,完全满足发送邮件的各种需求,比如:主题、内容、附件、CC、秘密CC....等等吧

调用该存储过程的方法如下:

    --存储过程调用发邮件
    EXEC msdb.dbo.sp_send_dbmail
    @profile_name = 'testMail',
    @recipients = '787449667@qq.com',
    @body = '这是测试邮件',
    @subject = '我发的', 
    @file_attachments='C:\temp\3-26-2015-16-20-21.png'

上面一个简单的方法执行既可以实现,邮件的发送。

然后,你需要的就是c#调用该存储过程了。

关于写C#代码通过Ado.net调用存储过程的过程这里就不赘述了,我相信这是入门级别的小白也能搞定的事情了。

而后,这里捎带分析一下邮件组件的原理和性能问题。我相信这是很多人关心的,其实SQL Server的邮件发送时通过一个底层的JOB轮询执行的,所以根本不用担心其执行顺序和性能问题。

并且SQL Server为此还提供了几个系统的视图来查看历史运行状态和当前邮件的队列状态:

    --邮件内容
    SELECT * FROM msdb.dbo.sysmail_allitems

    --邮件发送日志
    SELECT * FROM msdb.dbo.sysmail_event_log

并且SQL Server提供了邮件重新发送的功能以及其它默认参数,具体设置参照此画面:

至此,已经完成了利用C#进行发送邮件的功能。

我相信基本上用C#就会搭配微软自己的SQL Server数据库,而使用它之后就可以少量的代码实现邮件发送的功能。

 

 <3>实现Job任务运行状态的检测 

在我们使用SQL Server的时候,很多情况下都需要自定义Job进行部分功能的实现,而大部分时间是采取凌晨或者非业务期进行工作。

而此Job的运行结果的检测便形成了一个需要跟踪的问题,比如有时候N个Job的运行,只有几个出现问题,并且不确定的此Job发生在那个机器上,所以自动化运维的重要性就不言而喻了。

对于上面问题的解决,SQL Server提供了很简单的配置就可以实现。

(1)首先,需要定义几个操作员,说到底就是几个人值班运维此数据库的

 

上面,我就定义了一个人,其实可以定义多个人,几个运维人员几个...

(2)其次,需要定义警报,说到底就是将产生的预警发送给上面的几个运维人员。

这里面的严重性选项其实是一个很重要的功能,一些简单的问题警告有时候是不需要及时关注的,或者说不需要暂时处理的。

但是有些问题则需要里面去解决,比如服务器宕机....

然后,我们来将此预警关联之操作员

到此,我们已经完成了预警的检测配置,然后需要的就是关联下Job代理的任务属性值。

经过上面的配置,任何我们自定义的Job工作状态都可以进行自动化检测了。

比如:某个Job跑批成功了,某个Job跑批失败了。我们来新建一个自定义的Job来测试下:

 

然后设置警告

然后,在运行此Job出现异常的时候,就可以自动的报告到相应的运维人员了。

这里我们就设置了一个运维人员,所以这里只发送给一个人。

我们来手动运行下,来测试一下效果

嘿嘿,果然,发出了警报,看起来很贴心的样子

 

至此,此功能已经配置完成,自己可以灵活的实现。

 

结语 

本来打算将利用Power Shell脚本检测的功能实现方式也加上的,但文章已经稍有点篇幅了,后续再完成吧。此篇的关于SQL Server的邮件功能算作抛砖引玉了,自己另有需求可以自己灵活实现。

其实,在本篇所介绍的Job任务的检测在几台服务器上存在还问题不大,但是如果多台服务器,如果每台服务器上都有几个Job异常的话,每天早上打开邮件多的估计会令你头皮发麻,并且在自带的异常报警中,没有给出详细的错误信息,其实这是一个很不爽弊端。

所以,为了优雅的进行自动化运维的工作,我们将会每次将我们所有检测的服务器Job运行状态进行扫描,而后将其汇总至一封邮件,然后按照重要性发送至固定的运维人员。

听起来是不是还有点小激动的样子,下一篇我们来实现此功能。有兴趣的童鞋,可以提前关注。

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

 

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

相关实践学习
使用SQL语句管理索引
本次实验主要介绍如何在RDS-SQLServer数据库中,使用SQL语句管理索引。
SQL Server on Linux入门教程
SQL Server数据库一直只提供Windows下的版本。2016年微软宣布推出可运行在Linux系统下的SQL Server数据库,该版本目前还是早期预览版本。本课程主要介绍SQLServer On Linux的基本知识。 相关的阿里云产品:云数据库RDS&nbsp;SQL Server版 RDS SQL Server不仅拥有高可用架构和任意时间点的数据恢复功能,强力支撑各种企业应用,同时也包含了微软的License费用,减少额外支出。 了解产品详情:&nbsp;https://www.aliyun.com/product/rds/sqlserver
目录
相关文章
|
3月前
|
运维 Linux Apache
,自动化运维成为现代IT基础设施的关键部分。Puppet是一款强大的自动化运维工具
【10月更文挑战第7天】随着云计算和容器化技术的发展,自动化运维成为现代IT基础设施的关键部分。Puppet是一款强大的自动化运维工具,通过定义资源状态和关系,确保系统始终处于期望配置状态。本文介绍Puppet的基本概念、安装配置及使用示例,帮助读者快速掌握Puppet,实现高效自动化运维。
77 4
|
13天前
|
人工智能 运维 监控
AI辅助的运维流程自动化:实现智能化管理的新篇章
AI辅助的运维流程自动化:实现智能化管理的新篇章
341 22
|
6天前
|
Kubernetes Java 持续交付
小团队 CI/CD 实践:无需运维,Java Web应用的自动化部署
本文介绍如何使用GitHub Actions和阿里云Kubernetes(ACK)实现Java Web应用的自动化部署。通过CI/CD流程,开发人员无需手动处理复杂的运维任务,从而提高效率并减少错误。文中详细讲解了Docker与Kubernetes的概念,并演示了从创建Kubernetes集群、配置容器镜像服务到设置GitHub仓库Secrets及编写GitHub Actions工作流的具体步骤。最终实现了代码提交后自动构建、推送镜像并部署到Kubernetes集群的功能。整个过程不仅简化了部署流程,还确保了应用在不同环境中的稳定运行。
37 9
|
2月前
|
机器学习/深度学习 运维 监控
智能化运维:从自动化到AIOps的演进之路####
本文深入探讨了IT运维领域如何由传统手工操作逐步迈向高度自动化,并进一步向智能化运维(AIOps)转型的过程。不同于常规摘要仅概述内容要点,本摘要将直接引入一个核心观点:随着云计算、大数据及人工智能技术的飞速发展,智能化运维已成为提升企业IT系统稳定性与效率的关键驱动力。文章详细阐述了自动化工具的应用现状、面临的挑战以及AIOps如何通过预测性分析和智能决策支持,实现运维工作的质变,引领读者思考未来运维模式的发展趋势。 ####
|
2月前
|
机器学习/深度学习 数据采集 人工智能
智能化运维:从自动化到AIOps的演进与实践####
本文探讨了智能运维(AIOps)的崛起背景,深入分析了其核心概念、关键技术、应用场景及面临的挑战,并对比了传统IT运维模式,揭示了AIOps如何引领运维管理向更高效、智能的方向迈进。通过实际案例分析,展示了AIOps在不同行业中的应用成效,为读者提供了对未来智能运维趋势的洞察与思考。 ####
117 1
|
2月前
|
机器学习/深度学习 数据采集 人工智能
智能运维:从自动化到AIOps的演进与实践####
本文探讨了智能运维(AIOps)的兴起背景、核心组件及其在现代IT运维中的应用。通过对比传统运维模式,阐述了AIOps如何利用机器学习、大数据分析等技术,实现故障预测、根因分析、自动化修复等功能,从而提升系统稳定性和运维效率。文章还深入分析了实施AIOps面临的挑战与解决方案,并展望了其未来发展趋势。 ####
|
2月前
|
机器学习/深度学习 数据采集 运维
智能化运维:机器学习在故障预测和自动化响应中的应用
智能化运维:机器学习在故障预测和自动化响应中的应用
69 4
|
3月前
|
存储 运维 监控
高效运维:从基础架构到自动化管理的全面指南
【10月更文挑战第11天】 本文将深入探讨如何通过优化基础架构和引入自动化管理来提升企业IT运维效率。我们将从服务器的选择与配置、存储解决方案的评估,到网络的设计与监控,逐一解析每个环节的关键技术点。同时,重点讨论自动化工具在现代运维中的应用,包括配置管理、持续集成与部署(CI/CD)、自动化测试及故障排除等方面。通过实际案例分析,展示这些技术如何协同工作,实现高效的运维管理。无论是IT初学者还是经验丰富的专业人员,都能从中获得有价值的见解和实操经验。
119 1
|
3月前
|
运维 监控 测试技术
构建高效运维体系:从监控到自动化的实践之路
【10月更文挑战第9天】 在当今信息技术飞速发展的时代,运维作为保障系统稳定性与效率的关键角色,正面临前所未有的挑战。本文将探讨如何通过构建一个高效的运维体系来应对这些挑战,包括监控系统的搭建、自动化工具的应用以及故障应急处理机制的制定。我们将结合具体案例,分析这些措施如何帮助提升系统的可靠性和运维团队的工作效率。
67 1
|
3月前
|
运维 jenkins 持续交付
自动化部署的魅力:如何用Jenkins和Docker简化运维工作
【10月更文挑战第7天】在现代软件开发周期中,快速且高效的部署是至关重要的。本文将引导你理解如何使用Jenkins和Docker实现自动化部署,从而简化运维流程。我们将从基础概念开始,逐步深入到实战操作,让你轻松掌握这一强大的工具组合。通过这篇文章,你将学会如何利用这些工具来提升你的工作效率,并减少人为错误的可能性。