1、安装配置zabbix,并实现zabbix监控tomcat,nginx,memcached,redis等,并实现发生报警后发送邮件报警

1.1 安装配置zabbix

#安装yum源
# rpm -Uvh https://repo.zabbix.com/zabbix/5.0/rhel/7/x86_64/zabbix-release-5.0-1.el7.noarch.rpm
# yum clean all

#安装Zabbix server,Web前端,agent 
# yum -y install zabbix-server-mysql zabbix-agent
#或传包
# yum -y install zabbix-server-mysql-5.0.33-1.el7.x86_64.rpm zabbix-agent-5.0.33-1.el7.x86_64.rpm

#安装zabbix-web前端
# yum -y install centos-release-scl
# vi /etc/yum.repos.d/zabbix.repo
[zabbix-frontend]
...
enabled=1
... 
# yum clean all
# yum -y install zabbix-web-mysql-scl zabbix-nginx-conf-scl
#或传包
# yum -y install zabbix-web-mysql-scl-5.0.33-1.el7.noarch.rpm zabbix-nginx-conf-scl-5.0.33-1.el7.noarch.rpm zabbix-web-5.0.33-1.el7.noarch.rpm zabbix-web-deps-scl-5.0.33-1.el7.noarch.rpm

#创建初始数据库
# cd /usr/local/src/
#传包、脚本
# bash binary_install_mysql-5.7.35.sh
# source /etc/profile.d/path.sh
#创建zabbix库
# mysql -uroot -proot -e "create database zabbix character set utf8 collate utf8_bin"
# mysql -uroot -proot -e "create user zabbix@'10.0.0.%' identified by 'zabbix'"
# mysql -uroot -proot -e "grant all privileges on zabbix.* to zabbix@'10.0.0.%'"
# mysql -uroot -proot -e "set global log_bin_trust_function_creators = 1"

#导入表结构
# zcat /usr/share/doc/zabbix-server-mysql*/create.sql.gz | mysql -uzabbix -pzabbix -h10.0.0.27 zabbix

#恢复全局变量log_bin_trust_function_creators
# mysql -uroot -proot -e "set global log_bin_trust_function_creators = 0"

#修改zabbix配置文件
# sed -ri '/DBHost=/a DBHost=10.0.0.27' /etc/zabbix/zabbix_server.conf
# sed -ri '/DBPassword=/a DBPassword=zabbix' /etc/zabbix/zabbix_server.conf

#为Zabbix前端配置PHP
#修改nginx子配置文件
# vi /etc/opt/rh/rh-nginx116/nginx/conf.d/zabbix.conf
 # listen 80;                    #取消注释,默认不取消也生效,须注释主配置文件
 # server_name example.com;
#修改nginx主配置文件
# sed -ri '/default_server/s/(.*)/#\1/' /etc/opt/rh/rh-nginx116/nginx/nginx.conf
#修改php配置文件
# sed -ri '/listen.acl_users/s#(.*)#\1,nginx#' /etc/opt/rh/rh-php72/php-fpm.d/zabbix.conf
#修改时区
# sed -ri '/timezone/s#; (.*=).*#\1 Asia/Shanghai#' /etc/opt/rh/rh-php72/php-fpm.d/zabbix.conf

#启动服务
# systemctl enable --now zabbix-server zabbix-agent rh-nginx116-nginx rh-php72-php-fpm

#浏览器访问http://10.0.0.27安装
#生成的配置文件
# grep ^[^/] /etc/zabbix/web/zabbix.conf.php
<?php
$DB['TYPE']                = 'MYSQL';
$DB['SERVER']            = '10.0.0.27';
$DB['PORT']                = '0';
$DB['DATABASE']            = 'zabbix';
$DB['USER']                = 'zabbix';
$DB['PASSWORD']            = 'zabbix';
$DB['SCHEMA']            = '';
$DB['ENCRYPTION']        = false;
$DB['KEY_FILE']            = '';
$DB['CERT_FILE']        = '';
$DB['CA_FILE']            = '';
$DB['VERIFY_HOST']        = false;
$DB['CIPHER_LIST']        = '';
$DB['DOUBLE_IEEE754']    = true;
$ZBX_SERVER                = 'localhost';
$ZBX_SERVER_PORT        = '10051';
$ZBX_SERVER_NAME        = '';
$IMAGE_FORMAT_DEFAULT    = IMAGE_FORMAT_PNG;

#默认用户名Admin,密码zabbix

1.2 使用 java-gateway 监控 tomcat

1.2.1 部署 JDK

# tar xf jdk-8u241-linux-x64.tar.gz -C /usr/local
# ln -s /usr/local/jdk1.8.0_241 /usr/local/jdk
# vi /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
# source /etc/profile

1.2.2 部署 tomcat

# tar xf apache-tomcat-8.5.85.tar.gz -C /usr/local
# ln -s /usr/local/apache-tomcat-8.5.85 /usr/local/tomcat

#加固
# sed -ri "/SHUTDOWN/s#(.*SHUTDOWN)(.*)#\1$(openssl rand -base64 9)\2#" /usr/local/tomcat/conf/server.xml

#启动tomcat并设置开机自启
# /usr/local/tomcat/bin/catalina.sh start
# echo '/usr/local/tomcat/bin/catalina.sh start' >> /etc/rc.d/rc.local
# chmod +x /etc/rc.d/rc.local

#准备测试资源
# mkdir /usr/local/tomcat/webapps/linux39
# echo linux39-web > /usr/local/tomcat/webapps/linux39/index.html
# cat > /usr/local/tomcat/webapps/linux39/showhost.jsp <<EOF
<%@page import="java.util.Enumeration"%>
<br />
host: <%try{out.println(""+java.net.InetAddress.getLocalHost().getHostName());}catch(Exception e){}%>
<br />
remoteAddr: <%=request.getRemoteAddr()%>
<br />
remoteHost: <%=request.getRemoteHost()%>
<br />
sessionId: <%=request.getSession().getId()%>
<br />
serverName: <%=request.getServerName()%>
<br />
scheme: <%=request.getScheme()%>
<br />
<%request.getSession().setAttribute("t1","t2");%>
<%
    Enumeration en = request.getHeaderNames();
    while(en.hasMoreElements()){
    String hd = en.nextElement().toString();
        out.println(hd+" : "+request.getHeader(hd));
        out.println("<br />");
    }
%>
EOF

1.2.3 部署 java-gateway

#安装yum源
# rpm -Uvh https://repo.zabbix.com/zabbix/5.0/rhel/7/x86_64/zabbix-release-5.0-1.el7.noarch.rpm
# yum clean all

#安装zabbix-java-gateway
# yum -y install zabbix-java-gateway
#或传包
# yum -y install zabbix-java-gateway-5.0.34-1.el7.x86_64.rpm

#修改java-gateway配置文件
# vi /etc/zabbix/zabbix_java_gateway.conf
LISTEN_IP="0.0.0.0"        #java-gateway主机地址
LISTEN_PORT=10052        #java-gateway主机端口
START_POLLERS=20        #java-gateway轮询tomcat的进程数,20个进程对100个tomcat
TIMEOUT=30                #java-gateway等待数据获取超时时长,建议30s,最大30s,java处理请求慢

#启动zabbix-java-gateway并设置开机自启
# systemctl enable --now zabbix-java-gateway

#修改catalina.sh
# vi /usr/local/tomcat/bin/catalina.sh
...
CATALINA_OPTS="$CATALINA_OPTS -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=12345 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Djava.rmi.server.hostname=10.0.0.37"
#重启tomcat
# /usr/local/tomcat/bin/catalina.sh stop
# /usr/local/tomcat/bin/catalina.sh start

#修改zabbix-server主配置文件
# vi /etc/zabbix/zabbix_server.conf
JavaGateway=10.0.0.37            #java-gateway主机地址
StartJavaPollers=1                #设置等于java-gateway主机数量
#重启zabbix-server
# systemctl restart zabbix-server

#浏览器访问zabbix-server,添加主机

#linux测试监控JMX方式
#测试能否获取到java当前线程数和最大线程数
# java -jar cmdline-jmxclient-0.10.3.jar - 10.0.0.37:12345 'Catalina:name="http-nio-8080",type=ThreadPool' currentThreadCount
# java -jar cmdline-jmxclient-0.10.3.jar - 10.0.0.37:12345 'Catalina:name="http-nio-8080",type=ThreadPool' maxThreads

1.3 基于模板监控 memcached

#安装memcached
# yum -y install memcached

#启动memcached
# systemctl enable --now memcached

#监控memcached脚本
# vi /etc/zabbix/zabbix_agentd.d/memcached_status.sh
#!/bin/bash
memcached_status() {
    M_PORT=$1
    M_COMMAND=$2
    echo -e 'stats\nquit' | ncat 127.0.0.1 "${M_PORT}" | awk "\$2 ~ /^${M_COMMAND}$/{print \$3}"
}

main() {
    case $1 in
        memcached_status)
            memcached_status $2 $3
            ;;
    esac
}

main $1 $2 $3

#脚本给执行权限
# chmod +x /etc/zabbix/zabbix_agentd.d/memcached_status.sh

#修改agent配置文件
# vi /etc/zabbix/zabbix_agentd.conf
UserParameter=memcached_status[*],/bin/bash /etc/zabbix/zabbix_agentd.d/memcached_status.sh "$1" "$2" "$3

#重启agent进程
# systemctl restart zabbix-agent

#在server端或proxy端测试
# zabbix_get -s 10.0.0.77 -p 10050 -k "memcached_status["memcached_status","11211","pid"]"

#在web端增加监控项、图形
 #添加监控项->键值:memcached_status[memcached_status,11211,pid]    #pid只能选被动式
 #添加图形->监控项:添加

1.4 基于模板监控 redis

#安装redis
# yum -y install redis

#修改redis配置文件
# vi /etc/redis.conf
bind 0.0.0.0

#启动redis
# systemctl enable --now redis

#监控redis脚本
# vi /etc/zabbix/zabbix_agentd.d/redis_status.sh
#!/bin/bash
redis_status() {
    R_PORT=$1
    R_COMMAND=$2
    redis-cli -h 127.0.0.1 -p ${R_PORT} info | awk -F':' "\$1 ~ /^${R_COMMAND}$/{print \$2}"
}

main() {
    case $1 in
        redis_status)
            redis_status $2 $3
            ;;
    esac
}

main $1 $2 $3

#脚本给执行权限
# chmod +x /etc/zabbix/zabbix_agentd.d/redis_status.sh

#修改agent配置文件
# vi /etc/zabbix/zabbix_agentd.conf
UserParameter=redis_status[*],/bin/bash /etc/zabbix/zabbix_agentd.d/redis_status.sh "$1" "$2" "$3"

#重启agent进程
# systemctl restart zabbix-agent

#在server端或proxy端测试
# zabbix_get -s 10.0.0.77 -p 10050 -k "redis_status["redis_status","6379","used_memory"]"

#在web端增加监控项、图形
 #添加监控项->键值:redis_status[redis_status,6379,used_memory]
 #添加图形->监控项:添加

1.5 基于模板监控 nginx 状态页

#编译安装nginx
# 传包、脚本
# cd /usr/local/src
# bash compile_install_nginx-1.22.1.sh

#配置nginx状态页
# cat /usr/local/nginx/conf.d/test.conf
server {
    server_name www.testou.com;
    ...
    location /nginx_status {
        stub_status;
        allow 127.0.0.1;
        allow 10.0.0.0/16;
        deny all;
    }
}

#监控nginx脚本
# vi /etc/zabbix/zabbix_agentd.d/nginx_status.sh
#!/bin/bash
nginx_status() {
    N_PORT=$1
    N_COMMAND=$2
    case ${N_COMMAND} in
        active)
            curl http://127.0.0.1:${N_PORT}/nginx_status 2> /dev/null | awk 'NR==1{print $3}'
            ;;
        accepts)
            curl http://127.0.0.1:${N_PORT}/nginx_status 2> /dev/null | awk 'NR==3{print $1}'
            ;;
        handled)
            curl http://127.0.0.1:${N_PORT}/nginx_status 2> /dev/null | awk 'NR==3{print $2}'
            ;;
        requests)
            curl http://127.0.0.1:${N_PORT}/nginx_status 2> /dev/null | awk 'NR==3{print $3}'
            ;;
        reading)
            curl http://127.0.0.1:${N_PORT}/nginx_status 2> /dev/null | awk 'END{print $2}'
            ;;
        writing)
            curl http://127.0.0.1:${N_PORT}/nginx_status 2> /dev/null | awk 'END{print $4}'
            ;;
        waiting)
            curl http://127.0.0.1:${N_PORT}/nginx_status 2> /dev/null | awk 'END{print $6}'
            ;;
        #status)
            #curl -s -o /dev/null -w %{http_code} http://127.0.0.1:${N_PORT}/nginx_status
            #curl -I http://127.0.0.1:${N_PORT}/nginx_status 2> /dev/null | awk 'NR==1{print $2}'
            #;;
    esac
}

main() {
    case $1 in
        nginx_status)
            nginx_status $2 $3
            ;;
        status)
            HTTP_CODE=$(curl -I http://127.0.0.1:80/nginx_status 2> /dev/null | awk 'NR==1{print $2}')
            if [ ${HTTP_CODE} -eq 200 ]; then
                echo 1
            else
                echo 0
            fi
            ;;
    esac
}

main $1 $2 $3

#脚本给执行权限
# chmod +x /etc/zabbix/zabbix_agentd.d/nginx_status.sh

#修改agent配置文件
# vi /etc/zabbix/zabbix_agentd.d/status.conf
UserParameter=nginx.status[*],/bin/bash /etc/zabbix/zabbix_agentd.d/nginx_status.sh "$1" "$2" "$3"

#重启agent进程
# systemctl restart zabbix-agent

#在server端或proxy端测试
# zabbix_get -s 10.0.0.7 -p 10050 -k "nginx.status["nginx_status","80","active"]"
# zabbix_get -s 10.0.0.7 -p 10050 -k "nginx.status["status"]"

#在web端增加监控项、图形
 #添加监控项->键值:nginx.status[nginx_status,80,active]
 #添加图形->监控项:添加

1.6 nginx状态页不可用时,邮件报警

#监控项:获取数据
 触发器:判断数据是否满足触发条件
 动作:关联触发器告警、报警媒介类型、用户的对应关系
      满足触发器条件后执行的操作,其中包含:1.告警的发送对象:用户或组,用户或组可定义收件人邮箱、手机号、微信账号
                           2.告警的发送媒介和发送格式:邮件报警媒介类型定义了:发件人账号信息和告警内容格式
                                                        短信/微信报警媒介类型定义了:调用的脚本和街区告警内容格式
                                                                               (脚本中调用第三方API给指定手机号/微信账号发送内容)
#
======================================================================= #创建监控项->名称:Nginx 状态码 键值:nginx.status[status] #状态码为200时返回1,非200返回0 #创建触发器->名称:Nginx 状态码 严重性:严重 表达式->添加->监控项->选择:Nginx 状态码 结果:<> 1   #不等于1 #管理->报警媒介类型->创建媒体类型->名称:邮件报警 类型:电子邮件 SMTP服务器:smtp.qq.com SMTP服务器端口:25 #ssl:465 SMTP HELO:qq.com SMTP电邮:570XXXX76@qq.com 安全链接:无 认证:用户名和密码 用户名称:570XXXX76@qq.com 密码:zolisnXXXXXXbcdb 消息模板->添加->消息类型:问题 主题:故障通知: {HOST.NAME}, {ITEM.NAME}: {ITEM.VALUE} 消息:<b>故障开始时间:</b> {EVENT.DATE}_{EVENT.TIME}<br> <b>主机名:</b> {HOST.NAME}<br>
                        <b>IP:</b> {HOSTNAME1}<br> <b>监控项:</b> {ITEM.NAME}: {ITEM.VALUE}<br> 添加 消息类型:问题恢复 主题:恢复通知: {HOST.NAME}, {ITEM.NAME}: {ITEM.VALUE} 消息:<b>恢复时间:</b> {EVENT.RECOVERY.DATE}_{EVENT.RECOVERY.TIME}<br> <b>主机名:</b> {HOST.NAME}<br>
                        <b>IP:</b> {HOSTNAME1}<br> <b>监控项:</b> {ITEM.NAME}: {ITEM.VALUE}<br> 添加 添加 #管理->用户->Admin->报警媒介->添加->类型:邮件报警 收件人:136XXXX5241@139.com 当启用时:1-7,00:00-24:00 如果存在严重性则使用:未分类、信息、警告、一般严重、严重、灾难 添加 更新 #配置->动作->创建动作->动作->名称:Nginx 状态码 计算方式:与/或(默认) 条件->添加->类型:触发器示警度 操作者:等于 严重性:未分类 添加->类型:触发器示警度 操作者:等于 严重性:信息 添加->类型:触发器示警度 操作者:等于 严重性:警告 添加->类型:触发器示警度 操作者:等于 严重性:一般严重 添加->类型:触发器示警度 操作者:等于 严重性:严重 添加->类型:触发器示警度 操作者:等于 严重性:灾难 操作->默认操作步骤持续时间:60s #默认1h 操作->添加->操作类型:发送消息 步骤:1-2 步骤持续时间:0 发送给用户:Admin 仅送到:邮件报警 恢复操作->添加->操作类型:发送消息 发送给用户:Admin 仅送到:邮件报警 #测试nginx server宕机,查看zabbix-web仪表盘是否成功发送,邮件是否可达 # systemctl stop nginx
posted on 2023-04-30 23:52  不期而至  阅读(35)  评论(0)    收藏  举报