You are on page 1of 8

‫‪https://vrgl.

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‬‬ ‫)‪echo $(id -u‬‬


‫قسمت سوم‪:‬‬

‫‪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‬های اونها رو ست کنید‪.‬‬

‫‪1‬‬ ‫‪mkdir prometheus/data‬‬

‫‪1‬‬ ‫‪sudo chown -R 65534:65534 prometheus/data/‬‬

‫چرا ‪65534‬؟ این یوزری هست که داخل کانتینر ‪ prometheus‬داره کار میکنه و اگر ‪ permission‬نداشته باشه نمیتونه هیچ‬
‫چیزی رو داخل این فولدر سیو کنه‪ .‬پس بهش دسترسی میدیم که بدون مشکل کارش رو انجام بده‪.‬‬

‫تنظیمات ‪ prometheus‬کجاست؟‬

‫فایل ‪ prometheus.yml‬فایلی هست که کلیه تنظیماتی که به سرویس پرومتئوس میگه چه دیتایی رو چه‌جوری و از کدوم‬
‫سرور بخون داخل خودش نگه میداره‪ .‬این فایل به صورت نمونه میاد دیتای همین سروری که دارید روش ستاپ انجام میدید‬
‫رو نگه داری میکنه‪ .‬فقط الزمه که محتویات زیر رو داخل آدرس زیر بذارید‪.‬‬

‫‪1‬‬ ‫‪prometheus/prometheus.yml‬‬

‫محتویات تنظیمات ‪:prometheus‬‬

‫‪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‬رو اجرا کنید تا پرومتئوس و‬
‫گرافانا و پستگرس به هم وصل بشن و بشه یه سری نمودار دید‪.‬‬

‫بعد از اینکه هر سه تای اینا کامل اجرا شدن و باال اومدن میتونین آدرس زیر رو بزنید و وارد پنل گرافانا بشید‪.‬‬

‫یوزر و پسورد دیفالت هم ‪ admin‬هستش‪.‬‬

‫‪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‬‬

‫بعدش که برید داخل این داشبورد کلی ذوق میکنید‪.‬‬


‫لینک‌های به درد بخور‬


https://prometheus.io/docs/introduction/overview/

http://docs.grafana.org/

https://grafana.com/dashboards

https://github.com/prometheus/node_exporter

https://grafana.com/dashboards/1860

You might also like