推送的需要的机子多最好使用数据库,机子少就写死变量了,在被巡检主机上新建一个普通用户,扩展可以用yml role配上数据库就很方便了,懒的花时间折腾
这里需要被巡检主机免安装就没用数据库记录,yml要用copy模块后用sh执行脚本,用script模块会找不到执行路径
还写了一套用于监控告警的脚本,还在继续写。。。
#!/bin/bash #QQ450433231 #2020-2-24 #巡检并发连接数 发送企业微信告警 定期巡检通知 #定义时间 cur_time(){ date "+%Y-%m-%d %H:%M:%S" } wx(){ #生成告警脚本 发送到企业微信 sh_name=$0 cat > $sh_name.json <<-EOF curl '填写微信机器人Webhook地址:' \ -H 'Content-Type: application/json' \ -d ' { "msgtype": "text", "text": { "content": "$1", "mentioned_mobile_list":["$2"] } }' EOF #发送告警脚本,发送成功后清空脚本 sh $sh_name.json && echo "Send successfully" > $sh_name.json } #cpu使用 cpu_usage(){ top -n 1 -d 1|awk '/%Cpu/{printf("%.2f%\n",(100-$8))}' } #获取本机IP ip=`ifconfig eth0|awk '/inet /{print$2}'` #监控端口 并发数告警阀值 获取当前并发数 port=8303 #并发数告警阀值 max_number=2000 #获取当前并发数 number=`netstat -ant|grep -w "$ip:$port"|grep "ESTABLISHED"|wc -l` mem=`free|awk '/Mem:/{printf("%.2f%\n",($2-$4)/$2*100)}'` #磁盘读: read=`iostat|awk '/.da/{print$3 "kb/s"}'` #磁盘写: write=`iostat|awk '/.da/{print$4 "kb/s"}'` #IO利用率: io=`iostat -x|awk '/.da/{print$14"%"}'` ORACLE_BASE=/u01/app/oracle; export ORACLE_BASE ORACLE_HOME=$ORACLE_BASE/product/12.1.0/client_1; export ORACLE_HOME PATH=.:${JAVA_HOME}/bin:${PATH}:$HOME/bin:$ORACLE_HOME/bin export PATH #数据库用tnsping 因为有4台rac的VIP,2个实例,这边没用数据库只能用字典了,还是懒 declare -A instances instances=([192.168.1.1]="a" [192.168.1.2]="a" [192.168.56.195]="b" [192.168.56.196]="b") for db_ip in $(echo ${!instances[*]}) do status=`tnsping $db_ip:1521/${instances[$db_ip]}|grep "OK"|wc -l` if [ "$status" -eq 0 ];then database="$db_ip:1521/${instances[$db_ip]} Error" break elif [ "$status" -eq 1 ];then database="Successfully" fi done wx "$(cur_time) 巡检主机 \n$(hostname) $ip\n端口: $port 当前并发连接数: $number 预警阀值: $max_number \nCPU利用率: $(cpu_usage) 内存利用率: $mem \n磁盘读: $read 磁盘写: $write IO利用率: $io \n数据库连接:$database"
--- - hosts: linux remote_user: centos gather_facts: false tasks: - name: copy script remote host copy: src=/root/connect_check dest=/home/centos/connect_check - name: execution script command: sh /home/centos/connect_check