一.本人實驗環境
前提是已經安裝好zabbix,可以在web界面登錄:http://192.168.239.128/zabbix/
192.168.239.128 zabbix-server
192.168.239.141 zabbix-agent(安裝httpd服務,yum install -y httpd,后面要用到所以提前准備好)
二.實驗步驟
2.1 在zabbix的web主界面中,點擊Configuration,下面有Hosts,你可以點擊Create host,把192.168.239.141添加到主機中,也可以通過自動發現,自動注冊也可以添加上來。
2.2 為agent主機192.168.239.141添加applications(相當於是item的集合,可以對監控項進行分類監控),隨后創建Items,如下圖所示。這里注意的問題是Key很關鍵(附上參考博客https://www.cnblogs.com/losbyday/articles/5836688.html)
2.3 添加觸發器,讓觸發器表達式的最近一次查詢數據為0時,觸發報警。
2.4 創建Graph圖形,方便檢測,主要是因為item項key,是布爾值,1表示httpd服務正常,0表示httpd已經停止。
2.5 因為要發送報警(涉及到Media tyep那種類型,那個用戶User,還有動作),還要設置Media type,這里我以QQ郵箱為主,發送報警,還可以設置為腳本報警。SMTP server:填QQ的SMTP服務器地址,端口是465,認證選擇為SSL/TLS,用戶名填寫郵箱地址,Password填寫授權碼,不是自己的郵箱密碼,別填錯了,還要在QQ郵箱開啟那倆個服務,POP3/SMTP服務,IMAP/SMTP服務 。確保已經開啟
2.6 創建一個新用戶,用以發送郵件,還應該注意權限問題,我就是卡在了權限上,導致郵箱收不到郵件,之后測試過驗證了把權限換成其他權限,無法成功發送郵件。
2.7 創建動作actions,發送報警郵件,以及故障接觸時發送郵件。
2.8 可以模擬一個場景,在agent端192.168.239.141機器上,手動把httpd服務停掉,就會觸發報警,等待幾分鍾后,然后又手動重啟。可以收到兩封郵件。
出問題是發的郵件
問題解決時發的郵件
結束語:到這里郵件發送就結束了(看你是否可以發送成功)
還有一個方式是CentOS7 Zabbix郵件報警,通過QQ郵件發送郵件的問題解決方案
第二種方式是以寫腳本的方式發送郵件
如何通過shell腳本實現zabbix發送告警郵件,共有5步
1.設置mailx賬號:是配置mailx的發信賬號
2.zabbix服務器端編寫郵件發送腳本:是增加zabbix的告警方式,增加通過sendmail.sh腳本方式調用mailx工具
3.zabbix后台配置shell郵件告警方式:是配置zabbix的告警方式,通過郵箱、短信、還是腳本方式等
4.配置用戶的郵箱地址:是配置誰來接收告警郵件
5.定義action:是達到觸發條件時,誰接收告警郵件、通過怎樣的告警方式
網上都是設置的網易郵箱,我就拿QQ郵箱來實驗,因為在博客上看到說QQ郵箱限制比較大,網上截圖如下:
參考博客:https://blog.csdn.net/liangpingguo/article/details/79804285
我自己親自試過
這是我mail.rc中的添加的幾行
set nss-config-dir=/etc/pki/nssdb/
set smtp-user-starttls
set ssl-verify=ignore
set from=1165656776@qq.com
set smtp=smtps://smtp.qq.com:465
set smtp-auth-user=1165656776@qq.com
set smtp-auth-password=*******(填你自己生成的驗證碼)
set smtp-auth=login
試着給自己發下郵件看是否成功
[root@zabbix-server alertscripts]# mail -v -s "theme" 1165656776@qq.com
nihao
eot ctrl +d鍵結束
EOT
Resolving host smtp.qq.com . . . done.
Connecting to 14.17.57.241:465 . . . connected.
Comparing DNS name: "pop.qq.com"
Comparing DNS name: "dav.qq.com"
Comparing DNS name: "ex.qq.com"
Comparing DNS name: "smtp.qq.com"
SSL parameters: cipher=AES-128, keysize=128, secretkeysize=128,
issuer=CN=GeoTrust RSA CA 2018,OU=www.digicert.com,O=DigiCert Inc,C=US
subject=CN=pop.qq.com,OU=R&D,O=Tencent Technology (Shenzhen) Company Limited,L=Shenzhen,ST=Guangdong,C=CN
220 smtp.qq.com Esmtp QQ Mail Server
>>> EHLO zabbix-server
250-smtp.qq.com
250-PIPELINING
250-SIZE 73400320
250-AUTH LOGIN PLAIN
250-AUTH=LOGIN
250-MAILCOMPRESS
250 8BITMIME
>>> AUTH LOGIN
334 VXNlcm5hbWU6
>>> MTE2NTY1Njc3NkBxcS5jb20=
334 UGFzc3dvcmQ6
>>> ZXZmenRicnVqeXR4aWVhZw==
235 Authentication successful
>>> MAIL FROM:<1165656776@qq.com>
250 Ok
>>> RCPT TO:<1165656776@qq.com>
250 Ok
>>> DATA
354 End data with <CR><LF>.<CR><LF>
>>> .
250 Ok: queued as
>>> QUIT
221 Bye
成功發送,郵件里多一封,所以證明可以實現,很成功。
2.寫腳本,首先進入到zabbix默認放腳本的地方 cd /usr/lib/zabbix/alertscripts
創建一個shell腳本,名稱為sendmail.sh,內容可參考上面的博客
更改屬主及賦予可執行權限
測試郵件發送腳本
ok,很完美,成功。
然后在zabbix的文本界面
Administration–>Media types–>Create media type:
管理–>報警媒介類型–>創建媒體類型 ,創建完成,指定用戶,動作。跟上面一樣。
三.遠程執行命令
3.1首先我們需要在zabbix客戶配置文件開啟對遠程命令的支持,編輯zabbix_agentd.conf,修改
EnableRemoteCommands=1
重啟客戶端
備注:Aive zabbix不支持遠程命令
確保你的zabbix用戶有執行權限,如果某些命令需要root權限,那么請使用sudo
修改zabbix用戶的執行權限
# visudo或者 vim /etc/sudoers
zabbix ALL=NOPASSWD:ALL(成功實現)但是因為我的httpd服務是yum安裝的,所以這塊我寫的給它所有的權限。
zabbix ALL=NOPASSWD:/etc/init.d/httpd start(我的沒有實現,下來我在研究研究),你們可以試試
可以提前在server端可以測試
中間出現報錯,百度查了下問題解決。參考博客:https://www.cnblogs.com/cainiaoit/p/8631813.html
大體意思是通過ps -ef | grep zabbix_agentd,查到相關進程,殺掉kill -9 PID號,重啟zabbix_agent服務。ok問題解決,可以通過zabbix_get 命令測試,看是否可以查詢到agent的數據。
可以在agent端測試,嘗試手動關閉httpd服務,看是否可以使用配置的遠程命令自動啟動起來。
在生產環境中,這種案例比較多,可以先使用遠程命令嘗試啟動服務或者其他命令,如果問題真的解決不了,可以發報警,人工干預解決問題。