1.安装MYSQL并设置好主从
2.安装procona
下载地址:https://www.percona.com/downloads/
安装配置文档:https://www.percona.com/doc/percona-monitoring-plugins/LATEST/zabbix/index.html#installation-instructions
下载 percona-zabbix-templates-1.1.8-1.noarch.rpm 安装
3.编辑配置文件
复制配置文件到目录 cp /var/lib/zabbix/percona/templates/userparameter_percona_mysql.conf /usr/local/zabbix/etc/zabbix_agentd.conf.d/ 配置文件定义了zabbix的键对应执行的脚本命令,后续只要在模板添加监控项填入对应的键即可 编辑文件 vim /var/lib/zabbix/percona/scripts/ss_get_mysql_stats.php.cnf4.安装PHP环境
yum install –y php php-mysql 安装完就可以测试获取数据了 /var/lib/zabbix/percona/scripts/get_mysql_stats_wrapper.sh gg注:测试完要记得把tmp目录下的 localhost_mysql_cacti_stats.txt 删除此文件应由agent自行创建,否则有可能因为文件权限问题导致无法写入数据
自定义监控端口脚本
#!/bin/bash check_process(){ NUM=`ps -ef | grep -v grep | grep -v bash | grep ${NAME} | wc -l` if [ $NUM -eq 0 ];then echo 100 else echo 50 fi } check_port(){ ss -tnl | grep ${PORT} &> /dev/null if [ $? -eq 0 ];then echo 50 else echo 100 fi } main(){ case $1 in process) NAME=$2 check_process; ;; port) PORT=$2 check_port; ;; esac } main $1 $2
批量安装agent并监控nginx1.准备源码包和需要用到的监控脚本、配置文件、服务脚本、安装脚本
源码包:zabbix-5.0.14.tar.gz
监控脚本:check_nginx.sh
服务脚本:zabbix-agent.service
配置文件:
check_nginx.conf
zabbix_agentd.conf
安装脚本:nginx监控脚本 check_nginx.sh:
#!/bin/bash nginx_status_fun(){ #函数内容 NGINX_PORT=$1 #端口,函数的第一个参数是脚本的第二个参数,即脚本的第二个参数是段端口号 NGINX_COMMAND=$2 #命令,函数的第二个参数是脚本的第三个参数,即脚本的第三个参数是命令 nginx_active(){ #获取nginx_active数量,以下相同,这是开启了nginx状态但是只能从本机看到 /usr/bin/curl "http://127.0.0.1:"$NGINX_PORT"/nginx_status/" 2>/dev/null| grep 'Active' | awk '{print $NF}' } nginx_reading(){ #获取nginx_reading状态的数量 /usr/bin/curl "http://127.0.0.1:"$NGINX_PORT"/nginx_status/" 2>/dev/null| grep 'Reading' | awk '{print $2}' } nginx_writing(){ /usr/bin/curl "http://127.0.0.1:"$NGINX_PORT"/nginx_status/" 2>/dev/null| grep 'Writing' | awk '{print $4}' } nginx_waiting(){ /usr/bin/curl "http://127.0.0.1:"$NGINX_PORT"/nginx_status/" 2>/dev/null| grep 'Waiting' | awk '{print $6}' } nginx_accepts(){ /usr/bin/curl "http://127.0.0.1:"$NGINX_PORT"/nginx_status/" 2>/dev/null| awk NR==3 | awk '{print $1}' } nginx_handled(){ /usr/bin/curl "http://127.0.0.1:"$NGINX_PORT"/nginx_status/" 2>/dev/null| awk NR==3 | awk '{print $2}' } nginx_requests(){ /usr/bin/curl "http://127.0.0.1:"$NGINX_PORT"/nginx_status/" 2>/dev/null| awk NR==3 | awk '{print $3}' } case $NGINX_COMMAND in active) nginx_active; ;; reading) nginx_reading; ;; writing) nginx_writing; ;; waiting) nginx_waiting; ;; accepts) nginx_accepts; ;; handled) nginx_handled; ;; requests) nginx_requests; esac } main(){ #主函数内容 case $1 in #分支结构,用于判断用户的输入而进行响应的操作 nginx_status) #当输入nginx_status就调用nginx_status_fun,并传递第二和第三个参数 nginx_status_fun $2 $3; ;; *) #其他的输入打印帮助信息 echo $"Usage: $0 {nginx_status key}" esac #分支结束符 } main $1 $2 $3zabbix加载脚本的配置文件 check_nginx.conf:
UserParameter=nginx.status[*],/app/zabbix/etc/zabbix_agentd.conf.d/check_nginx.sh $1 $2 $3zabbix agent服务脚本 zabbix-agent.service:
[Unit] Description=Zabbix Agent After=syslog.target After=network.target [Service] Environment="ConFFILE=/app/zabbix/etc/zabbix_agentd.conf" EnvironmentFile=-/etc/sysconfig/zabbix-agent Type=forking Restart=on-failure PIDFile=/app/zabbix/zabbix_agentd.pid KillMode=control-group ExecStart=/app/zabbix/sbin/zabbix_agentd -c $CONFFILE ExecStop=/bin/kill -SIGTERM $MAINPID RestartSec=10s User=zabbix Group=zabbix [Install] WantedBy=multi-user.targetzabbix agent的配置文件 zabbix_agentd.conf:
修改以下配置 PidFile=/app/zabbix/zabbix_agentd.pid LogType=file LogFile=/app/zabbix/log/zabbix_agentd.log Server=192.168.1.10,192.168.1.11 #10是server,11是代理 ServerActive=192.168.1.11 Hostname=#这里留空 Include=/app/zabbix/etc/zabbix_agentd.conf.d/*.conf UnsafeUserParameters=1 EnableRemoteCommands=1 Timeout=30zabbix agent安装脚本
#!/bin/bash DIR=`pwd` ZABBIX_PKG_NAME="zabbix-5.0.14.tar.gz" ZABBIX_CONFIG_PKG="config.tar" ZABBIX_INSTALL_DIR="/apps/zabbix" LOG_DIR="/apps/zabbix/log/zabbix_log" IP=`ifconfig eth0 | grep -w inet | awk '{print $2}'` if [ ! -f ${DIR}/${ZABBIX_PKG_NAME} ];then echo "Zabbix PKG not found!" exit 3 fi if [ ! -f ${DIR}/${ZABBIX_CONFIG_PKG} ];then echo "Zabbix config file not found!" exit 3 fi if [ ! -d ${ZABBIX_INSTALL_DIR} ];then mkdir -pv ${ZABBIX_INSTALL_DIR} fi if [ -d ${ZABBIX_INSTALL_DIR} ];then tar xvf ${DIR}/${ZABBIX_PKG_NAME} && cd ${DIR}/zabbix-5.0.14 ./configure --prefix=${ZABBIX_INSTALL_DIR} --enable-agent && make && make install tar zxvf ${DIR}/${ZABBIX_CONFIG_PKG} -C ${ZABBIX_INSTALL_DIR}/etc/zabbix_agentd.conf.d/ cp ${ZABBIX_INSTALL_DIR}/etc/zabbix_agentd.conf.d/zabbix-agent.service /usr/lib/systemd/system/zabbix-agent.service sed -i "s/Hostname=/Hostname=${IP}/g" ${ZABBIX_INSTALL_DIR}/etc/zabbix_agentd.conf sed -i 's/Defaults requiretty/#Defaults requiretty/g' /etc/sudoers echo "zabbix ALL = NOPASSWD: ALL" >> /etc/sudoers if [ ! -d ${LOG_DIR} ];then mkdir -pv ${LOG_DIR} fi chown zabbix.zabbix -R ${ZABBIX_INSTALL_DIR} systemctl enable zabbix-agent && systemctl start zabbix-agent sleep 2 ps -ef | grep zabbix_agent &> /dev/null if [ $? -eq 0 ];then echo "Zabbix agent start OK!" else echo "Zabbix agent start ERROR!" fi fi
微信和短信通知微信通知需要用到微信企业账号,已有账号之后继续下一步配置。
1.在企业微信中的应用与小程序页面创建自己的应用
2.准备微信通知用的脚本 weixin.py
脚本存放路径是zabbix目录下的 /share/zabbix/alertscripts#!/usr/bin/env python #coding:utf-8 #Author:Zhang ShiJie import requests import sys import os import json import logging logging.basicConfig(level = logging.DEBUG, format = '%(asctime)s, %(filename)s, %(levelname)s, %(message)s', datefmt = '%a, %d %b %Y %H:%M:%S', filename = os.path.join('/tmp','weixin.log'), filemode = 'a') corpid='企业微信的 “我的企业” 页面里的ID' appsecret="在自建应用页面获取" agentid="在自建应用页面获取" token_url='https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=' + corpid + '&corpsecret=' + appsecret req=requests.get(token_url) accesstoken=req.json()['access_token'] msgsend_url='https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=' + accesstoken touser=sys.argv[1] #zabbix传进来的第一个变量 subject=sys.argv[2]#zabbix传进来的第二个变量 message=sys.argv[2] + "nn" +sys.argv[3] params={ "touser": touser, "msgtype": "text", "agentid": agentid, "text": { "content": message }, "safe":0 } req=requests.post(msgsend_url, data=json.dumps(params)) logging.info('sendto:' + touser + ';;subject:' + subject + ';;message:' + message) 上面用到的requests模块默认没有需要自己安装 pip install requests 测试脚本是否可以 python testaaaa "一个主题" "一个内容" 参数解释: python 账号 主题 消息 注意:账号是在企业微信中个人资料里显示的账号3.zabbix中添加报警媒介类型
类型选脚本,脚本名称就是刚刚创建的weixin.py,参数有三个分别对应上面脚本中的三个变量值
4.在用户中添加报警媒介,注意收件人是在企业微信里面通讯录中显示的账号



