مساء الخير أيها القراء!
في الملاحظة الأولى حول posgres_exporter ، درست حالة خاصة إلى حد ما عند العمل مع fitcha جديدة في ذلك الوقت ، وهي القدرة على مراقبة مجموعة من الحالات و / أو قواعد البيانات من قبل مصدر واحد. ووصف ذلك "حفنة" من المشاكل التي واجهها وما هي الحلول التي استخدمها لإنجاحها.
وهكذا ، في 25 نوفمبر ، تم إصدار الإصدار التالي postgres_exporter 0.8.0. حل المشاكل الموضحة في المنشور السابق ، وأيضًا وظيفة جديدة لطيفة ، خاصة.
أطلب قطة ...
بادئ ذي بدء ، أود أن أعرض عليك postgre_exporter بمزيد من التفاصيل وأن أكتب نوعًا من دليل البدء السريع القصير. دعنا نذهب النقاط الرئيسية:
- متغيرات البيئة ومعلمات بدء التشغيل
- ما هي المقاييس الافتراضية؟
- كيفية إضافة المقاييس الخاصة بك
وصف
postgres_exporter - أداة مساعدة لجمع المقاييس من مثيلات كتلة PostgreSQL DBMS بتنسيق Prometheus يمكن الوصول إليه ، مكتوب في Go ، مفتوح المصدر ويتم توزيعه مجانًا.
متغيرات البيئة وسيطات سطر الأوامر
Postgres_exporter ، على هذا النحو ، لا يحتوي على ملف تكوين ويتم تمرير جميع المعلمات إلى المصدر إما من خلال متغيرات البيئة أو من خلال وسيطات سطر الأوامر. في الوقت نفسه ، لا يمكن نقل معلمات الاتصال بـ DBMS إلا من خلال متغيرات البيئة.
متغيرات البيئة
كما ذكر أعلاه ، يمكن تقسيم متغيرات البيئة إلى مجموعتين. السابق تمرير سلسلة الاتصال ، والأخير تكرار وسائط سطر الأوامر.
لنبدأ بالمجموعة الأولى. تبدأ هذه المتغيرات بالبادئة DATA_SOURCE_
:
DATA_SOURCE_NAME - يُستخدم افتراضيًا. يسمح لك بتسجيل سلسلة الاتصال في =
التنسيق =
، وفي شكل URI ويمكن أن يحتوي على تسجيل الدخول وكلمة المرور للاتصال.
خيارات مهمة صالحة للاتصال بـ PostgreSQL:
postgresql://rolename@dbhost:dbport/datname?sslmode=disable
؛postgresql://rolename:rolpass@dbhost:dbport?sslmode=disable&db=datname
؛postgresql://rolename:rolpass@?sslmode=disable&dbname=database&host=dbhost&port=dbport
؛postgresql://rolename:rolpass@?sslmode=disable&dbname=database&host=/tmp
(اتصال عبر مأخذ توصيل UNIX ، مأخوذ من unix_socket_directories لمثيل PostgreSQL)؛host=dbhost port=dbport dbname=database user=rolename sslmode=disable
؛
إذا كنت بحاجة إلى الاتصال بمثيلات متعددة (لا يُسمح باستخدام مسافة بعد العلامة العشرية):
postgresql://rolename@dbhost:dbport/datname?sslmode=disable,postgresql://rolename@dbhost:dbport/datname?sslmode=disable
؛sslmode=disable dbname=postgres host=127.0.0.1 port=5434 user=postgres,sslmode=disable dbname=postgres port=5432 user=postgres
.
- DATA_SOURCE_URI - بديل لـ DATA_SOURCE_NAME. هذا الخيار مناسب فقط إذا كنت تنوي الاتصال بمثيل PostgreSQL واحد).
يعين المتغير DATA_SOURCE_URI جزء URI بدون اسم مستخدم وكلمة مرور ، في النموذج "dbhost: dbport / dbname؟ Key = value". يتم الحصول على اسم المستخدم وكلمة المرور من متغيرات البيئة DATA_SOURCE_USER و DATA_SOURCE_PASS ، أو من DATA_SOURCE_USER_FILE DATA_SOURCE_PASS_FILE.
عندما يتم تخزين اسم المستخدم وكلمة المرور في الملفات ، يتم استخراج محتوياتها وإعادة تعيينها للمتغيرات DATA_SOURCE_USER و DATA_SOURCE_PASS. علاوة على ذلك ، في الكود ، يتم جمع كل ذلك في URI كامل النموذج: "postgresql://" + DATA_SOURCE_USER + ":" + DATA_SOURCE_PASS + "@" + DATA_SOURCE_URI
- DATA_SOURCE_URI_FILE - مثل DATA_SOURCE_URI ، للقراءة فقط من الملف ؛
- DATA_SOURCE_USER - عند استخدام DATA_SOURCE_URI ، يعين اسم المستخدم للاتصال بـ DBMS ؛
- DATA_SOURCE_USER_FILE - مثل DATA_SOURCE_USER ، للقراءة فقط من الملف ؛
- DATA_SOURCE_PASS - عند استخدام DATA_SOURCE_URI ، تعيّن كلمة مرور المستخدم للاتصال بـ DBMS ؛
- DATA_SOURCE_PASS_FILE - مثل DATA_SOURCE_PASS ، للقراءة فقط من الملف ؛
تتضمن المجموعة الثانية وسيطات مكررة متغيرة. أي عند بدء التشغيل ، لديك خيار ، أو تعيين معلمات التشغيل للتطبيق في شكل متغيرات البيئة ، أو تمرير كوسائط عند بدء التشغيل. ابدأ بالبادئة PG_EXPORTER_
:
- PG_EXPORTER_WEB_LISTEN_ADDRESS - يعين العنوان والمنفذ الذي من خلاله سيتلقى المصدر طلبات من بروميثيوس. افتراضياً
:9187
؛ - PG_EXPORTER_WEB_TELEMETRY_PATH - المسار الذي يتم من خلاله إعطاء المقاييس. افتراضيا
/metrics
. - PG_EXPORTER_DISABLE_DEFAULT_METRICS - لتعطيل مجموعة المقاييس بشكل افتراضي. حقيقة أن هذه المقاييس ستكون أدناه. فقط صحيحة أو خاطئة تقبل القيم. خطأ افتراضيًا (يُسمح بجمع المقاييس) ؛
- PG_EXPORTER_DISABLE_SETTINGS_METRICS - لتعطيل مجموعة المقاييس من طريقة العرض pg_settings. حقيقة أن هذه المقاييس ستكون أدناه. فقط صحيحة أو خاطئة تقبل القيم. خطأ افتراضيًا (يُسمح بجمع المقاييس) ؛
- يكتشف PG_EXPORTER_AUTO_DISCOVER_DATABASES - جميع قواعد بيانات مثيل نظام المجموعة لجمع قياساتها. فقط صحيحة أو خاطئة تقبل القيم. بشكل افتراضي ، خطأ (يتم جمع المقاييس فقط في قاعدة البيانات التي تم تحديدها في معلمات الاتصال) ؛
- PG_EXPORTER_EXCLUDE_DATABASES - تستبعد قاعدة البيانات من قائمة قواعد البيانات التي يتم جمع المقاييس لها إذا كانت
PG_EXPORTER_AUTO_DISCOVER_DATABASES=true
. يمثل قائمة مفصولة بفواصل لأسماء قاعدة البيانات. الافتراضي هو سلسلة فارغة. هام :
- القوالب template0 و template1 - ليست هناك حاجة للاستبعاد ، لذلك يتم قطعها في مرحلة الحصول على قائمة قواعد البيانات من pg_databases ؛
- لا يمكن استبعاد قاعدة البيانات المحددة في URI.
- PG_EXPORTER_EXTEND_QUERY_PATH - المسار إلى ملف YAML الذي يحتوي على استعلامات المستخدم. يحتوي ملف queries.yaml على أمثلة ؛
- PG_EXPORTER_CONSTANT_LABELS - تمت إضافة التصنيف (ثابت) إلى جميع المقاييس. هو مكتوب كقائمة
=
أزواج =
، مفصولة بفاصلة.
وسيطات سطر الأوامر
- عنوان web-listen هو نفسه PG_EXPORTER_WEB_LISTEN_ADDRESS ؛
- مسار القياس عبر الويب - مثل PG_EXPORTER_WEB_TELEMETRY_PATH ؛
- تعطيل-المقاييس الافتراضية هو نفسه PG_EXPORTER_DISABLE_DEFAULT_METRICS ؛
- Dis-settings-metrics هو نفسه PG_EXPORTER_DISABLE_SETTINGS_METRICS ؛
- قواعد بيانات الاكتشاف التلقائي هي نفسها PG_EXPORTER_AUTO_DISCOVER_DATABASES ؛
- قواعد بيانات الاستبعاد هي نفسها PG_EXPORTER_EXCLUDE_DATABASES ؛
- extension.query-path - مثل PG_EXPORTER_EXTEND_QUERY_PATH ؛
- constantLabels - مثل PG_EXPORTER_CONSTANT_LABELS ؛
- dumpmaps - يعرض المحتويات الداخلية لخريطة المقاييس. تستخدم لتصحيح طلبات المستخدم. لا يبدأ التطبيق ؛
- log.level - يضبط أحد مستويات التسجيل الممكنة:
debug
، info
، warn
، error
، fatal
؛ - log.format - يحدد طريقة وشكل إخراج السجل. على سبيل المثال:
logger:syslog?appname=bob&local=7
أو logger:stdout?json=true
. بشكل افتراضي ، logger:stderr
.
المقاييس الافتراضية
المقاييس -
هي مجموعة معينة من مقاييس المراقبة ، يتم وضع مجموعة منها مباشرةً في الكود. يمكن تعطيل مجموعة -
عن طريق تحديد معلمات سطر الأوامر - المقاييس الافتراضية القابلة للضبط و / أو - المقاييس القابلة للإعداد للإعدادات أو عن طريق تحديد متغيرات البيئة المناسبة.
لاحظت أنه في الإصدار الحالي ، تم حل مشكلة استخدام المقاييس عند تمكين الاستكشاف التلقائي ، بسبب وجود ازدواجية في المقاييس ، مما أدى إلى حدوث أخطاء.
بشكل افتراضي ، يتم إرسال المقاييس من طرق العرض التالية إلى المراقبة:
- pg_stat_bgwriter.
- pg_stat_database.
- pg_stat_database_conflicts.
- pg_locks.
- pg_stat_replication.
- pg_stat_activity.
- pg_settings.
من بين ما يجب الانتباه إليه هو pg_stat_replication و pg_stat_activity ، نظرًا لأن مجموعة الحقول التي تم إرجاعها تعتمد على إصدار PostgreSQL. لهذا ، يتم تحديد إصدار DBMS في المصدر ويتم تحديد الطلب المقابل. لا يمكنك تحديد إصدار في استعلامات المستخدم. من المفترض أن المسؤول يعرف مسبقًا الإصدار الذي سيتم مراقبته. يمكن أن تنشأ مشاكل أيضًا إذا حاولت تجميع المقاييس من قِبل مصدر واحد من مثيلات الإصدارات المختلفة.
باستخدام مقاييس إعدادات المثيلات (pg_settings) ، كل شيء أبسط نوعًا ما ، يتم تكوينها حسب الطلب:
SELECT name, setting, COALESCE(unit, ''), short_desc, vartype FROM pg_settings WHERE vartype IN ('bool', 'integer', 'real');
وبالتالي ، بشكل افتراضي ، يتم تشكيل مجموعة من المقاييس فقط من القيم العددية.
علاوة على ذلك ، سننظر في استنتاج المصدر ، بما في ذلك كيف سنفهم لماذا المقاييس المشفرة الثابت لها الحق في الوجود. على سبيل المثال ، خذ مقياسين: Shared_buffers و wal_sender_timeout. في ناتج المصدر ، نحصل على ثلاثة صفوف لكل مقياس.
السطر الأول - يمثل التلميح ويتألف من اسم المقياس في postgres_exporter ، وهو وصف (العمود باختصار من عرض pg_settings) وإذا تم تحويل النوع إلى النوع الأساسي ، فسيتم الإشارة إلى أي منهما (القيمة بين قوسين مربعين).
يشير السطر الثاني إلى نوع القيمة ، من حيث بروميثيوس. والخط الثالث ، متري مع مجموعة من التسميات والقيمة المعينة.
إرجاع القيم لـ Shared_buffers.
# HELP pg_settings_shared_buffers_bytes Sets the number of shared memory buffers used by the server. [Units converted to bytes.] # TYPE pg_settings_shared_buffers_bytes gauge pg_settings_shared_buffers_bytes{server="127.0.0.1:5432"} 1.34217728e+08
pg_settings_shared_buffers_bytes
- اسم المقياس. وفقا لقواعد الشكل الجيد ، يتكون من اسم الجدول واسم المتري ووحدة القياس. التالي يأتي وصف قصير من الجدول pg_settings. وأخيرًا ، إشارة إلى أن القيمة المترية قد تم تحويلها إلى وحدة بايت (وحدات تم تحويلها إلى بايت). لماذا يجدر الانتباه إلى هذا الأخير ، لأن القيمة تبدو مختلفة قليلاً في قاعدة البيانات ، وهي:
name | setting | unit | short_desc
نوع المقياس لدينا هو GAUGE ، مما يعني أنه يمكن أن يأخذ قيمًا تعسفية مع مرور الوقت. في حالتنا ، يمكن أن يتغير عدد المخازن المؤقتة عند صقلها في كلا الاتجاهين.
يمكنك معرفة المزيد حول أنواع المقاييس واختلافاتها في وثائق Prometheus.
المقياس التالي هو wal_sender_timeout. يتم جمع حقول المعلومات وفقًا لنفس المبدأ الموضح أعلاه. في هذه الحالة فقط ، يتم تحويل القيمة المترية إلى ثوانٍ ، ويتم تخزين قاعدة البيانات بالمللي ثانية. مع هذه الميزة ، عليك أن تكون حذراً والنظر عند رسم المخططات.
# HELP pg_settings_wal_sender_timeout_seconds Sets the maximum time to wait for WAL replication. [Units converted to seconds.] # TYPE pg_settings_wal_sender_timeout_seconds gauge pg_settings_wal_sender_timeout_seconds{server="127.0.0.1:5432"} 60
القيمة المخزنة في قاعدة البيانات:
demo=
يتم تقليل جميع القيم التي تحتوي على وحدات إلى نوعين: مقاييس الصوت إلى وحدات البايت ؛ مقاييس الوقت إلى ثوان.
مجموعة مقاييس مخصصة
بالإضافة إلى أو بدلاً من المقاييس الافتراضية ، يمكنك استخدام القياس الخاص بك. للقيام بذلك ، ما عليك سوى تعيين مسار الملف ، مع استعلامات المستخدم ، من خلال الوسيطة --extend.query-path = query.yaml أو من خلال متغير البيئة PG_EXPORTER_EXTEND_QUERY_PATH.
يحتوي مستودع المشروع على ملف YAML مع أمثلة: queries.yaml
وألاحظ أنه مقارنة بالإصدار السابق ، تمت إضافة 0.8.0 مفاتيح جديدة و cache_seconds في مفاتيح جديدة. في المثال أدناه ، نقوم بتحليل تنسيق التسجيل وتخصيص الحقل.
محتويات عينة من ملف queries.yaml
pg_database: query: "SELECT pg_database.datname, pg_database_size(pg_database.datname) as size_bytes FROM pg_database" master: true cache_seconds: 30 metrics: - datname: usage: "LABEL" description: "Name of the database" - size_bytes: usage: "GAUGE" description: "Disk space used by the database"
المفاتيح والقيم من المثال أعلاه:
pg_database
- بادئة تعسفية للقياسات التي يتم إرجاعها بواسطة الطلب (مطلوب) ؛query
- يحتوي على استعلام SQL (مطلوب) ؛master
- تنفيذ الطلب فقط في قاعدة البيانات المحددة عند الاتصال بـ URI (قاعدة البيانات الرئيسية). مطلوب عند بدء المصدر مع العلم - السيارات - اكتشف - قواعد البيانات. يقبل صواب أو خطأ خطأ افتراضيا. (غير مطلوب)؛cache_seconds
- الوقت الذي سيتم خلاله إرجاع بيانات ذاكرة التخزين المؤقت. تم ضبطه في ثوان.metrics
- تحتوي على قائمة بالعلامات والمقاييس ؛datname
، size_bytes
- عنصر القائمة. يجب أن يتطابق اسم عنصر القائمة مع اسم العمود في الاستعلام ؛usage
- نوع القيمة. يقبل COUNTER ، GAUGE ، LABLE (المزيد في وثائق Prometheus)description
- وصف متري مخصص
مثال على مقاييس الإرجاع:
# HELP pg_database_size_bytes Disk space used by the database # TYPE pg_database_size_bytes gauge pg_database_size_bytes{datname="dbtest1",server="localhost:5432"} 1.0105503e+07 pg_database_size_bytes{datname="demo",server="localhost:5432"} 2.813719199e+09 pg_database_size_bytes{datname="postgres",server="localhost:5432"} 4.735491e+06 pg_database_size_bytes{datname="template0",server="localhost:5432"} 7.758339e+06 pg_database_size_bytes{datname="template1",server="localhost:5432"} 7.758339e+06
ملخص
حسنًا ، نلخص كل ما لدينا في أحدث إصدار من postgres_exporter 0.8.0. في الأساس ، تتعلق جميع التحسينات بمراقبة عدة حالات و / أو عدة قواعد بيانات في مثيل.
- تتيح لك وسيطة الاستثناء-قواعد البيانات (ظهرت في 0.6.0) استبعاد قواعد البيانات من قائمة قواعد البيانات التي سيتم جمع المقاييس الخاصة بها. ولكن لا يمكنك استبعاد قاعدة البيانات المحددة في اتصال URI ، لأنها قاعدة رئيسية ؛
- يمكنك الآن استخدام الاستعلامات المخصصة في طرق العرض العامة (pg_stat_activity ، pg_stat_database ، وما إلى ذلك) مع وسيطة اكتشاف قواعد البيانات التلقائية. للقيام بذلك ، تمت إضافة حقل رئيسي إضافي ، يشير إلى أنه يجب تنفيذ الطلب فقط في قاعدة البيانات الرئيسية ؛
- يمكنك الآن استخدام المقاييس الافتراضية مع قواعد البيانات للاكتشاف التلقائي للوسيطة ؛
- بالنسبة لطلبات المستخدم ، تمت إضافة حقل cache_seconds ، مما يتيح لك ضبط الوقت (بالثواني) الذي سيتم به تخزين استجابة الخادم للطلب المقابل.
مصادر
- بروميثيوس [ 1 ] هو تطبيق مفتوح المصدر يستخدم لمراقبة الأحداث وتنبيهها. يكتب مقاييس في الوقت الحقيقي إلى قاعدة بيانات سلسلة زمنية تم إنشاؤها باستخدام نموذج طلب HTTP ، مع استعلامات مرنة وتنبيهات في الوقت الحقيقي.
- postgres_exporter هي مصدر لقياسات PostgreSQL لـ Prometheus.
الإصدار ، وقت كتابة هذا التقرير ، الإصدار 0.5.1. الإصدارات المدعومة من PostgreSQL 9.4+ (ولكن كما أظهرت الممارسة ، تعمل على 9.3).