Sentinel实现监控数据持久化(2):Log4j2日志异步输出到Kafka

背景:Sentinel实现监控数据持久化的功能

Sentinel 控制台可以通过Sentinel 客户端预留的 API 从秒级监控日志中拉取监控数据,并进行聚合。

目前 Sentinel 控制台中监控数据聚合后直接存在内存中,未进行持久化,且仅保留最近 5 分钟的监控数据。若需要监控数据持久化的功能,可以自行扩展实现 MetricsRepository 接口(0.2.0 版本),然后注册成 Spring Bean 并在相应位置通过 @Qualifier 注解指定对应的 bean name 即可。MetricsRepository 接口定义了以下功能:

  • save 与 saveAll:存储对应的监控数据
  • queryByAppAndResourceBetween:查询某段时间内的某个应用的某个资源的监控数据
  • listResourcesOfApp:查询某个应用下的所有资源

其中默认的监控数据类型为 MetricEntity,包含应用名称、时间戳、资源名称、异常数、请求通过数、请求 block 数、平均响应时间等信息。

同时用户可以自行进行扩展,适配 Grafana 等可视化平台,以便将监控数据更好地进行可视化。

对于监控数据的存储,用户需要根据自己的存储精度,来考虑如何存储这些监控数据。

持久化改造:
采用log4j2 KafkaAppender接入Kafka消息队列的模式

POM配置文件,一定要排除log4j,引入log4j2

        
            org.apache.kafka
            kafka-clients
            2.1.1
            
             
                
                    org.slf4j
                    slf4j-log4j12
                
                
                    log4j
                    log4j
                
            
        

        
        
            com.lmax
            disruptor
            3.4.2
        

        
        
            org.apache.logging.log4j
            log4j-core
            2.9.1
        

在log4j-core的jar包里有KafkaAppender

Sentinel实现监控数据持久化(2):Log4j2日志异步输出到Kafka_第1张图片

@Plugin(name = "Kafka", category = Node.CATEGORY, elementType = Appender.ELEMENT_TYPE, printObject = true)
public final class KafkaAppender extends AbstractAppender {}

其中 @Plugin 的name属性对应的log4j2.xml配置文件里面Kafka标签,当然这个也可以自定义。与此同时,也需要将 @Plugin 的name属性改为MyKafka。如下配置:

 在springboot配置文件中: logging.config= classpath:log4j2.xml





    
    
        
        
        
    
    
        
        192.168.0.1:9092
        10000
    


    
    
        
    
     

    
    
        
    

也可以参考上篇:Sentinel实现监控数据持久化:Log4j日志输出到Kafka 
 

你可能感兴趣的:(Log)