مانیتورینگ Nginx با استفاده از Grafana
سلام, به این تصویر نگاه کنید
هیچ چیز برای یه SysAdmin یا Developer مهم تر از این نیست که بدونه وضعیت سرویسی که راه اندازی کرده و یا داره ازش نگهداری می کنه چطوریه ؟ دیدن این صفحه برای خود من که یه حس رضایت ( اصطلاح معروفش Satisfaction ) خیلی زیادی داره.
اما به اینطور صفحه ها چی می گن ؟ بله درسته, مانیتورینگ. مانیتورینگ یکی از حیاطی ترین اجزا یه سرویس زنده و در حال اجراس.
انتخاب ابزار مناسب برای مانیتورینگ:
اجازه بدید کلام رو کوتاه کنم و از مزایای مانیتورینگ زیاد ننویسم چون خودتون بیشترش رو می دونید. اما برای راه انداختن مانیتورینگ چیکار باید بکنیم ؟ مانیتورینگ هم مثل خیلی از سرویس های دیگه ابزار زیاد داره.. یه سری هاشون Stand Alone هستن مثل Zabbix یا Nagios و یه سری هاشون هم یه صورت یه استک هستند مثل ELK که مخفف Elasticseach, Logstash و Kibana هست یا استک Grafana, Telegraf و Influxdb.
اما منظور از استک چیه ؟ اجازه بدید خیلی ساده بگم, معمولا مانیتورینگ ۳ قسمت اصلی داره:
- جمع آوری داده ها
- ذخیره ی داده های جمع آوری شده
- نمایش داده های ذخیره شده به شکل مناسب ( گراف و نمودار و ... )
جمع آوری داده ها:
خوب قاعدتا شما باید مشخص کنید که چه چیزی رو می خواید مانیتور کنید... وب سرور ؟ دیتابیس ؟ میزان مصرف منابع ؟ خوب بعد اینکه مشخص کردید باید یه ابزار مناسب ( Data Collector ) برای جمع آوری دیتای مورد نظرتون داشته باشید... اصطلاحا به این دیتا می گن metrics. مثلا nginx واسه خودش یه جور metrics داره و MySQL یه جور دیگه... خوشبختانه از اونجایی که در عصر تکنولوژی به سر می بریم ۱۰۰۰ جور Data Collector وجود داره مثل CollectD یا telegraf یا filebeat یا ... به این کالکتور ها Agent هم میگن. این کالکتور ها اکثرا برای سرویس های معروف و عامه مثل Nginx, Apache, MySQL و ماژول های آماده دارن و شما باید فقط یه کانفیگ ساده انجام بدید (مثلا آدرس فایل لاگ Nginx رو مشخص کنید) و بقیه کار ها رو خودشون انجام میدن.
خوب, پس متوجه شدیم که باید یه ابزاری داشته باشیم که سورس رو بهش معرفی کنیم ( مثلا Log های Nginx ) و بهش بگیم دیتا رو از توی سورس برای ما بکش بیرون ( ادبی ترش می شه استخراج کن ).
خوب حالا که دیتا رو استخراج کردیم چه کنیم ؟ قسمت بعد رو بخونید...
ذخیره ی داده های جمع آوری شده:
بعد از اینکه Agent ما یه سری دیتا برای ما جمع کرد باید این دیتا رو یه جایی ذخیره کنیم. تا بتونیم بعدا گزارش بگیریم, مثلا در کل ۱ ماه گذشته چه تعداد درخواست رو هندل کردیم ؟ برای این کار هم Data Store ها یا Database های مختلفی وجود داره... مثل elasticsearch یا Influxdb. فقط کافیه به Agent بگیم دیتایی که جمع کردی رو بفرست سمت Database جهت ذخیره سازی.
نمایش داده های ذخیره شده (Visualization):
خوب, تا اینجا دیتا (metrics) رو استخراج و دخیره کردیم... حالا باید اون ها رو به صورت آدمیزاد پسند و رئیس پسند نمایش بدیم, برای این کار هم ابزار های مختلفی هست که در حال حاضر معروف ترین هاشون kibana و grafana هستن که داده ها رو از database بر می دارن و به صورت چارت و گراف و نمودار و ... نشون می دن.
مانیتور کردن Nginx با استفاده از Grafana, Influxdb, Telegraf:
خوب اجازه بدید مباحث تئوری رو کم کنیم و یکم عملی کار کنیم. خوب من خودم این استک رو ترجیح می دم به خاطر اینکه خیلی شسته رفته تر و بی دردسر تره و تقریبا هر انتظاری که دارید رو برآورده می کنه. همونطور که قبلا گفتم ما به ۳ تا ابزار احتیاج داریم, Grafana برای نمایش, Influxdb برای ذخیر سازی داده ها و Telegraf برای جمع آوری داده ها.
اجازه بدید از مراحل نصب و راه اندازی بگذریم چون خود سایت مرجع خیلی خوب توضیح داده و چیز ساده ای هست.
اولین قدم کانفیگ تلگراف:
خوب, از اونجایی که قراره Nginx رو مانیتور کنیم شما در مرحله ی اول باید telegraf رو روی سروری که Nginx شما اونجا هست نصب کنید. بعد از اینکه نصب کردید فایل زیر رو با یه Text Editor باز کنید:
sudo vim /etc/telegraf/telegraf.conf
خوب حالا دنبال کانفیگ بلاک [[inputs.logparser]] بگیردید, این ماژول به صورت پیش فرض توی تلگراف کامنت هست و شما باید این ماژول رو از کامنت خارج کنید و به شکل زیر تنظیم کنید:
[[inputs.logparser]]
files = ["/var/log/nginx/access.log"] // اینجا آدرس فایل لاگ رو مشخص کنید
from_beginning = false
[inputs.logparser.grok]
patterns = ["%{COMBINED_LOG_FORMAT}"]
measurement = "nginx_access_log" // کلیدی که دیتای مورد نظر قراره باهاش ذخیر بشه, دلخواه
custom_pattern_files = []
خوب تا اینجا به تلگراف گفتیم دیتا رو از کجا بخون, حالا باید بهش بگیم دیتایی که استخراج کردی رو کجا بفرست برای ذخیره سازی.
توی همون فایل telegraf.conf دنبال بلاک [[outputs.influxdb]] بگردید, این ماژول هم کامنت شده هست, از کامنت خارجش کنید و کافیه فقط چند تا پارمتر ساده براش ست کنید, ip ماشین یا سروری که influxdb رو روش نصب کردید + پورتی که influxdb روش جواب می ده که پیش فرض 8086 هست اگر خودتون عوضش نکرده باشید به همراه یوزر و پسورد و اسم دیتابیس.
[[outputs.influxdb]]
urls = ["http://192.168.1.100:8086"]
database = "telegraf"
username = "funnyusername"
password = "verykoloftpassword"
خبر خوب اینه که اگه database رو از قبل نساخته باشید خود به خود ساخته می شه و به خطا نمی خوره.
خوب حالا سرویس تلگراف رو restart کنید:
sudo service telegraf restart
بعد از اینکه سرویس تلگراف رو restart کردید می تونید با دستور زیر تست کنید ببینید همه چی درسته یا نه
sudo telegraf --test
اگر خطایی دریافت نکردید یعنی همه چیز درسته. ( چه جمله ی مسخره ای )
خوب, تا اینجا گرافانا, اینفلاکس و تلگراف رو نصب کردیم, بعد تلگراف رو تنطیم کردیم تا لاگ های Nginx رو بخونه و در آخر بهش گفتیم دیتای رو بفرست سمت انفلاکس برای ذخیره سازی, حالا توی مرحله ی بعد که مرحله ی آخر هست می خوایم دیتای ذخیره شده رو نشون بدیم.
تنظیمات Grafana برای مانیتور کردن Nginx:
خوب اینجا دو تا راه داریم, اول اینکه خودمون یه دشبورد جدید بسازیم و به اینفلاکس کوئری بزنیم و دیتا رو بخونیم وصلش کنیم به ویجت ها و گراف های مختلف و نمایش بدیم, راه دوم اینه که از دشبورد های از پیش آماده که دیگران زحمت طراحی و ساختش رو کشیدن استفاده کنیم. بدون هیچ صحبت اضافه ای بریم برای توضیح راه دوم :D.
خوب در قدم اول پنل وب گرافانا رو توی مرورگر باز کنید و لاگین کنید. اگر نمی دونید گرافانا به صورت پیش فرض روی پورت 3000 میاد بالا و یوزر پس پیش فرضش admin / admin هست.
در قدم اول باید گرافانا رو به اینفلاکس وصل کنیم, برای اینکار بعد از اینکه لاگین کردید سمت چپ صفحه یه منوی عمودی می بینید یه یکیش عکس چرخدنده هست به اسم configuration که یه زیر منو داره به اسم data source, روش کلیک کنید. حالا روی دکمه add data source کلیک کنید. یه سری انتخاب بهتون می ده که یکیش influxdb هست.
روش کلیک کنید یه فرم باز می شه, همه چی مشخصه طبق معمول یه اسم دلخواه برای کانکشن, ip:port سرویس اینفلاکس, یوزر و پسورد و اسم دیتابیس رو انتخاب کنید بقیه تنظیمات هم لازم نیست تغییر بدید, تنها نکنه این بخش اینه که اسم دیتابیسی که وارد می کنید با اسم دیتابیسی که توی تلگراف وارد کردید باید یکی باشه.
روی save and test کلیک کنید اگر مشکلی نباشه data source شما ایجاد می شه.
خوب قسمت های سخت ماجرا تموم شد و فقط مونده ساختن یه دشبورد برای نمایش دیتا, شما می تونید برید توی وب سایت گرافانا و از این قسمت دشبورد های مخصوص nginx رو سرچ کنید و یکیش رو دانلود کنید, دشبورد مورد علاقه ی خود من این دشبورد هست. روی Download JSON کلیک کنید تا یه فایل json دانلود بشه.
حالا وقتشه که داشبوردی که دانلود کردید رو به گرافانا اضافه کنید, از این منو روی زیر منوی import کلیک کنید:
حالا روی دکمه ی سبز رنگ Upload .json File کلیک کنید و فایلی که دانلود کرده بودید رو آپلود کنید, یه فرم باز می شه که می تونید برای دشبورد اسم انتخاب کنید, در قسمت influxdb هم اون data source که قبلا ساختید رو انتخاب کنید و روی دکمه import کلیک کنید.
خوب حالا اگه همه چی خوب پیش رفت باشه باید یه همچین تصویر زیبایی رو ببینید:
تمام! بقیش رو خودتون با یکم وقت گذاشتن می تونید کشف کنید چون Grafana یه UX خیلی خوب داره, مثلا گوشه ی بالا سمت راست می تونید بازه زمانی نمایش اطلاعات رو انتخاب کنید یا انتخاب کنید هر چند وقت یک بار دشبورد ریفرش بشه.
خسته نباشید.
مطلبی دیگر از این انتشارات
داستان سختافزار آزاد - قسمت اول : منطق و ریاضیات یاد بگیریم
مطلبی دیگر از این انتشارات
es6در let
مطلبی دیگر از این انتشارات
بیاین بریم قطب جنوب!!!/چرا لینوکس؟ قسمت 0