summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorshizhendong <[email protected]>2024-04-24 15:52:21 +0630
committershizhendong <[email protected]>2024-04-24 15:52:21 +0630
commit4e2b41eb074d918e85ad0a9a7b75d5e2433e22a6 (patch)
tree26bdc00cc43af97e395b6a3068f998f57ea01e4a
parent74968e70e90636668d4eb2400e069153b6583e8b (diff)
feat: remote_write nz_agent_status metrics to prometheusrel-24.01.13rel-24.01.12
1. 取消 nz-web 自监控 2. 定时任务推送 nz_agent_status 到 prometheus
-rw-r--r--nz-admin/src/main/java/com/nis/common/config/ShiroConfig.java42
-rw-r--r--nz-admin/src/main/java/com/nis/common/job/JobConfig.java17
-rw-r--r--nz-admin/src/main/java/com/nis/modules/agent/job/AgentConfigUtil.java94
-rw-r--r--nz-admin/src/main/java/com/nis/modules/agent/job/AgentStatusMetricsUpdaterJob.java116
-rw-r--r--nz-admin/src/main/java/com/nis/modules/metric/dto/NezhaMetrics.java308
5 files changed, 353 insertions, 224 deletions
diff --git a/nz-admin/src/main/java/com/nis/common/config/ShiroConfig.java b/nz-admin/src/main/java/com/nis/common/config/ShiroConfig.java
index 2db364e0..88b957ae 100644
--- a/nz-admin/src/main/java/com/nis/common/config/ShiroConfig.java
+++ b/nz-admin/src/main/java/com/nis/common/config/ShiroConfig.java
@@ -6,7 +6,6 @@ import com.nis.common.utils.Constant;
import com.nis.common.utils.R;
import com.nis.common.utils.RCode;
import com.nis.common.utils.Tool;
-import com.nis.modules.metric.dto.NezhaMetrics;
import com.nis.modules.sys.dao.SysApiKeyDao;
import com.nis.modules.sys.dao.SysLoginSessionDao;
import com.nis.modules.sys.service.LicenseService;
@@ -15,7 +14,6 @@ import com.nis.modules.sys.shiro.MariadbSessionDao;
import com.nis.modules.sys.shiro.MariadbSessionFactory;
import com.nis.modules.sys.shiro.MariadbSessionManager;
import com.nis.modules.sys.shiro.UserRealm;
-import io.micrometer.core.instrument.MeterRegistry;
import jakarta.servlet.Filter;
import jakarta.servlet.ServletRequest;
import jakarta.servlet.ServletResponse;
@@ -64,11 +62,11 @@ public class ShiroConfig {
private String compileType;
@Value("${vendorCode}")
private String vendorCode;
- @Autowired
- private NezhaMetrics nezhaMetrics;
- @Autowired
- private MeterRegistry meterRegistry;
+// @Autowired
+// private NezhaMetrics nezhaMetrics;
+// @Autowired
+// private MeterRegistry meterRegistry;
@Autowired
private LicenseService licenseService;
@@ -119,17 +117,17 @@ public class ShiroConfig {
/*
* 自定义 过滤器
*/
- filterMap.put("/actuator/prometheus", "metricsFilter"); // prometheus metrics
+// filterMap.put("/actuator/prometheus", "metricsFilter"); // prometheus metrics
filterMap.put("/actuator/**", "anon"); // 诊断接口
filterMap.put("/**", "tokenCheckFilter,licenseFilter");
Map<String, Filter> cumstomFilterMap = new LinkedHashMap<String, Filter>();
LicenseShiroFilter licenseShiroFilter = new LicenseShiroFilter();
- MetricsShiroFilter metricsShiroFilter = new MetricsShiroFilter();
+// MetricsShiroFilter metricsShiroFilter = new MetricsShiroFilter();
TokenCheckFilter tokenCheckFilter = new TokenCheckFilter(sysApiKeyDao,loginSessionDao);
cumstomFilterMap.put("tokenCheckFilter", tokenCheckFilter);
cumstomFilterMap.put("licenseFilter", licenseShiroFilter);
- cumstomFilterMap.put("metricsFilter", metricsShiroFilter);
+// cumstomFilterMap.put("metricsFilter", metricsShiroFilter);
shiroFilter.setFilters(cumstomFilterMap);
shiroFilter.setFilterChainDefinitionMap(filterMap);
@@ -165,19 +163,19 @@ public class ShiroConfig {
}
- public class MetricsShiroFilter extends AccessControlFilter {
- @Override
- protected boolean isAccessAllowed(ServletRequest servletRequest, ServletResponse servletResponse, Object o)
- throws Exception {
- nezhaMetrics.bindTo(meterRegistry);
- return true;
- }
-
- @Override
- protected boolean onAccessDenied(ServletRequest request, ServletResponse response) throws Exception {
- return false;
- }
- }
+// public class MetricsShiroFilter extends AccessControlFilter {
+// @Override
+// protected boolean isAccessAllowed(ServletRequest servletRequest, ServletResponse servletResponse, Object o)
+// throws Exception {
+// nezhaMetrics.bindTo(meterRegistry);
+// return true;
+// }
+//
+// @Override
+// protected boolean onAccessDenied(ServletRequest request, ServletResponse response) throws Exception {
+// return false;
+// }
+// }
@Bean
@ConditionalOnExpression("${nezha.shiroPermisSupport:true}")
diff --git a/nz-admin/src/main/java/com/nis/common/job/JobConfig.java b/nz-admin/src/main/java/com/nis/common/job/JobConfig.java
index b236680e..c3a1d984 100644
--- a/nz-admin/src/main/java/com/nis/common/job/JobConfig.java
+++ b/nz-admin/src/main/java/com/nis/common/job/JobConfig.java
@@ -3,10 +3,7 @@ package com.nis.common.job;
import cn.hutool.core.util.StrUtil;
import cn.hutool.log.Log;
import com.nis.common.utils.Tool;
-import com.nis.modules.agent.job.AgentHealthCheckJob;
-import com.nis.modules.agent.job.AutoConfigAgentJob;
-import com.nis.modules.agent.job.CortexHistoryDataDelJob;
-import com.nis.modules.agent.job.LokiHistoryDataDelJob;
+import com.nis.modules.agent.job.*;
import com.nis.modules.alert.backend.AlertMessageExpiredJob;
import com.nis.modules.alert.backend.AlertRuleManagerJob;
import com.nis.modules.alert.backend.AlertSilenceStatusJob;
@@ -112,6 +109,9 @@ public class JobConfig {
@Value("${nezha.localCacheSyncJobCron:0/10 * * * * ?}")
private String localCacheSyncJobCron;
+ @Value("${nezha.agentStatusMetricsUpdaterJobCron:0 0/1 * * * ? *}")
+ private String agentStatusMetricsUpdaterJobCron;
+
@Autowired
private Scheduler scheduler;
@Autowired
@@ -142,6 +142,7 @@ public class JobConfig {
private String sysLoginSessionCleanJob = "SYS_LOGIN_SESSION_CLEAN_JOB";
private String softwareLicenseStatusJobName = "SOFTWARE_LICENSE_STATUS_JOB";
private String localCacheSyncJobName = "LOCAL_CACHE_SYNC_JOB";
+ private String agentStatusMetricsUpdaterJobName = "AGENT_STATUS_METRICS_UPDATER_JOB";
@Bean
public JobDetail agentCronJobDetail() {
@@ -258,6 +259,11 @@ public class JobConfig {
return JobBuilder.newJob(LocalCacheSyncJob.class).withIdentity(JOB_NAME + localCacheSyncJobName).storeDurably().build();
}
+ @Bean
+ public JobDetail agentStatusMetricsUpdaterJobDetail() {
+ return JobBuilder.newJob(AgentStatusMetricsUpdaterJob.class).withIdentity(JOB_NAME + agentStatusMetricsUpdaterJobName).storeDurably().build();
+ }
+
@PostConstruct
public void init() throws SchedulerException {
// agent 健康检查定时任务
@@ -328,6 +334,9 @@ public class JobConfig {
// LocalCacheSyncJob
createCronScheduleJob(localCacheSyncJobName, localCacheSyncJobDetail(), Tool.StrUtil.emptyToDefault(localCacheSyncJobCron, "0/10 * * * * ?"));
+
+ // nz_agent_status metrics 定时更新任务
+ createCronScheduleJob(agentStatusMetricsUpdaterJobName, agentStatusMetricsUpdaterJobDetail(), Tool.StrUtil.emptyToDefault(agentStatusMetricsUpdaterJobCron, "0 0/1 * * * ? *"));
}
/**
diff --git a/nz-admin/src/main/java/com/nis/modules/agent/job/AgentConfigUtil.java b/nz-admin/src/main/java/com/nis/modules/agent/job/AgentConfigUtil.java
index 794c9d4a..e63371e5 100644
--- a/nz-admin/src/main/java/com/nis/modules/agent/job/AgentConfigUtil.java
+++ b/nz-admin/src/main/java/com/nis/modules/agent/job/AgentConfigUtil.java
@@ -552,7 +552,7 @@ public class AgentConfigUtil {
// prometheus_metric
Map prometheusMetricJob = this.getPrometheusMetricJob(currentAgent, true);
// nezha_metrics
- Map nezhaMetricsJob = this.getNezhaMetricsJob(currentAgent, true);
+ // Map nezhaMetricsJob = this.getNezhaMetricsJob(currentAgent, true);
// agent metrics
Map agentMetricsJob = this.getAgentMetricsJob(currentAgent, true);
// snmp exporter metrics
@@ -591,7 +591,7 @@ public class AgentConfigUtil {
// 本地存储 , metrics 数据保存于 Prometheus , 弃用 cortex , global 接收 per-datacenter
// 推过来得数据,每一个 global 支持 nzweb 系统指标
if (isLocalStorage) {
- jobList.add(nezhaMetricsJob);
+ // jobList.add(nezhaMetricsJob);
// jobList.add(promMetricsMap);
// metrics 本地存储,弃用 cortex ,直接采用 prometheus , 根据 sys_config prometheus_fed_mode
// 确定 pull/push
@@ -607,13 +607,19 @@ public class AgentConfigUtil {
} else if (StrUtil.equals("2", prometheusFedMode)) {
// global使用 remote_write 集中收集各个 per-datacenter数据 , 通过 联邦 job 收集其他 global 数据(global 负责任务采集,如 ping prometheus 等)
// 只采集 其他 global 即可
- List<Integer> globalAgentIdList = globalAgents.stream().map(Agent::getId).collect(Collectors.toList());
- for (Map map : federateMapList) {
- String jobName = (String) map.get("job_name");
- Integer serverId = Integer.valueOf(jobName.replaceAll("federate_", ""));
- if (globalAgentIdList.contains(serverId) && !serverId.equals(currentAgent.getId())) {
- jobList.add(map);
+ for (Agent agent : globalAgents) {
+ if (Tool.ObjectUtil.equal(agent.getId(), currentAgent.getId())) {
+ continue;
}
+ Map<String, Object> remoteWriteMap = Tool.MapUtil.newHashMap(true);
+ String remoteWriteUrl = String.format("http://%s:%s/api/v1/write", agent.getHost(), prometheusDefaultPort);
+ if (isProxyPush) {
+ remoteWriteUrl = String.format("%s://%s:%s%s/prometheus/proxy/api/v1/write", agent.getProtocol(),
+ agent.getHost(), agent.getPort(), sysConfService.getValue(Constant.CONFAGENT_PATH));
+ }
+ remoteWriteMap.put("url", remoteWriteUrl);
+ remoteWriteMap.put("token", agent.getToken());
+ remoteWriteUrlInfoMapList.add(remoteWriteMap);
}
}
} else {
@@ -629,9 +635,9 @@ public class AgentConfigUtil {
map.put("token", currentAgent.getToken());
remoteWriteUrlInfoMapList.add(map);
- if (isSupportSysteMetrics) {
- jobList.add(nezhaMetricsJob);
- }
+// if (isSupportSysteMetrics) {
+// jobList.add(nezhaMetricsJob);
+// }
}
} else {
// 联邦关闭
@@ -685,9 +691,9 @@ public class AgentConfigUtil {
remoteWriteUrlInfoMapList.add(map);
}
// 不论 本地还是对象存储 ,有一个支持 nzweb 系统指标即可
- if (isSupportSysteMetrics) {
- jobList.add(nezhaMetricsJob);
- }
+// if (isSupportSysteMetrics) {
+// jobList.add(nezhaMetricsJob);
+// }
}
jobList.add(prometheusMetricJob);
jobList.add(agentMetricsJob);
@@ -1182,34 +1188,34 @@ public class AgentConfigUtil {
* @param saveInstanceLabel
* @return
*/
- private Map getNezhaMetricsJob(Agent agent, Boolean saveInstanceLabel) {
- // nezha_metrics
- String alertApi = sysConfService.getValue(Constant.SYSCONFIG_KEY_ALERT_API);
- String scheme = Tool.StrUtil.isBlank(alertApi) ? "http" : alertApi.split("://")[0];
- String target = Tool.StrUtil.isBlank(alertApi) ? "" : alertApi.replace(scheme + "://", "");
- Map nezhaMetricsMap = new LinkedHashMap();
- String[] split = alertApi.split("://");
- nezhaMetricsMap.put("job_name", "nezha_metrics");
- nezhaMetricsMap.put("metrics_path", sysConfService.getValue(Constant.SYSCONFIG_KEY_ALERT_PATH_PREFIX) + "/actuator/prometheus");
- nezhaMetricsMap.put("isFederate", false);
- nezhaMetricsMap.put("scheme", scheme); // 协议
- nezhaMetricsMap.put("instanceRelabel", saveInstanceLabel);
- List nezhaMetricsStaticConfigList = new ArrayList();
- Map nezhaMetricsStaticConfig = new LinkedHashMap(2);
- List nezhaMetricsTargets = new ArrayList();
- nezhaMetricsTargets.add(target); // ip:port
- nezhaMetricsStaticConfig.put("targets", nezhaMetricsTargets);
- Map nezhaLabels = new LinkedHashMap(4);
- Dc dc = dcService.getById(agent.getDcId());
- // nezhaLabels.put("datacenter", ToolUtil.string2Json(dc.getName()));
- nezhaLabels.put("application", "nz-web");
- nezhaLabels.put("agent_name", agent.getName());
- nezhaLabels.put("nz_agent_id", agent.getId());
- nezhaMetricsStaticConfig.put("labels", nezhaLabels);
- nezhaMetricsStaticConfigList.add(nezhaMetricsStaticConfig);
- nezhaMetricsMap.put("staticConfigList", nezhaMetricsStaticConfigList);
- return nezhaMetricsMap;
- }
+// private Map getNezhaMetricsJob(Agent agent, Boolean saveInstanceLabel) {
+// // nezha_metrics
+// String alertApi = sysConfService.getValue(Constant.SYSCONFIG_KEY_ALERT_API);
+// String scheme = Tool.StrUtil.isBlank(alertApi) ? "http" : alertApi.split("://")[0];
+// String target = Tool.StrUtil.isBlank(alertApi) ? "" : alertApi.replace(scheme + "://", "");
+// Map nezhaMetricsMap = new LinkedHashMap();
+// String[] split = alertApi.split("://");
+// nezhaMetricsMap.put("job_name", "nezha_metrics");
+// nezhaMetricsMap.put("metrics_path", sysConfService.getValue(Constant.SYSCONFIG_KEY_ALERT_PATH_PREFIX) + "/actuator/prometheus");
+// nezhaMetricsMap.put("isFederate", false);
+// nezhaMetricsMap.put("scheme", scheme); // 协议
+// nezhaMetricsMap.put("instanceRelabel", saveInstanceLabel);
+// List nezhaMetricsStaticConfigList = new ArrayList();
+// Map nezhaMetricsStaticConfig = new LinkedHashMap(2);
+// List nezhaMetricsTargets = new ArrayList();
+// nezhaMetricsTargets.add(target); // ip:port
+// nezhaMetricsStaticConfig.put("targets", nezhaMetricsTargets);
+// Map nezhaLabels = new LinkedHashMap(4);
+// Dc dc = dcService.getById(agent.getDcId());
+// // nezhaLabels.put("datacenter", ToolUtil.string2Json(dc.getName()));
+// nezhaLabels.put("application", "nz-web");
+// nezhaLabels.put("agent_name", agent.getName());
+// nezhaLabels.put("nz_agent_id", agent.getId());
+// nezhaMetricsStaticConfig.put("labels", nezhaLabels);
+// nezhaMetricsStaticConfigList.add(nezhaMetricsStaticConfig);
+// nezhaMetricsMap.put("staticConfigList", nezhaMetricsStaticConfigList);
+// return nezhaMetricsMap;
+// }
/**
* prometheus agent metrics job
@@ -1395,7 +1401,7 @@ public class AgentConfigUtil {
// prometheus_metric
Map prometheusMetricJob = this.getPrometheusMetricJob(agent, true);
// nezha_metrics
- Map nezhaMetricsJob = this.getNezhaMetricsJob(agent, true);
+ // Map nezhaMetricsJob = this.getNezhaMetricsJob(agent, true);
// agent metrics
Map agentMetricsJob = this.getAgentMetricsJob(agent, true);
// snmp exporter metrics
@@ -1413,7 +1419,7 @@ public class AgentConfigUtil {
jobList.add(snmpExporterMetricsJob);
jobList.add(blackboxExporterMetrics);
- jobList.add(nezhaMetricsJob);
+ // jobList.add(nezhaMetricsJob);
jobList.add(lokiMetricsJob);
jobList.add(cortexMetricsJob);
diff --git a/nz-admin/src/main/java/com/nis/modules/agent/job/AgentStatusMetricsUpdaterJob.java b/nz-admin/src/main/java/com/nis/modules/agent/job/AgentStatusMetricsUpdaterJob.java
new file mode 100644
index 00000000..6534c593
--- /dev/null
+++ b/nz-admin/src/main/java/com/nis/modules/agent/job/AgentStatusMetricsUpdaterJob.java
@@ -0,0 +1,116 @@
+package com.nis.modules.agent.job;
+
+import cn.hutool.log.Log;
+import com.nis.common.protobuf.Types;
+import com.nis.common.utils.Constant;
+import com.nis.common.utils.Tool;
+import com.nis.modules.agent.entity.Agent;
+import com.nis.modules.agent.service.AgentService;
+import com.nis.modules.alert.service.RecordRuleService;
+import com.nis.modules.asset.entity.Dc;
+import com.nis.modules.asset.service.DcService;
+import com.nis.modules.election.dao.LeaderElectionDao;
+import org.apache.commons.lang3.time.StopWatch;
+import org.quartz.DisallowConcurrentExecution;
+import org.quartz.JobExecutionContext;
+import org.quartz.JobExecutionException;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.scheduling.quartz.QuartzJobBean;
+
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+/**
+ * nz_agent_status metrics 定时更新任务
+ */
+@DisallowConcurrentExecution
+public class AgentStatusMetricsUpdaterJob extends QuartzJobBean {
+
+ private static final Log log = Log.get();
+
+ @Autowired
+ private DcService dcService;
+
+ @Autowired
+ private AgentService agentService;
+
+ @Autowired
+ private RecordRuleService recordRuleService;
+
+ @Override
+ protected void executeInternal(JobExecutionContext context) throws JobExecutionException {
+ Thread.currentThread().setName("AgentStatusMetricsUpdaterJob");
+
+ LeaderElectionDao leaderElectionDao = LeaderElectionDao.getInstance();
+ boolean isLeader = leaderElectionDao.isLeader(Constant.SYS_HA_LOCK, Constant.SERVER_ID);
+ log.info("[AgentStatusMetricsUpdaterJob] [Get HA_LOCK] [isLeader: {}]", isLeader);
+ if (Tool.BooleanUtil.negate(isLeader)) return;
+
+ log.info("[AgentStatusMetricsUpdaterJob] [begin]");
+ StopWatch sw = new StopWatch();
+ sw.start();
+ try {
+ this.agentStatusMetricsUpdater();
+ } catch (Exception e) {
+ log.error(e, "[AgentStatusMetricsUpdaterJob] [error]");
+ } finally {
+ sw.stop();
+ }
+
+ log.info("[AgentStatusMetricsUpdaterJob] [finshed] [Run Time: {}]", sw.toString());
+ }
+
+
+ /**
+ * agentStatusMetricsUpdater
+ */
+ private void agentStatusMetricsUpdater() {
+ /**
+ * nz_agent_status
+ */
+ List<Agent> agentList = agentService.list();
+ List<Dc> dcList = dcService.list();
+ Map<Integer, String> dcIdAndNameMap = dcList.stream().collect(Collectors.toMap(Dc::getId, Dc::getName));
+
+ List<Types.TimeSeries> result = Tool.ListUtil.list(false);
+ for (int i = 0; i < agentList.size(); i++) {
+ Agent agent = agentList.get(i);
+ String dcName = Tool.MapUtil.getStr(dcIdAndNameMap, agent.getDcId(), "null");
+ Types.TimeSeries timeSeries = this.buildTimeSeries(agent, dcName);
+ result.add(timeSeries);
+ }
+
+ log.info("[agentStatusMetricsUpdater] [nz_agent_status TimeSeries] [size: {}]", Tool.CollUtil.size(result));
+ recordRuleService.rightPushRecordToCache(result);
+ }
+
+ /**
+ * build TimeSeries
+ *
+ * @param agent
+ * @param dcName
+ * @return
+ */
+ private Types.TimeSeries buildTimeSeries(Agent agent, String dcName) {
+ List<Types.Label> labelList = Tool.ListUtil.list(true);
+
+ labelList.add(Types.Label.newBuilder().setName("datacenter").setValue(dcName).build());
+ labelList.add(Types.Label.newBuilder().setName("type").setValue(Constant.AgentType.getAgentType(agent.getType()).getName()).build());
+ labelList.add(Types.Label.newBuilder().setName("host").setValue(agent.getHost()).build());
+ labelList.add(Types.Label.newBuilder().setName("port").setValue(agent.getPort() + "").build());
+ labelList.add(Types.Label.newBuilder().setName("agent_name").setValue(agent.getName()).build());
+ labelList.add(Types.Label.newBuilder().setName("application").setValue("nz-web").build());
+
+ // __name__ nz_agent_status
+ labelList.add(Types.Label.newBuilder().setName("__name__").setValue("nz_agent_status").build());
+
+ Types.Sample sample = Types.Sample.newBuilder()
+ .setTimestamp(System.currentTimeMillis())
+ .setValue(agent.getStatus())
+ .build();
+
+ Types.TimeSeries timeSeries = Types.TimeSeries.newBuilder().addAllLabels(labelList).addSamples(sample).build();
+ return timeSeries;
+ }
+}
diff --git a/nz-admin/src/main/java/com/nis/modules/metric/dto/NezhaMetrics.java b/nz-admin/src/main/java/com/nis/modules/metric/dto/NezhaMetrics.java
index 8e3168c4..385f1551 100644
--- a/nz-admin/src/main/java/com/nis/modules/metric/dto/NezhaMetrics.java
+++ b/nz-admin/src/main/java/com/nis/modules/metric/dto/NezhaMetrics.java
@@ -1,154 +1,154 @@
-package com.nis.modules.metric.dto;
-
-import com.alibaba.fastjson.JSONObject;
-import com.nis.common.utils.Constant;
-import com.nis.common.utils.Tool;
-import com.nis.common.utils.ToolUtil;
-import com.nis.modules.agent.entity.Agent;
-import com.nis.modules.agent.service.AgentService;
-import com.nis.modules.alert.dao.AlertHandlerDao;
-import com.nis.modules.alert.dao.AlertRuleDao;
-import com.nis.modules.asset.dao.AssetModelDao;
-import com.nis.modules.asset.dao.DcDao;
-import com.nis.modules.asset.entity.Dc;
-import com.nis.modules.module.dao.MonitorModuleDao;
-import com.nis.modules.sys.service.SysConfService;
-import io.micrometer.core.instrument.*;
-import io.micrometer.core.instrument.binder.MeterBinder;
-import io.micrometer.core.instrument.search.Search;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Component;
-
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
-import java.util.stream.Collectors;
-
-@Component
-public class NezhaMetrics implements MeterBinder {
-
- @Autowired
- private DcDao dcDao;
-
- @Autowired
- private AlertRuleDao alertRuleDao;
-
- @Autowired
- private MonitorModuleDao monitorModuleDao;
-
- @Autowired
- private AgentService agentService;
-
- @Autowired
- private AssetModelDao modelDao;
-
- @Autowired
- private SysConfService sysConfService;
-
- @Autowired
- private AlertHandlerDao alertHandlerDao;
-
- @Override
- public void bindTo(MeterRegistry meterRegistry) {
- // 清空指标数据
- this.cleanMeterInRegistryByName(meterRegistry, "nz_alert_nums", "nz_asset_nums", "nz_endpoint_nums", "nz_agent_status", "nz_alerts");
-
- /**
- * alert_nums指标 / 根据告警规则 id 统计激活状态的告警消息数量
- */
- List<MetricsDto> nzAlertMumsMetrics = alertRuleDao.nzAlertMumsMetric();
- for (int i = 0; i < nzAlertMumsMetrics.size(); i++) {
- MetricsDto dto = nzAlertMumsMetrics.get(i);
- Gauge.builder("nz_alert_nums", dto, value -> dto.getTotal())
- .tags("id", dto.getId() + "", "name", dto.getName(), "severity", Tool.StrUtil.nullToEmpty(dto.getSeverity()))
- .description("Alert statistics info")
- .register(meterRegistry);
- }
-
- /**
- * nz_asset_nums
- */
- List<MetricsDto> nzAssetNumsMetric = modelDao.nzAssetNumsMetric();
- for (int i = 0; i < nzAssetNumsMetric.size(); i++) {
- MetricsDto dto = nzAssetNumsMetric.get(i);
- // 这里将统计值扔进 map 操作是避免弱引用 统计结果出现NaN
- Gauge.builder("nz_asset_nums", dto, value -> dto.getTotal())
- .tags("model", dto.getModel(), "type", dto.getType(), "brand", dto.getBrand(), "state", dto.getState())
- .description("Asset statistics info")
- .register(meterRegistry);
- }
-
- /**
- * nz_endpoint_nums
- */
- List<MetricsDto> nzEndpointNumsMetric = monitorModuleDao.nzEndpointNumsMetric();
- for (int i = 0; i < nzEndpointNumsMetric.size(); i++) {
- MetricsDto dto = nzEndpointNumsMetric.get(i);
- Gauge.builder("nz_endpoint_nums", dto, value -> dto.getTotal())
- .tags("module", dto.getName())
- .description("Endpoint statistics info")
- .register(meterRegistry);
- }
-
- /**
- * nz_agent_status
- */
- List<Agent> agentList = agentService.list();
- List<Dc> dcList = dcDao.selectList(null);
- Map<Integer, String> idcIdAndNameMap = dcList.stream().collect(Collectors.toMap(Dc::getId, Dc::getName));
-
- for (int i = 0; i < agentList.size(); i++) {
- Agent agent = agentList.get(i);
- Gauge.builder("nz_agent_status", agent,value -> agent.getStatus())
- .tags("datacenter", idcIdAndNameMap.get(agent.getDcId()) == null ? "null" : idcIdAndNameMap.get(agent.getDcId()), "type", Constant.AgentType.getAgentType(agent.getType()).getName(), "host", agent.getHost(), "port", agent.getPort() + "")
- .description("Prometheus statistics info")
- .register(meterRegistry);
- }
-
- /**
- * nz_alerts
- */
- String nzAlertsMetricsEnabled = sysConfService.getValue("nz_alerts_metrics_enabled");
- nzAlertsMetricsEnabled = Tool.StrUtil.emptyToDefault(nzAlertsMetricsEnabled, "on");
- if (Tool.StrUtil.equals("on", nzAlertsMetricsEnabled)) {
- List<String> activeMessageLabelsList = alertHandlerDao.selectAlertMessageLabelsList();
- activeMessageLabelsList = activeMessageLabelsList.stream().filter(s -> Tool.StrUtil.isNotEmpty(s)).distinct().collect(Collectors.toList());
-
- for (String labelsJSONStr : activeMessageLabelsList) {
- // labels
- List<Tag> tags = new ArrayList<>();
- Map<String, Object> labelsMap = JSONObject.parseObject(labelsJSONStr, Map.class);
- for (Map.Entry<String, Object> entry : labelsMap.entrySet()) {
- String key = entry.getKey();
- if (Tool.StrUtil.equals("__name__", key)) continue;
- tags.add(new ImmutableTag(key, entry.getValue().toString()));
- }
-
- Gauge.builder("nz_alerts", labelsMap, value -> 0d)
- .tags(tags)
- .description("Alert active message statistics info")
- .register(meterRegistry);
- }
- }
- }
-
- /**
- * 按照指标名称清除之前数据
- *
- * @param registry
- * @param meterNames
- */
- private void cleanMeterInRegistryByName(MeterRegistry registry, String... meterNames) {
- for (String meterName : meterNames) {
- while (true) {
- Search find = registry.find(meterName);
- Meter meter = find.meter();
- if (ToolUtil.isNotEmpty(meter)) {
- registry.remove(meter);
- } else {
- break;
- }
- }
- }
- }
-}
+//package com.nis.modules.metric.dto;
+//
+//import com.alibaba.fastjson.JSONObject;
+//import com.nis.common.utils.Constant;
+//import com.nis.common.utils.Tool;
+//import com.nis.common.utils.ToolUtil;
+//import com.nis.modules.agent.entity.Agent;
+//import com.nis.modules.agent.service.AgentService;
+//import com.nis.modules.alert.dao.AlertHandlerDao;
+//import com.nis.modules.alert.dao.AlertRuleDao;
+//import com.nis.modules.asset.dao.AssetModelDao;
+//import com.nis.modules.asset.dao.DcDao;
+//import com.nis.modules.asset.entity.Dc;
+//import com.nis.modules.module.dao.MonitorModuleDao;
+//import com.nis.modules.sys.service.SysConfService;
+//import io.micrometer.core.instrument.*;
+//import io.micrometer.core.instrument.binder.MeterBinder;
+//import io.micrometer.core.instrument.search.Search;
+//import org.springframework.beans.factory.annotation.Autowired;
+//import org.springframework.stereotype.Component;
+//
+//import java.util.ArrayList;
+//import java.util.List;
+//import java.util.Map;
+//import java.util.stream.Collectors;
+//
+//@Component
+//public class NezhaMetrics implements MeterBinder {
+//
+// @Autowired
+// private DcDao dcDao;
+//
+// @Autowired
+// private AlertRuleDao alertRuleDao;
+//
+// @Autowired
+// private MonitorModuleDao monitorModuleDao;
+//
+// @Autowired
+// private AgentService agentService;
+//
+// @Autowired
+// private AssetModelDao modelDao;
+//
+// @Autowired
+// private SysConfService sysConfService;
+//
+// @Autowired
+// private AlertHandlerDao alertHandlerDao;
+//
+// @Override
+// public void bindTo(MeterRegistry meterRegistry) {
+// // 清空指标数据
+// this.cleanMeterInRegistryByName(meterRegistry, "nz_alert_nums", "nz_asset_nums", "nz_endpoint_nums", "nz_agent_status", "nz_alerts");
+//
+// /**
+// * alert_nums指标 / 根据告警规则 id 统计激活状态的告警消息数量
+// */
+// List<MetricsDto> nzAlertMumsMetrics = alertRuleDao.nzAlertMumsMetric();
+// for (int i = 0; i < nzAlertMumsMetrics.size(); i++) {
+// MetricsDto dto = nzAlertMumsMetrics.get(i);
+// Gauge.builder("nz_alert_nums", dto, value -> dto.getTotal())
+// .tags("id", dto.getId() + "", "name", dto.getName(), "severity", Tool.StrUtil.nullToEmpty(dto.getSeverity()))
+// .description("Alert statistics info")
+// .register(meterRegistry);
+// }
+//
+// /**
+// * nz_asset_nums
+// */
+// List<MetricsDto> nzAssetNumsMetric = modelDao.nzAssetNumsMetric();
+// for (int i = 0; i < nzAssetNumsMetric.size(); i++) {
+// MetricsDto dto = nzAssetNumsMetric.get(i);
+// // 这里将统计值扔进 map 操作是避免弱引用 统计结果出现NaN
+// Gauge.builder("nz_asset_nums", dto, value -> dto.getTotal())
+// .tags("model", dto.getModel(), "type", dto.getType(), "brand", dto.getBrand(), "state", dto.getState())
+// .description("Asset statistics info")
+// .register(meterRegistry);
+// }
+//
+// /**
+// * nz_endpoint_nums
+// */
+// List<MetricsDto> nzEndpointNumsMetric = monitorModuleDao.nzEndpointNumsMetric();
+// for (int i = 0; i < nzEndpointNumsMetric.size(); i++) {
+// MetricsDto dto = nzEndpointNumsMetric.get(i);
+// Gauge.builder("nz_endpoint_nums", dto, value -> dto.getTotal())
+// .tags("module", dto.getName())
+// .description("Endpoint statistics info")
+// .register(meterRegistry);
+// }
+//
+// /**
+// * nz_agent_status
+// */
+// List<Agent> agentList = agentService.list();
+// List<Dc> dcList = dcDao.selectList(null);
+// Map<Integer, String> idcIdAndNameMap = dcList.stream().collect(Collectors.toMap(Dc::getId, Dc::getName));
+//
+// for (int i = 0; i < agentList.size(); i++) {
+// Agent agent = agentList.get(i);
+// Gauge.builder("nz_agent_status", agent,value -> agent.getStatus())
+// .tags("datacenter", idcIdAndNameMap.get(agent.getDcId()) == null ? "null" : idcIdAndNameMap.get(agent.getDcId()), "type", Constant.AgentType.getAgentType(agent.getType()).getName(), "host", agent.getHost(), "port", agent.getPort() + "")
+// .description("Prometheus statistics info")
+// .register(meterRegistry);
+// }
+//
+// /**
+// * nz_alerts
+// */
+// String nzAlertsMetricsEnabled = sysConfService.getValue("nz_alerts_metrics_enabled");
+// nzAlertsMetricsEnabled = Tool.StrUtil.emptyToDefault(nzAlertsMetricsEnabled, "on");
+// if (Tool.StrUtil.equals("on", nzAlertsMetricsEnabled)) {
+// List<String> activeMessageLabelsList = alertHandlerDao.selectAlertMessageLabelsList();
+// activeMessageLabelsList = activeMessageLabelsList.stream().filter(s -> Tool.StrUtil.isNotEmpty(s)).distinct().collect(Collectors.toList());
+//
+// for (String labelsJSONStr : activeMessageLabelsList) {
+// // labels
+// List<Tag> tags = new ArrayList<>();
+// Map<String, Object> labelsMap = JSONObject.parseObject(labelsJSONStr, Map.class);
+// for (Map.Entry<String, Object> entry : labelsMap.entrySet()) {
+// String key = entry.getKey();
+// if (Tool.StrUtil.equals("__name__", key)) continue;
+// tags.add(new ImmutableTag(key, entry.getValue().toString()));
+// }
+//
+// Gauge.builder("nz_alerts", labelsMap, value -> 0d)
+// .tags(tags)
+// .description("Alert active message statistics info")
+// .register(meterRegistry);
+// }
+// }
+// }
+//
+// /**
+// * 按照指标名称清除之前数据
+// *
+// * @param registry
+// * @param meterNames
+// */
+// private void cleanMeterInRegistryByName(MeterRegistry registry, String... meterNames) {
+// for (String meterName : meterNames) {
+// while (true) {
+// Search find = registry.find(meterName);
+// Meter meter = find.meter();
+// if (ToolUtil.isNotEmpty(meter)) {
+// registry.remove(meter);
+// } else {
+// break;
+// }
+// }
+// }
+// }
+//}