Metode pengamatan Sinyal Emas dan MERAH adalah templat untuk pemantauan layanan gedung dan menentukan metrik utama yang diperlukan untuk pemantauan. Sebelumnya, hanya administrator pemantauan atau teknisi SRE yang mengetahui tentang metode ini. Sekarang topik instrumentasi aplikasi bukan lagi sesuatu yang baru dan kurang lebih semua orang tahu tentang metode ini.
Pada postingan kali ini saya akan membahas bagaimana cara cover PostgreSQL dalam monitoring menggunakan metode RED dan Golden Signals. Subsistem pemantauan di Postgres diimplementasikan pada hari-hari ketika RED dan Golden Signals belum ada, dan menurut pendapat saya ada beberapa kekurangan di dalamnya, dan mungkin tampak seperti tugas yang menakutkan untuk segera memasang Sinyal MERAH atau Emas di Postgres. Dalam posting ini saya akan mencoba meninjau secara singkat kemungkinan yang disediakan Postgres untuk menerapkan observasi menggunakan metode RED / Golden Signals dan akan memberikan arahan khusus untuk menerapkan ini. Plus, itu tidak sesulit yang Anda bayangkan.
Saya telah mengenal Sinyal Merah dan Emas untuk waktu yang relatif lama dan ada beberapa alasan mengapa Anda harus menggunakan metode ini:
pemantauan menggunakan metode ini memungkinkan Anda dengan cepat (tetapi secara dangkal) menentukan apakah semuanya sesuai dengan layanan.
jika ada cakupan luas dari metrik lain, saat menyelidiki masalahnya, Anda bisa masuk lebih dalam ke arah yang benar, mengecualikan metrik yang kurang penting.
lebih atau kurang universal dan berlaku untuk layanan web dan layanan sistem yang tidak berfokus pada pekerjaan langsung dengan pengguna.
adalah awal yang baik untuk memenuhi kebutuhan pemantauan dasar dari layanan apa pun.
Secara umum, jika Anda memiliki layanan yang tidak dapat dipahami di depan Anda yang perlu dipantau, maka kami hanya mengambil RED atau Golden Signals dan, sesuai daftar, mengatur pengumpulan informasi yang diperlukan dan kembalinya metrik. Pada keluarannya, kita mendapatkan minimal dasar (dalam bentuk dashboard) yang secara umum memberikan gambaran yang cukup apakah layanan tersebut bekerja dengan baik atau tidak. Lebih lanjut, sudah mungkin untuk menerapkan hal-hal yang lebih rinci atau layanan khusus. Namun, metode ini juga memiliki kekurangan, jadi Anda tidak perlu berpikir bahwa metode ini akan mencakup semua kemungkinan kebutuhan metrik.
Saya harap hasilnya meyakinkan, mari kita lanjutkan ke Postgres.
Inti dari RED dan Golden Signals adalah mengukur karakteristik kuantitatif lalu lintas yang melewati layanan, misalnya RED adalah:
Tingkat permintaan - jumlah permintaan per detik.
Kesalahan permintaan - jumlah permintaan yang salah per detik.
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'.

?
- .
Weaponry Postgres , idle , Weaponry .
- -Postgres', .