zoukankan      html  css  js  c++  java
  • zabbix监控添加学习笔记

      在实际生产环境中,除了CPU、内存等一些系统信息可以挂载zabbix的自带模板Template OS Linux;但是一些公司开发的定制服务需要自己写模板或者监控项去监控;

    一、监控公司的java服务

    1、编写监控脚本

    #!/bin/bash
    #version: 1.0
    #author: zhide.zhang
    #email: 1072051214@qq.com
    #create time: 2021年 07月 29日 星期四 18:10:48 CST
    #返回1为java进程正常,返回0则java进程未运行;
    status(){
    if [ -n "$numid" ];then
         echo "1"
    else
         echo "0"
    fi
      }
    
    case $1 in
        zuul)
            numid=`ps aux |grep zuul.jar |grep -v grep | awk '{print $2}'`
            status
            ;;
        user-service)
            numid=`ps aux |grep user-service.jar |grep -v grep | awk '{print $2}'`
            status
            ;;
        auth-service)
            numid=`ps aux |grep auth-service.jar |grep -v grep | awk '{print $2}'`
            status
            ;;
    esac

    #cat /etc/zabbix/zabix_agentd.d/java-service.conf
    UserParameter=java.status[*],/etc/zabbix/script/java-service.sh $1

      在agent端脚本和配置文件编写完成之后需要重启zabbix-agent服务:systemctl restart zabbix-agent.service

    2、添加监控项

      如果多个服务器都部署的是相同的java服务,则可以定义一个模板,将该模板挂载到相应的主机;

    2.1、定义模板名称

     2.2、定义监控项

     

       键值:java.status是在上面java-service.conf配置文件中定义的,中括号中的zuul.java是在java-service.sh脚本中定义的项目;

    2.3、定义触发器

    当返回值=0时,则告警;表示java服务已经停止;

    二、java服务自动发现

       当公司的服务器上部署的java服务各不相同,有多有少,此时手动写java监控脚本和添加java服务监控项就是个大工程;此时,java服务自动发现就排上用场了;

       zabbix官方文档:https://www.zabbix.com/documentation/3.4/zh/manual/discovery/low_level_discovery#discovery_of_file_systems

    1、编写java服务自动发现脚本

    #!/bin/bash
    java_server=($(ps aux |grep "java -jar"|grep -v grep |awk '{print $13}'))
    
    printf "{
    "
    printf '	"data":[
    '
    for ((i=0;i<${#java_server[@]};i++))
    do
            printf '		{
    '
            num=$(echo $((${#java_server[@]}-1)))
            if [ "$i" == ${num} ];
            then
                    printf "			"{#JAVA_NAME}":"${java_server[$i]}"}
    "
            else
                    printf "			"{#JAVA_NAME}":"${java_server[$i]}"},
    "
            fi
    done
    printf "	]
    "
    printf "}
    "

      要以json格式呈现;

    2、编写自动发现服务配置文件

    cat java.service.conf
    UserParameter=java.service,/etc/zabbix/script/java.service.sh

      重启zabbix-agent服务:systemctl restart zabbix-agent.service

    3、配置服务自动发现模板

     

       这地方的键值java.service是在java.service.conf文件中定义的;

       这地方可以用zabbix内置的进程监控键值proc.num来做监控项;

    三、磁盘IO使用情况自动发现

    1、磁盘IO自动发现脚本

    #!/bin/bash
     diskarray=(`cat /proc/diskstats |grep -E "sd[a-z]|xvd[a-z]|vd[a-z]"|awk '{print $3}'|sort|uniq   2>/dev/null`)
    
     length=${#diskarray[@]}
    printf "{
    "
    printf  '	'""data":["
    for ((i=0;i<$length;i++))
    do
            printf '
    		{'
            printf ""{#DISK_NAME}":"${diskarray[$i]}"}"
            if [ $i -lt $[$length-1] ];then
                    printf ','
            fi
    done
    printf  "
    	]
    "
    printf "}
    "

    2、磁盘IO状态脚本

    #/bin/bash
    
    device=$1
    item=$2
    
    IOSTAT_PID=`ps aux | grep "iostat -dxkt 1" | grep -v grep | awk '{print $2}'`
    if [ -z "$IOSTAT_PID" ];then
        `nohup /usr/bin/iostat -dxkt 1  > /tmp/iostat_output 2>/dev/null &`
        sleep 2
    fi
    
    case $item in
    #         rrqm)
    #            /usr/bin/tail -n20 /tmp/iostat_output |grep "$device"|tail -1|awk '{print $2}'
    #            ;;
    #         wrqm)
    #            /usr/bin/tail -n20 /tmp/iostat_output |grep "$device"|tail -1|awk '{print $3}'
    #            ;;
    #          rps)
    #            /usr/bin/tail -n20 /tmp/iostat_output |grep "$device"|tail -1|awk '{print $4}'
    #            ;;
    #          wps)
    #            /usr/bin/tail -n20 /tmp/iostat_output |grep "$device" |tail -1|awk '{print $5}'
    #            ;;
    #        rKBps)
    #            /usr/bin/tail -n20 /tmp/iostat_output |grep "$device" |tail -1|awk '{print $6}'
    #            ;;
    #        wKBps)
    #            /usr/bin/tail -n20 /tmp/iostat_output |grep "$device" |tail -1|awk '{print $7}'
    #            ;;
    #     avgrq-sz)
    #            /usr/bin/tail -n20 /tmp/iostat_output |grep "$device" |tail -1|awk '{print $8}'
    #            ;;
    #     avgqu-sz)
    #            /usr/bin/tail -n20 /tmp/iostat_output |grep "$device" |tail -1|awk '{print $9}'
    #            ;;
    #        await)
    #            /usr/bin/tail -n20 /tmp/iostat_output |grep "$device" |tail -1|awk '{print $10}'
    #            ;;
    #      r_await)
    #            /usr/bin/tail -n20 /tmp/iostat_output |grep "$device" |tail -1|awk '{print $11}'
    #            ;;
    #      w_await)
    #            /usr/bin/tail -n20 /tmp/iostat_output |grep "$device" |tail -1|awk '{print $12}'
    #            ;;
    #        svctm)
    #            /usr/bin/tail -n20 /tmp/iostat_output |grep "$device" |tail -1|awk '{print $13}'
    #            ;;
             util)
                echo `/usr/bin/tail -n20 /tmp/iostat_output |grep "$device" |tail -1|awk '{print $14}'`
                ;;
    esac

    3、编写自动发现配置文件

    cat disk-status.conf
    UserParameter=disk.discovery,/etc/zabbix/script/disk.discovery.sh
    UserParameter=disk.status[*],/etc/zabbix/script/disk.status.sh $1 $2

    4、定义自动发现规则

     

       当磁盘util利用率连续采集3次的值的平均值超过80则报警;

    四、监控磁盘空间使用率

      用zabbix自带的键采集vfs.fs;

    1、定义自动发现规则

    2、定义过滤器

      因为有些服务器系统,文件系统类型很多,我们只过滤我们需要的;

    [root@localhost ~]# zabbix_get -s 10.30.1.12 -k "vfs.fs.discovery"
    {"data":[{"{#FSNAME}":"/","{#FSTYPE}":"rootfs"},{"{#FSNAME}":"/sys","{#FSTYPE}":"sysfs"},{"{#FSNAME}":"/proc","{#FSTYPE}":"proc"},{"{#FSNAME}":"/dev","{#FSTYPE}":"devtmpfs"},{"{#FSNAME}":"/sys/kernel/security","{#FSTYPE}":"securityfs"},{"{#FSNAME}":"/dev/shm","{#FSTYPE}":"tmpfs"},{"{#FSNAME}":"/dev/pts","{#FSTYPE}":"devpts"},{"{#FSNAME}":"/run","{#FSTYPE}":"tmpfs"},{"{#FSNAME}":"/sys/fs/cgroup","{#FSTYPE}":"tmpfs"},{"{#FSNAME}":"/sys/fs/cgroup/systemd","{#FSTYPE}":"cgroup"},{"{#FSNAME}":"/sys/fs/pstore","{#FSTYPE}":"pstore"},{"{#FSNAME}":"/sys/fs/cgroup/cpu,cpuacct","{#FSTYPE}":"cgroup"},{"{#FSNAME}":"/sys/fs/cgroup/hugetlb","{#FSTYPE}":"cgroup"},{"{#FSNAME}":"/sys/fs/cgroup/pids","{#FSTYPE}":"cgroup"},{"{#FSNAME}":"/sys/fs/cgroup/net_cls,net_prio","{#FSTYPE}":"cgroup"},{"{#FSNAME}":"/sys/fs/cgroup/memory","{#FSTYPE}":"cgroup"},{"{#FSNAME}":"/sys/fs/cgroup/perf_event","{#FSTYPE}":"cgroup"},{"{#FSNAME}":"/sys/fs/cgroup/blkio","{#FSTYPE}":"cgroup"},{"{#FSNAME}":"/sys/fs/cgroup/devices","{#FSTYPE}":"cgroup"},{"{#FSNAME}":"/sys/fs/cgroup/freezer","{#FSTYPE}":"cgroup"},{"{#FSNAME}":"/sys/fs/cgroup/cpuset","{#FSTYPE}":"cgroup"},{"{#FSNAME}":"/sys/kernel/config","{#FSTYPE}":"configfs"},{"{#FSNAME}":"/","{#FSTYPE}":"xfs"},{"{#FSNAME}":"/proc/sys/fs/binfmt_misc","{#FSTYPE}":"autofs"},{"{#FSNAME}":"/sys/kernel/debug","{#FSTYPE}":"debugfs"},{"{#FSNAME}":"/dev/hugepages","{#FSTYPE}":"hugetlbfs"},{"{#FSNAME}":"/dev/mqueue","{#FSTYPE}":"mqueue"},{"{#FSNAME}":"/data","{#FSTYPE}":"ext4"},{"{#FSNAME}":"/run/user/0","{#FSTYPE}":"tmpfs"},{"{#FSNAME}":"/proc/sys/fs/binfmt_misc","{#FSTYPE}":"binfmt_misc"},{"{#FSNAME}":"/mnt/movtile_vc","{#FSTYPE}":"nfs"},{"{#FSNAME}":"/mnt/movtile_vc","{#FSTYPE}":"nfs"},{"{#FSNAME}":"/mnt/movtile","{#FSTYPE}":"nfs"},{"{#FSNAME}":"/run/user/1001","{#FSTYPE}":"tmpfs"}]}

      返回的是json格式的,数据,不太好看,可以用jq命令格式化一下;

     

     只需要展示文件系统类型为nfs、ext4、xfs的磁盘空间大小;

    3、定义监控项目原型

    {#FSNAME} 可用磁盘空间
    	名称:$1 可用磁盘空间
    	键值:vfs.fs.size[{#FSNAME},free]
    	信息类型:数字无正负
    	单位:B
    {#FSNAME} 磁盘总空间
    	名称:$1 磁盘总空间
    	键值:vfs.fs.size[{#FSNAME},total]
    	信息类型:数字无正负
    	单位:B
    Free disk space on {#FSNAME}(percentage)
    	名称:Free disk space on $1(percentage)
    	键值:vfs.fs.size[{#FSNAME},pfree]
    	信息类型:浮点数
    	单位:%
    Free inodes on {#FSNAME} (percentage)
    	名称:Free inodes on $1 (percentage)
    	键值:vfs.fs.inode[{#FSNAME},pfree]
    	信息类型:浮点数
    	单位:%
    Used disk space on {#FSNAME}
    	名称:Used disk space on $1
    	键值:vfs.fs.size[{#FSNAME},used]
    	信息类型:数字无正负
    	单位:B

    4、定义触发器类型

    名称:Free inodes小于20% on volume {#FSNAME}
    表达式:{system-information:vfs.fs.inode[{#FSNAME},pfree].last(0)}<20
    #########
    名称:可用磁盘空间小于 20% on volume {#FSNAME}
    表达式:{system-information:vfs.fs.size[{#FSNAME},pfree].last(0)}<20

     5、定义图形原型

  • 相关阅读:
    writeToFile 读写文件问题
    iOS 设置代理过程
    iOS UIView 快速修改 frame,
    touches,motion触摸事件响应
    集合视图控制器(CollectionViewController) 、 标签控制器(TabBarController) 、 高级控件介绍
    触控(Touch) 、 布局(Layout)
    Autoresizing和AutoLayout
    动画(Animation) 、 高级动画(Core Animation)
    ios开发环境 分支语句 、 循环结构(for) 、 循环结构
    oc内存管理总结(一)
  • 原文地址:https://www.cnblogs.com/zhangzhide/p/15117792.html
Copyright © 2011-2022 走看看