Sentinel实现监控数据持久化(1):Log4j日志输出到Kafka
背景:Sentinel实现监控数据持久化的功能Sentinel 控制台可以通过Sentinel 客户端预留的 API从秒级监控日志中拉取监控数据,并进行聚合。目前 Sentinel 控制台Dashboard中监控数据聚合后直接存在内存中,未进行持久化,且仅保留最近 5 分钟的监控数据。若需要监控数据持久化的功能,可以自行扩展实现MetricsRepository接口(0.2.0 版本...
背景:Sentinel实现监控数据持久化的功能
Sentinel 控制台可以通过Sentinel 客户端预留的 API 从秒级监控日志中拉取监控数据,并进行聚合。
目前 Sentinel 控制台Dashboard中监控数据聚合后直接存在内存中,未进行持久化,且仅保留最近 5 分钟的监控数据。若需要监控数据持久化的功能,可以自行扩展实现 MetricsRepository
接口(0.2.0 版本),然后注册成 Spring Bean 并在相应位置通过 @Qualifier
注解指定对应的 bean name 即可。MetricsRepository
接口定义了以下功能:
save
与saveAll
:存储对应的监控数据queryByAppAndResourceBetween
:查询某段时间内的某个应用的某个资源的监控数据listResourcesOfApp
:查询某个应用下的所有资源
其中默认的监控数据类型为 MetricEntity
,包含应用名称、时间戳、资源名称、异常数、请求通过数、请求 block 数、平均响应时间等信息。
同时用户可以自行进行扩展,适配 Grafana 等可视化平台,以便将监控数据更好地进行可视化。
对于监控数据的存储,用户需要根据自己的存储精度,来考虑如何存储这些监控数据。
持久化改造:
引入kafka-log4j-appender.jar
<dependency>
<groupId>org.apache.kafka</groupId>
<artifactId>kafka-log4j-appender</artifactId>
<version>1.0.1</version>
</dependency>
log4j.rootLogger=info,stdout,kafka0
# stdout配置
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%-d{yyyy-MM-dd HH\:mm\:ss} [%p]-[%c] %m%n
# kafka0配置
#定义一个名为kafka 为Appender
log4j.appender.kafka0=org.apache.kafka.log4jappender.KafkaLog4jAppender
#指定日志写入到Kafka的主题
log4j.appender.kafka0.topic=sentinel-metric
#制定连接kafka的地址
log4j.appender.kafka0.brokerList=xxx.0.1:9092
#压缩方式,默认为none
log4j.appender.kafka0.compressionType=none
#指定Producer发送消息的方式,默认是false,即异步发送
log4j.appender.kafka0.syncSend=true
#指定日志级别
log4j.appender.kafka0.Threshold=info
log4j.appender.kafka0.layout=org.apache.log4j.PatternLayout
log4j.appender.kafka0.layout.ConversionPattern=%-d{yyyy-MM-dd HH\:mm\:ss} [%p]-[%c] %m%n
在com.taobao.csp.sentinel.dashboard.repository.metric包下的InMemoryMetricsRepository类
public synchronized void save(MetricEntity entity) 方法中添加log4j日志:
private Logger logger= Logger.getLogger(InMemoryMetricsRepository.class);
logger.info(entity.toString());//打印日志
这种使用log4j会存在阻塞,可以参考下篇:Sentinel实现监控数据持久化:Log4j2日志异步输出到Kafka
更多推荐
所有评论(0)