زبیکس (Zabbix) یک سیستم متنباز و قدرتمند برای نظارت و مانیتورینگ شبکه، سرورها و برنامهها است. این نرمافزار به طور گستردهای در محیطهای سازمانی برای نظارت بر عملکرد و سلامت سیستمهای کامپیوتری استفاده میشود. زبیکس قابلیت نظارت بر پارامترهای مختلف مانند استفاده از CPU، حافظه، فضای دیسک، وضعیت سرویسها و همچنین متریکهای سفارشی را فراهم میکند. از ویژگیهای برجسته زبیکس میتوان به رابط کاربری کاربرپسند، امکان هشداردهی و گزارشدهی دقیق، و قابلیت مقیاسپذیری بالا اشاره کرد. این سیستم به مدیران شبکه و سیستم کمک میکند تا مشکلات را پیشبینی و به موقع حل کنند، همچنین به تحلیل عملکرد سیستمها کمک مینماید.
یکی از کاربردهای مانیتورینگ زبیکس، پایش وب سایت است و برای این منظور سرویس وب سناریو در محیط زبیکس طراحی شده است. مانیتورینگ وبسایت با استفاده از وبسناریوی زبیکس ابزار قدرتمندی برای بررسی در دسترس بودن و زمان پاسخدهی صفحات وب است و معمولاً بر پایه تعامل با عناصر ساده وب، مانند ارسال درخواست HTTP، عمل میکند. اما در مانیتورینگ با کمک API، امکان نظارت بر جزئیات و متریکهای پیچیدهتر مانند وضعیت سرورها، دادههای پویا، و اطلاعات خاص برنامهها وجود دارد.این قابلیت به مدیران سیستم و توسعهدهندگان این امکان را میدهد که متریکهای حیاتی مانند وضعیت سرورها، زمان پاسخدهی، دما، بار CPU و حتی تغییرات محتوای سایت را به صورت بلادرنگ رصد کنند. از کاربردهای این رویکرد میتوان به تشخیص سریع مشکلات فنی، بهبود تجربه کاربری، کاهش زمان از کارافتادگی (Downtime) و تحلیل عملکرد سیستمها اشاره کرد. همچنین، با استفاده از API میتوان دادهها را با ابزارهای تحلیل دیگر یکپارچه کرد و گزارشهای دقیقتری برای تصمیمگیری استراتژیک تهیه نمود. این ویژگیها به کسبوکارها کمک میکند تا همیشه در اوج بهرهوری و رضایت مشتریان باقی بمانند.
برای تست این ویژگی در زبیکس یک سناریو ساده طراحی کردیم تا عملکرد زبیکس در این حوزه را بسنجیم. در این سناریو، دمای هوای شهر مشهد هر یک دقیقه یک بار پایش می شود و در صورتی که دمای هوا کمتر از پانزده درجه سانتیگراد شود، هشدار پوشیدن کاپشن در زبیکس ایجاد می شود.
1- دریافت API هواشناسی: برای دریافت دمای هوای مشهد، نیاز به API از یک سایت هواشناسی داشتیم. من در این سناریو از وب سایت openweathermap.org استفاده کردم. باید در این سایت ثبت نام کنید و سپس یک توکن برای کار با API این سایت به صورت رایگان ایجاد کنید. در نهایت Get Request ما به شکل زیر خواهد شد:
https://api.openweathermap.org/data/2.5/weather?q=Mashhad,IR&appid=YOUR_API_KEY&units=metric
بهتر است قبل از استفاده از این ریکوئست، یک بار در ابزارهایی مانند Postman آن را تست کنید.
2- فعال کردن اسکریپت های زبیکس: برای فعال کردن اسکریپتهای خارجی در زبیکس، باید تنظیمات مربوطه را در فایل کانفیگ سرور زبیکس تغییر دهید. فایل تنظیمات معمولاً در مسیر زیر قرار دارد:
/etc/zabbix/zabbix_server.conf
در این فایل، گزینهای به نام ExternalScripts وجود دارد که باید مسیر دایرکتوری اسکریپتهای خارجی را به درستی تنظیم کنید (معمولاً /usr/lib/zabbix/externalscripts/). این خط به صورت پیشفرض در حالت کامنت است و باید # اول خط را پاک کنید.
پس از انجام تغییرات، فایل را ذخیره کرده و سرور زبیکس را با دستور زیر ریستارت کنید تا تنظیمات جدید اعمال شوند:
sudo systemctl restart zabbix-server
این مرحله برای اجرای اسکریپتهای سفارشی و یکپارچهسازی دادههای خارجی ضروری است.
3- ایجاد اسکریپت برای دریافت داده ها: برای ایجاد اسکریپت زبیکس جهت بررسی دادههای خارجی (مانند دما)، ابتدا یک فایل اسکریپت در دایرکتوری مشخصشده برای اسکریپتهای خارجی ایجاد کنید. به عنوان مثال، میتوانید فایلی با نام check_temperature.py در مسیر زیر ایجاد کنید:
touch /usr/lib/zabbix/externalscripts/check_temperature.py
این مسیر در فایل zabbix_server.conf مشخص شده است و در صورتی که قصد تغییر آن را دارید در فایل کانفیگ سرور نیز می بایست این دایرکتوری را تغییر دهید.
سپس باید دسترسیهای لازم را به این فایل اختصاص دهید؛ ابتدا با دستور chmod +x فایل را اجرایی کنید و سپس با دستور chown zabbix:zabbix مالکیت آن را به کاربر و گروه زبیکس تغییر دهید. در سناریو ما نام کاربر در سرور زبیکس نیز zabbix است. این گام تضمین میکند که سرور زبیکس بتواند اسکریپت را بدون مشکل اجرا کند. اسکریپت آمادهشده در گام بعدی برای دریافت داده از API یا منابع دیگر استفاده خواهد شد.
chmod +x /usr/lib/zabbix/externalscripts/
chown zabbix:zabbix /usr/lib/zabbix/externalscripts/
حال نوبت به نوشتن اسکریپت می رسد. برای نوشتن اسکریپت از زبان پایتون استفاده شده است. در زمان نوشتن اسکریپت باید به دانش فنی اعضای تیم و سازگاری با سرور زبیکس توجه کرد. اما در هر حال استفاده از زبان هایی مانندد Bash، C و Python برای این کار مناسب است.
vim /usr/lib/zabbix/externalscripts/check_temperature.py -----------------------------------------------------------------------------------------------------------
#!/usr/bin/env python3 import requests import sys API_KEY = "YOUR_API_KEY" CITY = "Mashhad" COUNTRY = "IR" URL = f"http://api.openweathermap.org/data/2.5/weather?q={CITY},{COUNTRY}&appid={API_KEY}&units=metric" def get_temperature(): try: response = requests.get(URL, timeout=10) response.raise_for_status() data = response.json() temperature = data['main']['temp'] return temperature except requests.exceptions.RequestException as e: print(f"Error: {e}", file=sys.stderr) return None except KeyError: print("Error: Invalid response format", file=sys.stderr) return None def main(): temperature = get_temperature() if temperature is not None: print(temperature) else: print(0.0) sys.exit(1) if __name__ == "__main__": main()
4- ایجاد آیتم برای دریافت داده ها در زبیکس: برای ایجاد یک آیتم در زبیکس جهت مانیتور کردن دمای هوا، مراحل زیر را انجام دهید:
ابتدا به رابط کاربری زبیکس وارد شده و به بخش Configuration > Hosts بروید. Host مورد نظر خود را انتخاب کنید یا یک میزبان جدید برای این هدف ایجاد کنید. سپس در تب Items، روی گزینه Create Item کلیک کنید. در فرم باز شده، موارد زیر را تنظیم کنید:
این نام دلخواه است.
گزینه External Check در زبیکس برای اجرای اسکریپتها یا برنامههای خارجی که در خارج از محیط زبیکس اجرا میشوند، استفاده میشود. این گزینه به شما امکان میدهد تا با استفاده از یک فایل اجرایی یا اسکریپت، دادههایی را که مستقیماً توسط زبیکس قابل جمعآوری نیستند، دریافت و به سیستم اضافه کنید.
نام اسکریپت نوشته شده در این بخش قرار می گیرد.
با توجه به اینکه خروجی اسکریپتی که نوشتیم به صورت عددی است، نوع داده ها هم از نوع عددی انتخاب شود.
این بخش مشخص میکند که اجرای اسکریپت در چه بازه زمانی تکرار شود. به صورت تستی ما هر یک دقیقه را انتخاب کردیم.
پس از پر کردن تنظیمات، روی Add کلیک کنید تا آیتم ذخیره شود. این گام اطمینان حاصل میکند که زبیکس به صورت خودکار دادههای دما را از اسکریپت فراخوانی کرده و در داشبورد نمایش میدهد.
4- ایجاد تریگر برای ایجاد آلارم در زبیکس: برای ایجاد یک تریگر (Trigger) در زبیکس، که بتواند هشدارهای لازم را بر اساس دادههای جمعآوریشده (مانند دما) ایجاد کند، مراحل زیر را دنبال کنید:
در اینجا پیغام دلخواهی که در متن هشدار میخواهید نمایش داده شود را وارد کنید.
درجه اهمیت آلارم را می توانید در این بخش وارد کنید. این مقدار دلخواه و متناسب با سناریو شما انتخاب میشود.
در این بخش یک شرط برای ایجاد آلارم تعریف می شود. در شرط ما ذکر شده که اگر آخرین خروجی اسکریپت کمتر از ۱۵ شود آلارم ایجاد شود.
با وارد کردن فیلد operational data آخرین خروجی اسکریپت و دمای دریافت شده در پنل مانیتورینگ و همراه با اطلاعات آلارم نمایش داده میشود.
پس از وارد کردن اطلاعات، تنظیمات را ذخیره کنید. زبیکس در صورت برآورده شدن شرط (مثلاً دمای زیر صفر)، تریگر فعال میشود و به شما هشدار میدهد. این گام به شما امکان میدهد که نظارت فعال داشته باشید و هنگام وقوع شرایط خاص (مانند دمای غیرعادی)، بلافاصله مطلع شوید و اقدامات لازم را انجام دهید.
در زبیکس، با استفاده از گزینه Graphs میتوانید تغییرات مقدار آیتمهای مانیتور شده را به صورت گرافیکی مشاهده کنید. این قابلیت به شما امکان میدهد تا روندها، نوسانات و تغییرات دادهها را در طول زمان بررسی کنید و از رفتار غیرعادی یا تغییرات ناگهانی مطلع شوید. برای مشاهده گراف، کافی است به صفحه مربوط به Host یا آیتم مورد نظر رفته و گراف مرتبط را باز کنید. این ابزار بصری برای تحلیل دادهها و تصمیمگیری سریع بسیار مفید است.
مانیتورینگ عناصر مختلف وبسایت با استفاده از زبیکس و API نه تنها امکان نظارت دقیق بر عملکرد سیستمها را فراهم میکند، بلکه از طریق هشدارهای بلادرنگ و گزارشهای جامع، به پیشگیری از مشکلات و بهبود عملکرد کلی کمک میکند. استفاده از چنین روشهایی انعطافپذیری بیشتری به تیمهای فنی میدهد و تضمین میکند که سامانهها همیشه در دسترس و کارآمد باشند. با اجرای این راهکار، میتوان اطلاعات ارزشمندی مانند دما، زمان پاسخدهی، و سلامت سرویسها را بهطور مداوم نظارت کرد و در صورت بروز مشکلات، اقدامات لازم را به سرعت انجام داد. این فرایند، نقشی کلیدی در کاهش زمان خرابی، افزایش رضایت کاربران، و بهبود بهرهوری سازمان ایفا میکند. پیادهسازی موفقیتآمیز این پروژه نشان میدهد که با ترکیب ابزارهای قدرتمندی مانند زبیکس و قابلیتهای API، میتوان به یک سیستم نظارت یکپارچه و هوشمند دست یافت که آیندهنگر و قابل توسعه است.
پینوشت: این اولین مقالهای هست که در ویرگول نوشتم و امیدوارم برای شما مفید باشه. هدفم اینه که چیزهایی که یاد میگیرم رو به اشتراک بذارم تا هم به دیگران کمک کنم و هم خودم بیشتر یاد بگیرم. به نظرم وقتی تجربههامون رو با بقیه درمیون میذاریم، هم فرصت رشد برای خودمون ایجاد میشه و هم میتونیم به دیگران کمک کنیم تا راحتتر چالشهاشون رو حل کنن. اگر نظری یا پیشنهادی دارید، خوشحال میشم بدونم.
به تاریخ: 1403.09.24