问题场景: 一个中医服务器上部署多个bes并同时启动,配置多个监控后但是监控数据为0,而bes控制台有数据
排查结果: zabbix取值间隔设置1分钟,bes控制台取值是5秒,当服务本身活跃线程不多时,因为时间差导致结果不一样
// 定义一个名为(value)的函数,该函数接收一个参数value function (value) {
// 定义一个正则表达式变量reg,用于匹配以#JMXOBJ:开头且后面跟着任意字符.*?直到结尾的模式 var reg = /#JMXOBJ:.*?/g;
// 使用match方法获取到value中符合reg正则表达式的部分,并将其赋值给replace_text var replace_text = value.match(reg);
// 遍历replace_text数组 for(let i in replace_text) { // 将replace_text[i]分割成两部分,根据":"符号进行切割,将结果赋值给arr var arr = replace_text[i].split(':');
// 将arr[0]替换为"",并将结果重新赋值给arr arr = replace_text[i].replace(arr[0]+':','');
// 判断arr是否等于"com.kes.appserv:type=Executor,name=httpWorkerThread-19201(http-thread-pool)" if(arr == "com.kes.appserv:type=Executor,name=httpWorkerThread-19201(http-thread-pool)") { // 如果条件成立,则对name进行处理,使其长度减去1,将结果赋值给last_length name = arr.split('=')[1]; last_length = name.length - 1;
// 对tmp_value进行处理,去除首尾空格,并将结果重新赋值给tmp_value tmp_value =[last_length]; } else {
// 否则,对name进行处理,使其长度减去1,将结果赋值给last_length name = arr.split('='); last_length = name.length - 1;
// 对tmp_value进行处理,去除首尾空格,并将结果重新赋值给
tmp_value tmp_value = name[last_length]; }
// 对replace_text[i]进行处理,添加"#JMX_STB:"前缀,使用replace方法去除空格,并在末尾添加双引号,将结果赋值给replace_texti var replace_texti = replace_text[i]+"(#JMX_STB):"+tmp_value.replace(" ","").replace(" ","")+"";
// 将replace_texti替换掉replace_text中的第i个元素 replace_text[i] = replace_texti;
// 将处理后的replace_texti替换掉原始value中的对应部分
value =value.replace(replace_text[i],replace_text); }
// 返回修改后的value return value; }
以上是预处理脚本,这个自动发现预处理是注册监控项用的,意思是匹配到19201,执行特定替换逻辑,否则执行默认替换逻辑