Reporting services 如果预期的日程报告电子邮件未到达,则获取警告

Reporting services 如果预期的日程报告电子邮件未到达,则获取警告,reporting-services,gmail,scheduling,Reporting Services,Gmail,Scheduling,我(和大多数技术管理员一样,我猜)在我的收件箱中有很多来自预定服务的状态信息。但是,当一封服务电子邮件失败时,显然不会发送电子邮件。因此,我只想让一个服务查看我的收件箱,说“嘿,这项服务昨天没有发送电子邮件报告-有些事情出错了!” 我想这个问题应该在某个地方解决。也许Gmail(或其他一些电子邮件提供商)有这样的服务,那就太好了。有一个像Nagios这样的集中式监控解决方案不是更好的选择吗?您可以将它配置为只有在服务错过心跳、达到高水位、燃料耗尽时才发送通知?然后在第二个监控解决方案的过程之外监

我(和大多数技术管理员一样,我猜)在我的收件箱中有很多来自预定服务的状态信息。但是,当一封服务电子邮件失败时,显然不会发送电子邮件。因此,我只想让一个服务查看我的收件箱,说“嘿,这项服务昨天没有发送电子邮件报告-有些事情出错了!”


我想这个问题应该在某个地方解决。也许Gmail(或其他一些电子邮件提供商)有这样的服务,那就太好了。

有一个像Nagios这样的集中式监控解决方案不是更好的选择吗?您可以将它配置为只有在服务错过心跳、达到高水位、燃料耗尽时才发送通知?然后在第二个监控解决方案的过程之外监控主监控解决方案

我不知道您描述的任何服务,但手动例行程序可能如下所示:

Services\Hourly-[NumberOfServices] (or add a folder per service)
Services\Daily-[NumberOfServicves]
Services\Weekly-[NumberOfServicves]
Services\Monthly-[NumberOfServicves]
具有如下文件夹/标记结构:

Services\Hourly-[NumberOfServices] (or add a folder per service)
Services\Daily-[NumberOfServicves]
Services\Weekly-[NumberOfServicves]
Services\Monthly-[NumberOfServicves]
为传入邮件制定规则,以筛选每个特定的服务通知,并根据其预期时间将其移动到正确的文件夹

每小时唤醒一次,检查每小时文件夹中是否有未读邮件。未读的数量应与文件夹中提到的NumberOfServices相同。阅读/处理它们,并确保将它们全部标记为已读。任何没有通过电子邮件发送的服务都很容易被发现

在0:00醒来,检查每日文件夹中是否有未读邮件。等等

在0:00和周六醒来,检查每周文件夹中是否有未读邮件。等等

每月第一天0:00起床,检查每周文件夹中是否有未读邮件。等等等等等等

我的建议是减少服务产生的噪音

如果你仍然觉得你需要一项服务,我只能提供一个非常基本的.Net实现,大致基于上述过程,并与gmail一起工作。。。 这也可以移植到powershell

static void Main(string[] args)
        {
            var resolver = new XmlUrlResolver
            {
                Credentials = new NetworkCredential("yourgoolgeaccount", "yourpassword")
            };

            var settings = new XmlReaderSettings();

            settings.XmlResolver = resolver;

            var xr = XmlReader
                .Create("https://mail.google.com/mail/feed/atom/[name of your filter]"
                , settings);

            var navigator = new XPathDocument(xr).CreateNavigator();

            var ns = new XmlNamespaceManager(new NameTable());
            ns.AddNamespace("fd", "http://purl.org/atom/ns#");

            var fullcountNode =  navigator.SelectSingleNode(
                "/fd:feed/fd:fullcount"
                , ns);

            Console.WriteLine(fullcountNode.Value);

            int fullcount = Int32.Parse(fullcountNode.Value);
            int expectCount = 10;

            if (expectCount > fullcount)
            {
                Console.WriteLine("*** NOT EVERY ONE REPORTED BACK");
            }
}

你提到了Gmail,所以你可能对googlecl感兴趣,它为你提供了谷歌日历和文档之类的命令行控件。不幸的是,他们还不支持Gmail,但如果你的长期偏好是使用Gmail帐户作为状态报告的中心,那么googlecl可能是你最好的选择

在短期内,您可以立即使用日历、博客或文档命令试用googlecl,所有这些命令都已得到支持。例如,这些命令将事件添加到Google日历:

google calendar add --cal server1 "I'm still alive at 13:45 today"
google calendar add "Server 1 is still alive at 2011-02-08 19:43"
…这些命令用于查询日历:

google calendar list --fields title,when,where --cal "commitments"
google calendar list -q party --cal ".*"
想想看,你甚至会发现日历、博客或文档比Gmail更适合跟踪状态更新。例如,电子表格或日历格式应该可以更容易地生成给定服务何时启动或关闭的图形表示

您仍然需要编写一个使用googlecl查询日历(或博客、文档或其他内容)的小程序,但是一旦您有了简单的命令行,其余的应该非常简单。这里有一个链接,可以链接到有关Google CL的更多信息:

如果你真的想使用Gmail,并且现在就使用它,他们提供了一个IMAP接口。使用IMAP,您可以执行许多简单的操作,例如确定是否存在包含指定主题行的消息。这里有一个了解细节的好地方:

下面是一个使用IMAP和Python列出最近十封带有给定Gmail“标签”的电子邮件的快速示例:


如代码注释中所述,如果邮箱中最近的邮件不包含预期的邮件,您可以调整它以发出某种警告。然后每天运行一次Python程序(或您需要的任何时间段),查看是否从未收到预期的电子邮件。

Ok。我喜欢使用电子表格进行良好的视觉表现——谷歌电子表格API很好。我也许可以在工作表的第一列中设置规则,让服务运行在某个地方,在一列中填写每天的状态。以及另一个报告状态总和是否不符合预期的服务。但是-我真的希望有一个现成的解决方案。非常有趣,谢谢。我自己也喜欢gmail atom阅读器。我会试试看。Nagios看起来有点复杂(?)@joeriks好吧,在你的需求和工具之间总是有一个折衷,但我让Nagios在30分钟内在debian vpc上启动并运行,并让它在一小时内垃圾邮件我的整个团队。。。