در اکوسیستم مدرن DevOps، توانایی تجسم و واکنش به متریکهای زیرساخت نه یک لوکس، بلکه یک ضرورت است. با افزایش پیچیدگی معماریهای میکروسرویس، لاگگیری سنتی به تنهایی برای تشخیص گلوگاههای عملکرد یا درک سلامت سیستم کافی نیست. اینجاست که ترکیب قدرتمند پرامتئوس برای جمعآوری دادههای سری زمانی و گرافانا برای تجسم دادهها وارد عمل میشود. در این راهنما، ما بررسی خواهیم کرد که چگونه یک مجموعه نظارتی مستحکم راهاندازی کنید که بینشهای بلادرنگی درباره برنامه و زیرساخت شما ارائه دهد.
درک معماری
پرامتئوس بر اساس یک معماری مبتنی بر کشیدن (Pull-based) عمل میکند، به این معنی که آن متریکها را از نقاط پایانی پیکربندی شده در فواصل زمانی منظم اسکن میکند. این رویکرد تضمین میکند که پرامتئوس کنترل کاملی بر فرآیند اسکن دارد و بار کمتری را نسبت به سیستمهای مبتنی بر هل دادن (Push-based) بر خدمات شما تحمیل میکند. از سوی دیگر، گرافانا به عنوان لایه ارائه عمل میکند. این ابزار به پرامتئوس به عنوان یک منبع داده متصل میشود و به شما امکان میدهد داشبوردهای غنی و تعاملی را با استفاده از PromQL (زبان پرسوجوی پرامتئوس) ایجاد کنید.
این دو با هم یک اکوسیستم جدا از هم را تشکیل میدهند: پرامتئوس مسئول ذخیرهسازی و بازیابی دادهها است، در حالی که گرافانا مسئول تجربه کاربری و تجسم هشدارها میباشد. این جدایی دغدغهها به شما امکان میدهد هر جزء را بر اساس نیازهای خاص خود به صورت مستقل مقیاسبندی کنید.
راهاندازی با Docker Compose
کارآمدترین راه برای شروع با این مجموعه، استفاده از Docker Compose است. این روش تکرارپذیری را تضمین میکند و فرآیند استقرار را در محیطهای مختلف، از توسعه محلی تا محیط تولید، ساده میسازد.
با ایجاد یک فایل docker-compose.yml شروع کنید. این پیکربندی سه سرویس را راهاندازی میکند: پرامتئوس، گرافانا و یک برنامه نمونه (در این مورد، Node Exporter که متریکهای سطح سیستم را در دسترس قرار میدهد).
version: '3.8'
services:
prometheus:
image: prom/prometheus:latest
container_name: prometheus
volumes:
- ./prometheus.yml:/etc/prometheus/prometheus.yml
- prometheus_data:/prometheus
ports:
- "9090:9090"
networks:
- monitoring
grafana:
image: grafana/grafana:latest
container_name: grafana
environment:
- GF_SECURITY_ADMIN_PASSWORD=admin
volumes:
- grafana_data:/var/lib/grafana
ports:
- "3000:3000"
depends_on:
- prometheus
networks:
- monitoring
node-exporter:
image: prom/node-exporter:latest
container_name: node-exporter
ports:
- "9100:9100"
networks:
- monitoring
volumes:
prometheus_data:
grafana_data:
networks:
monitoring:
driver: bridge
پیکربندی اهداف پرامتئوس
پس از اجرای کانتینرها، باید به پرامتئوس بگویید که متریکها را از کجا اسکن کند. یک فایل prometheus.yml در همان دایرکتوری فایل docker-compose.yml خود ایجاد کنید. پیکربندی زیر دو وظیفه (Job) را تعریف میکند: یکی برای خود سرور پرامتئوس (نظارت بر خود) و دیگری برای Node Exporter.
global:
scrape_interval: 15s
scrape_configs:
- job_name: 'prometheus'
static_configs:
- targets: ['localhost:9090']
- job_name: 'node'
static_configs:
- targets: ['node-exporter:9100']
با این پیکربندی، پرامتئوس هر ۱۵ ثانیه یکبار متریکها را اسکن میکند. میتوانید راهاندازی را با مراجعه به http://localhost:9090/targets در مرورگر خود بررسی کنید. باید هر دو وظیفه prometheus و node را با وضعیت "UP" مشاهده کنید.
ساخت اولین داشبورد شما
با جریان یافتن دادهها به پرامتئوس، مرحله بعدی تجسم دادههاست. با استفاده از اعتبارنامههای تعریف شده در فایل Docker Compose (admin/admin) وارد گرافانا در آدرس http://localhost:3000 شوید. به بخش Connections > Data Sources بروید و یک منبع داده پرامتئوس جدید اضافه کنید که به http://prometheus:9090 اشاره دارد.
یک داشبورد جدید ایجاد کنید و یک پنل جدید اضافه کنید. برای پرسوجو از دادههای خود از PromQL استفاده کنید. به عنوان مثال، برای تجسم استفاده از CPU، ممکن است از پرسوجوی 100 - (avg by (instance) (rate(node_cpu_seconds_total{mode="idle"}[5m])) * 100) استفاده کنید. این پرسوجو میانگین زمان بیکاری CPU را در طول ۵ دقیقه محاسبه کرده و آن را از ۱۰۰٪ کم میکند تا درصد استفاده به دست آید.
نتیجهگیری
پیادهسازی پرامتئوس و گرافانا یک گام بنیادین برای دستیابی به مشاهدهپذیری واقعی در زیرساخت شماست. اگرچه این راهاندازی جنبههای اساسی را پوشش میدهد، اما این اکوسیستم موارد بسیار بیشتری ارائه میدهد، از جمله قوانین هشدار از طریق Alertmanager و مکانیزمهای پیشرفته کشف سرویس. با به کارگیری این ابزارها، شما تیم خود را توانمند میکنید تا از آتشنشانی واکنشی به مدیریت سیستم پیشدستانه حرکت کند و در دسترس بودن بالا و عملکرد برنامههای شما را تضمین نماید.