Health for Laravel؛ چک سلامت مخصوص کوبرنتیز
خلاصهٔ کاملتر
پروژههای جدید لاراول یه مسیر /up دارن که فقط میگه اپلیکیشن بوت شده یا نه. پکیج Health for Laravel از سیلوستر دامگارد یه قدم جلوتر میره و برای هر سه نوع پراب کوبرنتیز (یعنی همون تستهای دورهای که کوبرنتیز روی کانتینر اجرا میکنه) مسیر جدا میسازه: /health برای liveness، /health/ready برای readiness و /health/startup برای startup. هر مسیر لیست چک خودش رو داره.
چکها رو تو config/health.php به پرابها وصل میکنی:
'checks' => [
'liveness' => [DatabaseCheck::class],
'readiness' => [
DatabaseCheck::class,
CacheCheck::class,
QueueCheck::class,
],
'startup' => [EnvironmentCheck::class],
],این جداسازی مهمه چون رفتار کوبرنتیز فرق میکنه: اگه liveness رد بشه کانتینر ریاستارت میشه، ولی اگه readiness رد بشه فقط ترافیک از پاد قطع میشه و خود پاد زنده میمونه. اندپوینت وقتی همهٔ چکها ok یا warning باشن کد ۲۰۰ میده و اگه یکی critical یا unknown بشه ۵۰۳. مسیر /health/status هم همهٔ نتیجهها رو به همراه hostname (که تو کوبرنتیز اسم پاده) برمیگردونه.
اندپوینت /health/metrics برای هر چک دو تا gauge میده: app_health_check_status که ۱.۰ یعنی ok، ۰.۵ یعنی warning و ۰.۰ یعنی critical یا unknown، و app_health_check_duration_seconds که مدت اجرای چک رو ثبت میکنه. پیشوند app از HEALTH_PROMETHEUS_NAMESPACE میاد. متریکهای سیستمی از پکیج cboxdk/system-metrics میان و پکیج محدودیتهای cgroup نسخهٔ ۱ و ۲ رو میخونه، یعنی عدد حافظه از خود کانتینر در میاد نه از هاست.
یه چک جالبش ScheduleCheck هست که میفهمه اسکجولر لاراول واقعا داره اجرا میشه یا نه. باید دستور health:heartbeat رو تو routes/console.php زمانبندی کنی تا یه تایماستمپ تو کش بنویسه:
Schedule::command('health:heartbeat')->everyMinute();اگه این هارتبیت از max_age_minutes (پیشفرض ۵ دقیقه) قدیمیتر بشه چک critical میشه و اگه هنوز هیچ هارتبیتی نوشته نشده باشه warning میده.
برای چک سفارشی کافیه کلاس رو از BaseCheck ارث ببری و متد run() رو بنویسی که یه CheckResult برمیگردونه؛ اسم چک از اسم کلاس در میاد، پس PaymentGatewayCheck میشه payment_gateway. CheckResult چهار سازنده داره: ok()، warning()، critical() و unknown()، و آرگومان سوم هرکدوم متادیتاست که تو پاسخ JSON هم میاد. نسخهٔ ۲.۰.۰ به PHP 8.3 و لاراول ۱۱، ۱۲ یا ۱۳ نیاز داره.
نکات کلیدی:
- سه اندپوینت جدا: /health، /health/ready و /health/startup، هر کدوم با لیست چک خودش
- ۱۰ چک آماده: دیتابیس، کش، صف، استوریج، ردیس، environment، اسکجول، CPU، حافظه و فضای دیسک
- پاسخ چکها پیشفرض ۱۰ ثانیه کش میشن و یه داشبورد HTML تو /health/ui هست که پیشفرض خاموشه
- تو کانتینر پنج متریک اضافه میاد، از جمله app_container_oom_kills_total و app_container_cpu_throttled_total
- ScheduleCheck اگه هارتبیت بیشتر از ۵ دقیقه قدیمی باشه critical میده
- دستور health:check چکها رو از ترمینال اجرا میکنه و موقع خطا با کد غیرصفر خارج میشه




