码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • ELK + filebeat日志解析、日志入库优化 、logstash过滤器配置属性


    文章目录

    • 前言
    • 优化结果
    • 实现
      • logstash
      • filebeat

    前言

    前段时间不是搭建了一套ELK日志分析系统嘛,然后日志是通过beats读取落地日志,推送给logstash,然后再由logstash推送到elasticsearch索引库,最后通过kibana可视化工具进行日志的分析查看,搭建过程详见Springboot/Springcloud整合ELK平台,(Filebeat方式)日志采集及管理(Elasticsearch+Logstash+Filebeat+Kibana)

    下面这张图是kibana展示的结果,这里我们发现有好多无用和重复的字段,并且我的日志字段还得展开才能看到,这部分肯定可以优化。然后我的Springboot/Springcloud整合ELK平台,(Filebeat方式)日志采集及管理(Elasticsearch+Logstash+Filebeat+Kibana)这篇文章评论区也有个小伙伴问我beats可以直接推送到elasticsearch,为什么还要通过logstash?
    在这里插入图片描述

    在这个小伙伴评论之前,我就已经优化好了日志, 这篇文章记录一下我解析优化日志的过程!

    在这里插入图片描述
    在这里插入图片描述

    优化结果

    在这里插入图片描述

    实现

    首先,我们知道logstash有很多的过滤插件
    
    • 1
    插件说明
    date日期解析
    grok正则匹配解析
    dissect分隔符解析
    mutate对字段作处理,比如重命名、删除、替换
    json按照json解析字段内容到指定字段中
    geoip增加地理位置数据
    ruby利用ruby代码来动态修改Logstash Event

    这里我参考了这两篇文章的示例,之后对我的logstash日志进行修改
    Logstash filter 的使用
    logstash配置详解

    • 这是我的输出日志
    2022-06-10 11:00:47.974 ERROR [main] com.alibaba.nacos.client.config.http.ServerHttpAgent : [NACOS SocketTimeoutException httpGet] currentServerAddr:http://127.0.0.1:8848, err : connect timed out
    
    • 1
    • 这是我log4j定义的格式,这里我在logstash配置文件中根据这个格式进行解析,日志整合详见什么是日志门面? SpringBoot整合log4j2 ,日志落地
    # log4j2 
    %d{yyyy-MM-dd HH:mm:ss.SSS} %highlight{%-5level} [%thread] %style{%logger{36}}{cyan} : %msg%n
    # logstash配置中解析
    %{TIMESTAMP_ISO8601:timestamp} %{LOGLEVEL:level} %{JAVALOGMESSAGE:thread} %{JAVALOGMESSAGE:style} : %{JAVALOGMESSAGE:msg}
    
    • 1
    • 2
    • 3
    • 4

    logstash

    input {
      beats {
        port => 5044
        type => "logs"
      }
      tcp {
        mode => "server"
        host => "127.0.0.1"
        port => 4560
        codec => json_lines
      }
    }
    filter {
      //解析日志
      grok{
        match => { "message" => "%{TIMESTAMP_ISO8601:timestamp} %{LOGLEVEL:level} %{JAVALOGMESSAGE:thread} %{JAVALOGMESSAGE:style} : %{JAVALOGMESSAGE:msg}" }
      }
      //将入库时间替换成我们日志中的时间
      date {
        match => [ "timestamp" , "yyyy-MM-dd HH:mm:ss,S", "ISO8601" ]
      } 
      //删除多余字段
      mutate { 
        remove_field => "agent"
        remove_field => "ecs" 
        remove_field => "@version"
        remove_field => "host"    
        remove_field => "path"
        remove_field => "log"
        remove_field => "message"
      }
    }
    output {
      elasticsearch {
    	hosts => ["http://127.0.0.1:9200"]
        user => "elastic"
        passwrod => "123456"
    	index => "%{[fields][servicename]}-%{+yyyy.MM.dd}"
      }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40

    filebeat

    添加配置
    multiline:
    pattern: ‘^\s*(\d{4}|\d{2})-(\d{2}|[a-zA-Z]{3})-(\d{2}|\d{4})’ 符合java日志换行规则

    filebeat.inputs:
    - type: log
      enabled: true
      paths:
        - E:\ideaProject\SpringCloudAlibaba2022\logs\order-service\info.log
        #- c:\programdata\elasticsearch\logs\*
      fields:
        servicename: order-service
      multiline:
        pattern: '^\s*(\d{4}|\d{2})\-(\d{2}|[a-zA-Z]{3})\-(\d{2}|\d{4})'
        negate: true
        match: after
        timeout: 5s
    - type: log
      enabled: true
      paths:
        - E:\ideaProject\SpringCloudAlibaba2022\logs\user-service\info.log
        #- c:\programdata\elasticsearch\logs\*
      fields:
        servicename: user-service
      multiline:
        pattern: '^\s*(\d{4}|\d{2})\-(\d{2}|[a-zA-Z]{3})\-(\d{2}|\d{4})'
        negate: true
        match: after
        timeout: 5s
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25

    完成以上这些配置修改之后,重启filebeat、logstash

    有任何问题随时私信联系!
    原创不易,如果有帮助到你的话点个赞再走吧!感谢!

  • 相关阅读:
    湖北省2022年高企申报奖励补贴以及申报材料流程讲解(认定条件要求内容)
    java链表(含案例代码展示)
    开源的轻量级任务调度框架
    dbeaver离线安装clickhouse连接驱动
    论文阅读(3) 用气泡PIV测量加利福尼亚海狮推进冲程的速度场
    论格斗游戏中“一滴血反杀”现象的心理机制与启示
    浅析多服务在分布式系统下多事务通信处理机制方案
    【Linux】reboot,shutdown -r ,init 6失效问题处理分析
    华为HCIP安全 VPN学习笔记 密码学基础:基本框架介绍
    【LeetCode刷题-链表】--25.K个一组翻转链表
  • 原文地址:https://blog.csdn.net/weixin_43627706/article/details/125411741
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号