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 # 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
浙公网安备 33010602011771号