ELK + Kibana + Logstash实现可视化日志

  •           :是江迪呀
  • ✒️本文关键词elasticsearchkibanalogstash日志收集日志可视化
  • ☀️每日   一言坚持就是胜利啊,哥~

ELK + Kibana + Logstash实现可视化日志_第1张图片

一、前言

面试官:在日常开发工作中你们是如何查看日志的呢?
我:通过控制台查看!
面试官:……

上面显然是个滑稽的回答,那么真正的开发中你们使用什么样的方式来查看日志呢?我先说下我的吧,我是用过最原始的也是最麻烦的方式:将日志从服务器下载下来,然后将日志文件放到记事本中使用crtl + F搜索我想要的日志文件。这种方式让我记忆犹新,因为太过于繁琐了,查询效率太低。当然我也使用过很方便的:通过kibana查询日志,这种方式也让我难忘,因为它太好用了,效率太高。今天我们就介绍下,如何使用 ELK + Logstash实现日志可视化

二、ELK、Kibana、Logstash之间的关系

有些时候一张图胜过千言万语:

ELK + Kibana + Logstash实现可视化日志_第2张图片
还是要说明下,有的同学可能晕图,再说我画的也不一定到位(其实是了凑篇幅)。

2.1 Logstash

Logstash是一个用于处理和管理日志数据的开源工具,它可以帮助你从不同的数据源(如日志文件、数据库、消息队列等)中采集、转换和传输数据,并将其存储到目标位置(如 Elasticsearch数据库文件等)中。

2.2 Elaticsearch

Elasticsearch是一个开源的分布式搜索和分析引擎,主要用于处理和存储大规模的实时数据。可以提供全文搜索实时数据分析数据聚合和可视化功能。

2.3 Kibana

Kibana 是一个开源的数据可视化工具,专为 Elasticsearch 设计,用于展示 Elasticsearch 中的数据和分析结果。它提供了一个用户友好的 Web 界面,使用户能够轻松地创建、定制和共享各种类型的图表、图形和仪表盘,以便更好地理解和分析存储在 Elasticsearch 中的数据。

ELK + Kibana + Logstash实现可视化日志_第3张图片

三、Logstash的安装

我们选择在Linux上面安装Logstash,安装步骤如下:

3.1 下载 Logstash

curl -O https://artifacts.elastic.co/downloads/logstash/logstash-7.10.1.tar.gz

如果上面的方式不可行,你可以直接去官方下载:Logstash-8.9.1下载

如果你的网不行,你可以直接通过网盘:Logstash-8.9.1网盘下载
提取码:bj57

3.2 上传Logstash到服务器

你可以通过xftp,如果没有的话,你可以使用rz命令,在使用这个命令之前你必须确保linux已经安装了lrzsz,安装命令如下:

sudo apt-get update
sudo apt-get install lrzsz

输入rz即可上传文件。

rz

3.2 解压

tar -zxvf logstash-8.9.1-linux-x86_64.tar.gz

3.3 配置logstash

进入加压后的config目录

cd logstash-8.9.1/bin

创建配置文件(你还可以使用Logstash自带的logstash-sample.conf文件但是建议自己创建一个):

touch logstash.conf

进入配置文件:

vim logstash.conf

添加的内容如下:

input {
  #日志打印的地址,path地址就是你在项目中指定日志输出的目录。
  file{
     path=>"/usr/project-prod/logs/*.log"
     start_position=>"beginning"
  }
}
#过滤 不重要不用写
filter {

}
#日志输出到elasticsearch 
output {
    elasticsearch {
      hosts => ["服务器地址:elasticsearch的端口号"]
      #这是输出的数据在 Elasticsearch 中的索引名称。logs-%{+YYYY.MM.dd} 是一个动态的索引名称,其中 %{+YYYY.MM.dd} 是 Logstash 的时间戳格式化指令,用来在索引名称中添加当前日期,比如 "logs-2023.07.25"。
      index => "logs-%{+YYYY.MM.dd}"
    }
}

3.4 启动Logstash

进入bin目录

cd logstash-8.9.1/bin

启动并指定配置文件

./logstash -f ../config/logstash.conf

四、项目配置

你的项目需要配置下,要保证你项目日志输出的路径和Logstash收集日志的路径保持一致!

4.1 在项目根目录创建logback-spring.xml文件






<configuration scan="true" scanPeriod="10 seconds">
    <contextName>logbackcontextName>

    
    <property name="log.path" value="/usr/project-prod/logs/xxx-logs"/>

    
    
    <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{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}}"/>

    
    <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
        
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <level>debuglevel>
        filter>
        <encoder>
            <Pattern>${CONSOLE_LOG_PATTERN}Pattern>
            
            <charset>UTF-8charset>
        encoder>
    appender>

    
    
    <appender name="DEBUG_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        
        <file>${log.path}/xxx.logfile>
        
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%npattern>
            <charset>UTF-8charset> 
        encoder>
        
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            
            <fileNamePattern>${log.path}/debug-%d{yyyy-MM-dd}.%i.logfileNamePattern>
            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <maxFileSize>100MBmaxFileSize>
            timeBasedFileNamingAndTriggeringPolicy>
            
            <maxHistory>15maxHistory>
        rollingPolicy>
        
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>debuglevel>
            <onMatch>ACCEPTonMatch>
            <onMismatch>DENYonMismatch>
        filter>
    appender>

    
    <appender name="INFO_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        
        <file>${log.path}/info.logfile>
        
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%npattern>
            <charset>UTF-8charset>
        encoder>
        
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            
            <fileNamePattern>${log.path}/info-%d{yyyy-MM-dd}.%i.logfileNamePattern>
            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <maxFileSize>100MBmaxFileSize>
            timeBasedFileNamingAndTriggeringPolicy>
            
            <maxHistory>15maxHistory>
        rollingPolicy>
        
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>infolevel>
            <onMatch>ACCEPTonMatch>
            <onMismatch>DENYonMismatch>
        filter>
    appender>

    <appender name="ERROR_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        
        <file>${log.path}/error.logfile>
        
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%npattern>
            <charset>UTF-8charset> 
        encoder>
        
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${log.path}/error-%d{yyyy-MM-dd}.%i.logfileNamePattern>
            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <maxFileSize>100MBmaxFileSize>
            timeBasedFileNamingAndTriggeringPolicy>
            
            <maxHistory>15maxHistory>
        rollingPolicy>
        
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>ERRORlevel>
            <onMatch>ACCEPTonMatch>
            <onMismatch>DENYonMismatch>
        filter>
    appender>

    
    <springProfile name="dev">
        <root level="INFO">
            <appender-ref ref="CONSOLE"/>
            <appender-ref ref="DEBUG_FILE"/>
            <appender-ref ref="INFO_FILE"/>
        root>
    springProfile>
    <springProfile name="test">
        <root level="INFO">
            <appender-ref ref="CONSOLE"/>
            <appender-ref ref="DEBUG_FILE"/>
            <appender-ref ref="INFO_FILE" />
            <appender-ref ref="ERROR_FILE" />
        root>
    springProfile>
    
    <springProfile name="prod">
        <root level="DEBUG">
            <appender-ref ref="CONSOLE"/>
            <appender-ref ref="DEBUG_FILE"/>
            <appender-ref ref="INFO_FILE" />
            <appender-ref ref="ERROR_FILE" />
        root>
    springProfile>
configuration>

这个xml文件就是记录日志的一些规则,你不需要细看,只需要注意:

这个配置就是指定日志输出的路径的,按照自己的修改下即可。日志输出级别,以及不同的环境如何输出日志,自定义一下即可。

五、ELK + Kibana安装配置

全在这里了:在Linux环境下配置lasticsearch+Kibana

你可能感兴趣的:(kibana,elk,elasticsearch,kibana,logstash,可视化日志)