結合腳本監控和郵件報警等實現zabbix監控tomcat和nginx

一、環境描述

部署拓撲圖

按照上圖部署搭建環境,要求實現下述目標:
1、zabbix 通過jmx接口監控tomcat;
2、在zabbix server上添加自動郵件報警;
3、接著結合腳本監控對應agent的服務進程及端口;
4、在zabbix server上添加相應的web監測;

二、環境部署

1、搭建zabbix server服務器
  • 編譯安裝zabbix server服務
    獲取zabbix server的源碼包并復制保存到/usr/local/src目錄下后解壓縮創建相應的軟鏈接:
[root@zabbix-server ~]# tar xf /usr/local/src/zabbix-3.0.18.tar.gz -C /usr/local/src/

安裝依賴包:

[root@zabbix-server ~]# yum install gcc libxml2-devel net-snmp net-snmp-devel curl curl-devel php php-bcmath php-mbstring mariadb mariadb-devel -y

安裝數據庫:

[root@zabbix-server ~]# yum install -y mariadb-server
[root@zabbix-server ~]# systemctl restart mariadb
[root@zabbix-server ~]# mysql
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 2
Server version: 5.5.56-MariaDB MariaDB Server

Copyright (c) 2000, 2017, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]> create database zabbix character set utf8 collate utf8_bin;
Query OK, 1 row affected (0.00 sec)

MariaDB [(none)]> grant all privileges on zabbix.* to zabbix@"192.168.0.%" identified by '123456';
Query OK, 0 rows affected (0.00 sec)

安裝jdk包:

#事先獲取jdk源碼包并放在在/usr/local/src目錄下
[root@zabbix-server ~]# cd /usr/local/src/
[root@zabbix-server src]# tar xf jdk-10.0.1_linux-x64_bin.tar.gz
[root@zabbix-server src]# ln -sv /usr/local/src/jdk-10.0.1 /usr/local/jdk
"/usr/local/jdk" -> "/usr/local/src/jdk-10.0.1"

#在/etc/profile文件中添加環境變量:
[root@zabbix-server src]# vim /etc/profile
export JAVA_HOME=/usr/local/jdk
export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH
export CLASSPATH=.$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib:$JAVA_HOME/lib/tools.jar
[root@zabbix-server src]# source /etc/profile
[root@zabbix-server src]# java -version  #命令若執行成功,說明jdk已成功安裝
java version "10.0.1" 2018-04-17
Java(TM) SE Runtime Environment 18.3 (build 10.0.1+10)
Java HotSpot(TM) 64-Bit Server VM 18.3 (build 10.0.1+10, mixed mode)

編譯安裝zabbix-server:

[root@zabbix-server ~]# cd /usr/local/src/zabbix-3.0.18
[root@zabbix-server zabbix-3.0.18]# useradd zabbix -s /sbin/nologin
[root@zabbix-server zabbix-3.0.18]# ./configure --prefix=/usr/local/zabbix --enable-server --enable-agent --with-mysql --with-net-snmp --with-libcurl --with-libxml2 --enable-java --with-ssh2
***********************************************************
*            Now run 'make install'                       *
*                                                         *
*            Thank you for using Zabbix!                  *
*              <http://www.zabbix.com>                    *
***********************************************************
#如無編譯無報錯,則應出現上述提示
[root@zabbix-server zabbix-3.0.18]# make install

將zabbix的數據庫模板按順序導入數據庫:

[root@zabbix-server zabbix-3.0.18]# mysql -uzabbix -p123456 -h192.168.0.81 zabbix < /usr/local/src/zabbix-3.0.18/database/mysql/schema.sql 
[root@zabbix-server zabbix-3.0.18]# mysql -uzabbix -p123456 -h192.168.0.81 zabbix < /usr/local/src/zabbix-3.0.18/database/mysql/images.sql 
[root@zabbix-server zabbix-3.0.18]# mysql -uzabbix -p123456 -h192.168.0.81 zabbix < /usr/local/src/zabbix-3.0.18/database/mysql/data.sql 

復制啟動腳本到/etc/init.d/目錄下并更改相應的配置:

[root@zabbix-server zabbix-3.0.18]# cp /usr/local/src/zabbix-3.0.18/misc/init.d/fedora/core/zabbix_server /etc/init.d/
[root@zabbix-server zabbix-3.0.18]# vim /etc/init.d/zabbix_server
        # Zabbix-Directory
        BASEDIR=/usr/local/zabbix
        ......
start() {
        if [ $RUNNING -eq 1 ]
                then
                echo "$0 $ARG: $BINARY_NAME (pid $PID) already running"
        else
                action $"Starting $BINARY_NAME: " $FULLPATH -c /usr/local/zabbix/etc/zabbix_server.conf    #另外可以在此處用-c選項指定zabbix_server的配置文件路徑,默認為/usr/local/zabbix/etc/zabbix_server.conf
                touch /var/lock/subsys/$BINARY_NAME
    fi
}
......

配置zabbix_server的配置文件:

[root@zabbix-server zabbix-3.0.18]# mkdir /var/log/zabbix 
[root@zabbix-server zabbix-3.0.18]# chown zabbix:zabbix /var/log/zabbix/ -R
[root@zabbix-server ~]# vim /usr/local/zabbix/etc/zabbix_server.conf
#修改新增以下配置
LogFile=/var/log/zabbix/zabbix_server.log
DBHost=192.168.0.81
DBName=zabbix
DBUser=zabbix
DBPassword=123456
Timeout=30
LogSlowQueries=3000

#最后啟動zabbix_server
[root@zabbix-server ~]# /etc/init.d/zabbix_server start

安裝httpd:

[root@zabbix-server ~]# yum install -y httpd
#創建zabbix目錄
[root@zabbix-server ~]# mkdir /var/www/html/zabbix
#復制zabbix相關的php文件到指定目錄
[root@zabbix-server ~]# cp -a /usr/local/src/zabbix-3.0.18/frontends/php/* /var/www/html/zabbix/

安裝httpd的相關依賴包:

[root@zabbix-server ~]# yum install php-gettext php-session php-ctype php-xmlreader php-xmlwriter php-xml php-net-socket php-gd php-mysql -y

修改/etc/php.ini文件的配置:

[root@zabbix-server ~]# vim /etc/php.ini
#找到相關配置并修改配置為如下
post_max_size = 16M
max_execution_time = 300
max_input_time = 300
date.timezone = Asia/Shanghai

啟動httpd服務:

[root@zabbix-server ~]# systemctl start httpd
[root@zabbix-server ~]# systemctl stop firewalld 
[root@zabbix-server ~]# setenforce 0

最后在訪問http://192.168.0.81/zabbix完成zabbix安裝即可。

  • 安裝java gateway配置
    編輯配置zabbix_java的配置腳本:
[root@zabbix-server ~]# vim /usr/local/zabbix/sbin/zabbix_java/settings.sh 
LISTEN_IP="0.0.0.0"
LISTEN_PORT=10052
PID_FILE="/tmp/zabbix_java.pid"
START_POLLERS=5  #啟動多少個進程輪訓java, 要和java 應用保持一定關系
TIMEOUT=30

啟動zabbix_java服務:

[root@zabbix-server ~]# /usr/local/zabbix/sbin/zabbix_java/startup.sh
#此處有可能會未知的名稱或服務的錯誤,需要在/etc/hosts添加指定的未知域名的解析來解決該報錯

配置zabbix_server調用zabbix_java作為java gateway:

[root@zabbix-server ~]# vim /usr/local/zabbix/etc/zabbix_server.conf
JavaGateway=192.168.0.81  #配置java gateway的Ip地址
JavaGatewayPort=10052
StartJavaPollers=5  #啟動多少個進程去輪訓 java gateway, 要和java gateway的配置一致

重啟zabbix_server服務:

[root@zabbix-server ~]# /etc/init.d/zabbix_server restart
Restarting zabbix_server (via systemctl):                  [  確定  ]
2、搭建tomcat服務器

安裝tomcat服務:

#事先主備好相應的tomcat包,存放在/usr/local/src目錄下
[root@tomcat src]# tar xf apache-tomcat-7.0.88.tar.gz
[root@tomcat src]# ln -sv /usr/local/src/apache-tomcat-7.0.88 /usr/local/tomcat
‘/usr/local/tomcat’ -> ‘/usr/local/src/apache-tomcat-7.0.88’

#編輯tomcat的啟動腳本
[root@tomcat src]# vim /usr/local/tomcat/bin/catalina.sh  
CATALINA_OPTS="$CATALINA_OPTS
-Dcom.sun.management.jmxremote  #啟動遠程監控JMX
-Dcom.sun.management.jmxremote.port=12345  #默認啟動的JMX端口號, 要和zabbix添加主機
時候的端口一致即可
-Dcom.sun.management.jmxremote.authenticate=false  #不使用用戶名密碼
-Dcom.sun.management.jmxremote.ssl=false  #不使用ssl認證
-Djava.rmi.server.hostname=192.168.0.84"  #tomcat主機自己的IP地址

安裝jdk環境:

#事先準備好相應的jdk包,存放在/usr/local/src/目錄下
[root@tomcat src]# tar xf jdk-10.0.1_linux-x64_bin.tar.gz
[root@tomcat src]# ln -sv /usr/local/src/jdk-10.0.1 /usr/local/jdk
‘/usr/local/jdk’ -> ‘/usr/local/src/jdk-10.0.1’

#添加環境變量
[root@tomcat src]# vim /etc/profile
export JAVA_HOME=/usr/local/jdk
export TOMCAT_HOME=/usr/local/tomcat
export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$TOMCAT_HOME/bin:$PATH
export CLASSPATH=.$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib:$JAVA_HOME/lib/tools.jar
[root@tomcat src]# source /etc/profile

啟動tomcat服務:

[root@tomcat src]# /usr/local/tomcat/bin/catalina.sh start
Using CATALINA_BASE:   /usr/local/tomcat
Using CATALINA_HOME:   /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME:        /usr
Using CLASSPATH:       /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
Tomcat started.
[root@tomcat src]# systemctl stop firewalld 
[root@tomcat src]# setenforce 0

安裝zabbix_agent:

[root@tomcat src]# cd zabbix-3.0.18
[root@tomcat zabbix-3.0.18]# useradd zabbix -s /sbin/nologin
[root@tomcat zabbix-3.0.18]# yum install -y gcc
[root@tomcat zabbix-3.0.18]# ./configure --prefix=/usr/local/zabbix --enable-agent
[root@tomcat zabbix-3.0.18]# make install

編輯zabbix_agent配置文件:

[root@tomcat zabbix-3.0.18]# vim /usr/local/zabbix/etc/zabbix_agentd.conf
LogFile=/tmp/zabbix_agentd.log
Server=192.168.0.81
ServerActive=127.0.0.1
Hostname=192.168.0.84
Timeout=30
UnsafeUserParameters=1

復制zabbix_agent的啟動程序到/etc/init.d目錄下編輯其配置:

[root@tomcat zabbix-3.0.18]# cp /usr/local/src/zabbix-3.0.18/misc/init.d/fedora/core/zabbix_agentd /etc/init.d/
[root@tomcat zabbix-3.0.18]# vim /etc/init.d/zabbix_agentd
        # Zabbix-Directory
        BASEDIR=/usr/local/zabbix

啟動zabbix_agent服務:

[root@tomcat zabbix-3.0.18]# /etc/init.d/zabbix_agentd start
Starting zabbix_agentd (via systemctl):                    [  OK  ]
3、搭建nginx服務器

安裝nginx服務:

[root@nginx ~]# yum install -y epel-release
[root@nginx ~]# yum install -y nginx

創建test頁面:

[root@nginx ~]# vim /usr/share/nginx/html/test.html
<h1>This is a test page</h1>

啟動nginx服務:

[root@nginx ~]# systemctl start nginx
[root@nginx ~]# systemctl stop firewalld
[root@nginx ~]# setenforce 0

安裝zabbix_agent:

[root@nginx src]# tar xf zabbix-3.0.18.tar.gz 
[root@nginx src]# cd zabbix-3.0.18
[root@nginx zabbix-3.0.18]# yum install -y gcc
[root@nginx zabbix-3.0.18]# useradd zabbix -s /sbin/nologin
[root@nginx zabbix-3.0.18]# ./configure --prefix=/usr/local/zabbix --enable-agent
[root@nginx zabbix-3.0.18]# make install

編輯zabbix_agent配置文件:

[root@nginx zabbix-3.0.18]# vim /usr/local/zabbix/etc/zabbix_agentd.conf
LogFile=/tmp/zabbix_agentd.log
Server=192.168.0.81
ServerActive=127.0.0.1
Hostname=192.168.0.83
Timeout=30

復制zabbix_agent的啟動進程到/etc/init.d/目錄下并修改啟動:

[root@nginx zabbix-3.0.18]# cp /usr/local/src/zabbix-3.0.18/misc/init.d/fedora/core/zabbix_agentd /etc/init.d/
[root@nginx zabbix-3.0.18]# vim /etc/init.d/zabbix_agentd
        # Zabbix-Directory
        BASEDIR=/usr/local/zabbix
[root@nginx zabbix-3.0.18]# /etc/init.d/zabbix_agentd start
Reloading systemd:                                         [  OK  ]
Starting zabbix_agentd (via systemctl):                    [  OK  ]

三、監控設置

1、添加監控主機

登錄zabbix server的web管理頁面,添加相應的nginx和tomcat hosts,添加完成后其配置狀態應如下圖所示:


監控主機的狀態

其中tomcat主機因配置了jmx監控,所以調用了jmx模板后,其JMX的連接性會顯示為綠色。

2、編輯創建腳本監控指定的服務進程和端口

首先對應的agent主機的/usr/local/zabbix/etc/zabbix_agentd.conf.d目錄下編輯創建如下腳本:

[root@nginx zabbix_agentd.conf.d]# vim process_port_check.sh
#!/bin/bash

check_process() {
        NUM=`ps -ef | grep ${NAME} | grep -v grep | wc -l`
        if [ $NUM -eq 0 ]; then
                echo 60
        else
                echo 10
        fi
}

check_port() {
        ss -tnl | grep -v grep | grep ${PORT} &>/dev/null
        if [ $? -eq 0 ] ;then
                echo 20
        else
                echo 70
        fi
}

main() {
        case $1 in
        process)
                NAME=$2
                check_process;
                ;;
        port)
                PORT=$2
                check_port;
                ;;
        esac
}

main $1 $2
[root@nginx zabbix_agentd.conf.d]# chmod +x process_port_check.sh 

然后在此目錄下創建zabbix agent的監控配置模板文件:

[root@nginx zabbix_agentd.conf.d]# vim process_port.conf
UserParameter=process_port[*],/usr/local/zabbix/etc/zabbix_agentd.conf.d/process_port_check.sh "$1" "$2"

然后編輯zabbix_agent的配置文件:

[root@nginx zabbix_agentd.conf.d]# vim /usr/local/zabbix/etc/zabbix_agentd.conf
Include=/usr/local/zabbix/etc/zabbix_agentd.conf.d/*.conf      #調用自定義的監控配置模板文件

重啟zabbix_agent服務

[root@nginx zabbix_agentd.conf.d]# /etc/init.d/zabbix_agentd restart
Restarting zabbix_agentd (via systemctl):                  [  OK  ]

因為zabbix_agent進程的運行用戶是zabbix,而zabbix用戶本身是沒有執行相關系統管理命令的權限的,為了能夠讓zabbix用戶能夠運行我們編輯的監控腳本,我們需要修改其相關的執行權限:

[root@nginx zabbix_agentd.conf.d]# visudo
## Allow root to run any commands anywhere
root    ALL=(ALL)       ALL
zabbix  ALL=(ALL)       NOPASSWD:ALL    #此處的執行權限不一定為ALL,管理員可對用戶的命令執行權限進行細化定義

接著在zabbix server創建對應的監控模板:


nginx進程端口監控模板

然后創建對應的監控項:


nginx進程監控項

這里設置的key值,就用于傳遞參數給剛才在zabbix_agent創建的process_port_check.sh腳本。port和80分別對應$1,$2。
nginx端口和進程的監控項

接著創建相關監控項的對應圖表

nginx監控圖表

這里可以把兩個監控項做成一個圖表進行輸出顯示, 也可以分開兩個圖表來進行輸出顯示。


圖表狀態

還可以設置相應的觸發器進行報警操作:


設置nginx進程和端口的報警觸發器

最后在對應的host主機上調用相應的監控模板即可:


配置主機調用指定的監控模板

等待一段時間后,就會有相關的數據顯示。

相關進程和端口檢測正常
3、設置web監測

另外zabbix本身支持web監測,能監控指定URL的狀態,包括訪問速度、響應時間等等。這里我們就來嘗試監控nginx的test.html頁面。
首先點擊進入相應的web監測創建頁面:


web監測配置1

接著點擊右上角的創建:


web監測配置2

在web監測配置頁面,配置好相應的名字及應用集之后,點擊steps:
web監測配置3

在steps添加一個新步驟:
web監測配置4

添加該步驟的名字、需要監測的URL、監測超時時長以及要求返回的狀態碼,最后點擊Add保存退出。


web監測配置5

最后在監控菜單即可查看到指定的URL的監測狀態:


URL監測狀態
4、設置郵件報警

在給相應的監控項設置郵件報警前,我們要在zabbix server上添加相應的郵件媒介:


QQ郵箱郵件媒介

此處我使用QQ郵件服務器來測試。

添加完郵件媒介后,還需要在對應的管理員賬號中調用此郵件媒介:


調用QQmail發送報警郵件到指定的管理員郵箱地址
為指定的User添加郵件媒體

添加完用戶的郵件媒介后,還需要在配置的動作Actions中配置添加郵件報警的動作:


設置報警郵件及恢復郵件

設置動作的觸發條件
設置觸發的動作為發送郵件

接著我們可以手動關閉nginx服務器的nginx服務,來觸發相應的報警器,然后看看能否收到相應的報警郵件。

[root@nginx zabbix_agentd.conf.d]# systemctl stop nginx
監控界面能看到已經觸發了相應的報警
成功收到相應的報警郵件

此時重新恢復nginx服務,也能收到一個恢復通知郵件。


恢復通知郵件
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,786評論 6 534
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,656評論 3 419
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,697評論 0 379
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,098評論 1 314
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,855評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,254評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,322評論 3 442
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,473評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,014評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,833評論 3 355
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,016評論 1 371
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,568評論 5 362
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,273評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,680評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,946評論 1 288
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,730評論 3 393
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,006評論 2 374

推薦閱讀更多精彩內容

  • 1.寫在前面 本文主要介紹的是zabbix的編譯安裝過程,包含它的基礎環境LNMP,雖然zabbix官方一般推薦的...
    天之藍色閱讀 2,550評論 0 16
  • Zabbix簡介 Zabbix官方網站Zabbix中文文檔 本文系統環境是CentOS7x86_64, Zabbi...
    Zhang21閱讀 8,036評論 0 37
  • Spring Cloud為開發人員提供了快速構建分布式系統中一些常見模式的工具(例如配置管理,服務發現,斷路器,智...
    卡卡羅2017閱讀 134,787評論 18 139
  • 文/小慧 要想做好企業文化的活動層面,物質層面,各大節日是不可避免的要搞點事。今兒個是女王節,通過刷朋友圈,...
    我叫小慧閱讀 794評論 0 2
  • 大數據時代的到來逐漸將數據批量化。少量的數據可以通過控制它的精確度以保證最終結果的可靠性與一致性,因為“任意一個數...
    XJasmine閱讀 456評論 0 2