微服务告警监控模板配置


参考zabbix官方中文文档 https://www.zabbix.com/documentation/3.4/zh/manual/config/items


知识点

1、触发器表达式

表达式语法规则 {<服务器>:<键> <函数>(<参数>)} <操作> <常数>

1个小时内cpu负载最小值小于0.2

test:system.cpu.load[percpu,avg1].min(1h)}<0.2

cpu负载最近10个返回值,最小值小于0.2

test:system.cpu.load[percpu,avg1].min(#10)}<0.2

 

目前,触发器所支持的函数有

https://www.zabbix.com/documentation/3.4/zh/manual/appendix/triggers/functions

avg 平均值
count 数据统计
change 返回最后的一个值和倒数第二个值对比
date 时间
dayofweek 本周的第几天
delta 指定时间范围内和数值内的
diff 文件是否有改变

iregexp 忽略字符大小写,正则表达式
regexp 检查最后一次采样的数据是否能够被制定的模式所匹配,
1表示匹配,0表示不匹配 主要用来监控日志内容的关键字

last 最近几次采样
max 最近采样最大值
min
nodata (对于采集不到数据)没有数据判断异常
now 返回自unix元年只此刻经历的秒数
prev:倒数第二个采样值;

str 从最后一个采样中,查找此次指定的字符,1找到0没找到
sum

parameter 函数参数:大多数数值函数可以接受秒数为其参数,
而如果在数值参数之前使用”#“做为前缀,则表示为最近几次的取值,
如sum(300)表示300秒内所有取值之和,而sum(#10)则表示最近
10次取值之和;
此外,avg、count、last、min和max 还支持使用第二个参数,
用于完成时间限定;例如:max(1h,7d)将返回一周之前的最大值;

  

 

微服务告警监控

以下用fillorder服务为例
fillorder服务本机IP:10.200.130.96 zabbixz server IP:10.200.130.17

zabbix_agentd端配置

[appdeploy@fillorder1 etc]$ grep -v ^# /usr/local/zabbix_agentd/etc/zabbix_agentd.conf
LogFile=/tmp/zabbix_agentd.log
Server=10.200.130.17
ServerActive=10.200.130.17
Hostname=fillorder1
Timeout=30
User=appdeploy
UserParameter=fezs_para[*],/usr/local/zabbix_agentd/scripts/zabbix_para.sh $1 $2

  

zabbix_para.sh

[appdeploy@fillorder1 ~]$ cat /usr/local/zabbix_agentd/scripts/zabbix_para.sh
#!/bin/bash
type="$1"
para2="$2"

function accessnum()
{
logs_path="${para2}"
cd "${logs_path}" 
today=`date +"%Y-%m-%d"`
yesday=`date +"%Y-%m-%d" -d yesterday`
cur_min=`date +%H%M`

if [ ${cur_min} = "0000" ] ;then
    log_file="access.${yesday}.log"
else
    log_file="access.${today}.log"
fi

time=`date +"%Y-%m-%d %H:%M" -d "-1 minutes"`

if ! [ -f "${log_file}" ] ;then
    echo "0"
else
    cat ${log_file}|grep "^${time}"|grep -v HEAD|wc -l
fi
}

function gettcpnum()
{
 ss -antp|grep ESTAB|wc -l
}

function errorlognum()
{
logs_dir="${para2}"
log_files=WarnLog.`date +"%Y-%m-%d"`.*.log

ls ${logs_dir}/${log_files} > /dev/null 2>&1
[ $? -gt 0 ] && echo "0" && exit 0

t1=`date -d "1 minutes ago" +"%Y-%m-%d %H:%M"`

grep -c -iE  "^${t1}.*ERROR.*Exception" ${logs_dir}/${log_files}
}

function getcpu()
{
jcname=${para2}
pid=`ps -ef|grep java|grep ${jcname}|awk '{print $2}'`
top -c -b -n 1|grep ${pid}|grep -v grep|awk '{print $9}'
}

function getmem()
{
jcname=${para2}
pid=`ps -ef|grep java|grep ${jcname}|awk '{print $2}'`
mem=`cat /proc/${pid}/status|grep VmRSS|awk '{print $2}'`
mem=$[mem*1024]
echo $mem
}

function accesserrnum()
{
logs_path="${para2}"
cd "${logs_path}" 
today=`date +"%Y-%m-%d"`
yesday=`date +"%Y-%m-%d" -d yesterday`
cur_min=`date +%H%M`

if [ ${cur_min} = "0000" ] ;then
    log_file="access.${yesday}.log"
else
    log_file="access.${today}.log"
fi

time=`date +"%Y-%m-%d %H:%M" -d "-1 minutes"`

if ! [ -f "${log_file}" ] ;then
    echo "0"
else
    cat ${log_file}|grep "^${time}"|grep -v HEAD|awk '$10>=400'|wc -l
fi
}

case $type in
	accessnum)
	accessnum;;
	gettcpnum)
    gettcpnum;;
	getcpu)
	getcpu;;
	getmem)
	getmem;;
	errorlognum)
	errorlognum;;
	accesserrnum)
	accesserrnum;;
    *)
esac

  

一、配置--创建主机

 

二、模板

完成

查看之前已经配置好的模板

应用集 5个
先不用看,在监控项里面可以创建

 

三、监控项 5个

1、accessnum_fillorder 监控项

键值 fezs_para[accessnum,/app/fillorder/logs]

2、access_error_resp_fillorder 监控项 监控acces接口访问日志

键值 logrt["/app/fillorder/logs/access.20[0-9][0-9]\-[0-9][0-9]\-[0-9][0-9].log"," ([45][0-9][0-9]) [-0-9]+ [0-9]+$",,50,skip,]

3、getcpu-fillorder 监控项

键值 fezs_para[getcpu,fillorder]

4、getmem-fillorder 监控项

键值 fezs_para[getmem,fillorder] 

5、port_5112 监控项 监控5112端口

键值 net.tcp.listen[5112]

 

触发器 3个


1、fillorder is down

表达式 {Micro-fillorder:net.tcp.listen[5112].max(3)}=0
Micro-fillorder 主机名或模板名(模板套用到主机上)
net.tcp.listen[5112] 键值
max(3) 3秒函数范围
0 预设值

注释:3秒内采集到的最大值如果等于0则进入PROBLEM状态;

  


2、fillorder 服务出现接口调用异常

表达式
{Micro-fillorder:logrt["/app/fillorder/logs/access.20[0-9][0-9]\-[0-9][0-9]\-[0-9][0-9].log"," ([45][0-9][0-9]) [-0-9]+ [0-9]+$",,50,skip,].strlen()}>0
and 
{Micro-fillorder:logrt["/app/fillorder/logs/access.20[0-9][0-9]\-[0-9][0-9]\-[0-9][0-9].log"," ([45][0-9][0-9]) [-0-9]+ [0-9]+$",,50,skip,].nodata(60)}=0
说明:
and 两个是1时 等于1 or 其中一个1是1 等于1
strlen() 最新值的字符长度 strlen()(等同于 strlen(#1)) → 最新值的长度 strlen(#3) → 最新的第三个值的长度
nodata() 返回值:1 - 指定评估期没有接收到数据 0 - 其它

  

3、fillorder 进程CPU超过90%

表达式
{Micro-fillorder:fezs_para[getcpu,fillorder].min(#2)}>90
min(#2) 返回最小值,取倒数第二个

  

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM