ref: 重新调整指标监测数据入库格式,一个指标重新作为独立的数据行记录(方便按时间粒度获取监测数据时的计算)

ref: 移动部分数据类
lensfrex 4 months ago
parent 5070304883
commit b217fbb0fa
Signed by: lensfrex
GPG Key ID: B1E395B3C6CA0356
  1. 2
      rition-center/api/src/main/java/rition/backend/api/v1/collector/DataCollectingController.java
  2. 4
      rition-center/api/src/main/java/rition/backend/service/MetricDataCollectingService.java
  3. 2
      rition-center/common/src/main/java/rition/common/data/dto/service/MetricDataDto.java
  4. 10
      rition-center/common/src/main/java/rition/common/data/entity/MetricRecordEntity.java
  5. 2
      rition-center/common/src/main/java/rition/common/data/entity/RuleEntity.java
  6. 22
      rition-center/service/collector/src/main/java/rition/service/collector/MetricCollectingService.java
  7. 2
      rition-center/service/monitor/src/main/java/rition/service/monitor/MonitorService.java
  8. 2
      rition-center/service/monitor/src/main/resources/application-monitor.yml

@ -9,7 +9,7 @@ import rition.backend.annotation.paramter.RequestId;
import rition.backend.api.v1.dto.request.MetricDataUploadRequest; import rition.backend.api.v1.dto.request.MetricDataUploadRequest;
import rition.backend.api.v1.dto.response.Response; import rition.backend.api.v1.dto.response.Response;
import rition.backend.service.MetricDataCollectingService; import rition.backend.service.MetricDataCollectingService;
import rition.common.data.dto.MetricDataDto; import rition.common.data.dto.service.MetricDataDto;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;

@ -4,12 +4,10 @@ import lombok.extern.slf4j.Slf4j;
import org.springframework.data.redis.core.RedisTemplate; import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.scheduling.annotation.Async; import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import rition.common.data.dto.MetricDataDto; import rition.common.data.dto.service.MetricDataDto;
import rition.common.data.dto.log.RequestProcessTraceRecord; import rition.common.data.dto.log.RequestProcessTraceRecord;
import rition.service.collector.MetricCollectingService; import rition.service.collector.MetricCollectingService;
import java.time.Duration;
import java.time.temporal.ChronoUnit;
import java.util.Map; import java.util.Map;
/** /**

@ -1,5 +1,5 @@
package rition.common.data.dto; package rition.common.data.dto.service;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.Builder; import lombok.Builder;

@ -32,10 +32,14 @@ public class MetricRecordEntity {
private String instanceId; private String instanceId;
/** /**
* 监控指标值使用json格式存储 * 指标项
*/ */
@TableField(typeHandler = JacksonTypeHandler.class) private String metric;
private Map<String, Double> metricData;
/**
* 指标值
*/
private Double value;
/** /**
* create_time * create_time

@ -40,7 +40,7 @@ public class RuleEntity {
/** /**
* 阈值 * 阈值
*/ */
private String threshold; private Double threshold;
/** /**
* 触发方法实时计算或定时计算 * 触发方法实时计算或定时计算

@ -4,8 +4,9 @@ import com.github.yitter.idgen.YitIdHelper;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.kafka.core.KafkaTemplate; import org.springframework.kafka.core.KafkaTemplate;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import rition.common.data.dto.MetricDataDto; import rition.common.data.dto.service.MetricDataDto;
import rition.common.data.entity.MetricRecordEntity; import rition.common.data.entity.MetricRecordEntity;
import rition.common.data.enums.Constants;
import rition.service.collector.configure.CollectorServiceKafkaConfigure; import rition.service.collector.configure.CollectorServiceKafkaConfigure;
import rition.common.data.dao.mapper.MetricRecordMapper; import rition.common.data.dao.mapper.MetricRecordMapper;
@ -45,27 +46,31 @@ public class MetricCollectingService {
* @param collectedMetricData 监控指标数据以时间戳为组 * @param collectedMetricData 监控指标数据以时间戳为组
*/ */
public void receiveData(Map<Long, Map<String, MetricDataDto>> collectedMetricData) { public void receiveData(Map<Long, Map<String, MetricDataDto>> collectedMetricData) {
List<MetricRecordEntity> batchSaveEntityList = new ArrayList<>(DEFAULT_DB_BATCH_SIZE); List<MetricRecordEntity> batchSaveEntityList = new ArrayList<>(DEFAULT_DB_BATCH_SIZE * METRIC_NUMS);
int turn = 0; int turn = 0;
for (Long timestamp : collectedMetricData.keySet()) { for (Long timestamp : collectedMetricData.keySet()) {
Map<String, MetricDataDto> instanceMetricData = collectedMetricData.get(timestamp); Map<String, MetricDataDto> instanceMetricData = collectedMetricData.get(timestamp);
for (String instanceId : instanceMetricData.keySet()) { for (String instanceId : instanceMetricData.keySet()) {
MetricDataDto metricDataDto = instanceMetricData.get(instanceId); MetricDataDto metricDataDto = instanceMetricData.get(instanceId);
List<MetricRecordEntity> metricRecordEntityList = new ArrayList<>(METRIC_NUMS);
for (String metric : metricDataDto.getData().keySet()) {
MetricRecordEntity entity = new MetricRecordEntity(); MetricRecordEntity entity = new MetricRecordEntity();
entity.setId(YitIdHelper.nextId()); entity.setId(YitIdHelper.nextId());
entity.setInstanceId(instanceId); entity.setInstanceId(instanceId);
entity.setMetricData(metricDataDto.getData()); entity.setMetric(metric);
entity.setValue(metricDataDto.getData().get(metric));
var time = Instant.ofEpochSecond(metricDataDto.getTimestamp()); var time = Instant.ofEpochSecond(metricDataDto.getTimestamp());
entity.setTime(time); entity.setTime(time);
entity.setUpdateTime(time); entity.setUpdateTime(time);
entity.setStatus(0); entity.setStatus(Constants.EntityCommonStatus.NORMAL);
// kafka发布 metricRecordEntityList.add(entity);
kafkaTemplate.send(this.collectedDataTopic, metricDataDto); }
// 分批入库 // 分批入库
batchSaveEntityList.add(entity); batchSaveEntityList.addAll(metricRecordEntityList);
if (turn >= DEFAULT_DB_BATCH_SIZE) { if (turn >= DEFAULT_DB_BATCH_SIZE) {
metricRecordMapper.insertBatchSomeColumn(batchSaveEntityList); metricRecordMapper.insertBatchSomeColumn(batchSaveEntityList);
// 下一轮 // 下一轮
@ -74,6 +79,9 @@ public class MetricCollectingService {
} else { } else {
turn++; turn++;
} }
// kafka发布
kafkaTemplate.send(this.collectedDataTopic, metricDataDto);
} }
} }

@ -3,7 +3,7 @@ package rition.service.monitor;
import org.apache.kafka.clients.consumer.ConsumerRecord; import org.apache.kafka.clients.consumer.ConsumerRecord;
import org.springframework.kafka.annotation.KafkaListener; import org.springframework.kafka.annotation.KafkaListener;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import rition.common.data.dto.MetricDataDto; import rition.common.data.dto.service.MetricDataDto;
@Service @Service
public class MonitorService { public class MonitorService {

@ -13,7 +13,7 @@ spring:
spring: spring:
json: json:
trusted: trusted:
packages: "rition.common.data.dto" packages: "rition.common.data.dto.*"
producer: producer:
retries: 4 retries: 4
compression-type: zstd compression-type: zstd

Loading…
Cancel
Save