Zabbix 通過smtp 郵件報警


Zabbix郵件報警

我們通過zabbix設置了監控項,觸發器,最終就是要監控某一項達到報警的作用,下面是通過發送郵件報警的方式。

web頁面設置報警媒介

 

給Admin用戶添加報警媒介

 

服務器報警配置

兩個腳本:
第一個是zabbix調用的發送郵件的腳本. 他會調用第二個腳本去發送郵件.(Media types的script name:)

[root@zabbix01 ~]# cat /usr/lib/zabbix/alertscripts/sendemail.sh 
#!/bin/bash
SMTP_server='smtp.163.com'    # SMTP服務器
username='xxxx@163.com'     # 用戶名
password='xxxxxxxx'             # 密碼
from_email_address='xxxx@163.com' # 發件人Email地址
to_email_address="$1"               # 收件人Email地址,zabbix傳入的第一個參數
message_subject_utf8="$2"           # 郵件標題,zabbix傳入的第二個參數
message_body_utf8="$3"              # 郵件內容,zabbix傳入的第三個參數
# 轉換郵件標題為GB2312,解決郵件標題含有中文,收到郵件顯示亂碼的問題。
message_subject_gb2312=`iconv -t GB2312 -f UTF-8 << EOF
$message_subject_utf8
EOF`
[ $? -eq 0 ] && message_subject="$message_subject_gb2312" || message_subject="$message_subject_utf8"
# 轉換郵件內容為GB2312
message_body_gb2312=`iconv -t GB2312 -f UTF-8 << EOF
$message_body_utf8
EOF`
[ $? -eq 0 ] && message_body="$message_body_gb2312" || message_body="$message_body_utf8"
# 發送郵件
sendEmail='/usr/bin/sendEmail'
$sendEmail -s "$SMTP_server" -xu "$username" -xp "$password" -f "$from_email_address" -t "$to_email_address" -u "$message_subject" -m "$message_body" -o message-content-type=text -o message-charset=gb2312
echo "`date +"%F %T"` send to $to_email_address" >> /tmp/send.log


第二個是perl 寫的sendemail專門用來通過smtp發送郵件的(對應第一個腳本中發送郵件的sendEmail)

#下載並解壓
wget http://caspian.dotconf.net/menu/Software/SendEmail/sendEmail-v1.56.tar.gz
tar xvf sendEmail-v1.56.tar.gz
#把sendEmail復制到指定目錄 並修改權限
cd sendEmail-v1.56
cp sendEmail /usr/bin/
chmod +x /usr/bin/sendEmail

上述兩步完成后,可以先測試能否成功發送郵件

/usr/lib/zabbix/alertscripts/sendemail.sh 279790279@qq.com zabbixtest "blaze test email"

另外需要注意的是,server端的配置文件需要配置好執行腳本的路徑(跟我們存放腳本文件的目錄需要一致)

vim /etc/zabbix/zabbix_server.conf

...
AlertScriptsPath=/usr/lib/zabbix/alertscripts

測試發送郵件可能會出現perl版本不兼容的情況,需要在sendemail.sh發送郵件的時候添加個參數

錯誤:

*******************************************************************
 Using the default of SSL_verify_mode of SSL_VERIFY_NONE for client
 is deprecated! Please set SSL_verify_mode to SSL_VERIFY_PEER
 together with SSL_ca_file|SSL_ca_path for verification.
 If you really don't want to verify the certificate and keep the
 connection open to Man-In-The-Middle attacks please set
 SSL_verify_mode explicitly to SSL_VERIFY_NONE in your application.
*******************************************************************
  at /usr/bin/sendEmail line 1906.
invalid SSL_version specified at /usr/share/perl5/vendor_perl/IO/Socket/SSL.pm line 415.

解決:

$sendEmail -s "$SMTP_server" -xu "$username" -xp "$password" -f "$from_email_address" -t "$to_email_address" -u "$message_subject" -m "$message_body" -o tls=no message-content-type=text -o message-charset=gb2312
echo "`date +"%F %T"` send to $to_email_address" >> /tmp/send.log

 也可能會有授權錯誤:

Mar 20 16:37:19 rsjxqyf03 sendEmail[24611]: ERROR => ERROR => SMTP-AUTH: Authentication to smtp.163.com:25 failed.

檢查郵箱是否開啟smtp功能(默認是關閉的),用戶名密碼是否正確,如果都正確,可嘗試將腳本一的郵箱密碼改為授權碼,如何獲得授權碼請自行百度。

 

觸發報警的動作

以上兩步完成以后,我們需要設置觸發報警的動作

添加好了動作,可以將大文件拷貝進機器的根目錄,觸發觸發器,即可發送郵件了。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM