ProHoster > بلوق > إدارة > إحصائيات ومراقبة نصوص PHP في الوقت الفعلي. ClickHouse و Grafana يذهبان لمساعدة Pinba
إحصائيات ومراقبة نصوص PHP في الوقت الفعلي. ClickHouse و Grafana يذهبان لمساعدة Pinba
سأوضح لك في هذه المقالة كيفية استخدام pinba مع clickhouse و grafana بدلاً من pinba_engine و pinboard.
في مشروع php ، ربما يكون pinba هو الطريقة الوحيدة الموثوقة لفهم ما يحدث مع الأداء. صحيح ، يتم تطبيق Pinba عادة فقط عند ملاحظة المشاكل بالفعل وليس من الواضح "مكان الحفر".
في كثير من الأحيان ، لا أحد لديه أي فكرة عن عدد المرات في الثانية / الدقيقة التي يُطلق فيها على نص معين ويبدأ في التحسين "عن طريق اللمس" ، بدءًا من تلك الأماكن التي تبدو أكثر منطقية.
يقوم شخص ما بتحليل سجلات nginx ، ويقوم شخص ما بتحليل الاستعلامات البطيئة في قاعدة البيانات.
بالطبع، لن يكون pinba غير ضروري، ولكن هناك عدة أسباب لعدم وجوده في كل مشروع.
والسبب الأول هو الإعداد.
من أجل الحصول على نوع من "العادم" بشكل أو بآخر من إدخال pinba ، من المستحسن جدًا رؤية المقاييس ليس فقط للدقائق الأخيرة ، ولكن أيضًا لفترة طويلة من الوقت (من أيام إلى شهور).
للقيام بذلك:
تثبيت امتداد php (وقد ترغب في وحدة nginx)
تجميع ملحق ل mysql
تثبيت Pinboard وإعداد cron
نظرًا لضآلة كمية المعلومات حول pinb ، فإن الكثيرين لديهم انطباع بأنه يعمل فقط على php5 وأنه انتهى منذ فترة طويلة ، ولكن كما سنرى أكثر ، فإن هذا ليس هو الحال.
الخطوة الأولى هي الأسهل، كل ما عليك فعله هو تشغيل الأمر:
apt install php-pinba
تحتوي المستودعات على هذا الامتداد حتى php 7.3 ولا تحتاج إلى تجميع أي شيء.
بعد تنفيذ أمر التثبيت ، نحصل على الفور على امتداد يعمل بالفعل يجمع ويرسل مقاييس كل برنامج نصي (المدة ، الذاكرة ، إلخ) بالتنسيق بروتوبوف بواسطة udp إلى 127.0.0.1:30002.
لا أحد يلتقط ويعالج حزم UDP هذه حتى الآن، لكن هذا لا يؤثر سلبًا على سرعة أو استقرار نصوص php الخاصة بك.
حتى وقت قريب، كتطبيق يمكنه التقاط ومعالجة حزم UDP هذه، لم يكن هناك سوى محرك بينبا. وصف "بسيطة وموجزة»التثبيت يثبط الرغبة في قراءته والتعمق فيه مرة أخرى. توجد في قوائم التبعيات التي يبلغ طولها كيلومترًا كل من أسماء الحزم وأسماء البرامج وروابط لصفحات فردية مع تثبيتها ، وتلك التي لها روابط خاصة بها إلى التبعيات الأخرى. لا أحد لديه الوقت أو الرغبة في التعامل مع هذا الهراء.
ربما في يوم من الأيام سيكون من الممكن تثبيت pinba10 بأمر واحد أو أمرين وعدم قراءة الكثير من المواد لفهم كيفية القيام بذلك ، ولكن هذا ليس هو الحال حتى الآن.
إذا قمت بتثبيت pinba_engine ، فهذا نصف المعركة فقط. بعد كل شيء ، بدون وحة لحفظ المقتطفات سيتعين عليك قصر نفسك على الدقائق القليلة الماضية فقط ، أو تجميع البيانات وتخزينها وتصورها بنفسك. من الجيد أن يكون لوح الدبوس سهل الاستخدام بدرجة كافية. التركيب.
يبدو، لماذا هذه المعاناة إذا كانت جميع المقاييس من php تذهب بالفعل إلى منفذ udp بتنسيق protobuf وكل ما هو مطلوب هو كتابة تطبيق يلتقطها ويخزنها في نوع من التخزين؟ على ما يبدو، هؤلاء المطورين الذين توصلوا إلى هذه الفكرة جلسوا على الفور لكتابة دراجاتهم، والتي انتهى الأمر ببعضها على جيثب.
ما يلي هو نظرة عامة على أربعة مشاريع مفتوحة المصدر تخزن المقاييس في وحدة التخزين، والتي يسهل الحصول على هذه البيانات منها وتصورها، على سبيل المثال، باستخدام جرافانا.
خادم udp قيد التشغيل يقوم بتخزين المقاييس في OpenTSDB. ربما إذا تم استخدام OpenTSDB بالفعل في مشروعك، فإن هذا الحل سوف يناسبك، وإلا فإنني أوصي بالمرور.
خادم UDP على الذهاب، من نفسه هابروسر، والذي يقوم هذه المرة بتخزين المقاييس في InfluxDB. تستخدم العديد من المشاريع بالفعل InfluxDB للمراقبة، لذلك يمكن أن يكون هذا الحل مثاليًا لها.
الايجابيات:
التدفق يسمح قم بتجميع المقاييس المستلمة وحذف النسخة الأصلية بعد فترة زمنية محددة.
خادم UDP في PHP الذي يحفظ المقاييس في ClickHouse. هذا هو الحل الذي أقترحه، وهو نتيجة معرفتي بـ pinba وClickHouse وprotobuf. بينما كنت أتعامل مع هذه المجموعة بأكملها، كتبت "إثباتًا للمفهوم"، والذي، بشكل غير متوقع بالنسبة لي، لم يستهلك موارد كبيرة (30 ميجابايت من ذاكرة الوصول العشوائي وأقل من 1٪ من أحد نوى المعالج الثمانية)، لذلك قمت قررت مشاركتها مع الجمهور.
الإيجابيات - مثل الحل السابق ، استخدمت أيضًا الأسماء المعتادة من محرك pinba_engine الأصلي. أضفت أيضًا تكوينًا يسمح لك بتشغيل العديد من مثيلات pinbaserver في وقت واحد لحفظ المقاييس في جداول مختلفة - وهذا مفيد إذا كنت ترغب في جمع البيانات ليس فقط من php ، ولكن أيضًا من nginx.
السلبيات - "عيب فادح" وتلك الأشياء الصغيرة التي لن تناسبك شخصيًا، لكن الحل الخاص بي "بسيط مثل النعال" ويتكون من حوالي 100 سطر فقط من التعليمات البرمجية، لذلك يمكن لأي مطور PHP تغيير ما لا يحبه فيه بضع دقائق.
كيف يعمل
الاستماع على منفذ udp 30002. يتم فك تشفير جميع الحزم الواردة وفقًا لنظام protobuf ويتم تجميعها. مرة واحدة في الدقيقة ، يتم إدخال دفعة بيت النقر في جدول طلبات pinba. (تم تكوين جميع المعلمات بتنسيق التكوين)
قليلا عن بيت النقر
يدعم Clickhouse محركات تخزين مختلفة. الأكثر استخدامًا هو MergeTree.
إذا قررت في وقت ما تخزين البيانات المجمعة لجميع الأوقات ، والبيانات الأولية فقط لآخر واحدة ، فيمكنك إنشاء عرض ملموس مع التجميع ، وتنظيف جدول طلبات pinba الرئيسي بشكل دوري ، بينما ستبقى جميع البيانات في رأي ملموس. علاوة على ذلك ، عند إنشاء جدول طلبات pinba ، يمكنك تحديد "engine = Null" ، فلن يتم حفظ البيانات الأولية على القرص على الإطلاق ، وفي نفس الوقت ، ستظل تقع في العرض الفعلي وتبقى مجمعة. أنا أستخدم هذا المخطط لمقاييس nginx ، لأن طلباتي على nginx تزيد بمقدار 50 مرة عن طلبات php.
لذا ، لقد قطعت شوطًا طويلاً ولا أرغب في تركك في منتصف الطريق ، لذا ما يلي هو وصف تفصيلي لتركيب وتكوين الحل الخاص بي وكل ما تحتاجه ، بالإضافة إلى المزالق التي تحطمت فيها أكثر من سفينة. تم وصف عملية التثبيت بأكملها لـ Ubuntu 18.04 LTS و Centos 7 ، في التوزيعات والإصدارات الأخرى ، قد تختلف العملية قليلاً.
تركيب
لقد وضعت جميع الأوامر اللازمة Dockerfile لتسهيل استنساخ التعليمات. سيتم وصف المزالق فقط أدناه.
PHP بينبا
بعد التثبيت ، تأكد من عدم تعليق جميع الخيارات في الملف /etc/php/7.2/fpm/conf.d/20-pinba.ini. في بعض التوزيعات (مثل centos) قد يتم التعليق عليها.
أثناء التثبيت ، سيطلب منك clickhouse تعيين كلمة مرور للمستخدم الافتراضي. بشكل افتراضي ، يتوفر هذا المستخدم من جميع عناوين IP ، لذلك إذا لم يكن لديك جدار حماية على الخادم ، فتأكد من تعيين كلمة مرور له. يمكن القيام بذلك أيضًا بعد التثبيت في ملف /etc/clickhouse-server/users.xml.
ومن الجدير بالذكر أيضًا أن Clickhouse يستخدم عدة منافذ، بما في ذلك 9000. ويستخدم هذا المنفذ أيضًا لـ php-fpm في بعض التوزيعات (على سبيل المثال، Centos). إذا كنت تستخدم هذا المنفذ بالفعل، فيمكنك تغييره إلى منفذ آخر في الملف /etc/clickhouse-server/config.xml.
grafana مع البرنامج المساعد clickhouse
بعد تثبيت برنامج grafana ، استخدم مسؤول تسجيل الدخول ومسؤول كلمة المرور. عند تسجيل الدخول لأول مرة ، سيطلب منك Grafana تعيين كلمة مرور جديدة.
بعد ذلك ، انتقل إلى القائمة "+" -> استيراد وحدد رقم لوحة التحكم المراد استيرادها 10011. لقد قمت بإعداد لوحة التحكم هذه وتحميلها حتى لا تضطر إلى القيام بذلك بنفسك مرة أخرى.
تدعم Grafana العمل مع Clickhouse من خلال مكون إضافي تابع لجهة خارجية، ولكن بالنسبة للمكونات الإضافية التابعة لجهات خارجية، لا تحتوي Grafana على تنبيهات (تم وزن تذكرة ذلك منذ عدة سنوات).
بينبا الخادم
يعد تثبيت protobuf و libevent أمرًا اختياريًا، ولكنه يعمل على تحسين أداء خادم pinba. إذا قمت بتثبيت pinba-server في مجلد آخر غير /opt، فستحتاج أيضًا إلى التعديل البرنامج النصي systemd ملف.
وحدة pinba ضمن nginx
لتجميع الوحدة، تحتاج إلى مصادر من نفس إصدار nginx المثبت بالفعل على الخادم الخاص بك، بالإضافة إلى نفس خيارات التجميع، وإلا سيكون البناء ناجحًا، ولكن عند توصيل الوحدة، سيتم إنشاء خطأ "الوحدة غير متوافقة مع النظام الثنائي". يمكن عرض خيارات الترجمة باستخدام الأمر nginx -V
خارقة الحياة
جميع مواقعي تعمل فقط على https. يصبح حقل المخطط بلا معنى، لذلك أستخدمه لفصل الويب/وحدة التحكم.
في البرامج النصية المتوفرة من الويب، أستخدم:
if (ini_get('pinba.enabled')) {
pinba_schema_set('web');
}
وفي وحدة التحكم (على سبيل المثال، البرامج النصية cron):
if (ini_get('pinba.enabled')) {
pinba_schema_set('console');
}
تحتوي لوحة معلومات grafana الخاصة بي على مفتاح ويب / وحدة تحكم لعرض الإحصائيات بشكل منفصل.
يمكنك أيضًا إرسال العلامات الخاصة بك إلى Pinbu ، على سبيل المثال:
pinba_tag_set('country', $countryCode);
هذا كل شيء.
طلب كبير للإجابة على استطلاعات الرأي تحت المادة.
تقليديا، أحذر من أنني لا أنصح ولا أساعد من خلال رسائل حبر الشخصية وشبكات التواصل الاجتماعي.