
در دنیای زیرساختهای مدرن، مشاهدهپذیری (Observability) یکی از مهمترین ارکان پایداری و عیبیابی سریع سرویسهاست. Prometheus بهعنوان یکی از محبوبترین سیستمهای مانیتورینگ متنباز، با کمک exporterهای مختلف امکان جمعآوری متریک از تقریباً هر نوع سرویسی را فراهم میکند. در این میان، node_exporter برای جمعآوری اطلاعات سطح سیستمعامل مانند مصرف CPU، حافظه، دیسک و شبکه و haproxy_exporter برای استخراج متریکهای خود HAProxy (مانند تعداد اتصالات فعال، نرخ درخواستها، وضعیت backendها و خطاهای HTTP) نقش کلیدی ایفا میکنند.
وقتی سروری در نقش load balancer یا reverse proxy با HAProxy کار میکند، تنها مانیتورینگ منابع سختافزاری کافی نیست؛ باید رفتار دقیق پروکسی و سلامت backendها را نیز لحظهبهلحظه رصد کرد. ترکیب این دو exporter به ما تصویری کامل و یکپارچه از سلامت سرور و سرویس HAProxy میدهد و در کنار Grafana داشبوردهایی زیبا و کاربردی در اختیارمان قرار میدهد.
در این مقاله قصد داریم بهصورت عملی و قدمبهقدم نشان دهیم که چگونه میتوانید node_exporter و haproxy_exporter را روی یک سرور Ubuntu نصب و راهاندازی کنید، آمار HAProxy را فعال نمایید، این exporterها را به Prometheus متصل کنید و در نهایت با استفاده از داشبوردهای آماده Grafana، یک سیستم مانیتورینگ حرفهای و قابل اعتماد برای سرورهای HAProxy خود بسازید. این راهنما حتی برای کسانی که تازه با اکوسیستم Prometheus و Grafana آشنا شدهاند نیز کاملاً قابل دنبال کردن است و در پایان، شما داشبوردهایی خواهید داشت که در یک نگاه وضعیت سیستم و پروکسی را به شما نشان میدهند.
نصب node_exporter
دستور زیر یکی از بهترین روشهای استاندارد و امن برای ایجاد کاربر سیستمی (system user) مخصوص اجرای سرویس node_exporter (که بخشی از Prometheus monitoring stack است) در لینوکس است:
#useradd --no-create-home --shell /bin/false --system node_exporter#tar xvf node_exporter-1.10.2.linux-amd64.tar.gz#cp node_exporter-1.10.2.linux-amd64/node_exporter /usr/local/bin/#chown node_exporter:node_exporter /usr/local/bin/node_exportervim /etc/systemd/system/node_exporter.service
node_exporter.service
[Unit]
Description=Prometheus Node Exporter Wants=network-online.target After=network-online.target
[Service]
User=node_exporter Group=nogroup Type=simple ExecStart=/usr/local/bin/node_exporter –collector.systemd Restart=always
[Install]
WantedBy=multi-user.target
#systemctl daemon-reload
#systemctl enable --now node_exporter
نصب haproxy_exporter
حالا نوبت به نصب haproxy_exporter میرسد. haproxy_exporter یک برنامهٔ کوچک و رسمی است که توسط جامعهٔ Prometheus نگهداری میشود و تنها وظیفهاش این است که متریکهای Live را برای Prometheus قابل خواندن کند. وقتی HAProxy را اجرا میکنید، خودش یک صفحهٔ آمار داخلی به صورت CSV روی یک پورت (معمولاً ۸۴۰۴ یا هر پورتی که شما تعیین کنید) در دسترس قرار میدهد. این صفحه پر از اطلاعات مفید مثل تعداد اتصالات فعال، نرخ درخواست، خطاهای 4xx و 5xx، زمان پاسخگویی هر بکاند، وضعیت آپ یا داون بودن سرورها، طول صف درخواستها، میزان ترافیک ورودی و خروجی و صدها متریک دیگر است، اما Prometheus به تنهایی نمیتواند این صفحه را مستقیماً بخواند.
اینجاست که haproxy_exporter وارد میشود: برنامه روی سرور اجرا میشود، به آن آدرس stats متصل میشود، خروجی CSV را میخواند و تمام اطلاعات را به فرمت متریکهای استاندارد Prometheus تبدیل میکند و روی یک پورت جدید (معمولاً ۹۱۰۱ یا ۹۴۲۴) در مسیر /metrics در دسترس Prometheus قرار میدهد. در نتیجه Prometheus به راحتی میتواند هر چند ثانیه یکبار این متریکها را scrape کند و شما در Grafana داشبوردهای زیبا و لحظهای از عملکرد لودبالانسرتان خواهید داشت.
راهاندازی آن هم بسیار ساده و شبیه node_exporter است: یک کاربر سیستمی بدون امکان لاگین میسازید، باینری را از صفحهٔ Releases گیتهاب دانلود و در /usr/local/bin قرار میدهید، سپس یک سرویس systemd مینویسید که با آرگومان –haproxy.scrape-uri به آدرس stats شما اشاره کند. اگر صفحهٔ stats شما با یوزر و پسورد محافظت شده باشد، کافی است یوزر و پسورد را داخل همان URI قرار دهید یا از فایل تنظیمات استفاده کنید. بعد از فعال کردن سرویس، تمام متریکهای HAProxy به صورت خودکار در Prometheus ظاهر میشوند و میتوانید از داشبوردهای آمادهٔ معروف مثل شمارهٔ ۲۵۴۸ یا ۱۴۹۷۷ در Grafana استفاده کنید تا همه چیز را به صورت گرافیکی و لحظهای ببینید.
به عبارت خیلی خلاصه، haproxy_exporter همان کاری را برای HAProxy انجام میدهد که node_exporter برای سیستمعامل و mysql_exporter برای MySQL: تبدیل دادههای داخلی یک نرمافزار به زبان مشترک Prometheus تا بتوانید به راحتی مانیتورینگ و هشداردهی حرفهای داشته باشید.
چک کنید که صفحه stats در haproxy فعال است اگر نیست آن را در فایل haproxy.cfg قرار دهید:
haproxy.cfg
listen stats
bind *:8404
stats enable
stats uri /stats
stats refresh 30s
stats admin if TRUE
#useradd --no-create-home --shell /bin/false haproxy_exporter
#wget https://github.com/prometheus/haproxy_exporter/releases/latest/download/haproxy_exporter-0.15.0.linux-amd64.tar.gz
#tar xvf haproxy_exporter-0.15.0.linux-amd64.tar.gz
#cp haproxy_exporter-0.15.0.linux-amd64/haproxy_exporter /usr/local/bin/
#chown haproxy_exporter:haproxy_exporter /usr/local/bin/haproxy_exporter
#vim /etc/systemd/system/haproxy_exporter.service
haproxy_exporter.service
[Unit] Description=Prometheus HAProxy Exporter
After=network.target
Group=haproxy_exporter
Type=simple
ExecStart=/usr/local/bin/haproxy_exporter –haproxy.scrape-uri=http://localhost:8404/stats?stats;csv [Install] WantedBy=multi-user.target
#systemctl daemon-reload
#systemctl enable --now haproxy_exporter
فایل prometheus.yml را ویرایش کنید و دو جابی که در Haproxy ساختید را در آن اضافه کنید:
#vim /var/wwww/grafana/prometheus.yml
prometheus.yml
scrape_configs:
– job_name: ‘haproxy_server_node’
static_configs:
– targets:
– ‘۱۰.۱۰۱.۱.۱۰۰:۹۱۰۰’
– job_name: ‘haproxy_server_haproxy’
static_configs:
– targets:
– ‘۱۰.۱۰۱.۱.۱۰۰:۹۱۰۱’
#docker restart prometheus
پس از اینکه تمام مراحل نصب و پیکربندی node_exporter، فعالسازی آمار در HAProxy، راهاندازی haproxy_exporter و افزودن تارگتها به Prometheus را با موفقیت به پایان رساندید، حالا نوبت به بخش نهایی و لذتبخش کار میرسد: مشاهده و تحلیل دادهها در Grafana.
ابتدا وارد رابط کاربری Grafana شوید. اگر هنوز Prometheus را بهعنوان منبع داده (Data Source) اضافه نکردهاید، از منوی سمت چپ به بخش Configuration → Data Sources بروید، گزینه Add data source را انتخاب کنید، Prometheus را برگزینید و در قسمت URL مقدار `http://localhost:9090` (یا آدرس سرور Prometheus) را وارد نمایید. پس از کلیک روی Save & Test، باید پیام موفقیتآمیز «Data source is working» را ببینید.
حالا زمان ساخت داشبوردهای واقعی است. سادهترین و سریعترین راه این است که از داشبوردهای آماده و تستشده جامعه Grafana استفاده کنید. برای این کار به منوی Dashboards → Import بروید و شناسه (ID) داشبورد مورد نظر را وارد کنید.
برای مانیتورینگ وضعیت کلی ماشین Ubuntu که HAProxy روی آن اجرا میشود (منابع CPU، RAM، دیسک، شبکه، بار سیستم و …)، بهترین و کاملترین انتخاب داشبورد شماره ۱۸۶۰ با عنوان «Node Exporter Full» است. این داشبورد تمام متریکهای مهم node_exporter را بهصورت زیبا و دستهبندیشده نمایش میدهد و به محض ایمپورت، بدون نیاز به تنظیم خاصی، تمام گرافها با دادههای سرور شما پر میشوند.
برای مانیتورینگ دقیق خود سرویس HAProxy (تعداد اتصالات، نرخ درخواست در ثانیه، وضعیت frontendها و backendها، خطاهای 4xx و 5xx، زمان پاسخگویی سرورها و سلامت هر سرور backend)، داشبورد شماره ۱۲۸۶۵ با عنوان «HAProxy Instance Summary» یکی از بهترین گزینههاست. این داشبورد مخصوص haproxy_exporter جدید طراحی شده و تمام متریکهای مهم را بهصورت خلاصه و در عین حال کامل ارائه میدهد. پس از ایمپورت آن نیز کافی است منبع داده Prometheus را انتخاب کنید تا تمام پنلها بهسرعت با اطلاعات واقعی HAProxy شما پر شوند.
با داشتن این دو داشبورد کنار هم، در یک نگاه میتوانید هم سلامت سختافزاری سرور را بررسی کنید و هم رفتار دقیق load balancer را رصد نمایید. از این به بعد هر زمان مشکلی در دسترسیپذیری سرویس یا افزایش بار رخ دهد، اولین جایی که باید سر بزنید همین داشبوردهای Grafana خواهد بود؛ جایی که تمام اطلاعات لازم برای عیبیابی سریع و دقیق در اختیار شماست.




