向应用程序添加healthcheck终结点

healthcheck-extended的Python项目详细描述


健康检查扩展

Healthcheck包装了一个Flask应用程序对象,并添加了一种编写简单Healthcheck的方法 可用于监视应用程序的函数。它对 断言您的依赖项已启动并正在运行,并且您的应用程序可以 响应HTTP请求。Healthcheck功能通过用户公开 定义烧瓶路径,以便您可以使用外部监控应用程序(monit, 以检查应用程序的状态和正常运行时间。在

版本1.1中的新功能:Healthcheck还为您提供了一个查看烧瓶的简单路径 有关应用程序环境的信息。默认情况下,这包括 关于操作系统、Python环境、当前进程的数据, 以及应用程序配置。您可以自定义包含哪些节,或者 将您自己的部分添加到输出中。在

这个fork包含一些调整,主要是关于更灵活的时间戳 格式处理,使其更可用。在

派生自:https://github.com/Runscope/healthcheck

版本1.3.4

  • 添加对UTC时间戳的支持

安装

pip install healthcheck

使用

下面是一个基本用法的示例:

^{pr2}$

要运行所有检查函数,请向healthcheck URL发出请求 你这样指定:

curl "http://localhost:5000/healthcheck"

要查看环境数据,请检查您为其指定的URL 环境垃圾场:

curl "http://localhost:5000/environment"

健康检查课程

检查功能

Check函数不带参数,应该返回一个元组(bool,str)。 布尔值是检查是否通过。消息是任何字符串或 应为此检查呈现的输出。对错误有用 消息/调试。在

# add check functionsdefaddition_works():if1+1==2:returnTrue,"addition works"else:returnFalse,"the universe is broken"

任何由代码引发的异常都将被捕获并作为 运行状况检查中的错误:

# add check functionsdefthrows_exception():bad_var=Nonebad_var['explode']

将输出:

{"status":"failure","results":[{"output":"'NoneType' object has no attribute '__getitem__'","checker":"throws_exception","passed":false}]}

注意,所有的检查程序都会运行,所有的失败都会被报告。它是 它们都是单独的检查,如果有任何一个失败 整体运行状况检查失败。在

缓存

在Runscope的基础设施中,/healthcheck端点被意外地击中 经常。haproxy在每台服务器上运行,每个haproxy都会命中每个健康检查 一分钟两次。(因此,如果我们的基础架构中有30台服务器,那就是60台 每次烧瓶服务每分钟进行一次健康检查。)另外,monit每 健康检查每分钟6次。在

为了避免给后端服务带来太多压力,健康检查结果可以 缓存在进程内存中。默认情况下,缓存成功的运行状况检查 27秒,故障缓存9秒。这些可以被覆盖 使用success_ttlfailed_ttl参数。如果你不想用 缓存,使用success_ttl=None, failed_ttl=None初始化Healthcheck对象。在

定制

您可以为success和 故障响应。在

EnvironmentDump类

内置数据段

默认情况下,环境转储数据包括以下4个部分:

  • os:有关操作系统的信息。在
  • python:关于Python可执行文件、Python路径和 已安装软件包。在
  • process:关于当前运行的Python进程的信息,包括 PID、命令行参数和所有环境变量。在
  • config:关于Flask应用程序配置的信息,从 app.config。在

一些数据会被清除,以避免意外暴露密码或访问权限 钥匙/令牌。配置键和环境变量名被扫描为keytoken,或{}。如果这些字符串出现在变量名中, 不包括该值。在

禁用内置数据段

出于安全原因,您可能需要禁用整个部分。你可以 在实例化EnvironmentDump对象时禁用节,如下所示:

envdump=EnvironmentDump(app,"/environment",include_python=False,include_os=False,include_process=False,include_config=False)

添加自定义数据节

你呢可以通过注册自己的函数向输出添加新节。 下面是一个如何使用的示例:

defapplication_data():return{"maintainer":"Frank Stratton","git_repo":"https://github.com/Runscope/healthcheck"}envdump=EnvironmentDump(app,"/environment")envdump.add_section("application",application_data)

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

推荐PyPI第三方库


热门话题
java OpenShift的齿轮特性   java如何在Liferay站点的每个页面上放置公司地址和电话?   java确定整数数组中是否存在一个子集,在两个条件下求和到给定的目标值   序列化为什么java中的serialVersionUID必须是静态的、最终的、长类型的?   java响应返回null   java注入接口实现Quarkus   java我不明白为什么第二次排序的运行时间比第一次慢?   (Java)显示图像的最佳方式?   java Android应用程序因添加布局而崩溃   java如何在运行时获取泛型变量的类   java Selenium web驱动程序:无效的选择器:*:WebKitFullScreenSentor   Spring中的java注入值始终为空   Eclipse中带有TestNG插件的@BeforeSuite和@AfterSuite的java问题   使用trycatch块、filewriter和printwriter在java中创建自定义类   如何在Java 安卓上绘制相交的两条线