ProHoster > وبلاگ > اداره > آمار و نظارت بر اسکریپت های PHP در زمان واقعی. کلیک هاوس و گرافانا به کمک پینبا می آیند
آمار و نظارت بر اسکریپت های PHP در زمان واقعی. کلیک هاوس و گرافانا به کمک پینبا می آیند
در این مقاله به شما می گویم که چگونه به جای pinba_engine و pinboard از pinba با کلیک هاوس و گرانا استفاده کنید.
در یک پروژه PHP، pinba شاید تنها راه قابل اعتماد برای درک آنچه با عملکرد اتفاق می افتد باشد. درست است، pinba معمولاً فقط زمانی اجرا می شود که مشکلات از قبل مشاهده شده باشد و مشخص نیست "کجا باید حفاری شود".
اغلب هیچ کس نمی داند که چند بار در ثانیه / دقیقه این یا آن اسکریپت فراخوانی می شود و آنها شروع به بهینه سازی "با لمس" می کنند، از مکان هایی که منطقی تر به نظر می رسند.
برخی لاگ های nginx را تجزیه و تحلیل می کنند، در حالی که برخی دیگر پرس و جوهای پایگاه داده کند را تجزیه و تحلیل می کنند.
البته، pinba اضافی نخواهد بود، اما دلایل متعددی وجود دارد که چرا هر پروژه آن را ندارد.
و اولین دلیل نصب است.
برای اینکه کم و بیش نوعی "اگزوز" از اجرای Pinba بدست آورید، بسیار مطلوب است که معیارها را نه تنها برای آخرین دقیقه ها، بلکه در یک دوره زمانی طولانی (از روزها تا ماه ها) مشاهده کنید.
برای این شما نیاز دارید:
پسوند را برای php نصب کنید (و ممکن است یک ماژول برای nginx بخواهید)
پسوند را برای mysql کامپایل کنید
pinboard را نصب کنید و cron را پیکربندی کنید
با توجه به اطلاعات اندک در مورد Pinba، بسیاری از مردم این تصور را دارند که این فقط روی PHP5 کار میکرد و مدتها از گذشته گذشته است، اما همانطور که بعدا خواهیم دید، اینطور نیست.
اولین قدم ساده ترین است، تنها کاری که باید انجام دهید این است که دستور زیر را اجرا کنید:
apt install php-pinba
این پسوند در مخازن تا php 7.3 موجود است و نیازی به کامپایل ندارید.
پس از اجرای دستور نصب، بلافاصله یک پسوند کاری دریافت می کنیم که معیارهای هر اسکریپت (زمان اجرا، حافظه و غیره) را با فرمت جمع آوری و ارسال می کند. پروتوبوف از طریق udp به 127.0.0.1:30002.
تا کنون هیچ کس این بسته های UDP را دریافت یا پردازش نکرده است، اما این به هیچ وجه بر سرعت یا ثبات اسکریپت های PHP شما تأثیر منفی نمی گذارد.
تا همین اواخر، تنها اپلیکیشنی که میتوانست این بستههای UDP را بگیرد و پردازش کند پینبا_موتور. شرح "ساده و مختصر"نصب میل به خواندن و کندوکاو مجدد در آن را از بین می برد. لیستهای کیلومتری وابستگیها شامل نام بستهها و نام برنامهها و پیوندهایی به صفحات جداگانه با نصب آنها است و آنها پیوندهای خاص خود را به وابستگیهای دیگر دارند. هیچ کس وقت یا تمایلی برای مقابله با این مزخرفات ندارد.
شاید روزی بتوان pinba10 را با یک یا دو دستور نصب کرد و نیازی به خواندن یک سری مطالب برای درک نحوه انجام آن نباشد، اما در حال حاضر اینطور نیست.
اگر pinba_engine را نصب کنید، این فقط نیمی از نبرد است. پس از همه، بدون تخته سنگ شما باید خود را به داده های چند دقیقه آخر محدود کنید، یا باید خودتان داده ها را جمع آوری، ذخیره و تجسم کنید. این خوب است که استفاده از پینبرد بسیار ساده است نصب و راه اندازی.
به نظر می رسد، اگر تمام معیارهای php قبلاً با فرمت protobuf به پورت udp فرستاده شده اند و تنها چیزی که نیاز دارید این است که برنامه ای بنویسید که آنها را بگیرد و در نوعی ذخیره سازی قرار دهد، چرا چنین رنجی دارید؟ ظاهراً آن دسته از توسعه دهندگانی که به این ایده رسیدند بلافاصله به نوشتن ایده های خود نشستند که برخی از آنها در GitHub به پایان رسید.
در زیر مروری بر چهار پروژه منبع باز است که معیارها را در فضای ذخیره سازی ذخیره می کنند، که این داده ها را می توان به راحتی بازیابی و تجسم کرد، به عنوان مثال، با استفاده از grafana.
سرور udp در حال حرکت است که معیارها را در OpenTSDB ذخیره می کند. شاید اگر قبلاً از OpenTSDB در پروژه خود استفاده می کنید، این راه حل برای شما مناسب باشد، در غیر این صورت توصیه می کنم از آن عبور کنید.
سرور udp در حال حرکت، از همان مرورگر، که این بار معیارها را در InfluxDB ذخیره می کند. بسیاری از پروژه ها در حال حاضر از InfluxDB برای نظارت استفاده می کنند، بنابراین این راه حل ممکن است برای آنها عالی باشد.
مزایا:
InfluxDB اجازه می دهد تا معیارهای دریافتی را جمع آوری کنید و پس از یک زمان مشخص نسخه اصلی را حذف کنید.
منفی:
این راه حل اطلاعات مربوط به تایمرها را ذخیره نمی کند.
سرور udp در حال حرکت است که معیارها را در ClickHouse ذخیره می کند. این راه حل دوست من است. بعد از آشنایی با آن بود که به این نتیجه رسیدم که وقت آن رسیده است که پینبو و کلیک هاوس را بپذیرم.
مزایا:
Clickhouse برای چنین کارهایی ایده آل است؛ به شما امکان می دهد داده ها را به قدری فشرده کنید که بتوانید تمام داده های خام را حتی بدون تجمع ذخیره کنید.
در صورت لزوم، می توانید به راحتی معیارهای حاصل را جمع آوری کنید
سرور udp در php، که معیارها را در ClickHouse ذخیره می کند. این راه حل من است که نتیجه آشنایی با pinba، ClickHouse و protobuf است. در حالی که داشتم کل این دسته را مرتب می کردم، یک "اثبات مفهوم" نوشتم، که به طور غیرمنتظره برای من، منابع قابل توجهی مصرف نمی کرد (30 مگابایت رم و کمتر از 1٪ از یکی از هشت هسته پردازنده)، بنابراین من تصمیم گرفت آن را با مردم به اشتراک بگذارد.
مزایا مانند راه حل قبلی است، من از نام های معمولی از pinba_engine اصلی نیز استفاده کردم. من همچنین یک پیکربندی اضافه کردم که به شما امکان می دهد چندین نمونه سرور پین بیس را همزمان راه اندازی کنید تا معیارها را در جداول مختلف ذخیره کنید - اگر می خواهید داده ها را نه تنها از php، بلکه از nginx نیز جمع آوری کنید، مفید است.
معایب - "نقص کشنده" و چیزهای کوچکی که شخصاً برای شما مناسب نیست، اما راه حل من "به سادگی یک دمپایی" است و فقط از حدود 100 خط کد تشکیل شده است، بنابراین هر توسعه دهنده PHP می تواند آنچه را که دوست ندارد تغییر دهد. در چند دقیقه
اصل عمل
درگاه UDP 30002 گوش داده می شود. تمام بسته های دریافتی بر اساس طرح protobuf رمزگشایی و جمع می شوند. یک بار در دقیقه، یک بسته به خانه کلیک در جدول pinba.requests وارد می شود. (همه پارامترها در پیکربندی هستند پیکربندی)
کمی در مورد کلیک هاوس
کلیک هاوس از موتورهای ذخیره سازی داده های مختلف پشتیبانی می کند. رایج ترین مورد استفاده MergeTree است.
اگر در نقطهای تصمیم گرفتید دادههای انبوه را برای همیشه ذخیره کنید، و دادههای خام را فقط برای آخرین مورد ذخیره کنید، میتوانید با گروهبندی یک نمای مادی ایجاد کنید و بهطور دورهای جدول اصلی pinba.requests را تمیز کنید، در حالی که همه دادهها در جدول باقی میمانند. نمای تحقق یافته علاوه بر این، هنگام ایجاد جدول pinba.requests، می توانید "engine = Null" را مشخص کنید، سپس داده های خام به هیچ وجه در دیسک ذخیره نمی شوند و در عین حال همچنان در نمای متریال شده قرار می گیرند و به صورت انبوه ذخیره می شوند. . من از این طرح برای معیارهای nginx استفاده می کنم، زیرا در nginx 50 برابر بیشتر از php درخواست دارم.
بنابراین، شما راه طولانی را طی کرده اید و من نمی خواهم شما را نیمه راه رها کنم، بنابراین آنچه در ادامه می آید شرح مفصلی از نصب و پیکربندی راه حل من و هر آنچه شما نیاز دارید، و همچنین مشکلاتی است که باعث ایجاد بیش از یک کشتی شده است. خراب شدن. کل فرآیند نصب برای Ubuntu 18.04 LTS و Centos 7 توضیح داده شده است؛ این روند ممکن است در سایر توزیع ها و نسخه ها کمی متفاوت باشد.
نصب
من تمام دستورات لازم را در آن قرار دادم dockerfile برای تسهیل تکرارپذیری دستورالعمل ها در زیر فقط مشکلات آن توضیح داده خواهد شد.
php-pinba
پس از نصب، مطمئن شوید که در فایل /etc/php/7.2/fpm/conf.d/20-pinba.ini تمام گزینه ها را از حالت کامنت خارج کرده باشید. در برخی از توزیع ها (به عنوان مثال centos) ممکن است آنها اظهار نظر کنند.
در حین نصب، clickhouse از شما می خواهد که یک رمز عبور برای کاربر پیش فرض تعیین کنید. به طور پیش فرض، این کاربر از تمام IP ها قابل دسترسی است، بنابراین اگر فایروال روی سرور خود ندارید، حتما برای آن رمز عبور تعیین کنید. پس از نصب در فایل /etc/clickhouse-server/users.xml نیز می توان این کار را انجام داد.
همچنین شایان ذکر است که کلیک هاوس از چندین پورت از جمله 9000 استفاده می کند. این پورت برای php-fpm در برخی توزیع ها (مثلا centos) نیز استفاده می شود. اگر قبلاً از این پورت استفاده میکنید، میتوانید آن را در فایل /etc/clickhouse-server/config.xml به دیگری تغییر دهید.
گرانا با پلاگین کلیک هاوس
پس از نصب گرافانا از ادمین لاگین و ادمین رمز عبور استفاده کنید. هنگامی که برای اولین بار وارد سیستم می شوید، Grafana از شما می خواهد که یک رمز عبور جدید تعیین کنید.
بعد، به منوی "+" -> import بروید و شماره داشبورد را برای واردات مشخص کنید 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 یک سوئیچ وب / کنسول برای مشاهده آمار به طور جداگانه وجود دارد.
شما همچنین می توانید برچسب های خود را به Pinba ارسال کنید، به عنوان مثال:
pinba_tag_set('country', $countryCode);
که تمام است.
لطفا به نظرسنجی های زیر مقاله پاسخ دهید.
طبق معمول به شما هشدار می دهم که از طریق پیام های شخصی در هابر و شبکه های اجتماعی توصیه و کمک نمی کنم.