در این آموزش قصد داریم نحوه Integrate کردن Zabbix با Telegram (یا اتصال Zabbix به Telegram) جهت ارسال پیغام ها، هشدارها و آلارم های زبیکس (شامل Information, Warning, Avarage, High, Disaster) به یک کانال یا گروه در Telegram را آموزش دهیم. Zabbix یک نرم افزار open source در سطح سازمانی که برای مانیتورینگ real-time میلیون ها یا هزاران metric جمع آوری شده شبکه، سرورها، ویرچوال ماشین ها، تجهیزات IT و زیر ساخت شبکه مورد استفاده قرار می گیرد.
در مقاله قبلی نحوه ارتباط زبیکس با تلگرام را توضیح دادیم، در این مقاله قصد داریم به صورت مفصل و با جزئییات بیشتری این آموزش را توضیح دهیم. برای شروع ما ابتدا نیاز داریم ماژول request برای python را نصب کنیم. روی سرور زبیکس مان جهت ارتباط با Telegram ابزار pip را با دستور زیر نصب می کنیم.
در توزیع های Debian/Ubuntu
در توزیع های CentOS/RHEL
ابتدا ریپازیتوری Epel را روی سرور خود فعال کنید. سپس دستور زیر را وارد کنید.
مطمئن شوید که zabbix server روی سرورتان در حال اجرا باشد. پیش نیاز نصب pyTelegramBotAPI میباشد که همانند زیر با استفاده از دستور pip برای نصب اقدام کنید.
توصیه میشود پکیج های security را همانند زیر نصب کنید.
ممکن است به آپدیت کردن پکیج requests نیاز پیدا کنید. برای انجام update همانند زیر عمل کنید.
طریقه نصب Pip از Source
در صورتی که قصد دارید pip از source نصب کنید همانند زیر اقدام کنید.
همچنین توصیه میشود مطالعه کنید :
آموزش نصب آخرین ورژن مانیتورینگ زبیکس
آموزش نصب و راه اندازی Zabbix 3 در RedHat/CentOS
آموزش نصب و راه اندازی Zabbix 3 در Debian/Ubuntu
Zabbix چیست ؟
آموزش نصب ایجنت زبیکس در ویندوز
آموزش نصب ایجنت زبیکس در لینوکس
نحوه ارسال ایمیل هشدار به Gmail در زبیکس
مانیتورینگ دیتابیس Oracle در Zabbix
سوالات مربوط به زبیکس
ساخت Bot در Telegram
برای ساخت یک بات در تلگرام باید از طریق ربات @BotFather اقدام کنید. در ابتدا باید برای bot که قصد داریم ایجاد کنیم یک اسم انتخاب کنیم. برای این کار باید دستور /newbot را از طریق BotFather اجرا کنیم، سپس از شما یک نام برای بات ایجاد شده میخواهد، یک نام مناسب برای خود انتخاب کنید. (در این مثال linuxzone_forums میباشد)
بعد از این مرحله bot از شما یک username میخواهد. یوزر خود را وارد کنید و در انتهای اسم مورد نظرتان "_bot" را هم وارد کنید. (مثلا userlinuxzone_bot)
وقتی شما یوزر bot تان را وارد میکنید @BotFather به شما یک token نمایش میدهد. آنرا در جایی ذخیره کنید و به صورت امن از آن نگهداری کنید. برای مثال :
نکته : اگر قصد دارید bot را در یک گروه استفاده کنید باید قبل از تست آنرا به گروه add کنید. برای اضافه کردن bot به یک کانال باید بات را به عنوان یک addministrator اضافه کنید.
هماهنگی Zabbix با Telegram
با استفاده از دستور cat در سرور زبیکس مان مسیر دایرکتوری Alert را پیدا کنید. در اینجا "/usr/lib/zabbix/alertscripts" میباشد.
یک فایل به نام telegram_notification.py در مسیر دایرکتوری /usr/lib/zabbix/alertscripts ایجاد کنید.
سپس کدهای زیر را در آن وارد کرده و تغییرات را ذخیره کنید. فراموش نکنید که در قسمت BOT_TOKEN شما باید شماره token مخصوص به خود را که از طریق BotFather به دست آورده اید را وارد کنید.
سطح دسترسی اسکریپتی که در مرحله قبل ایجاد کردید را تغییر داده و به آن پرمیژن اجرایی دهید.
تنظیمات Telegram ID
تلگرام برای ارسال پیغام ها به "id" نیاز دارد. آسانترین راه برای گرفتن این id استفاده از bot ی میباشد که فقط شما ساخته اید.
از طریق مرورگرتان به آدرس https://api.telegram.org/bot"TokenID"/getUpdates بروید. به جای "TokenID" شماره آیدی خود را همانند زیر وارد کنید.
گرفتن UserID
اگر شما میخواهید user id را دریافت کنید، با استفاده از یوزری که ساختید یک پیغام به bot ارسال کنید، سپس صفحه وب تان را یکبار reload کنید که user id برای شما نمایش داده شود. (در اینجا ID یوزر ما "111600348" میباشد)
id که در بالا به شما نمایش داد منحصر به bot ی میباشد که شما ایجاد کردید. در اینجا ما یک کانال داریم و قصد داریم پیغام های زبیکس را به کانال مان ارسال کنیم، همانطور که در مراحل قبلی هم گفته شد یوزری که برای bot مان ایجاد کردیم را به عنوان ادمین به کانالی که درست کردیم اضافه میکنیم و یک پیغام تستی به کانال مان ارسال میکنیم سپس صفحه وب که در بالا به آن اشاره کردیم را reload میکنیم تا user id مخصوص کانال را همانند بالا برای ما نمایش دهد.
تست ارتباط Zabbix با Telegram
به جهت اینکه متوجه بشیم سرور زبیکس مان با تلگرام Integrate شده و پیغام ها و آلارم ها را به سمت گروه یا کانال در تلگرام ارسال میکنید یا نه، میتوانیم با استفاده از اسکریپتی که نوشتیم به همراه id که به دست آوردیم این تست را انجام دهیم. برای این کار دستور telegram_notification.py 111600348 title body را اجرا کرده، به جای title عنوان پیغام باید نوشته شود و به جای body هم متن پیغام نوشته شود.
برای مثال :
اگر همه چیز اوکی باشد باید پیغامی که از سمت سرور به سمت bot تلگرام ارسال کردید را در چت تلگرام تان مشاهده کنید.
تنظیمات Media Type
از طریق منوی Administration, Media types روی دکمه Create media type کلیک کنید. در قسمت Name یک نام دلخواه وارد میکنیم. بخش Type را بر روی گزینه Script تنظیم میکنیم. در قسمت Script name نام اسکریپتی که ساختیم را وارد میکنیم، سپس روی دکمه Add کلیک میکنیم.
اگر از zabbix 3.0.1 به بعد استفاده میکنید، این پارامترها را هم به بخش Script parameters اضافه کنید. (همانند بالا)
تنظیمات Actions
اینترفیس Web زبیکس را باز کنید، سپس به منوی Configuration, Actions رفته و بر روی Creat Action کلیک کنید.
در تب Action
Name : نامی دلخواه برای action مان وارد میکنیم.
New condition : این بخش را روی Host گذاشته و از طریق دکمه select هاست مورد نظری که قرار هست مانیتور شود و اطلاعات آن به کانال/گروه تلگرام ارسال شود را انتخاب میکنیم و روی دکمه Add کلیک میکنیم. (این بخش را به دلخواه خود میتوانید تنظیم کنید و اگر نیاز هست میتوانید یک Host group انتخاب کنید که گروهی از هاست ها را برای شما مانیتور کند)
در تب Operations
Default subject :
کد زیر را در این بخش کپی کنید.
Default message :
محتویات این بخش را حذف کنید و کدهای زیر را در آن کپی کنید.
فیلد Subject و Message باید به صورتی که شما نیاز دارید تنظیم شود. همچنین این قسمت تگ HTML را نیز ساپورت میکند.
بر روی دکمه New در بخش Operations Steps جهت انجام تنظیمات ارسال پیغام ها که به چه افرادی و از چه طریقی فرستاده شود کلیک کنید.
در بخش Operation details در قسمت Send to User groups ما میتوانیم گروهی که قصد داریم پیغام ها و آلارم ها و ... به آنها ارسال شود را انتخاب کنیم و در قسمت Send to Users هم ما میتوانیم فقط یوزر هایی که باید به آنها پیغام ها و ... ارسال شود را انتخاب کنیم. این بخش اختیاری میباشد و به دلخواه خود میتوانید تنظیم کنید که پیغام ها و هشدارها به گروه ارسال شود یا به یک یوزر خاص. در اینجا من گروهی ایجاد کردم که چند تا یوزر در آن گروه قرار دادم و از قسمت Send to User groups تعیین میکنم که هشدارها و پیغام های من به این گروهی که مد نظرم هست ارسال بشود.
برای اضافه کردن یک گروه بر روی دکمه Add از قسمت Send to User groups کلیک کنید و از پنجره باز شده (پنجره User groups) گروه کاربری خود را انتخاب کنید. در این آموزش من گروه کاربری Zabbix administrators را انتخاب کردم.
از بخش Send only to هم گزینه telegram_notification که در مراحل قبل از تب Media ایجاد کردیم را انتخاب میکنیم که هشدارها و پیغام های مورد نظرمان را از طریق این مدیا به اطلاع کاربران برساند.
در آخر بر روی دکمه Add کلیک کنید که تنظیمات Action که ایجاد کردیم ساخته شود.
تنظیمات Users
آخرین مرحله تنظیم کردن اینکه چه کسی alert ها را دریافت کند، میباشد. به منوی Administration و Users رفته سپس یوزری که مد نظر شماست که پیغام ها و آلارم ها را دریافت کند انتخاب کنید. سپس به منوی Media رفته و بر روی Add کلیک کنید.
از پنجره باز شده ( پنجره Media) در قسمت Type نوع مدیایی که قرار هست از طریق آن آلارم ها و هشدارها ارسال شود را انتخاب میکنیم. (مدیای telegram_notification را که در مراحل قبل ایجاد کردیم را انتخاب کنید). در قسمت Send to باید Telegram ID که در مراحل قبل ایجاد کردیم را وارد کنیم. (در این مثال آیدی تلگرام ما 111600348 بود). در بخش Use if severity میتوانید تعیین کنید که چه نوع از هشدارها برای یوزر مد نظرتان ارسال شود. هر کدام را که نمیخواهید تیک آنرا بردارید و به دلخواه تنظیمات خود را انجام دهید سپس روی دکمه Add کلیک کنید.
بر روی دکمه Update کلیک کنید تا تغییراتی که اضافه کردید اعمال شود.
کار به اتمام رسیده است. کافیست منتظر بمانید یکی از Alert های زبیکس فعال شود و آن پیغام/هشدار را سرور زبیکس به کانال/گروه تلگرام که تعیین کردیم ارسال شود. در اینجا چند نمونه هشدار که از طرف سرور zabbix من به ربات تلگرامی که ایجاد کردم ارسال شده، را مشاهده میکنید.
شما میتوانید پیغام ها را به دلخواه خود تنظیم کنید که چه مقدار از متن هشدار به کانال یا گروه تلگرام تان ارسال شود. براتون آرزوی موفقیت دارم امیدوارم آموزش مفید واقع شده باشد. همچنان با ما باشید.
در مقاله قبلی نحوه ارتباط زبیکس با تلگرام را توضیح دادیم، در این مقاله قصد داریم به صورت مفصل و با جزئییات بیشتری این آموزش را توضیح دهیم. برای شروع ما ابتدا نیاز داریم ماژول request برای python را نصب کنیم. روی سرور زبیکس مان جهت ارتباط با Telegram ابزار pip را با دستور زیر نصب می کنیم.
در توزیع های Debian/Ubuntu
کد PHP:
# apt-get install python-pip
در توزیع های CentOS/RHEL
ابتدا ریپازیتوری Epel را روی سرور خود فعال کنید. سپس دستور زیر را وارد کنید.
کد PHP:
# yum install python-pip
کد PHP:
# pip install pyTelegramBotAPI
توصیه میشود پکیج های security را همانند زیر نصب کنید.
کد PHP:
# pip install pyopenssl ndg-httpsclient pyasn1
کد PHP:
# pip install -U requests
طریقه نصب Pip از Source
در صورتی که قصد دارید pip از source نصب کنید همانند زیر اقدام کنید.
کد PHP:
# git clone https://github.com/eternnoir/pyTelegramBotAPI.git
# cd pyTelegramBotAPI
# python setup.py install
همچنین توصیه میشود مطالعه کنید :
آموزش نصب آخرین ورژن مانیتورینگ زبیکس
آموزش نصب و راه اندازی Zabbix 3 در RedHat/CentOS
آموزش نصب و راه اندازی Zabbix 3 در Debian/Ubuntu
Zabbix چیست ؟
آموزش نصب ایجنت زبیکس در ویندوز
آموزش نصب ایجنت زبیکس در لینوکس
نحوه ارسال ایمیل هشدار به Gmail در زبیکس
مانیتورینگ دیتابیس Oracle در Zabbix
سوالات مربوط به زبیکس
ساخت Bot در Telegram
برای ساخت یک بات در تلگرام باید از طریق ربات @BotFather اقدام کنید. در ابتدا باید برای bot که قصد داریم ایجاد کنیم یک اسم انتخاب کنیم. برای این کار باید دستور /newbot را از طریق BotFather اجرا کنیم، سپس از شما یک نام برای بات ایجاد شده میخواهد، یک نام مناسب برای خود انتخاب کنید. (در این مثال linuxzone_forums میباشد)
کد PHP:
/newbot
Alright, a new bot. How are we going to call it? Please choose a name for your bot.
linuxzone_forums
کد PHP:
Good. Now let's choose a username for your bot. It must end in `bot`. Like this, for example: TetrisBot or tetris_bot.
userlinuxzone_bot
Done! Congratulations on your new bot. You will find it at t.me/userlinuxzone_bot. You can now add a description, about section and profile picture for your bot, see /help for a list of commands. By the way, when you've finished creating your cool bot, ping our Bot Support if you want a better username for it. Just make sure the bot is fully operational before you do this.
Use this token to access the HTTP API:
413051254:AAE2BMWsPIKADhrUBZqVuBXr5LWEWNqb_4E
For a description of the Bot API, see this page: https://core.telegram.org/bots/api
کد PHP:
token: 413051254:AAE2BMWsPIKADhrUBZqVuBXr5LWEWNqb_4E
نکته : اگر قصد دارید bot را در یک گروه استفاده کنید باید قبل از تست آنرا به گروه add کنید. برای اضافه کردن bot به یک کانال باید بات را به عنوان یک addministrator اضافه کنید.
هماهنگی Zabbix با Telegram
با استفاده از دستور cat در سرور زبیکس مان مسیر دایرکتوری Alert را پیدا کنید. در اینجا "/usr/lib/zabbix/alertscripts" میباشد.
کد PHP:
cat /etc/zabbix/zabbix_server.conf | grep AlertScriptsPath
### Option: AlertScriptsPath
# AlertScriptsPath=${datadir}/zabbix/alertscripts
AlertScriptsPath=/usr/lib/zabbix/alertscripts
کد PHP:
# cd /usr/lib/zabbix/alertscripts/
# vim telegram_notification.py
کد PHP:
#!/usr/bin/env python
import telebot,sys
BOT_TOKEN='413051254:AAE2BMWsPIKADhrUBZqVuBXr5LWEWNqb_4E'
DESTINATION=sys.argv[1]
SUBJECT=sys.argv[2]
MESSAGE=sys.argv[3]
MESSAGE = MESSAGE.replace('/n','\n')
tb = telebot.TeleBot(BOT_TOKEN)
tb.send_message(DESTINATION,SUBJECT + '\n' + MESSAGE, disable_web_page_preview=True, parse_mode='HTML')
کد PHP:
# chown -R zabbix telegram_notification.py
# chmod +x telegram_notification.py
تنظیمات Telegram ID
تلگرام برای ارسال پیغام ها به "id" نیاز دارد. آسانترین راه برای گرفتن این id استفاده از bot ی میباشد که فقط شما ساخته اید.
از طریق مرورگرتان به آدرس https://api.telegram.org/bot"TokenID"/getUpdates بروید. به جای "TokenID" شماره آیدی خود را همانند زیر وارد کنید.
کد PHP:
https://api.telegram.org/bot413051254:AAE2BMWsPIKADhrUBZqVuBXr5LWEWNqb_4E/getUpdates
گرفتن UserID
اگر شما میخواهید user id را دریافت کنید، با استفاده از یوزری که ساختید یک پیغام به bot ارسال کنید، سپس صفحه وب تان را یکبار reload کنید که user id برای شما نمایش داده شود. (در اینجا ID یوزر ما "111600348" میباشد)
id که در بالا به شما نمایش داد منحصر به bot ی میباشد که شما ایجاد کردید. در اینجا ما یک کانال داریم و قصد داریم پیغام های زبیکس را به کانال مان ارسال کنیم، همانطور که در مراحل قبلی هم گفته شد یوزری که برای bot مان ایجاد کردیم را به عنوان ادمین به کانالی که درست کردیم اضافه میکنیم و یک پیغام تستی به کانال مان ارسال میکنیم سپس صفحه وب که در بالا به آن اشاره کردیم را reload میکنیم تا user id مخصوص کانال را همانند بالا برای ما نمایش دهد.
تست ارتباط Zabbix با Telegram
به جهت اینکه متوجه بشیم سرور زبیکس مان با تلگرام Integrate شده و پیغام ها و آلارم ها را به سمت گروه یا کانال در تلگرام ارسال میکنید یا نه، میتوانیم با استفاده از اسکریپتی که نوشتیم به همراه id که به دست آوردیم این تست را انجام دهیم. برای این کار دستور telegram_notification.py 111600348 title body را اجرا کرده، به جای title عنوان پیغام باید نوشته شود و به جای body هم متن پیغام نوشته شود.
برای مثال :
کد PHP:
# ./telegram_notification.py 111600348 Test "Mail Server is Down"
تنظیمات Media Type
از طریق منوی Administration, Media types روی دکمه Create media type کلیک کنید. در قسمت Name یک نام دلخواه وارد میکنیم. بخش Type را بر روی گزینه Script تنظیم میکنیم. در قسمت Script name نام اسکریپتی که ساختیم را وارد میکنیم، سپس روی دکمه Add کلیک میکنیم.
اگر از zabbix 3.0.1 به بعد استفاده میکنید، این پارامترها را هم به بخش Script parameters اضافه کنید. (همانند بالا)
کد:
{ALERT.SENDTO} {ALERT.SUBJECT} {ALERT.MESSAGE}
تنظیمات Actions
اینترفیس Web زبیکس را باز کنید، سپس به منوی Configuration, Actions رفته و بر روی Creat Action کلیک کنید.
در تب Action
Name : نامی دلخواه برای action مان وارد میکنیم.
New condition : این بخش را روی Host گذاشته و از طریق دکمه select هاست مورد نظری که قرار هست مانیتور شود و اطلاعات آن به کانال/گروه تلگرام ارسال شود را انتخاب میکنیم و روی دکمه Add کلیک میکنیم. (این بخش را به دلخواه خود میتوانید تنظیم کنید و اگر نیاز هست میتوانید یک Host group انتخاب کنید که گروهی از هاست ها را برای شما مانیتور کند)
در تب Operations
Default subject :
کد زیر را در این بخش کپی کنید.
کد:
{HOSTNAME}: {TRIGGER.NAME} {TRIGGER.STATUS}
محتویات این بخش را حذف کنید و کدهای زیر را در آن کپی کنید.
کد:
Value: {ITEM.VALUE} {TRIGGER.STATUS} Date: {EVENT.DATE} Time: {EVENT.TIME}
فیلد Subject و Message باید به صورتی که شما نیاز دارید تنظیم شود. همچنین این قسمت تگ HTML را نیز ساپورت میکند.
کد PHP:
<b>bold</b>, <strong>bold</strong>
<i>italic</i>, <em>italic</em>
<a href="URL">inline URL</a>
<code>inline fixed-width code</code>
<pre>pre-formatted fixed-width code block</pre>
در بخش Operation details در قسمت Send to User groups ما میتوانیم گروهی که قصد داریم پیغام ها و آلارم ها و ... به آنها ارسال شود را انتخاب کنیم و در قسمت Send to Users هم ما میتوانیم فقط یوزر هایی که باید به آنها پیغام ها و ... ارسال شود را انتخاب کنیم. این بخش اختیاری میباشد و به دلخواه خود میتوانید تنظیم کنید که پیغام ها و هشدارها به گروه ارسال شود یا به یک یوزر خاص. در اینجا من گروهی ایجاد کردم که چند تا یوزر در آن گروه قرار دادم و از قسمت Send to User groups تعیین میکنم که هشدارها و پیغام های من به این گروهی که مد نظرم هست ارسال بشود.
برای اضافه کردن یک گروه بر روی دکمه Add از قسمت Send to User groups کلیک کنید و از پنجره باز شده (پنجره User groups) گروه کاربری خود را انتخاب کنید. در این آموزش من گروه کاربری Zabbix administrators را انتخاب کردم.
از بخش Send only to هم گزینه telegram_notification که در مراحل قبل از تب Media ایجاد کردیم را انتخاب میکنیم که هشدارها و پیغام های مورد نظرمان را از طریق این مدیا به اطلاع کاربران برساند.
در آخر بر روی دکمه Add کلیک کنید که تنظیمات Action که ایجاد کردیم ساخته شود.
تنظیمات Users
آخرین مرحله تنظیم کردن اینکه چه کسی alert ها را دریافت کند، میباشد. به منوی Administration و Users رفته سپس یوزری که مد نظر شماست که پیغام ها و آلارم ها را دریافت کند انتخاب کنید. سپس به منوی Media رفته و بر روی Add کلیک کنید.
از پنجره باز شده ( پنجره Media) در قسمت Type نوع مدیایی که قرار هست از طریق آن آلارم ها و هشدارها ارسال شود را انتخاب میکنیم. (مدیای telegram_notification را که در مراحل قبل ایجاد کردیم را انتخاب کنید). در قسمت Send to باید Telegram ID که در مراحل قبل ایجاد کردیم را وارد کنیم. (در این مثال آیدی تلگرام ما 111600348 بود). در بخش Use if severity میتوانید تعیین کنید که چه نوع از هشدارها برای یوزر مد نظرتان ارسال شود. هر کدام را که نمیخواهید تیک آنرا بردارید و به دلخواه تنظیمات خود را انجام دهید سپس روی دکمه Add کلیک کنید.
بر روی دکمه Update کلیک کنید تا تغییراتی که اضافه کردید اعمال شود.
کار به اتمام رسیده است. کافیست منتظر بمانید یکی از Alert های زبیکس فعال شود و آن پیغام/هشدار را سرور زبیکس به کانال/گروه تلگرام که تعیین کردیم ارسال شود. در اینجا چند نمونه هشدار که از طرف سرور zabbix من به ربات تلگرامی که ایجاد کردم ارسال شده، را مشاهده میکنید.
شما میتوانید پیغام ها را به دلخواه خود تنظیم کنید که چه مقدار از متن هشدار به کانال یا گروه تلگرام تان ارسال شود. براتون آرزوی موفقیت دارم امیدوارم آموزش مفید واقع شده باشد. همچنان با ما باشید.
کامنت