如何将事件从Veeam Backup&Replication推送到即时通讯程序中

大家好! 在这篇文章中,我将讨论如何从Veeam Backup&Replication v9.5向MS Team提供有关操作结果的信息。 帖子中描述的方法不仅可以在此方法中使用,而且可以在任何其他Messenger中使用-您只需要使用配置文件API来组织消息传递。



首先,想象一下我们要实现的目标。 我们希望在一个命令通道中接收有关一个备份软件实例发生的情况的信息。 该功能很有用,它将对儿童和成人均有用,它将使您的灵魂伴侣高兴,并将成为节日餐桌的绝佳装饰。 换句话说,您可以自己提出一个特定的用例。 我绝不希望限制您的想象力-我们将考虑使用原型。

我们将以最简单的方式解决问题:从Veeam SQL数据库中抢劫数据,解析一点,然后使用传入的WebHook连接器将其发送到通道。 这是行动计划:

  1. 我们连接到Veeam数据库,并从[dbo]。[Backup.Model.JobSessions]获取信息。
  2. 我们在要发送消息的通道中创建“传入WebHook连接器”。
  3. 将其全部结合使用python magic使其有效。
  4. 将生成的草图包装在Docker容器中。
  5. 就是这样!

连接到Veeam备份和复制数据库


首先,在MS SQL实例的一侧创建用户。 我们考虑使用MS SQL,因为这是我们的软件预先安装的默认选项。 我们为用户提供最小的权限-仅从一个表中选择并且只能从一个表中进行选择。

这很容易做到。 以您可能需要的任何方式登录到实例,并预先提交以下请求:

CREATE LOGIN ms_teams_watcher WITH PASSWORD = '123@qwe' USE [VeeamBackup] CREATE USER ms_teams_watcher FOR LOGIN ms_teams_watcher GRANT SELECT ON [dbo].[Backup.Model.JobSessions] TO ms_teams_watcher 

不要忘记替换数据库名称 ,并提供用户名和密码。

如果您做的一切正确,则升级尝试将失败:



但请选择-请:



GDPR的荣耀-在此样本的框架内,没有一个生产基地遭受损失! 现在我们有了用户ms_teams_watcher,我们可以开始收集数据了。 我们将通过pyodbc连接-没有SQLAlchemy,只有铁杆!

首先,打开连接(请参阅类SQLConnectorVeeamDB ),并获取有关在上一次脚本运行期间完成的所有会话的信息:

s。 SQLConnectorVeeamDB.select_completed_job_sessions_during_latest_hour:

 query = 'select job_name,job_type, usn, end_time, result, reason ' \               'from [dbo].[Backup.Model.JobSessions] ' \               'where state = -1 and result != -1 and datediff(HH,[end_time],GETDATE()) <= 1 ' \               'order by usn' 

对我们来说,最重要的是获取表中的最后一个usn,因此下一次已经可以向他提出请求了,而不是按时间。 如果找不到任何内容,请执行以下查询:

 query = 'select top 1 [usn] ' \                   'from [dbo].[Backup.Model.JobSessions] ' \                   'order by usn desc' 

从统计上讲,此usn会比执行第一个请求时返回的usn高,但是不属于第一个选择的JobSessions,我们仍然不需要。 如果我们没有找到完成的(state = -1)会话,结果不是None(结果!= -1)-请记住usn,将其写入ini文件并以一定的间隔重复请求(但已经是SQLConnectorVeeamDB.select_completed_job_sessions_sessions_after_usn)。

为MS团队创建传入的WebHook连接器


这里的一切都很简单。 要求您的MS Teams管理员(请确认是否是您)启用此功能,如此处所述。 现在创建一个Incoming WebHook类型的连接器。 奏效了吗? 您很漂亮,无需执行其他操作,复制url并保存。

全部放在一起


在这里,您可以下载完成的Dockerfile或草图本身,我们将进一步对其进行考虑。 只需记住下载configuration.py_ ,将其放在Dockerfile旁边,填写并从扩展中删除下划线。

这是概念草图方案的外观(图片是可单击的):



从图中可以看到,最有趣的事情是解析从Veeam数据库接收的日期,同时创建VeeamEvent类(只是一个数据中心)的对象和通知发送过程本身。

VeeamEvent类(对象)


在记录日期的表中,记录了Veeam执行的所有任务。
它们每个都有属性job_type。 其中有很多,但是我强调了对我们来说最有趣的一件事-我们是否不想发送某人已打开程序控制台或完成还原的消息?

  • 0-备份作业
  • 1-复制作业
  • 3-SureBackup作业
  • 24-文件到磁带作业
  • 28-备份到磁带作业
  • 51-备份复印作业
  • 100-配置备份

在评论中写,如果有兴趣,我将根据要求提示其他类型的任务。 完成的任务可以是成功或警告,有时甚至是失败。

结果,我们创建了一个对象,该对象本身存储所有这些数据以及任务名称,usn,完成状态(如果有)的描述以及完成时间。 传输该对象是为了向Messenger发送消息。

send_notification_to_web_hook()


在这里,它仍然更简单-我们使用现成的pymsteams库,该库仅根据规范收集一条消息,然后通过request.post发送该消息。 在我的示例中,我什至没有使用WebHooks也支持的O365卡功能,而只是根据任务的结果制作了多个消息模板。

 team_connection = pymsteams.connectorcard(web_hook_url)   if event_object.job_type_name is not None:       if event_object.result_text == 'success':           text = 'A Veeam ' + event_object.job_type_name + ' **"' + str(event_object.job_name) + '"** has finished **successfully** at ' + str(event_object.end_time)[:-7]           team_connection.color('005f4b')  # it's a brand color named "Veeam Sapphire", btw 

幻想在这里很有用-添加任何文本,图片,按钮等。 这是我收到的消息类型:


对于一切顺利的备份工作


对于失败和警告任务

创建一个Docker容器


如果您还没有Docker,请查看Docker入门教程 。 如果存在,我们需要创建以下Dockerfile:

 # Version: 1.0 FROM python:3.6.2 MAINTAINER Dmitry Rozhdestvenskiy <dremsama@gmail.com> RUN apt-get update && apt-get install -y --no-install-recommends apt-utils RUN apt-get -y install locales RUN echo "en_US.UTF-8 UTF-8" > /etc/locale.gen RUN locale-gen RUN apt-get -y install apt-transport-https freetds-dev unixodbc-dev git RUN curl https://packages.microsoft.com/keys/microsoft.asc | apt-key add - RUN curl https://packages.microsoft.com/config/debian/8/prod.list > /etc/apt/sources.list.d/mssql-release.list RUN apt-get -y update && ACCEPT_EULA=Y apt-get install msodbcsql RUN mkdir /veeam_to_msteams RUN git clone https://github.com/daymer/Veeam-to-MS-Teams-notification-sender-app /veeam_to_msteams RUN pip install --upgrade pip RUN pip install -r /veeam_to_msteams/requirements.txt RUN mkdir /var/log/veeam_to_msteams/ ADD configuration.py /veeam_to_msteams/ RUN chmod +x /veeam_to_msteams/launch_veeam_to_msteams.sh CMD ["/bin/bash", "/veeam_to_msteams/launch_veeam_to_msteams.sh"] 

Docker本身从存储库(FROM python:3.6.2),Github(RUN git clone ...)和packages.microsoft.com下载所有内容。 将dockerfile放置在configuration.py旁边的%directory_name%中(您是否会忘记下载并填写它?)。 使用以下命令组装图像:

 docker build -t veeam_to_msteams:1.0 -f /path/%directory_name%/Dockerfile /path/%directory_name%/ 

运行容器:

 docker run  --restart=always  -it --name veeam_to_msteams -d veeam_to_msteams:1.0  bin/bash /veeam_to_msteams/launch_veeam_to_msteams.sh 

如果您想在其他平台上运行脚本,或者根本不想使用该容器-没关系,只需运行main.py文件本身,不带任何参数。


是时候给我倒杯咖啡了,如果您有兴趣,可以根据您的生产需要完成我的草图。 “您只为交付付费”,更准确地说,您只需将交付实施到您首选的渠道即可。

我将汇集有用的链接:

  1. 我在github上的项目
  2. Python SQL驱动程序-Pyodbc
  3. 创建传入的WebHook连接器
  4. 如何为MS团队启用传入WebHook连接器
  5. Pymsteams库
  6. 面向初学者的Docker教程

Source: https://habr.com/ru/post/zh-CN415561/


All Articles