python日志系统的速率限制过滤器

ratelimitingfilter的Python项目详细描述


https://travis-ci.org/wkeeling/ratelimitingfilter.svg?branch=masterhttps://codecov.io/gh/wkeeling/ratelimitingfilter/branch/master/graph/badge.svghttps://img.shields.io/badge/python-2.7%2C%203.4%2C%203.5%2C%203.6%2C%203.7-blue.svghttps://img.shields.io/pypi/v/ratelimitingfilter.svghttps://img.shields.io/pypi/l/ratelimitingfilter.svg

RateLimitingFilter是python日志系统的过滤器 它允许您限制消息可以通过的速率 你的日志处理程序。

如果您使用的是python这样的处理程序,那么过滤器可能很有用 logging.handlers.SMTPHandler发送错误通知电子邮件。 错误通知电子邮件提供了监视 运行系统的健康状况,但这些电子邮件有可能 如果由于以下原因而开始连续快速到达,则会使邮箱过载 某种严重的失败

RateLimitingFilter有助于防止邮箱过载 基于可配置速率限制消息,同时允许 周期性的信息爆发可以作为一个有用的指示器 有什么东西坏了。

相容性

  • Python2.7,3.4+

安装

$ pip install ratelimitingfilter

$ git clone https://github.com/wkeeling/ratelimitingfilter.git
$ cd ratelimitingfilter
$ python setup.py install

用法

只需创建 RateLimitingFilter并将其添加到处理程序:

fromratelimitingfilterimportRateLimitingFilter...ratelimit=RateLimitingFilter()handler.addFilter(ratelimit)

创建不带任何参数的RateLimitingFilter的实例 在上面的例子中,将消息流限制为 30秒

您可以通过为 rateperburst属性。例如,允许 每2分钟发送一条消息,周期性突发消息多达5条:

ratelimit=RateLimitingFilter(rate=1,per=120,burst=5)handler.addFilter(ratelimit)

SMTPHandler示例

典型的用例可能是限制由发送的错误通知电子邮件 logging.handlers.SMTPHandler

下面是一个如何设置的示例:

importlogging.handlersimporttimefromratelimitingfilterimportRateLimitingFilterlogger=logging.getLogger('throttled_smtp_example')# Create an SMTPHandlersmtp=logging.handlers.SMTPHandler(mailhost='smtp.example.com',fromaddr='from@example.com',toaddrs='to@example.com',subject='An error has occurred')smtp.setLevel(logging.ERROR)# Create a formatter and set it on the handlerformatter=logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')smtp.setFormatter(formatter)# Create an instance of the RateLimitingFilter, and add it to the handlerratelimit=RateLimitingFilter()smtp.addFilter(ratelimit)# Add the handler to the loggerlogger.addHandler(smtp)# Logged errors will now be restricted to 1 every 30 secondswhileTrue:logger.error('An error message')time.sleep(2)

高级用法

可以向 RateLimitingFilter用于进一步控制消息的初始值设定项 节流

也许您希望有选择地限制特定的错误消息 同时允许其他信息自由传递。这可能是 如果您知道应用程序的一部分可以生成 大量错误,而应用程序的其余部分不太可能 到。

实现这一点的一种方法可能是使用单独的记录器,配置一个 有速率限制,一个不带,用于 申请或者,您可以使用单个记录器并配置 RateLimitingFilter只匹配那些您想要的消息 节流阀。

应用选择性的速率限制允许低 卷错误,同时保持较高的卷错误检查。

RateLimitingFilter支持两种有选择地限制 消息:

基于子字符串的消息限制

您可以将子字符串列表传递给它所在的RateLimitingFilter。 将用于匹配要应用于的邮件。

config={'match':['some error','a different error']}ratelimit=RateLimitingFilter(rate=1,per=60,burst=1,**config)smtp.addFilter(ratelimit)# Can be rate limitedlogger.error('some error occurred')# Can be rate limitedlogger.error('a different error occurred')# Will not be rate limitedlogger.error('something completely different happened')

自动消息限制

这是一个实验特性

您可以让RateLimitingFilter自动限制消息 通过将match选项设置为auto

config={'match':'auto'}ratelimit=RateLimitingFilter(rate=1,per=60,burst=1,**config)

然后,筛选器将尝试根据消息的内容识别消息 为了弄清楚是否要限制他们。它会容忍 识别信息时内容略有不同。例如, 如果错误信息被快速记录,则除了 时间戳,或者可能是递增的id,那么这些消息将是 就速率限制而言被视为相同的。

许可证

麻省理工学院

贡献

我们非常欢迎反馈和改进。请提交拉动 请求!

https://github.com/wkeeling/ratelimitingfilter

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

推荐PyPI第三方库


热门话题
java接口中的每个方法都是抽象的,但在抽象类中,我们也只能使用抽象方法   初始化Java中声明的、未初始化的变量会发生什么情况?   java BouncyCastle openPGP将字节[]数组加密为csv文件   在Java中将类A(和所有子类)映射到类B的实例的字典   RSA公钥编码,在Java和Android中,代码相同,结果不同   java在安卓中实现数字检测语音识别   java取消选择复选框   java如何在其他配置中重用Maven配置XML片段   java有没有一种有效的方法来检查HashMap是否包含映射到相同值的键?   spring处理程序调度失败;嵌套的例外是java。lang.NoClassDefFoundError:org/apache/http/client/HttpClient   带有ehcache的java多层缓存   java如何访问chromium(或任何其他浏览器)cookie   java通过将两个集合与spring data mongodb data中的条件合并来获取计数   安卓中R.java的语法错误