防止heroku中不需要的日志

Posted

技术标签:

【中文标题】防止heroku中不需要的日志【英文标题】:Prevent unwanted logs in heroku 【发布时间】:2020-02-05 01:19:37 【问题描述】:

我已经在 heroku 中成功部署了一个生产级应用。现在我正在处理日志记录和监控。

不幸的是,我找不到方法来控制在 heroku 日志、papertrail 等中记录的内容。每隔 1 或 2 分钟,我会收到以下类型的消息:

app/heroku-postgres source=DATABASE addon=postgresql-slippery-76303 
sample#current_transaction=1408 sample#db_size=11563679bytes 
sample#tables=24 sample#active-connections=13 sample#waiting- 
connections=0 sample#index-cache-hit-rate=0.99834 sample#table-cache- 
hit-rate=0.99896 sample#load-avg-1m=0.01 sample#load-avg-5m=0.005 
sample#load-avg-15m=0 sample#read-iops=0 sample#write-iops=0.098361 
sample#tmp-disk-used=33849344 sample#tmp-disk-available=72944943104 
sample#memory-total=4044932kB sample#memory-free=1741488kB 
sample#memory-cached=1968548kB sample#memory-postgres=44600kB

我从 heroku 中找到了关于此的文档页面:

https://devcenter.heroku.com/articles/heroku-postgres-metrics-logs

不过,他们忘了告诉我如何禁用这些 postgres 指标日志。

一般来说,我想过滤 get 记录的内容,因为 heroku 有记录行的限制,我只想记录对我有用的内容。因此,如果我想禁用来自特定程序(如 app/heroku-postgres)的所有日志,我希望可以选择这样做。

heroku 中有没有办法配置这个?

【问题讨论】:

【参考方案1】:

这些日志行在 Heroku 方面是不可配置的。据推测,这是因为这是您能够观察数据库主机健康状况的少数几种方法之一。 Heroku 为您维护一个最小的日志缓冲区,而是希望您配置自己的日志记录插件,许多是免费的。这些相同的插件中的一些可能会过滤/删除正则表达式。话虽如此,如果您完全关心监控数据库,那么删除这些日志行可能是不明智的。

【讨论】:

我认为监控数据库比每 2 分钟在 papertrail 中记录一堆值更好的方法。我知道从heroku日志方面无法配置接收日志。但是 heroku-postgres 呢?我应该能够配置它是否打印指标,或者至少是连续打印之间的间隔。现在的情况是,我总是会过滤掉来自 heroku-postgres 的内容,并且可能会丢失一些关于例如长查询的警告。 数据库主机将发出该指标日志行并将其发送到您的应用程序日志,期间。没有办法阻止它被发送。您唯一的选择是使用您的日志记录插件将它们过滤掉。为了记录,这些“一堆值”是您可以访问数据库主机的平均负载、IO 数和操作系统页面缓存信息的唯一地方。 即使这是唯一的方法,我希望至少能够改变记录的频率。我实际上不会每天每分钟检查我的数据库主机的平均负载!如果 postgres heroku 插件真的是这样一个无法破解的黑匣子,那真是令人难过。

以上是关于防止heroku中不需要的日志的主要内容,如果未能解决你的问题,请参考以下文章

Heroku 获取特定日期的日志

在 Spring Boot 应用程序中防止自定义异常的堆栈跟踪日志记录

Heroku:如何查看 Heroku 错误日志?

Heroku 中的 PHP 错误日志

Heroku:Papertrail 日志未显示详细版本

Django 项目的 Heroku 日志丢失错误