我试图使用Nagios脚本来监视Postgres数据库上的数据库连接数,但我遇到了这个问题:这些计数被视为当前打开的连接,每5分钟测量一次。
SELECT sum(numbackends) FROM pg_stat_database;
不过,这似乎会错过大量的短期连接,因此统计数据与实际情况相去甚远。
我尝试手动运行该脚本,并且发现即使在两个连接之间相差几秒钟的情况下,也发生了很大的变化。
我如何以可靠的方式获取此信息?像max(connectios)发生在一个时间间隔内。
1
随着时间的推移,用于连接的聚合统计信息会很好,但是我不认为PostgreSQL当前会收集它们。请参阅docs postgresql.org/docs/current/static/monitoring-stats.html了解详细信息。
—
Craig Ringer 2014年
@CraigRinger也许我可以配置Postgres或客户端以保持连接打开较长时间,所以我可以测量它们。由于当前的设置,我遇到一种情况,即postgres开始拒绝连接。监视无法检测到此情况,因为这是在5分钟间隔内发生的,并且它在不到5分钟的时间内从低于警告级别变为高于严重级别。这不是DoS攻击。
—
sorin 2014年
是的,这是一个很有趣的问题。我强烈建议
—
克雷格·林格2014年
PgBouncer
您在PostgreSQL实例前面放置一个,它会在连接太忙时将其排队,而不是拒绝它们。(是的,PostgreSQL无法做到这一点很愚蠢,但这不是一个简单的解决方法;请参阅有关邮件列表的无休止讨论,以重新构建内置池)。
如何将连接(使用
—
a_horse_with_no_name 2014年
log_connections
和log_disconnections
)记录到日志文件(例如csvlog)中,然后使用pgBadger或类似的方法从日志文件中提取出来呢?
@a_horse_with_no_name好点。您甚至可以与客户端“尾部”日志,该客户端仅读取新的日志条目,通过断开连接和连接进行集成,以获取给定时间段内峰值连接的近实时报告。坦白说,它不应该那么复杂。我在AXLE项目(axisproject.eu)的任务之一是实施更多审核,我也许可以将其纳入其中……
—
Craig Ringer 2014年