微服务框架(十三)Spring Boot Logstash日志采集

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介:   本文为Spring Boot中Log4j2对接Logstash,进行日志采集。Logstah只支持log4j,使用log4j2时需要通过TCP插件调用此系列文章将会描述Java框架Spring Boot、服务治理框架Dubbo、应用容器引擎Docker,及使用Spring Boot集成Dubbo、Mybatis等开源框架,其中穿插着Spring Boot中日志切面等技术的实现,然后通过gitlab-CI以持续集成为Docker镜像。

  此系列文章将会描述Java框架Spring Boot、服务治理框架Dubbo、应用容器引擎Docker,及使用Spring Boot集成Dubbo、Mybatis等开源框架,其中穿插着Spring Boot中日志切面等技术的实现,然后通过gitlab-CI以持续集成为Docker镜像。
  本文为Spring Boot中Log4j2对接Logstash,进行日志采集

本系列文章中所使用的框架版本为Spring Boot 2.0.3-RELEASE,Spring 5.0.7-RELEASE,Dubbo 2.6.2。

Logstash

Logstash只支持log4j,使用log4j2时需要通过TCP插件调用

Logstash启动时推荐配置--config.reload.automatic参数,自动重载配置

Log4j2配置

Log4j2.xml:(Logstash作为Appender)

<!-- Socket Apppender配置,通过TCP协议连接Logstash -->
<Socket name="LOGSTASH" host="${logstashHost}" port="${logstashPort}"
    protocol="TCP">
    <PatternLayout charset="UTF-8" pattern="${PATTERN}" />
</Socket>

Logstash input

为了接收到上述日志信息,需要配置input插件

若日志信息为json格式,则codecjson,文本为plain

input {
  tcp {
    host => "ip"
    port => "port"
    codec => "plain"
  }
}

Logstash filter

Logstash filter插件在事件执行的中间过程进行相关的数据处理,通常根据事件的特征选择性地使用相应的过滤器。

Filter插件列表详见Logstash Filter

grok

简述

Grok可以将非结构化日志数据解析为结构化和可查询的内容。

此工具非常适用于syslog日志,apache和其他Web服务器日志,mysql日志,以及通常为人类而非计算机使用而编写的任何日志格式。

Logstash默认提供约120种模式。详见grok原生正则,亦可在patterns_dir参数使用自定义的正则模式串

工作原理

Grok的工作原理是将文本模式组合成与日志匹配的内容。grok模式的语法是 %{SYNTAX:SEMANTIC}

示例

55.3.244.1 GET /index.html 15824 0.043

上述HTTP日志可使用以下模式匹配

%{IP:client} %{WORD:method} %{URIPATHPARAM:request} %{NUMBER:bytes} %{NUMBER:duration}

对应Logstash文件为

input {
  file {
    path => "/var/log/http.log"
  }
}
filter {
  grok {
    match => { "message" => "%{IP:client} %{WORD:method} %{URIPATHPARAM:request} %{NUMBER:bytes} %{NUMBER:duration}" }
  }
}

经过grok过滤后,日志事件解析为以下字段

  • client: 55.3.244.1
  • method: GET
  • request: /index.html
  • bytes: 15824
  • duration: 0.043

json

  • skip_on_invalid_json:允许对无效json不进行过滤操作
  • source:进行json转换的字段
  • remove_field:删除字段(可用于剔除转换前的字段)
 json {
    skip_on_invalid_json => true
    source => "message"
    remove_field => ["message"]
 }

详细配置见Json filter plugin

geoip

geoip过滤器根据Maxmind geolite2数据库的数据,转换相应IP地址地理位置的信息。

geoip {
    source => "client_ip"
}

详细配置见Geoip filter plugin

Logstash 完整配置

Logstach.conf:

input {
  tcp {
    host => "ip"
    port => "port"
    codec => "plain"
  }
}

filter {

    grok {
        patterns_dir => ["./patterns"]
        match => {
           "message" => "\[%{LOGLEVEL:level}\] \[%{DATE_FORMAT:time}\]\[%{JAVACLASS:class}\]%{GREEDYDATA:message}"
        }
        overwrite => ["message"]
     }

     json {
        skip_on_invalid_json => true
        source => "message"
        remove_field => ["message"]
     }

    if [host] == "ip" {
        mutate {
            add_field => {
                "[@metadata][index_prefix]" => "service-dev"
            }
        }
    }

    if [host] == "ip" {
        mutate {
            add_field => {
                "[@metadata][index_prefix]" => "service-prod"
            }
        }
    }
}

output {
    stdout {
       codec => rubydebug
    }

    elasticsearch {
        hosts => ["devcdhsrv1:9200","devcdhsrv2:9200","devcdhsrv3:9200"]
        user => ""
        password => ""
        index => "%{[@metadata][index_prefix]}-%{+YYYY.MM.dd}"
        codec => json
    }
}

参考资料:
1.TCP input plugin
2.logstash grok插件语法介绍
3.Grok Debugger

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
12天前
|
数据采集 监控 前端开发
二级公立医院绩效考核系统源码,B/S架构,前后端分别基于Spring Boot和Avue框架
医院绩效管理系统通过与HIS系统的无缝对接,实现数据网络化采集、评价结果透明化管理及奖金分配自动化生成。系统涵盖科室和个人绩效考核、医疗质量考核、数据采集、绩效工资核算、收支核算、工作量统计、单项奖惩等功能,提升绩效评估的全面性、准确性和公正性。技术栈采用B/S架构,前后端分别基于Spring Boot和Avue框架。
|
21天前
|
Java API 数据库
Spring Boot框架因其简洁的配置、快速的启动特性及丰富的功能集而备受开发者青睐
本文通过在线图书管理系统案例,详细介绍如何使用Spring Boot构建RESTful API。从项目基础环境搭建、实体类与数据访问层定义,到业务逻辑实现和控制器编写,逐步展示了Spring Boot的简洁配置和强大功能。最后,通过Postman测试API,并介绍了如何添加安全性和异常处理,确保API的稳定性和安全性。
31 0
|
16天前
|
前端开发 Java 数据库连接
Spring 框架:Java 开发者的春天
Spring 框架是一个功能强大的开源框架,主要用于简化 Java 企业级应用的开发,由被称为“Spring 之父”的 Rod Johnson 于 2002 年提出并创立,并由Pivotal团队维护。
37 1
Spring 框架:Java 开发者的春天
|
1天前
|
Java 中间件
SpringBoot入门(6)- 添加Logback日志
SpringBoot入门(6)- 添加Logback日志
24 5
|
8天前
|
JavaScript 安全 Java
如何使用 Spring Boot 和 Ant Design Pro Vue 构建一个前后端分离的应用框架,实现动态路由和菜单功能
本文介绍了如何使用 Spring Boot 和 Ant Design Pro Vue 构建一个前后端分离的应用框架,实现动态路由和菜单功能。首先,确保开发环境已安装必要的工具,然后创建并配置 Spring Boot 项目,包括添加依赖和配置 Spring Security。接着,创建后端 API 和前端项目,配置动态路由和菜单。最后,运行项目并分享实践心得,帮助开发者提高开发效率和应用的可维护性。
23 2
|
8天前
|
消息中间件 NoSQL Java
springboot整合常用中间件框架案例
该项目是Spring Boot集成整合案例,涵盖多种中间件的使用示例,每个案例项目使用最小依赖,便于直接应用到自己的项目中。包括MyBatis、Redis、MongoDB、MQ、ES等的整合示例。
53 1
|
9天前
|
JSON Java 数据库
SpringBoot项目使用AOP及自定义注解保存操作日志
SpringBoot项目使用AOP及自定义注解保存操作日志
26 1
|
11天前
|
消息中间件 存储 监控
微服务日志监控的挑战及应对方案
【10月更文挑战第23天】微服务化带来模块独立与快速扩展,但也使得日志监控复杂。日志作用包括业务记录、异常追踪和性能定位。
|
16天前
|
Java 数据库连接 开发者
Spring 框架:Java 开发者的春天
【10月更文挑战第27天】Spring 框架由 Rod Johnson 在 2002 年创建,旨在解决 Java 企业级开发中的复杂性问题。它通过控制反转(IOC)和面向切面的编程(AOP)等核心机制,提供了轻量级的容器和丰富的功能,支持 Web 开发、数据访问等领域,显著提高了开发效率和应用的可维护性。Spring 拥有强大的社区支持和丰富的生态系统,是 Java 开发不可或缺的工具。
|
4天前
|
XML 安全 Java
【日志框架整合】Slf4j、Log4j、Log4j2、Logback配置模板
本文介绍了Java日志框架的基本概念和使用方法,重点讨论了SLF4J、Log4j、Logback和Log4j2之间的关系及其性能对比。SLF4J作为一个日志抽象层,允许开发者使用统一的日志接口,而Log4j、Logback和Log4j2则是具体的日志实现框架。Log4j2在性能上优于Logback,推荐在新项目中使用。文章还详细说明了如何在Spring Boot项目中配置Log4j2和Logback,以及如何使用Lombok简化日志记录。最后,提供了一些日志配置的最佳实践,包括滚动日志、统一日志格式和提高日志性能的方法。
86 30
【日志框架整合】Slf4j、Log4j、Log4j2、Logback配置模板
下一篇
无影云桌面