通過前面的文章,你已經可以快速地搭建一個報警系統,並能正常的收到報警郵件了。不過在很多企業級環境下,郵件發送服務器往往放在外網,而zabbix server放置在內網,在這種情況下,zabbix的報警信息又如何能傳送給郵件發送服務器呢?
其實也很簡單,方法也很多,這里給出一個我們在實際生產環境中的例子,大致的流程是:
- 請求網絡組的同事將郵件發送服務器的22端口開放給內網的zabbix機器;
- 前面提到的server報警腳本需要做改造,將報警信息封裝成一個時間戳文件;
- 利用scp命令將時間戳文件傳送給郵件發送服務器,為避免登錄密碼,需要在server端生成免登錄證書信息,並將公鑰給郵件發送服務器;
- server發送完后刪除時間戳文件;
- 郵件發送服務器專門開辟一個路徑存放傳送過來的時間戳文件;
- 郵件發送服務器上,用java或python等你熟悉的語言寫一個小程序,可以解析時間戳文件,並調用Mutt進行郵件發送;
- 郵件發送服務器上,用crontab設置一個1分鍾的定時調用,調用小程序處理時間戳文件。
具體做法如下:
- 改造notification.sh
#!/bin/bash CURRENT_TIME=`date '+%s'` MAILPATH=/usr/local/zabbix/share/zabbix/alertscripts #step 1 make the mail file echo to=$1 >> $MAILPATH/$CURRENT_TIME.txt echo subject="$2" >> $MAILPATH/$CURRENT_TIME.txt echo content="$3" >> $MAILPATH/$CURRENT_TIME.txt #step 2 send the file scp $MAILPATH/$CURRENT_TIME.txt zabbix@192.9.199.13:/home/zabbix/mails/ #step 3 rm the file rm -f $MAILPATH/$CURRENT_TIME.txt
- 配置ssh免登錄,先在郵件發送服務器上執行如下動作
groupadd zabbix
useradd -g zabbix zabbix
su - zabbix ssh-keygen #安裝提示一步步敲回車生成證書信息 cd ~/.ssh touch authorized_keys cat id_rsa.pub >> authorized_keys
同樣的方法在zabbix server上執行一次,再將zabbix server的公鑰信息拷貝至郵件發送服務器
scp ~/.ssh/id_rsa.pub zabbix@192.9.199.13:~/ #進入郵件發送服務器 ssh 192.9.199.13 cat ~/id_rsa.pub >> ~/.ssh/authorized_keys
至此,報警文件即可免登錄發送至郵件發送服務器。
在郵件發送服務器設置定時調用
crontab -e */1 * * * * nohup java -jar /home/zabbix/notificationParse.jar &
解析報警文件這塊內容實現因人而異,就不再詳述。