ELK+springboot搭建分布式日志系统——搭建

万事开头难,花了2天的时间一直在忙这个,总算有点头绪,废话不多说,直接开整!

一基础知识

ELK一般由三部分组成:logstash(日志格式化) + elasticsearch(检索) + Kibana(前台报表展示)

这里因为自己也是在摸索阶段,就直接在自己的windows系统上操作(流下了没有服务器的泪水)

官网地址:https://www.elastic.co/

下载logstash,elasticsearch,Kibana,filebeat安装包(为啥要装这个一会说)

下载完了自己解压到一个文件夹里

启动顺序ES-KIBANA-LOGSTASH-FILEBEAT(可以有可以没)

二window下的启动方法

扫描二维码关注公众号,回复: 5345546 查看本文章

记住默认端口9300,也可以直接访问localhost:9300得到json字符串证明启动成功!

2Kibana启动也一样,直接访问http://localhost:5601可以进入控制台

3启动LOGSTASH,注意,需要配置默认的conf(在bin的目录下建立conf文件,如下图)

在bin目录下进入cmd模式输入logstash  -f logstash_default.conf,通过logstash.bat文件启动(也可配置全局环境变量方式启动,这里只在bin目录下),窗口如下(这里我是启动了另外一个conf)

三对接springboot,可以有2种方式(直接使用logstask作为日志收集加处理方式(可能内存原因直接崩了,所以没试成功)),还有另外一种,采用filebeat读取文件的方式,将它直接传给ES服务(这里处理不好只能做为初学者使用),实际项目还是推荐采用filebeat+logstask+es+k的模式(官网推荐,filebeat读取文件占用内存比直接logstask获取小,适合每个单个系统部署)

4实战操作

找一个maven项目,添加

<dependency>
    <groupId>net.logstash.logback</groupId>
    <artifactId>logstash-logback-encoder</artifactId>
    <version>版本号</version>
</dependency>

在resours里添加logback-spring.xml文件

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

<configuration>
    <!-- 唯一要配置应用的名称 -->
    <property name="APP_NAME" value="demo-service"/>

    <property name="LOG_PATH" value="logs"/>
    <!-- 控制台输出 -->
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符 -->
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger [%file:%line] - %msg%n</pattern>
        </encoder>
    </appender>
    <!-- 按照每天生成日志文件 -->
    <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${LOG_PATH}/${APP_NAME}/out_${APP_NAME}.log</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!--日志文件输出的文件名 -->
            <FileNamePattern>${LOG_PATH}/${APP_NAME}/%d{yyyy-MM-dd HH}.%i.log
            </FileNamePattern>
            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <maxFileSize>5MB</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
            <!--日志文件保留小时数720=30天*24 -->
            <MaxHistory>720</MaxHistory>
        </rollingPolicy>
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符 -->
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger [%file:%line] - %msg%n</pattern>
        </encoder>
    </appender>

    <appender name="ERROR_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!--日志文件输出的文件名 -->
            <FileNamePattern>${LOG_PATH}/${APP_NAME}/error/%d{yyyy-MM-dd HH}.%i.log
            </FileNamePattern>
            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <maxFileSize>5MB</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
            <!--日志文件保留小时数720=30天*24 -->
            <MaxHistory>720</MaxHistory>
        </rollingPolicy>
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符 -->
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger [%file:%line] - %msg%n</pattern>
        </encoder>
        <filter class="ch.qos.logback.classic.filter.LevelFilter"><!-- 只打印错误日志 -->
            <level>ERROR</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
    </appender>

    <appender name="LOGSTASH" class="net.logstash.logback.appender.LogstashTcpSocketAppender">
        <destination>localhost:9250</destination>
        <queueSize>1048576</queueSize>
        <encoder charset="UTF-8" class="net.logstash.logback.encoder.LogstashEncoder" />
    </appender>
    <logger name="com" level="ERROR" additivity="false">
        <appender-ref ref="ERROR_FILE"/>
    </logger>
    <logger name="comn" level="INFO" additivity="false">
        <appender-ref ref="STDOUT"/>
        <appender-ref ref="FILE"/>
    </logger>

    <logger name="com" level="INFO" additivity="false">
        <appender-ref ref="LOGSTASH"/>
    </logger>
    <!-- 日志输出级别 会打印根路径下所有的日志 -->
    <root level="INFO">
        <appender-ref ref="STDOUT"/>
        <appender-ref ref="FILE"/>
    </root>
    <!-- 开启JMXConfigurator(Spring Boot Admin 在线修改各包的日志级别) -->
    <jmxConfigurator/>
</configuration>

标黑就是配置,然后修改logstask的conf文件

input {
  beats {
    port => 9250
  }
}

output {
  elasticsearch {
    hosts => ["http://localhost:9200"]
    index => "%{[@metadata][beat]}-%{[@metadata][version]}-%{+YYYY.MM.dd}"
    #user => "elastic"
    #password => "changeme"
  }
}

启动logstask

一会后,出现错误IO的socket通讯流错误(中文乱码不好分析啊)

幸亏还有logstask自带的日志,打开

会不会端口号配置错误呢,改成8020试试,结果还是读不出来(后来才知道:logback支持将日志数据通过提供IP地址、端口号,以Socket的方式远程发送),然后继续查看

官网发现filebeat(专门读取file文件的服务)

filebeat需要修改filebeat.yml文件,怕改错了另外修改文件试试,添加如下配置(其实自带的里面有,只需要改下file的目录)

可以添加多个,这里我只做一个测试用,其他不变

bin目录下启动fileBeat,然后观察Kibana(这里对logstask未对日志做任何处理,可关闭)

日志监控成功!

继续修改,将logstask加入其中

将filebeat输出端口(yml文件)改下

output.logstash:
#   The Logstash hosts
  hosts: ["localhost:5044"]

将logstask的input监听端口改成5044(conf文件中的input)

也是能找到日志文件更新的内容的

跌跌撞撞的终于弄了个雏形,后续继续完善!

猜你喜欢

转载自blog.csdn.net/qq_40650378/article/details/87973902
今日推荐