zabbix监控MYSQL、自定义监控端口脚本、批量安装agent并监控nginx、微信通知

zabbix监控MYSQL

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.cnf

<?php
$mysql_user= 'zabbix';
$mysql_pass= '123456';

4.安装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并监控nginx

1.准备源码包和需要用到的监控脚本、配置文件、服务脚本、安装脚本
源码包: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 $3

zabbix加载脚本的配置文件 check_nginx.conf:

UserParameter=nginx.status[*],/app/zabbix/etc/zabbix_agentd.conf.d/check_nginx.sh $1 $2 $3

zabbix 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.target

zabbix 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=30

zabbix 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] + "\n\n" +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.在用户中添加报警媒介,注意收件人是在企业微信里面通讯录中显示的账号
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值