django watchman为您的支持服务公开一个状态端点

django-watchman的Python项目详细描述


Django值班员

http://img.shields.io/pypi/v/django-watchman.svghttp://img.shields.io/travis/mwarkentin/django-watchman/master.svghttp://img.shields.io/covertalls/mwarkentin/django-watchman.svg

django watchman为您的支持服务公开一个状态端点,如 数据库、缓存等 https://s3.amazonaws.com/snaps.michaelwalarkentin.com/watchmenozy.jpg

文档

完整的文档位于http://django-watchman.rtfd.org" rel="nofollow">http://django-watchman.rtfd.org

推荐信

< Buff行情> 我们爱上了django watchman。外部监控是我们服务的重要组成部分。使用django watchman,我们可以通过一个安全的url来内省应用程序的基础结构。它写得很好,易于扩展。我们已经向许多客户推荐了它。

-首席执行官Hany Fahim,虚拟机农场

快速启动

  1. 安装django watchman

    pip install django-watchman
    
  2. 将watchman添加到您的已安装应用程序设置中,如下所示:

    INSTALLED_APPS = (
        ...
        'watchman',
    )
    
  3. 在项目中包含watchman urlconf urls.py 如下:

    url(r'^watchman/', include('watchman.urls')),
    
  4. 启动开发服务器并访问http://127.0.0.1:8000/watchman/ 以 获取支持服务状态的json响应:

    {
        "databases": [
            {
                "default": {
                    "ok": true
                }
            }
        ],
        "caches": [
            {
                "default": {
                    "ok": true
                }
            }
        ],
        "storage": {"ok": true}
    }
    

Pycon加拿大演示(10分钟)

http://snaps.michael warkentin.com.s3.amazonaws.com/full-stack_django_application_monitoring_with_django-watchman_michael_warkentin_u youtube_2015-11-27_17-56-52.jpg

功能

人性化仪表板

访问http://127.0.0.1:8000/watchman/dashboard/获得一个人性化的html 代表您所有的值班员支票。

基于令牌的身份验证

如果要保护状态终结点,可以使用watchman_tokens设置。 这是一个逗号分隔的标记列表。 当这个设定添加g时,必须将其中一个令牌作为watchman令牌传入,参数为:

GET http://127.0.0.1:8000/watchman/?watchman-token=:token

或者在请求上设置 授权: watchman-token 头:

curl -X GET -H "Authorization: WATCHMAN-TOKEN Token=\":token\"" http://127.0.0.1:8000/watchman/

如果要更改令牌名称,可以设置watchman_token_name。 此设置的值将是必须传入的 get 参数:

WATCHMAN_TOKEN_NAME = 'custom-token-name'

GET http://127.0.0.1:8000/watchman/?custom-token-name=:token

弃用警告 watchman_token watchman_tokens 设置替换,以支持django watchman中的多个身份验证令牌 0.11 。 它将继续工作,直到在django watchman中删除它 1.0

自定义身份验证/授权

如果要使用自定义的 authentication/authorization decorator,您可以添加watchman_auth_decorator 你的设置。这需要是一个到装饰器的点路径,并且默认为 到需要的watchman.decorators.token

WATCHMAN_AUTH_DECORATOR = 'django.contrib.admin.views.decorators.staff_member_required'

注意, token_required decorator不保护视图,除非 watchman_tokens 在"设置"中设置。

定制支票

django watchman允许您自定义通过修改 watchman_检查设置。在 设置中。py

WATCHMAN_CHECKS = (
    'module.path.to.callable',
    'another.module.path.to.callable',
)

您还可以导入watchman.constants以在 设置中包含默认支票和已付支票。py

pip install django-watchman
0

检查不接受参数,并且必须返回一个 dict 其键应用于json响应。使用 watchman.decorators.check decorator捕获异常:

pip install django-watchman
1

在没有任何检查的情况下,抛出404,然后由 json视图 decorator。

运行可用检查的子集

通过 ,可以运行检查的子集。check=module.path.to.callable&;check=… 在请求URL中。只有querystring中给定的可调用项 在 中,应运行watchman_checks 检查,例如:

pip install django-watchman
2

跳过特定检查

您可以通过 跳过任意数量的检查?skip=module.path.to.callable&;skip=… 在请求URL中。只有签入 的watchman_checks 不在 应运行querystring,例如:

pip install django-watchman
3

检查数据库或缓存的子集

如果应用程序配置了大量数据库或缓存, watchman在检查每个数据库或缓存时可能会打开过多的连接。

您可以按顺序设置watchman_数据库或watchman_缓存设置 覆盖要监视的默认数据库和缓存集。

ping

如果您只想检查您的应用程序是否正在运行并且能够处理 请求,您可以呼叫ping:

< Buff行情> 获取http://127.0.0.1:8000/watchman/ping/" rel="nofollow">http://127.0.0.1:8000/watchman/ping/

它将返回带有200状态代码的文本 pong 。打这个电话不是 进行任何检查。

裸状态视图

如果您想要一个"裸"状态视图(一个不报告任何细节的视图, 只要 htp200 如果检查通过,并且 htp500 如果任何检查失败,您就可以 可以使用 bare_status 视图,方法是将以下内容放入 url.py

pip install django-watchman
4

django管理命令

也可以在不启动Web服务器和发出请求的情况下运行检查。 这对于在启用服务器之前测试配置很有用, 正在检查上的配置工作服务器等。按如下方式运行管理命令:

pip install django-watchman
5

默认情况下,成功的检查不会打印任何输出。如果所有支票都通过 成功,退出代码将为 0 。如果检查失败,退出代码将 be 1 ,包含堆栈跟踪的错误消息将打印到 stderr

如果还希望看到成功检查的输出,请将verbosity设置为 2 或更高:

pip install django-watchman
6

如果要运行检查的子集,请使用 -c 和逗号分隔的列表 python模块路径数:

pip install django-watchman
7

如果要跳过某些检查,请使用 python模块路径:

pip install django-watchman
8

使用 -h 查看选项的完整列表:

pip install django-watchman
9

x-watchman-version响应头

守望者可以返回正在运行的守望者版本以帮助您保持 跟踪站点是否使用最新版本。这是 默认情况下禁用以防止网站的任何意外信息泄漏 没有认证。要启用,请更新 公开监视程序版本 设置:

INSTALLED_APPS = (
    ...
    'watchman',
)
0

自定义响应代码

默认情况下,即使存在 检查失败。可以为失败的检查指定不同的响应代码 使用watchman错误代码设置:

INSTALLED_APPS = (
    ...
    'watchman',
)
1

日志记录

watchman使用名为 watchman 的记录器包含日志消息。 您可以通过配置django的 日志记录 部分来配置它 设置文件。

下面是一个可以登录到控制台的简单示例:

INSTALLED_APPS = (
    ...
    'watchman',
)
2

有关详细信息,请参阅django文档

APM(数据狗,新文物)

如果你使用的是APM,而Watchman经常被打去做健康检查(例如ELB开启 aws),您将发现一些基于平均值的统计数据将受到影响(平均事务 时间、索引等):

您可以使用watchman disable来禁用watchman的apm instrumentation 设置:

INSTALLED_APPS = (
    ...
    'watchman',
)
3

当前支持以下代理:

  • 数据狗
  • 新文物

如果您使用的其他APM受到影响,请打开一个问题。

可用支票

缓存

对于django.conf.settings.caches中的每个缓存

  • 设置测试缓存项
  • 获取测试项
  • 删除测试项

数据库

对于django.conf.settings.databases中的每个数据库

  • 通过调用连接[数据库].introspection.table_names()
  • 来验证连接

电子邮件

使用django.core.mail.send撸mail将测试电子邮件发送到@example.com

如果您使用的是第三方邮件提供商,那么这张支票最终可能会使您付出代价 钱,这取决于你对监控的积极性。因为这个原因, 默认情况下,此检查未启用。

作为参考,如果您使用的是曼德尔,并击中了您的看守端点 每分钟一次,每月花费约5.60美元。

自定义设置

  • watchman_email_sender (默认值: watchman@example.com ):指定一封电子邮件作为测试电子邮件的发件人
  • watchman_email_recipients (默认值: [发送到@example.com] ):指定要发送测试电子邮件的电子邮件地址列表
  • 监视电子邮件头 (默认值: {} ):指定自定义头的dictRS将添加到测试电子邮件中

存储

使用 django.core.files.storage.default嫒storage

  • 编写测试文件
  • 检查测试文件的大小
  • 读取测试文件的内容
  • 删除测试文件

默认检查

默认情况下,django watchman将对您的数据库运行检查 ( watchman.checks.databases )、缓存( watchman.checks.caches )和 存储( watchman.checks.storage )。

已付支票

目前只有一张"付费"支票- watchman.checks.email 。你可以 通过将watchman_enable_paid_checks 设置为 true,或通过 覆盖"监视人"检查设置。

与Docker一起尝试

一个示例项目和一个dockerfile一起提供,使您可以很容易地尝试 离开Django Watchman。

要求
  • docker<;https://www.docker.com/get docker>;

说明

  1. 用当前本地代码生成并运行docker映像: make run
  2. 在浏览器中访问watchman json端点: http://127.0.0.1:8000/watchman/
  3. 访问浏览器中的Watchman Dashboard: http://127.0.0.1:8000/watchman/dashboard/
  4. 访问浏览器中的watchman ping:http://127.0.0.1:8000/watchman/ping/" rel="nofollow">http://127.0.0.1:8000/watchman/ping/
  5. 访问浏览器中的watchman bare status: http://127.0.0.1:8000/watchman/bare/

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
JavaFX JavaFX。打印印刷工的工作。createPrinterJob()在mac上始终为空   如何在JavaEE和Spring引导中重新加载属性?   java获得了特定的进程CPU使用率   java RDD之后的空文件是什么。保存ASTEXTFILE?   在pubQuery模板中定义表模式的java   java JMC飞行记录器不显示自定义方法   java如何在循环中存储用户以前的值?   安卓中的java转换时间(毫秒)   java自定义卡片视图形状   groovy如何为Java程序编写输入脚本   性能JMeter:java。网NoRouteToHostException:无法分配请求的地址(地址不可用)   java Java7垃圾收集器如何工作?   用java进行单元测试   java如何将因子代码转换为素数和复合标识符?