Professional Documents
Culture Documents
راه اندازی یه سیستم مانیتورینگ با prometheus
راه اندازی یه سیستم مانیتورینگ با prometheus
ir/VIeSa
ویرگول -جایی برای نوشتن و خواندن
اینجا میخوام توضیح بدم که چهجوری میشه خیلی سریع یه سیستم مانیتورینگ برای مانیتور کردن Resourceروی سرورها
اضافه کرد.
ابزاری که ما در تخفیفان اضافه کردیم و تونستیم خیلی راحت لود رو روی تمام سرورهامون ببینیم ترکیب Grafanaو
Prometheusبود.
Grafanaچیه؟
یه ابزار طبعا اوپن سورس که کارش نمایش دادهها و کشیدن نمودارهای مختلف هست.
Prometheusچیه؟
یک ابزار برای جمعآوری دیتا از نقاط مختلف .این سرویس میتونه دیتای الزم رو از هر سروری بخونه و تو خودش نگه داره و با
استفاده از زبانی که برای کوئری کردن دیتا داره میشه دیتا رو در زمانهای مختلف دید و ازش نمودار به دست آورد.
ترکیب این ۲تا سرویس با هم اینجوریه که Prometheusدیتا رو جمع میکنه و نگهداری میکنه .بعد از اون کار Grafana
آینه که این دیتا رو بخونه و تو نمودارهای مختلفی که میخواین نشون بده .به عنوان مثال این یه نمودار خیلی ساده از CPU
Loadروی یکی از سرورهاست در بازه زمانی ۶ساعت.
توصیه میکنم حتما اول یک بار روی لوکال خودتون این مراحل رو برید و هر کاری دوست داشتید بکنید و بعدش به سرور
منتقل کنین.
برای ستاپ کردن ترجیح و توصیه من استفاده از داکر هست چون خیلی سریع و راحت میتونین اینا رو به هم وصل کنین.
من اینجا یه سمپل خیلی ساده از فایل docker-composeمیذارم و قسمتهای مختلف اون رو در ادامه توضیح میدم.
1 version: "3"
2 services:
3 prometheus:
4 image: prom/prometheus
5 volumes:
6 - /home/apps/system_monitoring/prometheus/prometheus.yml:/etc/promethe
7 - /home/apps/system_monitoring/prometheus/data:/prometheus
8 ports:
9 - '127.0.0.1:9090:9090'
10 network_mode: bridge
11 extra_hosts:
12 my_server: 127.0.0.1
13 grafana:
14 image: grafana/grafana
15 environment:
16 GF_DATABASE_TYPE: postgres
17 GF_DATABASE_HOST: 'postgres'
18 GF_DATABASE_NAME: 'grafana'
19 GF_DATABASE_USER: 'postgres'
20 GF_DATABASE_PASSWORD: ''
21 ports:
22 - '127.0.0.1:3100:3000'
23 links:
24 - prometheus
25 - postgres
26 user: "1000"
27 network_mode: bridge
28 volumes:
29 - /home/apps/system_monitoring/grafana/data:/var/lib/grafana
30 - /var/log/grafana:/var/log/grafana
31 depends_on:
32 - postgres
33 postgres:
34 image: postgres:latest
35 environment:
36 POSTGRES_USER: postgres
37 POSTGRES_PASSWORD:
38 POSTGRES_DB: grafana
39 volumes:
40 - /home/apps/system_monitoring/postgres:/var/lib/postgresql/data
41 - /var/log/postgres:/var/log/postgresql
42 network_mode: bridge
:قسمت اول
1 prometheus:
2 image: prom/prometheus
3 volumes:
4 - /home/apps/system_monitoring/prometheus/prometheus.yml:/etc/prometheus/
5 - /home/apps/system_monitoring/prometheus/data:/prometheus
6 ports:
7 - '127.0.0.1:9090:9090'
8 network_mode: bridge
9 extra_hosts:
10 my_server: 127.0.0.1
پورتی. دایرکتوریهایی که پرومتئوس برای نگهداری دیتا و همچنین فایل تنظیماتش رو مشخص کردیمvolumes در قسمت
هست که اون رو برای لوکال باز گذاشتیم که اگر الزم بود بتونیم بهش9090 که به صورت پیشفرض فعال هست هم پورت
هم باید آدرس تمام سرورهایی که میخواین دیتا رو ازشون بخونین بهextra_hosts در قسمت.دسترسی داشته باشیم
. اینکه این هاستها کجا به درد میخورن رو تو تنظیماتی که باید انجام بدیم متوجه میشید.همراه آیپی بذارین
:قسمت دوم
1
grafana:
2
image: grafana/grafana
3
environment:
4
GF_DATABASE_TYPE: postgres
5
'GF_DATABASE_HOST: 'postgres
6 'GF_DATABASE_NAME: 'grafana
7
'GF_DATABASE_USER: 'postgres
8
'' GF_DATABASE_PASSWORD:
9
ports:
10
'- '127.0.0.1:3100:3000
11
links:
12
- prometheus
13
- postgres
14
"user: "1000
15
network_mode: bridge
16
volumes:
17
- /home/apps/system_monitoring/grafana/data:/var/lib/grafana
18
- /var/log/grafana:/var/log/grafana
19
depends_on:
20 - postgres
گرافانا به صورت پیشفرض از دیتابیس sqliteاستفاده میکنه برای نگهداری تمام دادههایی که داره ولی چون ما ترجیح
میدادیم که یه دیتابیس مطمئنتر داشته باشیم تصمیم گرفتیم از postgresاستفاده کنیم .تمام مواردی هم که در قسمت
environmentاومده هم برای برقراری ارتباط با دیتابیس هست .توی داکیومنت خودش میتونید ببینید چه دیتابیسهایی رو
پشتیبانی میکنه و از هرکدوم که دوست داشتین استفاده کنید.
در قسمت portsهم باید پورت ۳۰۰۰کانتینر گرافانا که به صورت پیشفرض وجود داره رو به یه پورت دلخواه در سیستم
هاست بفرستین که بتونید به پنل گرافانا دسترسی داشته باشید.
:Userیکی از مهمترین چیزهایی که در ستاپ گرافانا به گیر خواهید خورد قرار دادن permissionدرست برای فولدرهای
گرافانا و یوزری که قراره تو اون فولدرها دیتا بنویسه خواهد بود .چرا ۱۰۰۰؟ این مقدار رو باید با اجرای این کامند توسط یوزری
که قراره این سرویس رو اجرا کنه به دست میاد
1
postgres:
2
image: postgres:latest
3
environment:
4
POSTGRES_USER: postgres
5 POSTGRES_PASSWORD:
6
POSTGRES_DB: grafana
7
volumes:
8
- /home/apps/system_monitoring/postgres:/var/lib/postgresql/data
9
- /var/log/postgres:/var/log/postgresql
10 network_mode: bridge
تو این قسمت هم که فقط دیتابیس postgresرو اضافه کردیم و تنظیمات الزم رو قرار دادیم که گرافانا بتونه بهش وصل
شه و دیتایی که الزم داره رو ذخیره کنه.
بعد از اینکه این فایل رو در مسیری که میخواهید قرار دادید الزمه که دایرکتوریهای الزمی که تو این فایل بهشون اشاره شده
رو بسازید و permissionهای اونها رو ست کنید.
چرا 65534؟ این یوزری هست که داخل کانتینر prometheusداره کار میکنه و اگر permissionنداشته باشه نمیتونه هیچ
چیزی رو داخل این فولدر سیو کنه .پس بهش دسترسی میدیم که بدون مشکل کارش رو انجام بده.
تنظیمات prometheusکجاست؟
فایل prometheus.ymlفایلی هست که کلیه تنظیماتی که به سرویس پرومتئوس میگه چه دیتایی رو چهجوری و از کدوم
سرور بخون داخل خودش نگه میداره .این فایل به صورت نمونه میاد دیتای همین سروری که دارید روش ستاپ انجام میدید
رو نگه داری میکنه .فقط الزمه که محتویات زیر رو داخل آدرس زیر بذارید.
1 prometheus/prometheus.yml
1
global:
2 scrape_interval:
15s # By default, scrape targets every 15 seconds
3
scrape_configs:
4
- job_name: node
5
static_configs:
6
- targets:
7 '- '127.0.0.1:9100
مهمترین قسمت تو این فایل قسمت targetsهست که لیست سرورهایی که میخواهید ببینید رو قرار میدید.
extra_hostsکه در فایل docker-compose.ymlبرای پرمتئوس هم قرار دادیم برای همینه که این کانتینر بتونه به راحتی
و با استفاده از اسم هاست بهشون وصل بشه بجای اینکه هی آیپی بذارید و یادتون بره که این کدوم سرور بود.
خب قراره یه سرویسی وجود داشته باشه که دیتا رو برای prometheusبفرسته یا بشه رفت ازش این دیتا رو گرفت .الزم
داریم که یه سرویسی رو روی پورت ۹۱۰۰ایجاد کنیم که این دیتا رو برامون جمعآوری کنه و promethusبا خوندن و نگه
داشتن اون دیتا بتونه بهمون گزارش بده.
node_exporterحالل مسائل
این سرویس که توسط خود تیم prometheusنوشته شده و خب طبعا مثل بقیه سرویسهایی که استفاده کردیم اوپن
سورس هم هست این امکان رو میده که دیتاهایی که الزم هست مثًال لود سیپییو ،وضعیت فضای هارد دیسکها و
پارتیشنهای مختلف ،نتورک و خیلی چیزای دیگه رو جمع آوری کنه .داخل پروژه گیتهاب این سرویس نوشته که چهجوری
میتونین اون رو نصب کنین .فقط الزمه Go Compilerرو نصب داشته باشید .بعدش به راحتی میتونین با اجرای دستورات
زیر این سرویس رو اجرا کنید.
1
go get github.com/prometheus/node_exporter
2
cd ${GOPATH-$HOME/go}/src/github.com/prometheus/node_exporter
3
make
4 >./node_exporter <flags
خب این سرویس میاد به صورت پیشفرض تمام دیتاهایی که فکر میکنه الزم هست(این دیتاها رو از طریق flagsمیتونین
عوض کنین) رو شروع به اندازهگیری میکنه.
همونجوری که سرویس node_exporterدر حال اجرا هست کامند docker-compose upرو اجرا کنید تا پرومتئوس و
گرافانا و پستگرس به هم وصل بشن و بشه یه سری نمودار دید.
بعد از اینکه هر سه تای اینا کامل اجرا شدن و باال اومدن میتونین آدرس زیر رو بزنید و وارد پنل گرافانا بشید.
http://localhost:3100
آره خب الزمه برید تو قسمت تنظیمات گرافانا و Data sourceرو بهش معرفی کنید.دکمه Add data sourceرو بزنیدو
فیلدهاش رو مقدارهای زیر رو وارد کنید.
Name: Prometheus
Type: Prometheus
URL: http://prometheus:9090
)Access: Server(Default
بقیه فیلدها رو هم همون چیزی که هست بذارید بمونه .بعد از اینکه فیلدها رو وارد کردید دکمه Save & testرو بزنید که
ذخیره بشه.
خب دیگه همه چی آماده است و فقط باید بری داخل قسمت import dashboardو داشبورد زیر رو ایمپورت کنید.
https://grafana.com/dashboards/1860
http://docs.grafana.org/
https://grafana.com/dashboards
https://github.com/prometheus/node_exporter
https://grafana.com/dashboards/1860