使用Django和Slack Webhooks进行实时监控

262 阅读4分钟

有很多开发人员可以选择错误跟踪,但有些可能相当昂贵,或者有太多的配置,需要大量的维护。

在这篇博文中,我将向你介绍一种简单的方法,供中小型团队追踪Django应用程序中出现的任何异常。

在本教程中,你将学习如何使用Slack Incoming Webhooks和Django日志系统来向指定的Slack频道发送警报。例子包括ETL管道的状态,获得即时的用户反馈,以及整合一些调度器来获得定期报告。

首先,我们需要创建一个Slack应用,用来传递我们应用的信息。要做到这一点,请打开 这个链接。一旦你登录,选择 "从头开始",为你的应用程序写一个合适的名字,然后点击**"创建应用程序"。**

在左边的菜单上,进入 "基本信息>为Slack构建应用程序>添加特性和功能>来电网络钩子"。打开开关以激活该功能,如下图所示。

在 "你的工作区的Webhook URLs "部分,点击 "向工作区添加新的Webhook "并选择一个频道, 然后点击 "允许"完成。

现在你会得到一个连接到所选通道的Webhook URL,它应该看起来像这样。

Gist上查看该代码。

配置Django以使用Webhook URL

我们将利用Django的日志配置字典。正如你可能知道的,Python日志配置有以下几个部分。

  • 记录器
  • 处理程序
  • 过滤器
  • 格式化

我们将至少配置一个日志记录器和一个处理程序。

处理程序。我们的消息将如何到达Slack

为了真正向slack发送消息,我们需要安装一些库来帮助我们完成。我使用 请求因为它使用起来超级简单。

Gist上查看代码。

在你安装了request之后,继续创建一个新的python文件,并在其中添加以下两个类。

  • SlackInterface
  • SlackHandler

SlackInterface类将在与Slack API交互的意义上做艰苦的工作,而SlackHandler将作为Slack和日志系统之间的接口,并决定消息如何到达slack。

Slack接口

Gist上查看代码。

正如你所看到的,我们定义了一个**_send**方法,其中包含请求调用,使用POST方法、webhook URL和任何有效的JSON字符串作为有效载荷。

此外,我们还定义了message_successmessage_error,你可以在这个链接中找到更多关于你可以在有效载荷中使用的细节。 用高级格式化让它变得花哨。

Slack处理程序

Gist上查看代码。

根据Python的文档,实现一个日志处理程序类的最低要求是有一个emit方法,以record为参数。你可以在这里找到关于记录对象的更多细节。 LogRecord 对象

一旦你有了这个方法的编码,你就可以在里面执行任何动作,例如,调用message_errormessage_error或任何其他你想要的自定义方法。

现在你有一个可以放在handlers dict上的处理程序类,只要确保你在**"class "**字段上使用有效的导入路径。

Gist上查看该代码。

记录器。谁可以使用Slack的通知?

本教程的最后一部分重点是定义一个记录器。有多种方法可以实现这一点。

最简单的方法是将你的应用程序的名字添加到记录器的dict中。这样你就可以控制你项目中的哪个应用可以使用这些警报,或者干脆将处理程序添加到 "Django "日志器中,以处理整个项目发出的、未被其他处理程序捕获的任何日志。

Gist上查看代码。

使用日志记录器

你可以通过在my_app的任何文件上实例化日志器来使用它。

查看Gist上的代码。

下面是上面的片段的输出。

总结

在这篇文章中,我们创建了一个Slack App,在SlackInterface和SlackHandler上进行了交互,并通过Logging Configuration字典将它们集成到Django的日志系统中。

这个例子是我们在本教程中构建的配置字典的完整版本。要看我们在这里没有谈到的变量,请看这个链接。 配置日志

一如既往,感谢您阅读我们的博客,并请继续关注更多有用的内容。