[原创] zabbix学习之旅六:如何解决zabbix server在内网,而邮件发送服务器在外网的问题

时间:2023-08-31 12:36:56

  通过前面的文章,你已经可以快速地搭建一个报警系统,并能正常的收到报警邮件了。不过在很多企业级环境下,邮件发送服务器往往放在外网,而zabbix server放置在内网,在这种情况下,zabbix的报警信息又如何能传送给邮件发送服务器呢?

  其实也很简单,方法也很多,这里给出一个我们在实际生产环境中的例子,大致的流程是:

  1. 请求网络组的同事将邮件发送服务器的22端口开放给内网的zabbix机器;
  2. 前面提到的server报警脚本需要做改造,将报警信息封装成一个时间戳文件;
  3. 利用scp命令将时间戳文件传送给邮件发送服务器,为避免登录密码,需要在server端生成免登录证书信息,并将公钥给邮件发送服务器;
  4. server发送完后删除时间戳文件;
  5. 邮件发送服务器专门开辟一个路径存放传送过来的时间戳文件;
  6. 邮件发送服务器上,用java或python等你熟悉的语言写一个小程序,可以解析时间戳文件,并调用Mutt进行邮件发送;
  7. 邮件发送服务器上,用crontab设置一个1分钟的定时调用,调用小程序处理时间戳文件。

  具体做法如下:

  • 改造notification.sh
#!/bin/bash

CURRENT_TIME=`date '+%s'`
MAILPATH=/usr/local/zabbix/share/zabbix/alertscripts #step make the mail file
echo to=$ >> $MAILPATH/$CURRENT_TIME.txt
echo subject="$2" >> $MAILPATH/$CURRENT_TIME.txt
echo content="$3" >> $MAILPATH/$CURRENT_TIME.txt #step send the file
scp $MAILPATH/$CURRENT_TIME.txt zabbix@192.9.199.13:/home/zabbix/mails/ #step 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
*/ * * * * nohup java -jar /home/zabbix/notificationParse.jar &

  解析报警文件这块内容实现因人而异,就不再详述。