filebeat采集日志到logstash,由logstash发送的es
- 下载并配置filebeat
 - 下载
 - 配置
 - logback.xml
 
- logstash配置
 
下载并配置filebeat
下载
参考
 
配置
filebeat.inputs:
- type: filestream
  enabled: true
  paths:
  	# 日志文件目录
    - D:\modellog\elkdemo\*\*.log
  parsers:
  # 多行日志合并(例如java的异常堆栈信息)
  - multiline:
      type: pattern
      # 匹配以[开头的
      pattern: '^\['
      negate: true
      match: after
# 自定义日志格式
processors:
- dissect:
    tokenizer: '[%{timestamp}] -%{parentTraceId} -%{traceId} -%{host} -%{port} -%{appName} -%{pid} -[%{level}] -[%{thread}] -%{class} -%{line} - %{message}'
    field: "message"
# 输出到logstash
output.logstash:
  enabled: true
  hosts: ["192.168.0.100:21069"]  
 
logback.xml
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <!-- 彩色日志 -->
    <!-- 彩色日志依赖的渲染类 -->
    <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"/>
    <define name="hostAddress" class="top.mingempty.commons.definer.IPLogDefiner"/>
    <springProperty scope="context" name="appName" source="spring.application.name"/>
    <springProperty scope="context" name="port" source="server.port"/>
    <!--彩色日志格式以及包名输出缩进对齐-->
    <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([%t]){faint} %clr(%logger){cyan} %clr(:){magenta} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}"/>
    <property name="FILE_LOG_PATTERN"
              value="[%d{yyyy-MM-dd HH:mm:ss.SSS}] -${hostAddress} -${port} -${appName} -${PID:-} -[%-5level] -[%thread] -%logger -%-3L - %msg%n"/>
    <contextName>fanxlxs</contextName>
    <!--文件夹在当前项目磁盘根目录-->
    <property name="LOG_PATH" value="/modellog"/>
    <!--设置系统日志目录-->
    <property name="APPDIR" value="/filebeat"/>
    <!--  日志记录器,日期滚动记录
            ERROR 级别
     -->
    <appender name="ERROR" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!-- 正在记录的日志文件的路径及文件名 -->
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <!--日志文件输出的文件名,日期必须加,如果单天需要生成多个日志,则需要添加%i-->
            <FileNamePattern>${LOG_PATH}/${APPDIR}/%d{yyyy-MM-dd}/error-%d{yyyy-MM-dd}.%i.log</FileNamePattern>
            <!--            <!–历史日志文件保留天数,不包含当日日志,且需结合cleanHistoryOnStart字段使用–>
                        <!–可以按“文件数量、小时、天、月、年”等策略实现文件保留 –>
                        <MaxHistory>3</MaxHistory>
                        <cleanHistoryOnStart>true</cleanHistoryOnStart>-->
            <!-- 单天单个日志最大size -->
            <maxFileSize>10MB</maxFileSize>
            <!--     <!–仅针对当天的日志进行总size控制,日志名中的“i”保留最后数值 –>
                 <totalSizeCap>10MB</totalSizeCap>-->
        </rollingPolicy>
        <!-- 追加方式记录日志 -->
        <append>true</append>
        <!-- 日志文件的格式 -->
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <pattern>${FILE_LOG_PATTERN}</pattern>
            <charset>utf-8</charset>
        </encoder>
        <!-- 此日志文件记录error级别的 -->
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>error</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
    </appender>
    <!-- 日志记录器,日期滚动记录
            WARN  级别
     -->
    <appender name="WARN" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!-- 正在记录的日志文件的路径及文件名 -->
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <!--日志文件输出的文件名,日期必须加,如果单天需要生成多个日志,则需要添加%i-->
            <FileNamePattern>${LOG_PATH}/${APPDIR}/%d{yyyy-MM-dd}/warn-%d{yyyy-MM-dd}.%i.log</FileNamePattern>
            <!--            <!–历史日志文件保留天数,不包含当日日志,且需结合cleanHistoryOnStart字段使用–>
                        <!–可以按“文件数量、小时、天、月、年”等策略实现文件保留 –>
                        <MaxHistory>3</MaxHistory>
                        <cleanHistoryOnStart>true</cleanHistoryOnStart>-->
            <!-- 单天单个日志最大size -->
            <maxFileSize>10MB</maxFileSize>
            <!--     <!–仅针对当天的日志进行总size控制,日志名中的“i”保留最后数值 –>
                 <totalSizeCap>10MB</totalSizeCap>-->
        </rollingPolicy>
        <!-- 追加方式记录日志 -->
        <append>true</append>
        <!-- 日志文件的格式 -->
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <pattern>${FILE_LOG_PATTERN}</pattern>
            <charset>utf-8</charset>
        </encoder>
        <!-- 此日志文件只记录warn级别的 -->
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>warn</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
    </appender>
    <!-- 日志记录器,日期滚动记录
            INFO  级别
    -->
    <appender name="INFO" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!-- 正在记录的日志文件的路径及文件名 -->
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <!--日志文件输出的文件名,日期必须加,如果单天需要生成多个日志,则需要添加%i-->
            <FileNamePattern>${LOG_PATH}/${APPDIR}/%d{yyyy-MM-dd}/info-%d{yyyy-MM-dd}.%i.log</FileNamePattern>
            <!--            <!–历史日志文件保留天数,不包含当日日志,且需结合cleanHistoryOnStart字段使用–>
                        <!–可以按“文件数量、小时、天、月、年”等策略实现文件保留 –>
                        <MaxHistory>3</MaxHistory>
                        <cleanHistoryOnStart>true</cleanHistoryOnStart>-->
            <!-- 单天单个日志最大size -->
            <maxFileSize>10MB</maxFileSize>
            <!--     <!–仅针对当天的日志进行总size控制,日志名中的“i”保留最后数值 –>
                 <totalSizeCap>10MB</totalSizeCap>-->
        </rollingPolicy>
        <!-- 追加方式记录日志 -->
        <append>true</append>
        <!-- 日志文件的格式 -->
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <pattern>${FILE_LOG_PATTERN}</pattern>
            <charset>utf-8</charset>
        </encoder>
        <!-- 此日志文件只记录info级别的 -->
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>info</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
    </appender>
    <!-- 日志记录器,日期滚动记录
            DEBUG  级别
    -->
    <appender name="DEBUG" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!-- 正在记录的日志文件的路径及文件名 -->
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <!--日志文件输出的文件名,日期必须加,如果单天需要生成多个日志,则需要添加%i-->
            <FileNamePattern>${LOG_PATH}/${APPDIR}/%d{yyyy-MM-dd}/debug-%d{yyyy-MM-dd}.%i.log</FileNamePattern>
            <!--            <!–历史日志文件保留天数,不包含当日日志,且需结合cleanHistoryOnStart字段使用–>
                        <!–可以按“文件数量、小时、天、月、年”等策略实现文件保留 –>
                        <MaxHistory>3</MaxHistory>
                        <cleanHistoryOnStart>true</cleanHistoryOnStart>-->
            <!-- 单天单个日志最大size -->
            <maxFileSize>10MB</maxFileSize>
            <!--     <!–仅针对当天的日志进行总size控制,日志名中的“i”保留最后数值 –>
                 <totalSizeCap>10MB</totalSizeCap>-->
        </rollingPolicy>
        <append>true</append>
        <!-- 日志文件的格式 -->
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <pattern>${FILE_LOG_PATTERN}</pattern>
            <charset>utf-8</charset>
        </encoder>
        <!-- 此日志文件只记录debug级别的 -->
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>debug</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
    </appender>
    <!-- ConsoleAppender 控制台输出日志 -->
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <!--encoder 默认配置为PatternLayoutEncoder-->
        <encoder>
            <pattern>${CONSOLE_LOG_PATTERN}</pattern>
            <charset>utf-8</charset>
        </encoder>
        <!--此日志appender是为开发使用,只配置最底级别,控制台输出的日志级别是大于或等于此级别的日志信息-->
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <level>debug</level>
        </filter>
    </appender>
    
    <!-- FrameworkServlet日志-->
    <logger name="org.springframework" level="WARN"/>
    <!-- nacos日志-->
    <logger name="com.alibaba.nacos" level="WARN"/>
    
    <!-- 项目日志-->
    <logger name="top.mingempty.metadata" level="INFO"/>
    <!-- 生产环境下,将此级别配置为适合的级别,以免日志文件太多或影响程序性能 -->
    <root level="INFO">
        <appender-ref ref="ERROR"/>
        <appender-ref ref="WARN"/>
        <appender-ref ref="INFO"/>
        <appender-ref ref="DEBUG"/>
        <!-- 生产环境将请stdout去掉 -->
        <appender-ref ref="STDOUT"/>
    </root>
</configuration>
 
logstash配置
input {
  beats  {
    port => 5044
  }
}
filter {
  grok {
    ## 指定日志输出格式(和logback对应上)
    match => { "message" => "\[%{TIMESTAMP_ISO8601:timestamp}\] -%{IP:host} -%{NUMBER:port} -%{DATA:appName} -%{NUMBER:pid} -\[%{DATA:level}\] -\[%{DATA:thread}\] -%{DATA:class} -%{NUMBER:line} - %{GREEDYDATA:message}" }
  }
  
  mutate {
    remove_field => [ "[@timestamp]"]
    rename => {
        "[dissect][parentTraceId]" => "parentTraceId"
        "[dissect][traceId]" => "traceId"
        "[dissect][host]" => "host"
        "[dissect][port]" => "port"
        "[dissect][appName]" => "appName"
        "[dissect][pid]" => "pid"
        "[dissect][level]" => "level"
        "[dissect][thread]" => "thread"
        "[dissect][class]" => "class"
        "[dissect][line]" => "line"
        "[dissect][message]" => "message"
        "[dissect][timestamp]" => "timestamp"
        "[log][file][path]" => "path"
      }
  }
  date {
    match => [ "timestamp", "yyyy-MM-dd HH:mm:ss.SSS" ] # 这里指定日志中时间戳的格式
    target => "@timestamp" # 将解析后的时间戳存储到  字段
    timezone => "Asia/Shanghai" # 指定时区为中国标准时间
  }
  
  mutate {
    remove_field => [ "timestamp","event", "agent", "ecs", "input", "tags", "flags", "log", "dissect" ,"@version"]
  }
}
output {
  elasticsearch {
    hosts => ["https://172.27.0.2:9200"]
    index => "beats3-mingempty-top-%{+YYYY.MM.dd}"
    #这里开启了es的x-pack
    user => "帐号"
    password => "密码"
    ssl_enabled => true
    ssl_certificate_authorities => ["/usr/share/logstash/config/logstash.pem"]
  }
}
 
docker-compose部署elk(8.9.0)并开启ssl认证














![[MIT 6.1810]Lab7-networking](https://img-blog.csdnimg.cn/750c65041ddb44c6ad1f11f6679224f4.png)



