در دنیای فناوری اطلاعات نظارت دقیق بر عملکرد سرورها و سرویسها اهمیت زیادی دارد. پرومتئوس (Prometheus) یکی از ابزارهای قدرتمند و متنباز برای جمعآوری و تحلیل دادههای متریک است که به مهندسان امکان میدهد وضعیت سیستمهای خود را بهصورت لحظهای پایش کنند. این ابزار به ویژه در محیطهای مبتنی بر معماری میکروسرویس و زیرساختهای ابری محبوبیت بالایی دارد. زیرا قابلیت جمعآوری دادههای گسترده و نمایش آنها به شکل خوانا را فراهم میکند.
یکی از مزایای مهم پرومتئوس امکان ادغام آن با گرافانا (Grafana) برای ایجاد داشبوردهای بصری است که تحلیل دادهها را سادهتر میکند. در این مقاله به بررسی نصب پرومتئوس و راهاندازی آن، پیکربندی پرومتئوس و ترکیب آن با گرافانا خواهیم پرداخت. اگر به دنبال روشی کارآمد برای نظارت بر عملکرد سیستمهای خود هستید پرومتئوس یکی از بهترین گزینههای پیش روی شما خواهد بود.
پرومتئوس چیست؟
پرومتئوس (Prometheus) یک سیستم نظارت و پایش متنباز است که برای جمعآوری، ذخیرهسازی و تحلیل دادههای سری زمانی طراحی شده است. این ابزار که توسط SoundCloud توسعه یافته و بعدها به پروژهای تحت نظارت Cloud Native Computing Foundation (CNCF) تبدیل شد، بهطور گسترده در مانیتورینگ زیرساختهای Cloud-Native، سرویسهای میکروسرویسی و سیستمهای توزیعشده استفاده میشود. پرومتئوس به دلیل ویژگیهایی مانند مدل داده سری زمانی، زبان پرسوجوی قوی (PromQL)، معماری بدون وابستگی به ذخیرهسازی خارجی و قابلیت هشداردهی، به یکی از محبوبترین ابزارهای مانیتورینگ تبدیل شده است.
مهمترین کاربردهای پرومتئوس به صورت زیر هستند:
- مانیتورینگ سرورها و زیرساختهای IT برای بررسی عملکرد و سلامت سیستمها
- پایش سرویسهای میکروسرویسی و جمعآوری دادههای متریک از آنها
- نظارت بر عملکرد کانتینرها و ارکستریتورها مانند Kubernetes
- هشداردهی خودکار در صورت بروز مشکلات در سیستم
- تحلیل و پردازش دادههای سری زمانی برای پیشبینی روندها و بهینهسازی عملکرد
- نمایش دادهها در ابزارهایی مانند Grafana برای ایجاد داشبوردهای بصری
تاریخچه و توسعه پرومتئوس
پرومتئوس در سال 2012 توسط تیم مهندسی SoundCloud توسعه یافت. در آن زمان، SoundCloud با چالشهای متعددی در زمینه مانیتورینگ سیستمهای توزیعشده و مقیاسپذیر مواجه بود. ابزارهای سنتی نظارت مانند Nagios و Graphite توانایی پاسخگویی به نیازهای پویا و پیچیده این شرکت را نداشتند. بنابراین، تیم فنی تصمیم گرفت یک راهکار جدید برای جمعآوری و تحلیل دادههای سری زمانی (Time-Series) ایجاد کند. هدف اصلی پرومتئوس، ارائه یک سیستم مقیاسپذیر، مستقل و کارآمد برای پایش سرویسها و زیرساختهای مدرن بود. این پروژه بهسرعت مورد توجه سایر شرکتها و سازمانهای فناوری قرار گرفت.
در سال 2016، پرومتئوس به عنوان دومین پروژه میزبانیشده توسط Cloud Native Computing Foundation (CNCF)، پس از Kubernetes، پذیرفته شد. این موضوع موجب افزایش پذیرش و توسعه سریع آن در میان تیمهای DevOps، مهندسان زیرساخت و شرکتهای مبتنی بر Cloud-Native شد. پرومتئوس به لطف معماری مدولار، زبان پرسوجوی قدرتمند PromQL و اکوسیستم گستردهای از ابزارها، به یکی از پرکاربردترین ابزارهای مانیتورینگ در جهان تبدیل شد. امروزه، بسیاری از شرکتهای بزرگ مانند Google، DigitalOcean، Uber و Red Hat از پرومتئوس برای پایش و تحلیل دادههای عملیاتی خود استفاده میکنند.
ویژگیهای کلیدی پرومتئوس
در این بخش به بررسی مهمترین ویژگیهای پرومتئوس میپردازیم.
- مدل داده سری زمانی (Time-Series Data Model): دادهها بهصورت متریکهایی با برچسب (Label) ذخیره میشوند که امکان فیلترگذاری و تحلیل دقیق را فراهم میکند
- زبان پرسوجوی قدرتمند (PromQL): یک زبان اختصاصی برای انجام پرسوجوهای پیچیده روی دادههای سری زمانی
- جمعآوری داده به روش Pull: پرومتئوس بهجای دریافت داده از منابع خارجی، بهصورت دورهای اطلاعات را از Exporterها جمعآوری میکند
- عدم وابستگی به ذخیرهساز خارجی: دادههای جمعآوریشده در یک پایگاه داده داخلی ذخیره میشوند که عملکرد بالایی دارد
- سیستم هشداردهی (Alerting): امکان تعریف قوانین هشدار و ارسال نوتیفیکیشن از طریق ابزارهایی مانند Alertmanager
- ادغام آسان با ابزارهای دیگر: سازگاری بالا با Grafana، Kubernetes، Docker و دیگر فناوریهای Cloud-Native
- معماری ماژولار: امکان گسترش و سفارشیسازی از طریق Service Discovery و Exporterها
- مقیاسپذیری بالا: مناسب برای مانیتورینگ سیستمهای بزرگ و توزیعشده
- پشتیبانی از Federation: توانایی تجمیع دادهها از چندین سرور پرومتئوس و یکپارچهسازی اطلاعات
چرا از پرومتئوس برای مانیتورینگ استفاده کنیم؟
پرومتئوس به دلیل معماری مدرن، عملکرد بالا و انعطافپذیری بالا، یکی از بهترین گزینهها برای مانیتورینگ سیستمهای Cloud-Native، میکروسرویسها و زیرساختهای توزیعشده محسوب میشود. این ابزار از مدل داده سری زمانی برای جمعآوری و ذخیرهسازی متریکها استفاده میکند، که امکان تحلیل دقیق دادهها را فراهم میسازد. زبان پرسوجوی قدرتمند (PromQL) به کاربران اجازه میدهد تا گزارشهای سفارشی و نمودارهای پیشرفته ایجاد کنند. همچنین، پرومتئوس بهصورت خودمختار و بدون وابستگی به ذخیرهساز خارجی کار میکند، بنابراین میتوان آن را در محیطهای مختلف بهراحتی مستقر کرد. سیستم هشداردهی داخلی و قابلیت ادغام با ابزارهایی مانند Grafana و Kubernetes، آن را به یک انتخاب ایدهآل برای تیمهای DevOps و SRE تبدیل کرده است.
معماری پرومتئوس و نحوه عملکرد آن
پرومتئوس از یک معماری ماژولار و توزیعشده تشکیل شده است که شامل چندین مؤلفه کلیدی است. این مؤلفهها بهطور مستقل عمل میکنند و امکان جمعآوری، ذخیرهسازی، پردازش و هشداردهی بر اساس دادههای متریک را فراهم میکنند.
جمعآوری دادهها (Data Scraping)
پرومتئوس از روش Pull برای دریافت متریکها استفاده میکند، به این معنی که بهصورت دورهای از منابع مختلف داده را جمعآوری میکند. این منابع شامل Exporterها، سرویسهای میکروسرویسی و سیستمهای دیگر هستند که متریکهای خود را از طریق یک HTTP endpoint در فرمت مشخصی ارائه میدهند.
ذخیرهسازی دادهها (Time-Series Storage)
دادههای متریک در یک پایگاه داده داخلی سری زمانی (TSDB – Time-Series Database) ذخیره میشوند. این پایگاه داده برای ذخیره، فشردهسازی و پردازش دادههای حجیم با کارایی بالا طراحی شده است.
پردازش و تحلیل دادهها (Querying & Processing)
پرومتئوس از زبان پرسوجوی PromQL برای انجام تحلیلهای پیچیده روی دادهها استفاده میکند. کاربران میتوانند از این زبان برای استخراج دادههای موردنظر، ایجاد گزارشها و تعریف آستانههای هشدار استفاده کنند.
هشداردهی (Alerting)
سیستم هشداردهی پرومتئوس شامل Alertmanager است که وظیفه مدیریت و ارسال هشدارها به ابزارهایی مانند Slack، Email، PagerDuty و دیگر سیستمهای نوتیفیکیشن را بر عهده دارد. هشدارها بر اساس شرایط تعریفشده در PromQL ایجاد میشوند.
ادغام با ابزارهای دیگر
پرومتئوس قابلیت ادغام با Grafana را دارد که امکان نمایش بصری دادهها در قالب داشبوردهای گرافیکی را فراهم میکند. همچنین، میتواند با Kubernetes، Docker، Consul و دیگر ابزارهای Cloud-Native یکپارچه شود.
نحوه عملکرد پرومتئوس بهصورت کلی
پرومتئوس بهصورت دورهای متریکها را از منابع مختلف (Exporterها یا سرویسهای میکروسرویسی) جمعآوری میکند.
دادهها در پایگاه داده سری زمانی داخلی ذخیره میشوند.
کاربران میتوانند با استفاده از PromQL دادهها را تحلیل کرده و گزارش تهیه کنند.
سیستم هشداردهی، مشکلات و ناهنجاریها را شناسایی کرده و هشدارها را به ابزارهای مربوطه ارسال میکند.
دادهها میتوانند از طریق Grafana یا سایر ابزارهای نمایش داده، بهصورت بصری ارائه شوند.
این معماری باعث میشود پرومتئوس یک ابزار قدرتمند، انعطافپذیر و مقیاسپذیر برای مانیتورینگ سرویسهای مدرن و سیستمهای توزیعشده باشد.
پیشنیازهای نصب پرومتئوس
قبل از نصب و راهاندازی Prometheus لازم است برخی پیشنیازها را فراهم کنید تا فرایند نصب بدون مشکل انجام شود. این پیشنیازها بسته به سیستمعامل و روش نصب (نصب مستقیم یا استفاده از داکر) ممکن است کمی متفاوت باشند. اما اصول کلی به شرح زیر است:
انتخاب سیستمعامل مناسب
پرومتئوس را میتوان روی سیستمعاملیهای لینوکس و ویندوز اجرا کرد. اما توصیه ما به شما استفاده از سیستمعامل لینوکس (ترجیحا توزیعهای مبتنی بر دبیان مثل Ubuntu یا CentOS) است. زیرا پشتیبانی و بهینهسازی بهتری برای این سیستمعامل وجود دارد.
دسترسی به یک Endpoint یا Exporter
پرومتئوس برای جمعآوری دادههای متریک به یک Endpoint یا Exporter نیاز دارد. Exporterها سرویسهایی هستند که دادههای متریک را از منابع مختلف استخراج کرده و در قالبی استاندارد به پرومتئوس ارائه میدهند. به عنوان مثال Node Exporter برای جمعآوری اطلاعات سیستمی مانند CPU، حافظه و دیسک، cAdvisor برای مانیتورینگ کانتینرها و Blackbox Exporter برای بررسی وضعیت در دسترس بودن سرویسها مناسب هستند.
روشهای مختلف نصب پرومتئوس
برای نصب و راهاندازی Prometheus روشهای مختلفی وجود دارد که بسته به زیرساخت و نیازهای پروژه میتوان یکی از آنها را انتخاب کرد. اما رایجترین روشهای نصب پرومتئوس شامل موارد زیر است که در ادامه هر کدام را به صورت جداگانه آموزش خواهیم داد.
1. نصب پرومتئوس با استفاده از Docker
اگر قصد دارید پرومتئوس را بدون تغییر در سیستمعامل نصب کنید، داکر یکی از بهترین گزینههاست. این روش امکان اجرای پرومتئوس در یک محیط ایزوله را فراهم کرده و نصب را سادهتر میکند.
2. نصب پرومتئوس روی لینوکس
این روش برای کاربرانی که میخواهند پرومتئوس را مستقیماً روی سرور لینوکسی خود اجرا کنند مناسب است.
3. نصب پرومتئوس روی Kubernetes
در محیطهای مبتنی بر Kubernetes میتوان از Helm Chart برای نصب پرومتئوس استفاده کرد. این روش به طور خودکار همه اجزای موردنیاز را راهاندازی میکند.
اما کدام یک از روشهای بالا مناسبتر هستند؟ در کل انتخاب روش مناسب به نیازهای زیرساختی شما بستگی دارد.
- اگر از کانتینرها و معماری میکروسرویس استفاده میکنید، روش Docker یا Kubernetes مناسبتر است.
- اگر پرومتئوس را روی یک سرور اختصاصی اجرا میکنید، نصب مستقیم روی لینوکس بهترین گزینه است.
نصب پرومتئوس روی سیستمعامل لینوکس
در این بخش به بررسی نصب پرومتئوس روی سرور لینوکسی در توزیعهای مبتنی بر Debian (مانند Ubuntu) و RHEL (مانند CentOS) میپردازیم. مراحل نصب پرومتئوس روی سیستمعامل لینوکس به شرح زیر است.
دانلود آخرین نسخه پرومتئوس
ابتدا به صفحه رسمی Prometheus مراجعه کرده و آخرین نسخه باینری آن را دانلود کنید. میتوانید این کار را با wget انجام دهید.
cd /tmp wget https://github.com/prometheus/prometheus/releases/latest/download/prometheus-linux-amd64.tar.gz |
سپس فایل دانلود شده را استخراج کنید.
tar -xvzf prometheus-linux-amd64.tar.gz |
در مرحله بعد به دایرکتوری Prometheus بروید.
cd prometheus-linux-amd64 |
انتقال فایلهای Prometheus به مسیر مناسب
برای اجرای Prometheus بهعنوان یک سرویس باید فایلهای آن را به دایرکتوری /usr/local/bin/ منتقل کنیم.
sudo mv prometheus /usr/local/bin/ sudo mv promtool /usr/local/bin/ |
سپس دایرکتوریهای مربوط به دادهها و تنظیمات را ایجاد کنید.
sudo mkdir /etc/prometheus sudo mkdir /var/lib/prometheus |
فایلهای تنظیماتی را منتقل کنید.
sudo mv prometheus.yml /etc/prometheus/ sudo mv consoles/ console_libraries/ /etc/prometheus/ |
ایجاد کاربر و تنظیم مجوزها
برای افزایش امنیت، Prometheus نباید با کاربر root اجرا شود. بنابراین یک کاربر جدید ایجاد کنید.
sudo useradd –no-create-home –shell /bin/false prometheus |
سپس مالکیت فایلها را تغییر دهید.
sudo chown -R prometheus:prometheus /etc/prometheus /var/lib/prometheus sudo chown prometheus:prometheus /usr/local/bin/prometheus /usr/local/bin/promtool |
ایجاد سرویس systemd برای Prometheus
برای مدیریت Prometheus بهعنوان یک سرویس یک فایل جدید در مسیر /etc/systemd/system/prometheus.service ایجاد کنید.
sudo nano /etc/systemd/system/prometheus.service |
و محتوای زیر را در آن قرار دهید.
[Unit] Description=Prometheus Monitoring Wants=network-online.target After=network-online.target [Service] User=prometheus Group=prometheus Type=simple ExecStart=/usr/local/bin/prometheus \ –config.file=/etc/prometheus/prometheus.yml \ –storage.tsdb.path=/var/lib/prometheus/ \ –web.listen-address=”0.0.0.0:9090” \ –storage.tsdb.retention.time=15d [Install] WantedBy=multi-user.target |
سپس سرویس را فعال و اجرا کنید.
sudo systemctl daemon-reload sudo systemctl enable prometheus sudo systemctl start prometheus |
بررسی وضعیت Prometheus
برای اطمینان از اجرای صحیح Prometheus از دستورات زیر استفاده کنید.
sudo systemctl status Prometheus |
یا بررسی کنید که آیا پورت 9090 در حال اجرا است.
netstat -tulnp | grep 9090 |
همچنین میتوانید با مراجعه به آدرس زیر در مرورگر رابط کاربری Prometheus را مشاهده کنید.
http://localhost:9090 |
نصب پرومتئوس در داکر
نصب Prometheus در داکر یکی از سریعترین و سادهترین روشها برای راهاندازی این ابزار مانیتورینگ است. استفاده از داکر به شما این امکان را میدهد که بدون نیاز به نصب دستی و مدیریت پیچیده وابستگیها، پرومتئوس را در یک محیط ایزوله اجرا کنید. در ادامه بررسی نصب پرومتئوس در داکر، مراحل را قدم به قدم ارائه میکنیم.
دانلود تصویر رسمی پرومتئوس
پرومتئوس دارای یک تصویر رسمی در Docker Hub است که میتوان آن را مستقیماً دانلود و اجرا کرد. برای دریافت این تصویر دستور زیر را در ترمینال اجرا کنید.
docker pull prom/prometheus |
این دستور آخرین نسخه رسمی پرومتئوس را از Docker Hub دانلود میکند.
ایجاد فایل تنظیمات پرومتئوس
پرومتئوس برای اجرا به یک فایل تنظیمات نیاز دارد. این فایل مشخص میکند که دادههای متریک از چه منابعی جمعآوری شوند. یک فایل جدید به نام prometheus.yml ایجاد کنید و محتوای زیر را در آن قرار دهید.
global: scrape_interval: 15s scrape_configs: – job_name: ‘prometheus’ static_configs: – targets: [‘localhost:9090’] |
- مقدار scrape_interval: 15s مشخص میکند که پرومتئوس هر ۱۵ ثانیه یکبار دادهها را جمعآوری کند.
- targets: [‘localhost:9090’] نشان میدهد که پرومتئوس خودش را مانیتور میکند.
نکته: اطمینان حاصل کنید که این فایل در مسیر مناسب ذخیره شده است و هنگام اجرای کانتینر به درستی درون آن Mount میشود.
اجرای پرومتئوس در داکر
برای اجرای Prometheus با استفاده از داکر و تنظیمات بالا، دستور زیر را اجرا کنید.
docker run -d \ –name=prometheus \ -p 9090:9090 \ -v $(pwd)/prometheus.yml:/etc/prometheus/prometheus.yml \ prom/Prometheus |
بررسی وضعیت کانتینر
برای اطمینان از اجرای صحیح پرومتئوس باید وضعیت کانتینر را بررسی کنید. برای این کار کافیست دستور docker ps را اجرا کنید. این دستور لیستی از کانتینرهای در حال اجرا را نمایش میدهد. اگر پرومتئوس به درستی اجرا شده باشد، باید در خروجی این دستور نمایش داده شود.
دسترسی به رابط کاربری پرومتئوس
پس از اجرای کانتینر میتوانید با باز کردن آدرس http://localhost:9090 در مرورگر به رابط کاربری پرومتئوس دسترسی پیدا کنید. در این صفحه میتوانید دادههای متریک را مشاهده و کوئریهای PromQL را اجرا کنید.
نصب پرومتئوس روی Kubernetes
Prometheus یکی از ابزارهای محبوب مانیتورینگ برای Kubernetes است که بهصورت خودکار منابع این پلتفرم را کشف کرده و دادههای مربوط به Pods، Deployments و … را جمعآوری میکند. در این بخش از محتوای بررسی نصب پرومتئوس، مراحل نصب و راهاندازی Prometheus روی Kubernetes را بررسی میکنیم.
نصب Prometheus در خارج از Kubernetes
اگر قصد دارید Prometheus را خارج از کلاستر Kubernetes (مثلاً روی یک VM) اجرا کنید، باید مستقیماً به هر نود متصل شود و از طریق IP داخلی نودها اطلاعات را دریافت کند. برای این کار باید ابتدا لیست نودهای Kubernetes و آدرسهای IP آنها را دریافت کنید.
kubectl get nodes -o wide |
فایل prometheus.yml را ویرایش کرده و IPهای نودها را به scrape_configs اضافه کنید.
scrape_configs: – job_name: ‘node-exporter’ static_configs: – targets: – ‘192.168.1.101:9100‘ # نود 1 – ‘192.168.1.102:9100‘ # نود 2 – ‘192.168.1.103:9100‘ # نود 3 |
سرویس Prometheus را ریاستارت کنید تا تغییرات اعمال شوند.
sudo systemctl restart prometheus |
نصب Prometheus روی Kubernetes
بهترین روش برای استقرار Prometheus روی Kubernetes، استفاده از Helm Chart است. ابتدا Helm را نصب کرده و سپس مخزن Prometheus Community را اضافه کنید.
helm repo add prometheus-community https://prometheus-community.github.io/helm-charts helm repo update |
سپس با استفاده از دستور زیر Prometheus را روی کلاستر نصب کنید.
helm install prometheus prometheus-community/kube-prometheus-stack –namespace monitoring –create-namespace |
این دستور مجموعهای از کامپوننتهای مرتبط از جمله Prometheus Server، Alertmanager و Grafana را نصب میکند.
راهاندازی Node Exporter روی Kubernetes
Node Exporter برای جمعآوری دادههای سختافزاری نودهای Kubernetes استفاده میشود. برای استقرار آن یک DaemonSet ایجاد کنید تا روی تمام نودهای کلاستر اجرا شود.
apiVersion: apps/v1 kind: DaemonSet metadata: name: node-exporter namespace: monitoring spec: selector: matchLabels: app: node-exporter template: metadata: labels: app: node-exporter spec: hostNetwork: true containers: – name: node-exporter image: prom/node-exporter:latest args: – “–path.rootfs=/host” ports: – containerPort: 9100 hostPort: 9100 protocol: TCP volumeMounts: – name: rootfs mountPath: /host readOnly: true volumes: – name: rootfs hostPath: path: / |
سپس DaemonSet زیر را روی کلاستر اجرا کنید.
kubectl apply -f node-exporter-daemonset.yaml |
بررسی وضعیت Prometheus
پس از اتمام فرآیند نصب نوبت به بررسی سرویس Prometheus میرسد.
kubectl get pods -n monitoring |
برای دسترسی به داشبورد Prometheus از port-forwarding استفاده کنید.
kubectl port-forward svc/prometheus-kube-prometheus-prometheus 9090 -n monitoring |
حالا میتوانید آدرس http://localhost:9090 را در مرورگر خود وارد کرده و رابط کاربری Prometheus را مشاهده کنید.
پیکربندی اولیه پرومتئوس
پس از نصب Prometheus لازم است آن را برای جمعآوری دادهها از منابع مختلف پیکربندی کنیم. این بخش شامل اضافه کردن Node Exporter، تنظیمات اولیه فایل prometheus.yml و بررسی عملکرد سرویس است. برای اضافه کردن Node Exporter به Prometheus که یکی از منابع اصلی برای مانیتورینگ وضعیت سرورها و نودهای Kubernetes باید به صورت زیر عمل کرد. البته بررسی وضعیت سرورها و نودهای Kubernetes را در مراحل قبل نیز توضیح دادیم. اما به صورت کلی برای پیکربندی اولیه باید مراحل زیر را انجام داد.
فایل prometheus.yml را ویرایش کنید و قسمت scrape_configs را بهصورت زیر تنظیم کنید.
scrape_configs: – job_name: “node_exporter” |
برای مانیتور کردن چندین نود باید آنها را به بخش targets اضافه کنید. برای مثال:
– job_name: “node_exporter” static_configs: – targets: – “192.168.1.101:9100“ – “192.168.1.102:9100“ – “192.168.1.103:9100“ |
دقت کنید که فقط سرورهایی که قصد مانیتور کردن آنها را دارید به لیست اضافه کنید. بعد از انجام تمامی این تغییرات باید پرومتئوس را ریاستارت کنید تا تمامی تنظیمات جدید اعمال شوند.
sudo systemctl restart prometheus |
برای اطمینان از اجرای صحیح سرویس، وضعیت آن را بررسی کنید.
sudo systemctl status prometheus |
برای تست عملکرد Node Exporter کافیست آدرس http://localhost:9100/metrics را در مرورگر باز کنید. در صورتی که تمامی مراحل به درستی انجام شده باشند، صفحهای شامل متریکهای سیستمی مشاهده خواهید کرد.
اتصال پرومتئوس به Exporterها و جمعآوری دادهها
Prometheus برای جمعآوری دادهها از منابع مختلف از Exporterها استفاده میکند. Exporterها به عنوان واسط عمل کرده و متریکهای سیستمهای مختلف را در قالبی که Prometheus بتواند پردازش کند، ارائه میدهند. در این بخش نحوه راهاندازی و اتصال Node Exporter به Prometheus را بررسی میکنیم.
راهاندازی Node Exporter با Docker
یکی از متداولترین Exporterها، Node Exporter است که متریکهای سختافزاری و سیستمی را فراهم میکند. برای اجرای آن با Docker از دستور زیر استفاده کنید.
docker run -d \ –name=node_exporter \ -p 9100:9100 \ prom/node-exporter |
این دستور یک کانتینر پسزمینه اجرا کرده و پورت 9100 را برای دسترسی به متریکها باز میکند.
اضافه کردن Node Exporter به تنظیمات Prometheus
پس از راهاندازی Node Exporter، باید آن را به فایل prometheus.yml اضافه کنیم تا پرومتئوس بتواند دادههای آن را جمعآوری کند. فایل prometheus.yml را باز کرده و Node Exporter را در بخش scrape_configs اضافه کنید.
scrape_configs: – job_name: ‘node_exporter’ static_configs: – targets: [‘localhost:9100’] |
بارگذاری مجدد تنظیمات Prometheus
پس از اعمال تغییرات در prometheus.yml، باید تنظیمات جدید را بارگذاری کنیم. اگر Prometheus را با Docker اجرا کردهاید، از دستور زیر برای ارسال سیگنال SIGHUP به کانتینر استفاده کنید.
docker kill –signal=SIGHUP prometheus |
این کار باعث میشود که Prometheus بدون نیاز به ریاستارت کامل، تنظیمات جدید را بارگذاری کند.
بررسی اتصال و جمعآوری دادهها
پس از اعمال تنظیمات بررسی کنید که Prometheus دادههای Node Exporter را جمعآوری میکند. در مرورگر آدرس http://localhost:9100/metrics را باز کنید و مطمئن شوید که دادههای Node Exporter قابل مشاهده هستند. وارد داشبورد Prometheus شوید.
در قسمت Status → Targets، وضعیت Node Exporter را بررسی کنید. در صورت موفق بودن اتصال وضعیت UP را مشاهده خواهید کرد.
اتصال پرومتئوس به Grafana برای نمایش دادهها
برای نمایش دادههای جمعآوری شده توسط Prometheus میتوان از Grafana استفاده کرد. Grafana یک ابزار Visualization قدرتمند است که امکان ایجاد داشبوردهای گرافیکی را برای متریکهای مانیتور شده فراهم میکند. در این بخش نحوه اتصال Prometheus به Grafana Cloud را بررسی خواهیم کرد.
ثبتنام در Grafana Cloud
اگر میخواهید از نسخه Cloud گرافانا استفاده کنید، به آدرس https://grafana.com/ مراجعه و یک حساب کاربری ایجاد کنید. بعد از ورود یک Prometheus Data Source در محیط Grafana Cloud دریافت خواهید کرد. در صورتی که بخواهید Grafana را بهصورت محلی اجرا کنید، باید آن را از وبسایت رسمی Grafana دانلود و روی سرور خود نصب کنید. سپس مراحل پیکربندی مشابهی انجام خواهد شد.
تنظیمات Prometheus برای ارسال دادهها به Grafana Cloud
بعد از ثبتنام، Grafana یک Remote Write Endpoint برای ارسال دادهها به شما میدهد. این آدرس را باید در فایل prometheus.yml اضافه کنید.
remote_write: – url: “https://your-remote-write-endpoint“ basic_auth: username: “your-user-name” password: “Your-Grafana.com-API-Key” |
دقت کنید که username و password از Grafana Cloud دریافت میشود. سپس Prometheus را برای اعمال تغییرات ریاستارت کنید.
sudo systemctl restart prometheus |
مشاهده دادهها در Grafana
پس از تنظیمات Prometheus، وارد Grafana Cloud شوید و مراحل زیر را دنبال کنید.
- به Explore بروید.
- از لیست Data Sources، Prometheus را انتخاب کنید.
- کوئریهای PromQL را بنویسید (مثلاً node_cpu_seconds_total برای مشاهده استفاده از CPU).
- اگر دادهها نمایش داده نشدند، تنظیمات Remote Write را بررسی کنید. مطمئن شوید که Prometheus مقادیر را ارسال میکند.
ایجاد داشبورد در Grafana
پس از اطمینان از دریافت دادهها میتوانید داشبوردهای گرافیکی ایجاد کنید.
- به Dashboards → New Dashboard بروید.
- یک Panel جدید اضافه کنید.
- یک متریک انتخاب کرده و نمودار را مشاهده کنید.
- میتوانید از داشبوردهای آماده Grafana نیز استفاده کنید.
روشهای بهینهسازی و افزایش کارایی پرومتئوس
برای بهبود عملکرد Prometheus باید استراتژیهای مناسبی را برای مدیریت منابع، بهینهسازی جمعآوری دادهها و افزایش مقیاسپذیری به کار ببرید. در این قسمت چند روش کلیدی برای بهینهسازی Prometheus را بررسی میکنیم.
تنظیم Scrape Interval مناسب
Interval مشخص میکند که Prometheus هر چند وقت یکبار دادهها را از Exporterها جمعآوری کند. مقدار نامناسب میتواند باعث افزایش بار پردازشی یا از دست رفتن دادهها شود. برای متریکهای حساس (مانند مصرف CPU) مقدار ۱۰-۳۰ ثانیه توصیه میشود. برای متریکهایی با تغییرات کم میتوان interval را تا چند دقیقه نیز افزایش داد.
استفاده از Exporterهای بهینه
Exporterها واسطهای بین سیستمهای مختلف و Prometheus هستند. انتخاب یک Exporter بهینه و معتبر باعث کاهش مصرف منابع و افزایش دقت متریکها میشود.
- از Node Exporter برای نظارت بر منابع سیستم استفاده کنید.
- برای پایگاه دادهها PostgreSQL Exporter یا MySQL Exporter را به کار ببرید.
- بررسی کنید که Exporter موردنظر بهدرستی پیکربندی شده باشد و متریکهای غیرضروری غیرفعال شوند.
یکپارچگی با Alertmanager
Alertmanager امکان ارسال هشدارهای هوشمندانه را برای مشکلات عملکردی و خطاهای بحرانی فراهم میکند. با تنظیم Alert Rules میتوان از بروز مشکلات جدی جلوگیری کرد.
استفاده از Thanos برای مانیتورینگ بلندمدت
Prometheus بهصورت پیشفرض دادهها را در حافظه محلی ذخیره میکند که باعث حجم بالای داده و کاهش کارایی میشود. استفاده از Thanos برای ذخیرهسازی دادهها در S3، GCS یا سایر فضای ابری به کاهش بار پردازشی و دسترسی به تاریخچه بلندمدت متریکها کمک میکند. از مزایای استفاده از Thanos میتوان به موارد زیر اشاره کرد:
- افزایش مقیاسپذیری Prometheus
- کاهش مصرف دیسک و حافظه
- امکان کوئریگیری از چندین سرور Prometheus
نتیجهگیری
Prometheus یکی از قدرتمندترین ابزارهای مانیتورینگ و جمعآوری متریک است که بیشتر در محیطهای Cloud-Native و Kubernetes مورد استفاده قرار میگیرد. در مقاله بررسی نصب پرومتئوس سعی کردیم به صورت کامل و جامع فرآیند نصب، پیکربندی و بهینهسازی Prometheus را بیان کنیم.
پرومتئوس به دلیل ویژگیهایی مانند مدل جمعآوری داده مبتنی بر Pull، ذخیرهسازی دادههای سری زمانی (Time-Series)، پشتیبانی از زبان پرسوجوی قدرتمند (PromQL)، یکپارچگی با ابزارهایی مانند Kubernetes و Grafana، و قابلیت هشداردهی (Alerting) یکی از محبوبترین ابزارهای مانیتورینگ محسوب میشود.
پرومتئوس از متریکهای سری زمانی استفاده و دادهها را با روش Pull از منابعی که بهعنوان Exporter تعریف شدهاند، جمعآوری میکند. این دادهها در یک پایگاه داده داخلی ذخیره میشوند و قابل دسترسی از طریق زبان پرسوجوی PromQL هستند.
بله، پرومتئوس به دلیل معماری انعطافپذیر و پشتیبانی از سرویسهای ابری مانند AWS، Azure، Google Cloud و یکپارچگی با Kubernetes برای مانیتورینگ سرورهای ابری مناسب است.
- پرومتئوس: جمعآوری داده مبتنی بر Pull، ذخیرهسازی سریهای زمانی، دارای زبان پرسوجوی PromQL، مناسب برای میکروسرویسها و Kubernetes
- Zabbix: جمعآوری داده مبتنی بر Push، مناسب برای زیرساختهای سنتی و شبکهها.
- Nagios: بیشتر بر هشداردهی و مانیتورینگ رویدادها تمرکز دارد و معماری قدیمیتری نسبت به پرومتئوس دارد.
- سیستمعامل لینوکس یا ویندوز (ترجیحاً لینوکس)
- حداقل 2 CPU و 4GB RAM برای اجرای پرومتئوس در مقیاس کوچک
- دسترسی به پورتهای شبکه برای ارتباط با Exporterها و سایر سرویسها
دانلود و استخراج پرومتئوس:
wget https://github.com/prometheus/prometheus/releases/latest/download/prometheus-linux-amd64.tar.gz tar xvfz prometheus-linux-amd64.tar.gz cd prometheus-*
اجرای پرومتئوس: ./prometheus –config.file=prometheus.yml
بله، میتوان پرومتئوس را در داکر اجرا کرد:
docker run -p 9090:9090 prom/prometheus
برای نصب پرومتئوس در Kubernetes، میتوان از Prometheus Operator یا Helm استفاده کرد:
helm repo add prometheus-community https://prometheus-community.github.io/helm-charts helm install prometheus prometheus-community/kube-prometheus-stack
با اضافه کردن Job مربوط به Exporter در فایل prometheus.yml، بهعنوان مثال برای Node Exporter:
scrape_configs: – job_name: ‘node’ static_configs: – targets: [‘localhost:9100’]
ورود به Grafana و رفتن به Data Sources
انتخاب Prometheus و تنظیم آدرس پرومتئوس (مثلاً http://localhost:9090)
ایجاد داشبورد و اضافه کردن نمودارها با PromQL
تنظیم retention time برای کاهش فضای ذخیرهسازی: –storage.tsdb.retention.time=15d
استفاده از (Federation) برای مدیریت دادههای حجیم
فعال کردن compression برای کاهش مصرف فضای دیسک
بله، پرومتئوس از Alertmanager برای ارسال هشدارها از طریق ایمیل، Slack، Telegram و غیره پشتیبانی میکند.
بله، اما برای مقیاس بزرگ توصیه میشود از Thanos یا Cortex برای ذخیرهسازی توزیعشده و مقیاسپذیری بهتر استفاده شود.
خطای “connection refused” هنگام اضافه کردن Exporter: بررسی کنید که Exporter در حال اجرا است و پورت صحیح را استفاده میکنید
پرومتئوس بیش از حد از حافظه استفاده میکند: مقدار storage.tsdb.retention.time را کاهش دهید.
دادهها در Grafana نمایش داده نمیشوند: بررسی کنید که آدرس پرومتئوس به درستی در Grafana تنظیم شده باشد.