طرق المراقبة تعد الإشارات الذهبية و RED قوالب لرصد خدمة البناء وتحديد المقاييس الرئيسية اللازمة للمراقبة. في السابق ، كان مسؤولو المراقبة فقط أو مهندسو SRE على علم بهذه الأساليب. الآن لم يعد موضوع أجهزة التطبيق شيئًا جديدًا ويعرف الجميع أكثر أو أقل عن هذه الأساليب.
سأناقش في هذا المنشور كيفية تغطية PostgreSQL في المراقبة باستخدام طريقتي RED و Golden Signals. تم تنفيذ نظام المراقبة الفرعي في Postgres في الأيام التي لم تكن فيها إشارات RED و Golden Signals موجودة بعد ، وفي رأيي المتواضع ، هناك بعض العيوب فيه ، وقد يبدو وضع إشارات RED أو Golden على Postgres على الفور مهمة شاقة. سأحاول في هذا المنشور مراجعة الاحتمالات التي توفرها Postgres بشكل موجز لتنفيذ المراقبة باستخدام أساليب RED / Golden Signals وسأعطي توجيهات محددة لتنفيذ ذلك. بالإضافة إلى ذلك ، ليس الأمر صعبًا كما تعتقد.
لقد كنت على دراية بالإشارات الحمراء والذهبية لفترة طويلة نسبيًا وهناك العديد من الأسباب التي تجعلك تستخدم هذه الطرق:
تتيح لك المراقبة باستخدام هذه الأساليب تحديد ما إذا كان كل شيء متوافقًا مع الخدمة بسرعة (ولكن بشكل سطحي).
إذا كانت هناك تغطية واسعة للمقاييس الأخرى ، أثناء التحقيق في المشكلة ، يمكنك التعمق في الاتجاه الصحيح ، باستثناء المقاييس الأقل أهمية.
هي أكثر أو أقل عالمية وقابلة للتطبيق على كل من خدمات الويب وخدمات النظام التي لا تركز على العمل المباشر مع المستخدم.
بداية جيدة لتغطية احتياجات المراقبة الأساسية لأي خدمة.
بشكل عام ، إذا كانت لديك خدمة غير مفهومة أمامك وتحتاج إلى مراقبتها ، فنحن نأخذ الإشارات الحمراء أو الذهبية ، ونقوم ، حسب القائمة ، بإعداد جمع المعلومات الضرورية وإعادة المقاييس. عند الإخراج ، نحصل على حد أدنى أساسي (في شكل لوحة معلومات) والذي يعطي ، بشكل عام ، فكرة كافية عما إذا كانت الخدمة تعمل بشكل جيد أو سيئ. علاوة على ذلك ، من الممكن بالفعل تنفيذ أشياء أكثر تفصيلاً أو خاصة بالخدمة. ومع ذلك ، فإن هذه الأساليب لها أيضًا عيوب ، لذلك لا ينبغي أن تعتقد أن هذه الأساليب ستغطي جميع الاحتياجات الممكنة للمقاييس.
حسنًا ، آمل أن يكون الأمر مقنعًا ، فلننتقل إلى Postgres.
يتمثل جوهر الإشارات الحمراء والذهبية في قياس الخصائص الكمية لحركة المرور التي تمر عبر الخدمة ، على سبيل المثال ، 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'.

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