日志分析实践与应用

日志分析实践与应用

这个场景是,日志系统平时为了系统处理能力,我们使用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来扫描即可。

具体配置如下:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <include resource="org/springframework/boot/logging/logback/defaults.xml" />
    <include resource="org/springframework/boot/logging/logback/console-appender.xml "/>
    <include resource="org/springframework/boot/logging/logback/file-appender.xml "/>
  <!-- 控制台打印日志的相关配置 -->
  <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
    <!-- 日志格式 -->
    <encoder>
        <pattern>%d{yyyy-MM-dd HH:mm:ss} [%level] - %m%n</pattern>
    </encoder>
  </appender>

  <!-- 文件保存日志的相关配置 -->
  <appender name="ERROR-OUT" class="ch.qos.logback.core.rolling.RollingFileAppender">
     <!-- 保存日志文件的路径 -->
    <file>d:/logs/error.log</file>
    <!-- 日志格式 -->
    <encoder>
        <pattern>%d{yyyy-MM-dd HH:mm:ss} [%class:%line] - %m%n</pattern>
    </encoder>
    <!-- 日志级别过滤器 -->
    <filter class="ch.qos.logback.classic.filter.LevelFilter">
      <!-- 过滤的级别 -->
      <level>ERROR</level>
      <!-- 匹配时的操作:接收(记录) -->
      <onMatch>ACCEPT</onMatch>
      <!-- 不匹配时的操作:拒绝(不记录) -->
      <onMismatch>DENY</onMismatch>
    </filter>
    <!-- 循环策略:基于时间创建日志文件 -->
    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
      <!-- 日志文件名格式 -->
      <fileNamePattern>error.%d{yyyy-MM-dd}.log</fileNamePattern>
      <!-- 最大保存时间:30天-->
      <maxHistory>30</maxHistory>
    </rollingPolicy>
  </appender>

    <!-- stash日志保存(方案1) -->
    <appender name="STASH-OUT" class="net.logstash.logback.appender.LogstashTcpSocketAppender">
        <destination>localhost:4560</destination>
        <encoder class="net.logstash.logback.encoder.LogstashEncoder" />
    </appender>

    <!-- fluent日志保存(方案2) -->
    <appender name="FLUENT" class="cn.qos.logback.more.appenders.DataFluentAppender">
        <remoteHost>${fluentHost}</remoteHost>
    </appender>

  <!-- 基于dubug处理日志:具体控制台或者文件对日志级别的处理还要看所在appender配置的filter,如果没有配置filter,则使用root配置 -->
  <root level="debug">
    <appender-ref ref="STDOUT" />
    <appender-ref ref="ERROR-OUT" />
    <appender-ref ref="STASH-OUT" />
  </root>
</configuration>

定时更新日志代码

/**
 * 日志级别更新定时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

<?xml version="1.0" encoding="UTF-8"?>

<!--
Default logback configuration provided for import, equivalent to the programmatic
initialization performed by Boot
-->

<included>
    <conversionRule conversionWord="clr" converterClass="org.springframework.boot.logging.logback.ColorConverter" />
    <conversionRule conversionWord="wex" converterClass="org.springframework.boot.logging.logback.WhitespaceThrowableProxyConverter" />
    <conversionRule conversionWord="wEx" converterClass="org.springframework.boot.logging.logback.ExtendedWhitespaceThrowableProxyConverter" />
    <property name="CONSOLE_LOG_PATTERN" value="${CONSOLE_LOG_PATTERN:-%clr(%d{${LOG_DATEFORMAT_PATTERN:-yyyy-MM-dd HH:mm:ss.SSS}}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}"/>
    <property name="FILE_LOG_PATTERN" value="${FILE_LOG_PATTERN:-%d{${LOG_DATEFORMAT_PATTERN:-yyyy-MM-dd HH:mm:ss.SSS}} ${LOG_LEVEL_PATTERN:-%5p} ${PID:- } --- [%t] %-40.40logger{39} : %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}"/>

    <logger name="org.apache.catalina.startup.DigesterFactory" level="ERROR"/>
    <logger name="org.apache.catalina.util.LifecycleBase" level="ERROR"/>
    <logger name="org.apache.coyote.http11.Http11NioProtocol" level="WARN"/>
    <logger name="org.apache.sshd.common.util.SecurityUtils" level="WARN"/>
    <logger name="org.apache.tomcat.util.net.NioSelectorPool" level="WARN"/>
    <logger name="org.eclipse.jetty.util.component.AbstractLifeCycle" level="ERROR"/>
    <logger name="org.hibernate.validator.internal.util.Version" level="WARN"/>
</included>

console-appender.xml

<?xml version="1.0" encoding="UTF-8"?>

<!--
Console appender logback configuration provided for import, equivalent to the programmatic
initialization performed by Boot
-->

<included>
    <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>${CONSOLE_LOG_PATTERN}</pattern>
        </encoder>
    </appender>
</included>

file-appender.xml

<?xml version="1.0" encoding="UTF-8"?>

<!--
File appender logback configuration provided for import, equivalent to the programmatic
initialization performed by Boot
-->

<included>
    <appender name="FILE"
        class="ch.qos.logback.core.rolling.RollingFileAppender">
        <encoder>
            <pattern>${FILE_LOG_PATTERN}</pattern>
        </encoder>
        <file>${LOG_FILE}</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <fileNamePattern>${LOG_FILE}.%d{yyyy-MM-dd}.%i.gz</fileNamePattern>
            <maxFileSize>${LOG_FILE_MAX_SIZE:-10MB}</maxFileSize>
            <maxHistory>${LOG_FILE_MAX_HISTORY:-0}</maxHistory>
        </rollingPolicy>
    </appender>
</included>

参考内容

原文地址:http://blog.51cto.com/7680741/2348931

时间: 2024-07-31 15:46:50

日志分析实践与应用的相关文章

海量日志分析与智能运维

以下文字版根据<大咖·来了>第3期<海量日志分析与智能运维>整理,回放链接:http://aix.51cto.com/activity/10011.html?dk=wz 一.AIOps 与智能日志中心 1.1AIOps 五等级 要说智能日志中心,首先要了解什么是智能运维.目前业界对智能运维的运用,主要分为如下五个等级. 一级是最容易的,只要你有个想法试试就行,到网管监控系统里,拿一个监控指标的曲线下来,就可以尝试异常检测. 一级还没有成熟的单点应用,当有了一个成熟的单点应用,就算是

大数据时代的全能日志分析专家--Splunk安装与实践

大数据时代的全能日志分析专家 --Splunk安装与实践 (  此文已刊发在<网络运维与管理>杂志  ) 0.背  景 随着大家对网络安全意识的提高,企业网管理人员,必须对IT基础设置进行监控及安全事件的管理,管理数据的数量和种类非常巨大,那么就需要有一款能否分析各种日志数据的工具,经过长期实践,为大家推荐Splunk这么一款全能型分析工具. 1.Splunk简介 Splunk是一款功能强大的.记录详细的日志分析软件,Splunk是基于原始日志数据(Raw data)内容建立索引,保存索引的同

安装logstash+kibana+elasticsearch+redis搭建集中式日志分析平台

本文是参考logstash官方文档实践的笔记,搭建环境和所需组件如下: Redhat 5.7 64bit / CentOS 5.x JDK 1.6.0_45 logstash 1.3.2 (内带kibana) elasticsearch 0.90.10 redis 2.8.4 搭建的集中式日志分析平台流程如下: elasticsearch 1.下载elasticsearch. wget https://download.elasticsearch.org/elasticsearch/elasti

《Unix/Linux网络日志分析与流量监控》获2015年度最受读者喜爱的IT图书奖

<Unix/Linux网络日志分析与流量监控>获2015年度最受读者喜爱的IT图书奖.刊登在<中华读书报>( 2015年01月28日 19 版) 我的2015年新作刊登在<中华读书报>( 2015年01月28日 19 版) 原文下载:http://epaper.gmw.cn/zhdsb/images/2015-01/28/19/2015012819_pdf.pdf 这3本原创Linux图书,全部收录于中国科学院图书馆.国图以及211.985高校图书馆,广获读者好评,在当

日志分析工具ELK(一)

一.ELK介绍 1.1 elasticsearch 1.1.1 elasticsearch介绍 ElasticSearch是一个基于Lucene的搜索服务器.它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口.Elasticsearch是用Java开发的,并作为Apache许可条款下的开放源码发布,是第二流行的企业搜索引擎.设计用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便. 1.1.2 elasticsearch几个重要术语 ?   NRT elasti

日志分析工具ELK(五)

八.Kibana实践 选择绝对时间和相对时间 搜索 还可以添加相关信息 自动刷新页面时间,也可以关闭 创建图像,可视化 编辑Markdown,创建一个值班联系表 值班联系表 保存 再创建一个饼图;查看下状态码 保存 再来一个柱状图 保存为访问IP TOP5 添加展示 再添加一个折线图 保存为HTTP响应时间,Dashboard添加,然后保存 再添加一个统计,统计数量 选择system-syslog 保存为日志数据统计 Dashboard添加,然后保存 生产最好加一个Nginx用户认证,不能谁都能

日志分析常用指令简单介绍

大型分布式网站架构设计与实践的第四章的简单回顾 日志分析常用的指令: 查看文件的内容:cat,(适合日志文件比较大)cat –n install.log (-n表示显示行号) 分页显示文件:more,(cat缺少交互,只能用来查看,more可以更好的用来分页显示文件,Enter显示下一行,空格键显示下一页,按F键显示下一屏,B返回上一屏内容)  less是more更强大的交互工具 显示文件尾:tail,    tail  -n install.log (-n表示显示最后的行数) (-f 表示ta

Java日志设计&amp;实践(1) - 常见问题

日常开发.运维过程中经常会碰到以下几个问题: 什么情况下需要输出日志? 已明确需要输出日志时,如何选择日志级别? 已明确需要输出日志时,日志中需要输出哪些东东? 一个Tomcat加载多个工程,如何确定日志中的内容是哪个工程的? 多个Tomcat同时加载同一个工程,可以使用log4j的DailyRollingFileAppender等文件类Appender吗? 多个Tomcat同时加载同一个工程,可以分别指定日志输出目录吗? 日志中的中文乱码怎么办? 可以动态调整一个类的日志级别吗? 一天日志文件

OSSIM平台安全事件关联分析实践

OSSIM平台安全事件关联分析实践 在<开源安全运维平台OSSIM最佳实践>一书中叙述到,事件关联是整个OSSIM关联分析的核心,对于OSSIM的事件关联需要海量处理能力,主要便于现在需要及时存储从设备采集到的日志,并能关联匹配和输出,进而通过Web UI展示.从实时性上看,关联分析的整个处理过程不能间断,这对系统的实时性要求较高,另外Ossim系统是基于规则的,Ossim内部具有多套高速规则分析引擎,以实现模式匹配和对关联分析结果调用.所以系统的关联引擎是一个典型数据处理系统,必须依靠强大的