PostgreSQL,RED,Golden Signals:行动指南

观察方法Golden Signals和RED是用于构建服务监视的模板,并定义监视所需的关键指标。以前,只有监视管理员或SRE工程师才知道这些方法。现在,应用程序检测的主题不再是新鲜事物,或多或少地每个人都知道这些方法。

在本文中,我将讨论如何使用RED和Golden Signals方法覆盖PostgreSQL进行监视。Postgres中的监视子系统是在RED和Golden Signals还不存在的时候实现的,而我谦虚地认为它存在一些缺点,并且立即将RED或Golden Signals放在Postgres上似乎是一项艰巨的任务。在这篇文章中,我将尝试简要回顾一下Postgres提供的使用RED / Golden Signals方法实现观测的可能性,并将给出实现此目标的具体指导。另外,它并不像您想象的那么难。

我已经对RED和Golden Signals熟悉了很长时间,因此您应该使用这些方法有几个原因:

  • 使用这些方法进行监视可以使您快速(但从表面上)确定服务是否一切正常。 

  • 如果其他指标的范围很广,则在调查问题时,您可以朝着正确的方向做进一步的研究,排除不那么重要的指标。

  • 它们或多或少是通用的,并且适用于不专注于直接与用户合作的Web服务和系统服务。

  • 是涵盖任何服务的基本监视需求的良好起点。

通常,如果您需要监控的服务难以理解,那么我们只需采用RED或Golden Signals信号,并根据列表设置必要信息的收集和指标的返回即可。在输出中,我们获得了一个基本的最低要求(以仪表板的形式),通常可以充分了解该服务运行良好还是不良。此外,已经可以实现更详细的或特定于服务的内容。但是,这些方法也有缺点,因此您不应认为这些方法将涵盖度量标准的所有可能需求。

好吧,我希望结果令人信服,让我们继续探讨Postgres。

RED和Golden Signals的本质是测量通过服务的流量的定量特征,例如RED是:

  • 请求速率-每秒的请求数。

  • 请求错误-每秒错误请求的数量。

  • Request duration - ( ).

Golden Signals ( ), (Latency, Traffic, Errors), Saturation - , , .

HTTP (), - , . (Requests), (Errors), (Duration), (Saturation).

. , "". SQL- SQL-? SQL-, .. , 1 = 1 SQL-. RED SQL- (request_id, , / ..).

Requests

, R - requests. , - . Postgres (views). .

pg_stat_statements. . per-statement , statement () calls . calls . pg_stat_statements .

pg_stat_statements . - pg_stat_statements.track . 2 . "top" . "all" . "top", .. , , .

pg_stat_statements.

SELECT sum(calls) FROM pg_stat_statements;

. Prometheus, , Zabbix UserParameter.

pg_stat_activity pg_stat_database. , pg_stat_activity , .. (snapshot) , . xact_commit, .. . , .

Errors

" " pg_stat_database. xact_rollback . - , . . , SQL- ( BEGIN .. END) xact_rollback. xact_rollback .

SQL.

SELECT sum(xact_rollback) FROM pg_stat_database;

, . , . , . Postgres .

Duration

pg_stat_statements total_time. ( ) . total_time .

SELECT sum(total_time) FROM pg_stat_statements;

, , .. Prometheus . , pg_stat_statements . total_time min_time, max_time, mean_time, stddev_time. 13 . DBA-specific , - .

Saturation

(saturation), RED , Golden Signals. ( ) , ( ).

max_connections. , . , : 1) idle 2) - tps . , : , ( ), . . , max_connections, . .

pg_stat_activity. , , .

?

(COUNTER) . " " ( , - ). . pg_stat_activity GAUGES () . . - OLTP , / GAUGE . GAUGES.

GAUGE, . , . :

  • (active, idle in transaction, waiting).

SELECT
	count(*) FILTER (WHERE state IS NOT NULL) AS total,
	count(*) FILTER (WHERE state = 'idle') AS idle,
	count(*) FILTER (WHERE state IN ('idle in transaction', 'idle in transaction (aborted)')) AS idle_in_xact,
	count(*) FILTER (WHERE state = 'active') AS active,
	count(*) FILTER (WHERE wait_event_type = 'Lock') AS waiting,
	count(*) FILTER (WHERE state IN ('fastpath function call','disabled')) AS others
FROM pg_stat_activity WHERE backend_type = 'client backend';

. xact_start - , state_change - - active .

  • .

SELECT coalesce(max(extract(epoch FROM clock_timestamp() - xact_start)),0) AS max_idle_seconds
FROM pg_stat_activity
WHERE state IN ('idle in transaction', 'idle in transaction (aborted)');
  • .

SELECT coalesce(max(extract(epoch FROM clock_timestamp() - state_change)),0) AS max_idle_seconds
FROM pg_stat_activity
WHERE wait_event_type = 'Lock';

, . . :

  • idle in transactions waiting .

  • idle .

  • .

Postgres' RED Golden Signals SQL . , , . , request rate pg_stat_statements.calls. Request errors pg_stat_database.xact_rollback. Request duration pg_stat_statements.total_time. Saturation state, wait_event_type, xact_start, state_change pg_stat_activity.

6 , - drilldown- /. Postgres'.

同样,您可以组织一个仪表板。
.

?

  1. Requests. , . , , .

  2. Errors. , - / .

  3. Duration. , . .

  4. Saturation. idle waiting , . , ad-hoc idle .

- .

Weaponry Postgres , idle , Weaponry .

- -Postgres', .




All Articles