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 "{\n" printf '\t"data":[\n' for ((i=0;i<${#java_server[@]};i++)) do printf '\t\t{\n' num=$(echo $((${#java_server[@]}-1))) if [ "$i" == ${num} ]; then printf "\t\t\t\"{#JAVA_NAME}\":\"${java_server[$i]}\"}\n" else printf "\t\t\t\"{#JAVA_NAME}\":\"${java_server[$i]}\"},\n" fi done printf "\t]\n" printf "}\n"
要以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 "\bsd[a-z]\b|\bxvd[a-z]\b|\bvd[a-z]\b"|awk '{print $3}'|sort|uniq 2>/dev/null`) length=${#diskarray[@]} printf "{\n" printf '\t'"\"data\":[" for ((i=0;i<$length;i++)) do printf '\n\t\t{' printf "\"{#DISK_NAME}\":\"${diskarray[$i]}\"}" if [ $i -lt $[$length-1] ];then printf ',' fi done printf "\n\t]\n" printf "}\n"
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 "\b$device\b"|tail -1|awk '{print $2}' # ;; # wrqm) # /usr/bin/tail -n20 /tmp/iostat_output |grep "\b$device\b"|tail -1|awk '{print $3}' # ;; # rps) # /usr/bin/tail -n20 /tmp/iostat_output |grep "\b$device\b"|tail -1|awk '{print $4}' # ;; # wps) # /usr/bin/tail -n20 /tmp/iostat_output |grep "\b$device\b" |tail -1|awk '{print $5}' # ;; # rKBps) # /usr/bin/tail -n20 /tmp/iostat_output |grep "\b$device\b" |tail -1|awk '{print $6}' # ;; # wKBps) # /usr/bin/tail -n20 /tmp/iostat_output |grep "\b$device\b" |tail -1|awk '{print $7}' # ;; # avgrq-sz) # /usr/bin/tail -n20 /tmp/iostat_output |grep "\b$device\b" |tail -1|awk '{print $8}' # ;; # avgqu-sz) # /usr/bin/tail -n20 /tmp/iostat_output |grep "\b$device\b" |tail -1|awk '{print $9}' # ;; # await) # /usr/bin/tail -n20 /tmp/iostat_output |grep "\b$device\b" |tail -1|awk '{print $10}' # ;; # r_await) # /usr/bin/tail -n20 /tmp/iostat_output |grep "\b$device\b" |tail -1|awk '{print $11}' # ;; # w_await) # /usr/bin/tail -n20 /tmp/iostat_output |grep "\b$device\b" |tail -1|awk '{print $12}' # ;; # svctm) # /usr/bin/tail -n20 /tmp/iostat_output |grep "\b$device\b" |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则报警;
原文地址:https://www.cnblogs.com/zhangzhide/p/15117792.html
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Linux编译C++
- 聊聊dubbo-go的tracingFilter
- JDBC - 第一天
- JavaSE - 排序算法
- JavaSE - 多态的本质
- Result Maps collection does not contain value for XXX 错误
- 当端口被占用如何kill占用端口的进程
- 将本地仓库同步到Github上的远程仓库
- 毫不留情地揭开 ArrayList 和 LinkedList 之间的神秘面纱
- 关于void QProcess::start参数问题的解决
- Python格式化输出
- 多线程 - 生产者消费者模式
- TCP的三次握手和四次挥手
- Springboot异常处理
- Excel实战技巧84: 让形状生动起来