千家信息网

日志分析实践与应用

发表于:2025-02-08 作者:千家信息网编辑
千家信息网最后更新 2025年02月08日,日志分析实践与应用这个场景是,日志系统平时为了系统处理能力,我们使用INFO级别或ERROR级别,当发现问题时,我们需要不停服务的动态的将日志级别变更为DEBUG以便在执行细节发现问题,下面列举了动态
千家信息网最后更新 2025年02月08日日志分析实践与应用

日志分析实践与应用

这个场景是,日志系统平时为了系统处理能力,我们使用INFO级别或ERROR级别,当发现问题时,我们需要不停服务的动态的将日志级别变更为DEBUG以便在执行细节发现问题,下面列举了动态变更的操作,需要借助代码、定时和配置中心服务。

在微服务的场景,日志是散落在各个服务集群节点中,不方便查看,所以我们需要通过集中收集到一处保存、查看和分析。

应用程序中日志的配置

logback.xml

  • 1.在configuration中配置include,引用defaults.xml、console-appender.xml和file-appender.xml基础配置,可以复用变量、默认配置和策略。
  • 2.定义一个stash的appender,配置目标主机和端口以及转码器用什么。通过配置将日志发送到统一日志管理平台进一步分析与保存。
  • 注:对于推荐使用logback-spring.xml不使用logback.xml,官方也没有给出推荐理由,经测试logback.xml配置依然可用,也可以在变更后自动重启,所以没换,只是注意configuration属性scan不能设置为true,由spring来扫描即可。

具体配置如下:

                                 %d{yyyy-MM-dd HH:mm:ss} [%level] - %m%n                    d:/logs/error.log                %d{yyyy-MM-dd HH:mm:ss} [%class:%line] - %m%n                        ERROR            ACCEPT            DENY                        error.%d{yyyy-MM-dd}.log            30                      localhost:4560                            ${fluentHost}                      

定时更新日志代码

/** * 日志级别更新定时2分钟一刷新 */@Scheduled(fixedRate=1000*60*2)public void refresh() {    String moduleKey = "com.ftsafe";    //判断只有logback的日志实现才适用此方法    if (log instanceof ch.qos.logback.classic.Logger) {        Config applicationConfig = ConfigService.getAppConfig();        String levelConfig = applicationConfig.getProperty("logger.level."+ moduleKey, null);        ch.qos.logback.classic.Logger classicLog = (ch.qos.logback.classic.Logger) log;        ch.qos.logback.classic.Logger logger = classicLog.getLoggerContext().getLogger(moduleKey);        logger.setLevel(Level.toLevel(levelConfig));        log.debug("logger modify level {}", levelConfig);        log.info("logger modify level {}", levelConfig);    }    log.info("logger refresh invoked!");    log.debug("logger refresh invoked!");}

集中日志管理(win环境)

Elasticsearch

是一个搜索和分析引擎
解压

https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.0.0.zip

启动

d:/baiduYun/java/elasticsearch-6.0.0/bin/elasticsearch.bat
Kibana

允许用户在 Elasticsearch 中使用图表和图表可视化数据
解压

https://artifacts.elastic.co/downloads/kibana/kibana-6.0.0-windows-x86_64.zip

启动

d:/baiduYun/java/kibana-6.0.0-windows-x86_64/bin/kibana.bat
logstash

是一个服务器端的数据处理管道,可以同时从多个源获取数据,将其转换为Elasticsearch之类的"stash"
解压

https://artifacts.elastic.co/downloads/logstash/Logstash-6.0.0.zip

配置logstash.conf配置文件内容

input {    tcp {        port => 4560        host => localhost    }}output {    elasticsearch { hosts => ["localhost:9200"] }    stdout { codec => rubydebug }}

启动

d:/baiduYun/java/logstash-6.0.0/bin/logstash.bat -f d:\baiduYun\java\logstash-6.0.0\bin\logstash.conf

浏览日志

访问http://localhost:5601进入kibana界面,可以在Discover界面输入检索条件,查出希望检索到的内容。

附录:

spring logging

https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-logging.html
defaults.xml

                                                

console-appender.xml

                        ${CONSOLE_LOG_PATTERN}            

file-appender.xml

                        ${FILE_LOG_PATTERN}                ${LOG_FILE}                    ${LOG_FILE}.%d{yyyy-MM-dd}.%i.gz            ${LOG_FILE_MAX_SIZE:-10MB}            ${LOG_FILE_MAX_HISTORY:-0}            

参考内容

  • https://www.jianshu.com/p/c9d9fe37256a
  • 《51CTO下载-SpringCloud微服务架构开发实战.pdf》
0