首頁 > 軟體

搭建zabbix監控以及郵件報警的超級詳細教學

2022-07-11 18:04:28

一、zabbix

1.1 簡介

zabbix 是一款開源的功能強大的分散式監控系統,一個基於WEB介面的提供分散式系統監視以及網路監視功能的企業級的開源解決方案。

zabbix server可以通過SNMP,zabbix agent,ping,埠監視等方法提供對遠端伺服器/網路狀態的監視。

zabbix是由2部分構成,分別是zabbix server(監控端)與zabbix agent(被監控端)。

1.2 zabbix主要功能

  • CPU負荷
  • 記憶體使用
  • 磁碟使用
  • 網路狀況
  • 埠監視
  • 紀錄檔監視

1.3 zabbix的主要特點

  • 安裝與設定簡單,學習成本低
  • 支援多語言(包括中文)
  • 免費開源
  • 自動發現伺服器與網路裝置
  • 分散式監視以及WEB集中管理功能
  • 可以無agent監視
  • 使用者安全認證和柔軟的授權方式
  • 通過WEB介面設定或檢視監視結果
  • email等通知功能

1.4 zabbix元件

  • zabbix server:負責接收agent傳送的報告資訊的核心元件,所有設定,統計資料及運算元據均由其組織進行
  • zabbix database:使用者儲存所有設定資訊,以及儲存由zabbix server收集到的資料
  • zabbix web:zabbix的interface介面,通常與Server執行在同一臺主機上
  • zabbix agent:部署在被監控主機上,負責收集本地資料發往server端或proxy端
  • zabbix proxy:常用於分佈監控環境中,代理Server收集部分被監控的監控資料並統一發往Server端(通常大於500臺主機才需要使用)

1.5 zabbix原理

zabbix agent安裝在被監控的主機上,負責定期收集被監控端的本地各項資料,並行送至zabbix server端,zabbix server收到資料,將資料儲存到資料庫( zabbix database)中,使用者基於zabbix web的視覺化介面可以看到前端資料影象。當zabbix監控某個具體的專案時,該專案會設定一個觸發器閾值,當被監控的指標超過該觸發器設定的閾值,會進行一些必要的動作,動作包括:傳送資訊(郵件、微信、簡訊)、傳送命令(SHELL 命令、Reboot、Restart、Install等)。

二、基於LNMP環境搭建zabbix監控

zabbix server(監控端)

2.1 安裝nginx

systemctl stop firewalld.service           #關閉防火牆及核心安全機制
setenforce 0

vim /etc/yum.repos.d/nginx.repo        #建立nginx的yum倉庫

[nginx]
name=nginx
baseurl=http://nginx.org/packages/centos/7/$basearch/
gpgcheck=0
enabled=1

yum clean all
yum list

yum install -y nginx

systemctl start nginx
systemctl enable nginx
netstat -natp | grep 80

2.2 安裝mariadb

yum -y install mariadb-server mariadb
systemctl start mariadb.service
systemctl enable mariadb.service
netstat -natp | grep 3306

mysql_secure_installation
Enter current password for root (enter for none):			#回車
Set root password? [Y/n]									#Y
New password:												#123456
Re-enter new password:										#123456
Remove anonymous users?										#n
Disallow root login remotely?								#n
Remove test database and access to it?						#n
Reload privilege tables now?								#Y

登入驗證

mysql -u root -p123456
exit

2.3 安裝php

yum -y install epel-release.noarch
rpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm		#yum源的建立
yum install -y php72w php72w-devel php72w-fpm php72w-gd php72w-mbstring php72w-mysql			#安裝環境依賴包
php -v					#檢視版本

2.4 修改php-fpm組態檔

vim /etc/php-fpm.d/www.conf

user = nginx	     #第8行
group = nginx	     #第10行

2.5 修改nginx組態檔支援PHP並修改php組態檔

    index  index.php index.html index.htm;		#第10行新增index.php
 
    location ~ .php$ {                                                  #設定php模組,去掉註釋
        root           /usr/share/nginx/html;
        fastcgi_pass   127.0.0.1:9000;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
        include        fastcgi_params;
    }

vim /etc/php.ini

short_open_tag = On    		 		 #202行修改,支援php短標籤
expose_php  = Off 		 			 #359行修改,隱藏php版本

##為PHP相容zabbix進行修改,優化設定要求
max_execution_time = 300				 #368行修改,執行時間
max_input_time = 300					 #378行修改,接收資料等待時向
memory_limit = 128M 					 #389行,每個指令碼佔用記憶體
post_max_size = 16M 					 #656行修改,POST資料大小
upload_max_filesize = 2M 				 #799行,下載檔案大小
always_populate_raw_post_data = -1   	 #800行新增,可以用$HTTP_RAW_POST DATA
date.timezone = Asia/Shanghai 	         #877行取消註釋並新增時區

開啟服務

systemctl start php-fpm
systemctl enable php-fpm
netstat -natp | grep 9000

systemctl restart nginx

2.6 測試網頁

vim /usr/share/nginx/html/info.php

<?php
     phpinfo();
?>

http://192.168.153.40/info.php

2.7 測試連線資料庫

vim /usr/share/nginx/html/test.php

<?php
 $link=mysqli_connect('127.0.0.1','root','123456');
 if ($link) echo "資料庫連線成功!";
 else echo "資料庫連線失敗~";
?>

http://192.168.153.40/test.php

2.8 建立資料庫及使用者並且授權

mysql -uroot -p123456

create database zabbix character set utf8 collate utf8_bin;

grant all privileges ON *.* TO 'zabbix'@'%' IDENTIFIED BY 'admin123';

flush privileges;

exit

2.9 測試連線zabbix資料庫

vim /usr/share/nginx/html/zabbix.php

<?php
  $link=mysqli_connect('127.0.0.1','zabbix' ,'admin123' );
  if ($link) echo "zabbix資料庫連線成功 !";
  else echo "zabbix資料庫連線失敗 !";
?>

http://192.168.153.40/zabbix.php

注:在連線zabbix資料庫失敗的解決辦法,刪除使用者名稱為空的主機即可

mysql -uroot -p123456

select user,host from mysql.user;
+--------+-----------+
| user   | host      |
+--------+-----------+
| zabbix | %         |
| root   | 127.0.0.1 |
| root   | ::1       |
|        | localhost |
| root   | localhost |
|        | wt        |
| root   | wt        |
+--------+-----------+
7 rows in set (0.00 sec)

drop user ''@localhost;
drop user ''@wt;
exit

重新整理重連

2.10 zabbix server部署

2.10.1下載zabbix源並安裝

rpm -i https://repo.zabbix.com/zabbix/4.0/rhel/7/x86_64/zabbix-release-4.0-1.el7.noarch.rpm
yum -y install zabbix-server-mysql zabbix-web-mysql zabbix-agent

2.10.2 匯入資料庫指令碼並驗證

zcat /usr/share/doc/zabbix-server-mysql*/create.sql.gz | mysql -uzabbix -padmin123 zabbix

mysql -u zabbix -padmin123
use zabbix;
show tables;
exit

2.10.3 修改zabbix組態檔

vim /etc/zabbix/zabbix_server.conf
LogFile=/var/log/zabbix/zabbix_server.log          #38行
LogFileSize=0        #49行
PidFile=/var/run/zabbix/zabbix_server.pid         #72行
SocketDir=/var/run/zabbix       #82行
DBHost=localhost                #91行,取消註釋
DBName=zabbix                   #100行
DBUser=zabbix                   #116行
DBPassword=admin123             #124行,取消註釋,zabbix資料庫的密碼
SNMPTrapperFile=/var/log/snmptrap/snmptrap.log     #356行
Timeout=4                                          #473行
AlertScriptsPath=/usr/lib/zabbix/alertscripts      #516行
ExternalScripts=/usr/lib/zabbix/externalscripts    #527行
LogSlowQueries=3000                                #563行
vim /etc/httpd/conf.d/zabbix.conf

php_value date.timezone Asia/Shanghai       #20行,修改時區

2.10.4授權

cp -r /usr/share/zabbix/ /usr/share/nginx/html/
chown -R zabbix:zabbix /etc/zabbix/
chown -R zabbix:zabbix /usr/share/nginx/
chown -R zabbix:zabbix /usr/lib/zabbix/
chmod -R 755 /etc/zabbix/web/
chmod -R 777 /var/lib/php/session/

2.10.5 開啟服務

systemctl start zabbix-server
systemctl enable zabbix-server
systemctl start zabbix-agent.service
systemctl enable zabbix-agent.service
netstat -ntap | grep 10051
systemctl restart php-fpm.service
systemctl restart nginx

http://192.168.153.40/zabbix/setup.php

2.10.6 瀏覽器存取測試

http://192.168.153.40/zabbix
賬號:Admin    密碼:zabbix

zabbix-agent端

①關閉防火牆和核心防護機制

systemctl stop firewalld
setenforce 0

②部署zabbix-agent

rpm -i https://repo.zabbix.com/zabbix/4.0/rhel/7/x86_64/zabbix-release-4.0-1.el7.noarch.rpm
yum install -y zabbix-agent

③修改組態檔

PidFile=/var/run/zabbix/zabbix_agentd.pid   #13行
LogFile=/var/log/zabbix/zabbix_agentd.log   #32行
LogFileSize=0                               #43行
Server=192.168.153.40						#98行修改,指向監控伺服器
ServerActive=192.168.153.40					#139行修改,指向監控伺服器
Hostname=test                			    #150行,指定名稱
Include=/etc/zabbix/zabbix_agentd.d/*.conf  #268行

④開啟服務並檢查埠

systemctl start zabbix-agent
systemctl enable zabbix-agent
netstat -natp | grep zabbix				#檢視10050埠

監控驗證(監控端)

如何切換成中文介面

新增被監控的主機

在zabbix圖形頁面——設定——主機——建立主機(定義主機名稱、新增群組、填寫被監控端主機IP地址)——模板——選定要監控的模板(httpd sshd服務)——選擇——新增(新增連線模板)——新增(新增主機)

三、郵件報警

3.1 zabbix監控端設定

yum -y install mailx

vim /etc/mail.rc
'//末尾新增'
set from=郵箱
set smtp=smtp.qq.com
set smtp-auth-user=郵箱
set smtp-auth-password=郵箱授權碼
set smtp-auth=login

測試下郵件是否可以傳送

echo "hello tomorrow" | mail -s "test" 郵箱

編寫郵件指令碼

cd /usr/lib/zabbix/alertscripts
vim mailx.sh
#!/bin/bash
#send mail
messages=`echo $3 | tr 'rn' 'n'`
subject=`echo $2 | tr 'rn' 'n'`
echo "${messages}" | mail -s "${subject}" $1 >>/tmp/mailx.log 2>&1

建立紀錄檔檔案並修改許可權並測試

touch /tmp/mailx.log
chown -R zabbix.zabbix  /tmp/mailx.log 
chmod +x mailx.sh 
chown -R zabbix.zabbix /usr/lib/zabbix/
sh mailx.sh 郵箱 zabbix "this is test"

3.2 web網頁設定

3.2.1 新增報警媒介

管理 > 報警媒介型別 > 建立媒體型別

名稱自定義,後面會用到
型別選擇指令碼
指令碼名稱是之前編輯的指令碼名稱
指令碼的三個引數:
{ALERT.SENDTO}
{ALERT.SUBJECT}
{ALERT.MESSAGE}

3.2.2 新增使用者

管理 > 使用者 > 點選Admin > 報警媒介 > 新增
型別選擇之前自定義的名稱
收件人填自己郵箱
點選新增
點選更新

3.2.3 建立動作

設定 > 動作 >刪除預設的動作 > 建立動作 > 刪除預設 > 建立動作



新增執行操作

預設標題   {TRIGGER.STATUS}:{TRIGGER.NAME}
訊息內容   告警主機:{HOST.NAME}
          告警IP:{HOST.IP}
          告警時間:{EVENT.DATE}-{EVENT.TIME}
          告警等級:{TRIGGER.SEVERITY}
          告警資訊:{TRIGGER.NAME}-{ITEM.VALUE}
          事件ID:{EVENT.ID}

新增恢復操作

除了訊息內容的模板,其他和上一步基本一致

預設標題   {TRIGGER.STATUS}:{TRIGGER.NAME}

訊息內容   恢復主機:{HOST.NAME}
          恢復IP:{HOST.IP}
          恢復時間:{EVENT.DATE}-{EVENT.TIME}
          恢復等級:{TRIGGER.SEVERITY}
          恢復資訊:{TRIGGER.NAME}-{ITEM.VALUE}
          事件ID:{EVENT.ID}

最後再確認一下操作是不是都新增完成了,如果沒完成是不會傳送郵件的!!

3.2.4 測試

被監控端停止sshd服務

systemctl stop sshd

可以看到郵件已經傳送過來了,並且儀表板的問題介面開始閃爍

重新開啟服務後同樣會有郵件發來

systemctl start sshd

總結 

到此這篇關於搭建zabbix監控以及郵件報警的文章就介紹到這了,更多相關搭建zabbix監控及郵件報警內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com