结合脚本监控和邮件报警等实现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阅读 160,026评论 4 364
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,655评论 1 296
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 109,726评论 0 244
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,204评论 0 213
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,558评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,731评论 1 222
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,944评论 2 314
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,698评论 0 203
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,438评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,633评论 2 247
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,125评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,444评论 3 255
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,137评论 3 238
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,103评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,888评论 0 197
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,772评论 2 276
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,669评论 2 271

推荐阅读更多精彩内容

  • 1.写在前面 本文主要介绍的是zabbix的编译安装过程,包含它的基础环境LNMP,虽然zabbix官方一般推荐的...
    天之蓝色阅读 2,460评论 0 17
  • Zabbix简介 Zabbix官方网站Zabbix中文文档 本文系统环境是CentOS7x86_64, Zabbi...
    Zhang21阅读 7,848评论 0 37
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,103评论 18 139
  • 文/小慧 要想做好企业文化的活动层面,物质层面,各大节日是不可避免的要搞点事。今儿个是女王节,通过刷朋友圈,...
    我叫小慧阅读 750评论 0 2
  • 大数据时代的到来逐渐将数据批量化。少量的数据可以通过控制它的精确度以保证最终结果的可靠性与一致性,因为“任意一个数...
    XJasmine阅读 413评论 0 2