نصب و راه اندازی Prometheus و Grafana (همه چیز درباره پرومتئوس و گرافانا – ۱)

نصب پرومتئوس و گرافانا
زمان مطالعه: 6 دقیقه

خب مطلب پیش رو شامل سه قسمت هست، «مقدمه»، «نصب پرومتئوس» و «نصب ابزارهای مرتبط با پرومتئوس»، تاکید اساسی این مطلب روی پرومتئوس و آشنایی با آن هست و در کنار آن برای آشنایی بهتر با Prometheus ، به معرفی و روش نصب و کانفیگ ابزارهای مرتبط با Prometheusپرداخته شده است.

مقدمه – آشنایی با سیستم های مانیتورینگ

یک سیستم مانیتورینگ، سخت افزار یا نرم افزاری می باشد که جهت مانیتور کردن منابع سیستمی و کارایی سیستم از آن استفاده می شود. هدف اصلی اش آنالیز کردن عملیات و کارایی کامپیوتر ها و تشخیص و اخطار در مورد خطا های (ارور – error) ممکن می باشد. چنین سیستم هایی به ما این امکان را می دهند تا ببینیم در هر زمانی چه اتفاقی روی ماشین ما افتاده است. چند در صد از منابع سیستمی اشغال شده است؟ چه کسی لاگین کرده ؟‌ چه دستوریاتی-command اجرا شده؟

روش های مختلفی برای مانیتورینگ وجود دارد، ولی در اینجا ما از prometheusاستفاده می کنیم.

پرومتئوس-Prometheus چیست؟

پرومتئوس یک سیستم مانیتورینگ و اخطار دهی open-source می باشد که در اصل در  SoundCloud ساخته شد. از زمان تاسیس آن در سال 2012 بسیاری از شرکت ها و سازمان ها Prometheusرو پذیریفتند و به کار گرفتند و در نتیجه این پروژه شامل جامعه ی بزرگی از توسعه دهندگان و استفاده کننده گان فعال می باشد. در حال حاضر یک پروژه open sourceمی یاشد و مستقل از هر شرکتی نگهداری می شود. جخت تاکید و روشن سازی ساختار حاکمیت این پروژه، پرومتئوس در سال ۲۰۱۶ به عنوان دومین پروژه هاست شده پس از Kubernetes به بنیاد ملی پردازش ابری پیوست.

prometheus.io

پرومتئوس از پروتکلهایی مانند SMNP یا نوعس سرویس عامل استفاده نمی کند. به جایش معیارها را از مشتری بر HTTP گرفته (scrapeمی کند) و داده ها را درون یک پایگاه داده سری زمانی محلی (local time series database) قرار می دهد که می توان روی آن کوئری اجرا کرد.

Prometheus از exporter هایی که روی مشتری نصب و کانفیگ می شوند استفاده می کند (این استفاده به ترتیب شامل تبدیل و افشای معیارها در قالب پرومتئوس می باشد). سرور پرومتئوس سپس exporter ها رابرای معیارها scrape می کند.

به صورت پیشفرش Prometheus همراه با یک UI روی پورت ۹۰۹۰ در سرور پرومتئوس در دسترسی خواهد بود. کاربران نیز می توانند داشبوردهای مورد علاقه خودشان را توسط نرم افزارهایی مثل Grafana بسازند.

پرومتئوس از کامپوننتی مجزا برای Alert دادن که AlertManager نامیده می شود استفاده می کند.

خب بیاید بعضی از اصطلاحات مهم رو مرور کنیم:

  • سرور پرومتئوس – Prometheus Server : سرور اصلی که عمل scrapeرا انجام می دهد و معیار های scrape شده را در پایگاه داده سری زمانی (time series DB)، ذخیره می کند.
  • scrape : سرور پرومتئوس از یک روشی برای استخراج معیارها استفاده می کند.
  • target : کلاینت های Prometheus server که اطلاعات را از طریق آنها استخراج می کند.
  • exporter‌ : کتابخانه های Target که معیارهای فعلی را در قالب Prometheusتبدیل یا صادر می کنند.
  • Alert Manager : کامپوننتی که مسئولیتی مدیریت اخطارها را دارد.

در ادامه تصویری به عنوان معماری پرومتئوس را مشاهده می کنید:

پرومتئوس از روی exportها، معیارها را scrapeمی کند، آنها را روی TSDB روی سرور پرومتئوس ذخیره می کند و سپس اخطار ها را به سمت AlertManager می فرستد.

تنظیم و راه اندازی پرومتئوس

تا اینجای کار مفاهیم پایه پرومتئوس رو متوجه شدیم، بیاید تا یک سرور پرومتئوس بیاریم بالا و به scrape کردن معیارها بپردازیم. برای این راه اندازی من از اوبونتو ۲۰.۰۴ استفاده کردم.

نصب node_exporter :

ابتدا با دستورات زیر node_exporter را دانلود و نصب کنید:

ابتدا با دستور زیر node_exporter را پانلود می کنیم:

wget https://github.com/prometheus/node_exporter/releases/download/v0.15.2/node_exporter-0.15.2.linux-amd64.tar.gz
  

سپس با دستور زیر آن را از حالت فشرده خارج می کنیم:

tar -xf node_exporter-0.15.2.linux-amd64.tar.gz

سپس با دستور زیر، باینری را به /usr/local/bin انتقال می دهیم:

sudo mv node_exporter-0.15.2.linux-amd64/node_exporter /usr/local/bin

سپس فایل های باقیمانده پاک می کنیم:

rm -r node_exporter-0.15.2.linux-amd64*

حال نوبت به ساخت userبرای node_exporter رسیده است:

sudo useradd -rs /bin/false node_exporter

حال باید سرویس فایل آن را بسازیم، با دستور زیر فایل خام را می سازیم و برای ویرایش آن را باز می کنیم:

sudo nano /etc/systemd/system/node_exporter.service

مقدار اینم فایل را برابر با متن زیر می زاریم:

[Unit]
Description=Node Exporter
After=network.target

[Service]
User=node_exporter
Group=node_exporter
Type=simple
ExecStart=/usr/local/bin/node_exporter

[Install]
WantedBy=multi-user.target

خب چون که unit fileجدیدی ساخته ایم باید systemd daemon را مجدد اجرا کنیم، بعدش سرویس را به حالت always run در میاوریم و آن را start می کنیم (با سه دستور زیر)

sudo systemctl daemon-reload
sudo systemctl enable node_exporter
sudo systemctl start node_exporter

نصب Prometheus:

ابتدا برای نصب prometheusرا دانلود می کنیم، برای دانلود از دستور زیر استفاده کنید (در این احظه که من این آموزش را می نویسم، نسخه ۲.۲۲.۰ در دسترس هست)

wget https://github.com/prometheus/prometheus/releases/download/v2.22.0/prometheus-2.22.0.linux-amd64.tar.gz

برای بدست آوردن آخرین نسخه، اینجا (صفحه دانلود از گیت هاب پرومتئوس) را نگاهی بی اندازید.

برای extractکردن فایل دانلود شده، از دستور زیر استفاده کنید:

tar -xf prometheus-2.22.0.linux-amd64.tar.gz

انتقال باینری به /usr/local/bin با دستور زیر:

sudo mv prometheus-2.22.0.linux-amd64/prometheus prometheus-2.22.0.linux-amd64/promtool /usr/local/bin

حال نوبت به ساخت دایرکتوری برای نگهداری فایل های کانفیگ و داده های پرومتئوس داریم، از دستور زیر استفاده کنید:

sudo mkdir /etc/prometheus /var/lib/prometheus

حال فایل کانفیگ را به دایرکتوری مرحله قبل که ساختیم، انتقال می دهیم:

sudo mv prometheus-2.22.0.linux-amd64/consoles prometheus-2.22.0.linux-amd64/console_libraries /etc/prometheus

حال فایل فشرده دانلود شده در ابتدای کار را نیازی بهش نداریم و پاک می کنیمش:

rm -r prometheus-2.1.0.linux-amd64*

کانفیگ کردن prometheus :

خب حالا که پرومتئوس رو نصب کردیم نوبت به این رسیده که آنر ا کانفیگ کنیم تا بهش اجازه دهیم HTTP endpoints هایی را که باید مانیتور کند را بشناسد. پرومتئوس از فایل yaml برای کانفیگ استفاده می کند.

ابتدا به /etc/hosts بروید و دو خط زیر را اضافه کنید، x.x.x.x را با IPماشین مورد نظر جایگزین کنید.

sudo nano /etc/hosts
x.x.x.x prometheus-target-1
x.x.x.x prometheus-target-2

از فایل /etc/prometheus/prometheus.yml برای کانفیگ استفاده می کنیم، این فایل را به فرمت زیر پر کنید:

global:
  scrape_interval: 10s

scrape_configs:
  - job_name: 'prometheus_metrics'
    scrape_interval: 5s
    static_configs:
      - targets: ['localhost:9090']
  - job_name: 'node_exporter_metrics'
    scrape_interval: 5s
    static_configs:
      - targets: ['localhost:9100','prometheus-target-1:9100','prometheus-target-2:9100']

در این فایل فاصله زمانی خزنده و scrapکردن را ۱۰ ثانیه قرار دادیم، همچنین تو سورس متریک تعریف کردیم با نام های prometheus_metrics و node_exporter_metrics. برای هر جفت آنها، فاصله زمانی scrap کردن را ۵ ثانیه قرار دادیم که روی مقدار پیش فرض اولیه قرار می گیرد. سپس لوکیشنی که این متریک ها قرار دارند و در دسترس هستند را مشخص کردیم. پرومتئوس از پورت ۹۰۹۰ استفاده می کند و node_exporter از پورت 9100 استفاده می کند تا متریک های خود را فراهم کنند.

در انتها صاحب فایل هایی که پرومتئوس استفاده می کند را نیز تغییر می دهیم:

sudo useradd -rs /bin/false prometheus
sudo chown -R prometheus: /etc/prometheus /var/lib/prometheus

حال نیز نوبت به ساخت unit fileبرای systemd رسید:

sudo nano /etc/systemd/system/prometheus.service
[Unit]
Description=Prometheus
After=network.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.console.templates=/etc/prometheus/consoles \
    --web.console.libraries=/etc/prometheus/console_libraries

[Install]
WantedBy=multi-user.target

حال systemd را reload می کنیم:

sudo systemctl daemon-reload
sudo systemctl enable prometheus
sudo systemctl start prometheus

پرومتئوس یک web UI برای اجرای کوئری های پایه فراهم کرده است، http://<your_server_IP>:9090/:

تنظیم Grafana برای Prometheus :

خب اول از همه باید grafana را نصب کنیم.

با سه دستور زیر پیش برید:

sudo apt-get install -y adduser libfontconfig1

wget https://dl.grafana.com/oss/release/grafana_7.3.1_amd64.deb
  
sudo dpkg -i grafana_7.3.1_amd64.deb

سپس شروع خودکار گرافانا (grafana) با ساتفاده از systemd را فعال کنید:

sudo systemctl daemon-reload && sudo systemctl enable grafana-server && sudo systemctl start grafana-server.service

حال گرافانا نصب و اجرا شده است، می توانید از طریق http://your.server.ip:3000 به اون دسترسی داشته باشید و userو password پیش فرض آن admin/admin می باشد. نمای داشبورد Grafan به شکل زیر می باشد:

حال باید برای پرومتئوس data source ایجاد کنیم:

  • روی لوگو grafana کلیک کنید تا سایدبار باز شود.
  • روی “Data Sources” در ساید بار کلیک کنید.
  • سپس  “Add New” را انتخاب کنید.
  • حال “Prometheus” را به عنوان data source انتخاب کنید.
  • حال URL سرور پرومتئوس را تنظیم کنید (در اینجا http://localhost:9090/ )
  • دکمه “Add” را بزنید تا اتصال را بررسی کنید و ذخیره کنید.

تنظیمات شما به شکل زیر خواهد بود:

حال همه چیز آماده است تا اولین Dashboard خودتان را از روی اطلاعات جمع آوری شده توسط Prometheus بسازید. شما همچنین می توانید تعدادی داشبورد را از shared dashboards داخل گرافانا import کنید.

ادامه دارد …

منابع :

https://medium.com/devops-dudes/install-prometheus-on-ubuntu-18-04-a51602c6256b