优化mtr监控策略
This commit is contained in:
@@ -4,6 +4,8 @@ import com.fasterxml.jackson.annotation.JsonFormat;
|
||||
import lombok.Data;
|
||||
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* mtr策略信息
|
||||
@@ -42,4 +44,6 @@ public class MtrPolicyConfigEO {
|
||||
|
||||
/** 探测频率(秒) */
|
||||
private Long probeFrequency;
|
||||
/** clientId和ip对应集合 */
|
||||
private Map<String, List<String>> clientIdToIpsMap;
|
||||
}
|
||||
|
||||
@@ -7,6 +7,7 @@ import java.util.Date;
|
||||
@Data
|
||||
public class MtrVO {
|
||||
private String targetIp; // 目标IP
|
||||
private String clientId; // 对应的clientId
|
||||
private Long policyId; // 策略ID
|
||||
private double firstLossPercent; // 第一次探测丢包率
|
||||
private double finalLossPercent; // 最终丢包率
|
||||
|
||||
@@ -33,6 +33,7 @@ import javax.annotation.Resource;
|
||||
import java.io.*;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.nio.file.*;
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.time.LocalDateTime;
|
||||
import java.util.*;
|
||||
import java.util.concurrent.CompletableFuture;
|
||||
@@ -287,6 +288,8 @@ public class AgentServiceImpl implements AgentService {
|
||||
// 检测监控策略配置
|
||||
AssertLog.info("检测监控策略配置");
|
||||
checkMonitor();
|
||||
AssertLog.info("检测mtr探测策略配置");
|
||||
checkMtrDelect();
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -833,7 +836,24 @@ public class AgentServiceImpl implements AgentService {
|
||||
}
|
||||
if(jsonObject.containsKey("mtrPolicys")){
|
||||
String mtrPolicys = jsonObject.getString("mtrPolicys");
|
||||
AssertLog.info("接收的mtrPolicys原始值: {}", mtrPolicys);
|
||||
AssertLog.info("GlobalConfig.MTRPOLICYMSG当前值: {}", GlobalConfig.MTRPOLICYMSG);
|
||||
if(!mtrPolicys.equals(GlobalConfig.MTRPOLICYMSG)){
|
||||
// 准备写入的内容
|
||||
String[] lines = {
|
||||
"# MTR探测策略配置文件",
|
||||
"# 生成时间: " + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()),
|
||||
"",
|
||||
"# MTR策略配置(JSON格式)",
|
||||
"mtrPolicys=" + mtrPolicys,
|
||||
"",
|
||||
"# 配置元信息",
|
||||
"lastUpdateTime=" + System.currentTimeMillis()
|
||||
};
|
||||
//检查外置目录是否存在
|
||||
if(AdvancedAsyncDownloader.createSingleDirectoryIfNotExists(properties.getConfPath())){
|
||||
AgentUtil.bufferedWriter(properties.getConfPath()+"/mtrdelect.conf",lines);
|
||||
}
|
||||
GlobalConfig.MTRPOLICYMSG = mtrPolicys;
|
||||
List<MtrPolicyConfigEO> mtrPolicyConfigEOList = JSON.parseArray(mtrPolicys, MtrPolicyConfigEO.class);
|
||||
try {
|
||||
@@ -1495,6 +1515,49 @@ public class AgentServiceImpl implements AgentService {
|
||||
|
||||
}
|
||||
|
||||
public void checkMtrDelect(){
|
||||
File mtrFile = new File(properties.getConfPath() + "/mtrdelect.conf");
|
||||
if (mtrFile.exists()) {
|
||||
Properties props = new Properties();
|
||||
try (InputStream input = Files.newInputStream(mtrFile.toPath())) {
|
||||
props.load(input);
|
||||
|
||||
String mtrPolicys = props.getProperty("mtrPolicys");
|
||||
if (StringUtils.isNotBlank(mtrPolicys)) {
|
||||
GlobalConfig.MTRPOLICYMSG = mtrPolicys;
|
||||
|
||||
// 解析策略并启动定时任务
|
||||
List<MtrPolicyConfigEO> mtrPolicyConfigEOList = JSON.parseArray(mtrPolicys, MtrPolicyConfigEO.class);
|
||||
if (CollectionUtil.isNotEmpty(mtrPolicyConfigEOList)) {
|
||||
// 检查策略是否仍然有效
|
||||
long currentTimestamp = System.currentTimeMillis() / 1000;
|
||||
boolean hasValidPolicy = false;
|
||||
|
||||
for (MtrPolicyConfigEO policy : mtrPolicyConfigEOList) {
|
||||
if (isPolicyTimeValid(policy, currentTimestamp)) {
|
||||
hasValidPolicy = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (hasValidPolicy) {
|
||||
long milli = AgentUtil.millisecondsToNext5Minute();
|
||||
dynamicTaskService.scheduleTask("mtrTask",
|
||||
businessTasks::mtrTask, milli, 300000L);
|
||||
|
||||
AssertLog.info("应用启动时加载MTR配置成功,策略数量: {}", mtrPolicyConfigEOList.size());
|
||||
} else {
|
||||
AssertLog.info("应用启动时加载的MTR配置已过期");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
} catch (Exception e) {
|
||||
AssertLog.error("应用启动时加载MTR配置异常", e);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public void caseTypeBySystem(String type, int interval, boolean collect){
|
||||
|
||||
|
||||
@@ -101,11 +101,36 @@ public class MtrServiceImpl implements MtrService {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 预先构建IP到clientId的反向映射
|
||||
*/
|
||||
private Map<String, String> buildIpToClientIdMap(Map<String, List<String>> clientIdToIpMap) {
|
||||
Map<String, String> ipToClientIdMap = new HashMap<>();
|
||||
|
||||
if (clientIdToIpMap == null) {
|
||||
return ipToClientIdMap;
|
||||
}
|
||||
|
||||
for (Map.Entry<String, List<String>> entry : clientIdToIpMap.entrySet()) {
|
||||
String clientId = entry.getKey();
|
||||
List<String> ips = entry.getValue();
|
||||
if (ips != null) {
|
||||
for (String ip : ips) {
|
||||
ipToClientIdMap.put(ip.trim(), clientId);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return ipToClientIdMap;
|
||||
}
|
||||
/**
|
||||
* 执行单个IP的MTR探测
|
||||
*/
|
||||
private MtrVO executeSingleMtrProbe(String targetIp, MtrPolicyConfigEO policy, long timestamp) {
|
||||
// 构建IP到clientId的反向映射
|
||||
Map<String, String> ipToClientIdMap = buildIpToClientIdMap(policy.getClientIdToIpsMap());
|
||||
MtrVO mtrVO = new MtrVO();
|
||||
mtrVO.setClientId(ipToClientIdMap.getOrDefault(targetIp, "unknown"));
|
||||
mtrVO.setTargetIp(targetIp);
|
||||
mtrVO.setPolicyId(policy.getId());
|
||||
mtrVO.setTimestamp(timestamp);
|
||||
|
||||
Reference in New Issue
Block a user