[原创] zabbix学习之旅六:如何解决zabbix server在内网,而邮件发送服务器在外网的问题
通过前面的文章,你已经可以快速地搭建一个报警系统,并能正常的收到报警邮件了。不过在很多企业级环境下,邮件发送服务器往往放在外网,而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 &
解析报警文件这块内容实现因人而异,就不再详述。