springboot集成graylog

     2022-05-03     795

关键词:

在微服务架构中,一个服务通常都会有多个实例,而这些服务实例可能会被部署到不同的机器或虚拟容器上。此时对于日志数据的查看和分析就会变得困难起来,因为这些服务的日志数据都散落在各自实例所在的机器或容器上。例如,我现在要在订单服务里查找一个订单id为1的日志,而订单服务有10个实例并且部署在10台不同的机器上,那么我就得一台台的去找这个日志数据。所以这时候我们就需要有一个可以实现日志聚合的工具,将所有实例的日志数据都聚合在一个地方,那么我们就不需要到每个实例去找日志了,而本文将使用的日志聚合工具为Graylog。

关于Graylog的介绍及安装可以参考我另一篇文章:

目前使用Java语言编写微服务架构的项目,基本都是使用SpringBoot作为项目的基本开发框架,所以本文主要介绍SpringBoot如何集成Graylog,并将日志数据发送给Graylog服务实现日志聚合。

1.首先创建一个SpringBoot项目,SpringBoot默认自带的日志框架是Logback,我们可以到Graylog组件市场查找Logback相应的组件。

我这里选择了一个近期有更新过的组件,该组件的github地址如下:

https://github.com/osiegmar/logback-gelf

2.然后在项目的pom.xml加入该组件的依赖,如下:

<dependency>
    <groupId>de.siegmar</groupId>
    <artifactId>logback-gelf</artifactId>
    <version>2.0.0</version>
</dependency>

3.接着在项目的resources目录下,新建一个logback.xml文件,编辑文件内容如下:

<configuration>
    <!-- 配置控制台的输出日志 -->
    <appender name="consoleLog" class="ch.qos.logback.core.ConsoleAppender">
        <encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
            <!-- 定义日志输出的格式 -->
            <layout class="ch.qos.logback.classic.PatternLayout">
                <pattern>
                    %d - [%thread] %-5level %logger{35} - [%line] - %msg%n
                </pattern>
            </layout>
        </encoder>
    </appender>

    <!-- 配置日志输出到Graylog服务 -->
    <appender name="GELF" class="de.siegmar.logbackgelf.GelfUdpAppender">
        <!-- 配置Graylog服务的地址 -->
        <graylogHost>192.168.190.129</graylogHost>
        <!-- UDP Input端口 -->
        <graylogPort>12201</graylogPort>
    </appender>

    <root level="info">
        <appender-ref ref="GELF" />
        <appender-ref ref="consoleLog" />
    </root>

</configuration>

我这边的UDP Input配置信息如下:
技术图片

4.配置完成后启动项目,启动完成后正常情况下可以在Graylog的Search界面中查看日志信息:
技术图片

点击一条日志信息会展开详细的字段:
技术图片

以上是最简单的日志配置,如果希望对更多配置项进行自定义的话,可以参考该组件的GitHub文档,上面有具体的配置项说明,下面给出一个我自己常用的appender配置示例:

<appender name="GELF" class="de.siegmar.logbackgelf.GelfUdpAppender">
    <!-- Graylog服务的地址 -->
    <graylogHost>192.168.190.129</graylogHost>
    <!-- UDP Input端口 -->
    <graylogPort>12201</graylogPort>
    <!-- 最大GELF数据块大小(单位:字节),508为建议最小值,最大值为65467 -->
    <maxChunkSize>508</maxChunkSize>
    <!-- 是否使用压缩 -->
    <useCompression>true</useCompression>
    <encoder class="de.siegmar.logbackgelf.GelfEncoder">
        <!-- 是否发送原生的日志信息 -->
        <includeRawMessage>false</includeRawMessage>
        <includeMarker>true</includeMarker>
        <includeMdcData>true</includeMdcData>
        <includeCallerData>false</includeCallerData>
        <includeRootCauseData>false</includeRootCauseData>
        <!-- 是否发送日志级别的名称,否则默认以数字代表日志级别 -->
        <includeLevelName>true</includeLevelName>
        <shortPatternLayout class="ch.qos.logback.classic.PatternLayout">
            <pattern>%m%nopex</pattern>
        </shortPatternLayout>
        <fullPatternLayout class="ch.qos.logback.classic.PatternLayout">
            <pattern>%d - [%thread] %-5level %logger{35} - %msg%n</pattern>
        </fullPatternLayout>
        <!-- 配置应用名称(服务名称),通过staticField标签可以自定义一些固定的日志字段 -->
        <staticField>app_name:backend</staticField>
        <staticField>os_arch:${os.arch}</staticField>
        <staticField>os_name:${os.name}</staticField>
        <staticField>os_version:${os.version}</staticField>
    </encoder>
</appender>

现在我们已经成功将项目的日志数据发送到了Graylog服务,如果我们想在Graylog上检索日志也很简单,只需要使用一些简单的语法即可,例如我要查询包含Mapping的日志信息:
技术图片

还可以使用一些条件表达式,例如我要查询message字段包含http,并且日志级别为INFO的日志信息:
技术图片

常用的日志搜索语法如下:

  • 模糊查询:直接输入要查询的内容,例如:orderid
  • 精确查询:要查询的内容加上引号,例如:"orderid: 11"
  • 指定字段查询: message:http 或 message:"http"
  • 多字段查询:message:(base-service base-web)
  • 多条件查询:message:http AND level_name:ERROR OR source:192.168.0.4
  • 正则匹配查询:app_name:order-service AND orderid:12?4*

注意:以上示例中涉及的符号全部是英文符号,且字母不区分大小写

关于搜索语法的官方文档地址如下:

http://docs.graylog.org/en/3.0/pages/queries.html

使用gelf进行javagraylog集成

我想通过使用“gelf”库在java中进行graylog集成。我添加了配置参数,以便将graylog服务器连接到“log4j_Appender.xml”<?xmlversion="1.0"encoding="UTF-8"?><Configurationstatus="info"packages="org.graylog2.log4j2"><Appenders>& 查看详情

docker安装graylog(代码片段)

Graylog简介Graylog是一个开源且完整的日志聚合、管理工具,提到日志管理想必大家都会想到ELK平台,Graylog功能和ELK类似,但又比ELK要易用,相对的日志分析能力以及一些功能没有ELK强大。所以Graylog与ELK各有优劣,ELK被诟病的地... 查看详情

springboot接入轻量级分布式日志框架(graylog)

参考技术A在文章正式开始之前,我分享下我以前负责过的一个系统,它的架构如下:每次当我查问题的时候,我都能把问题初步定位在逻辑层,但为了能给业务方交代,我需要给证据业务方面(日志信息就是铁证)。一个请求... 查看详情

springboot.03.springboot集成jsp

SpringBoot.03.SpringBoot集成jsp前言准备工作jsp集成案例集成步骤1.新建Module2.pom.xml3.Springboot03JspApplication.java4.application.yml5.index.jsp6.JspController.java7.测试问题分析解决方案1.springboot:run2.设置Workingdirectory修改jsp无 查看详情

springboot.03.springboot集成jsp(代码片段)

SpringBoot.03.SpringBoot集成jsp前言准备工作jsp集成案例集成步骤1.新建Module2.pom.xml3.Springboot03JspApplication.java4.application.yml5.index.jsp6.JspController.java7.测试问题分析解决方案1.springboot:run2.设置Workingdirectory修改jsp无 查看详情

springboot.03.springboot集成jsp(代码片段)

SpringBoot.03.SpringBoot集成jsp前言准备工作jsp集成案例集成步骤1.新建Module2.pom.xml3.Springboot03JspApplication.java4.application.yml5.index.jsp6.JspController.java7.测试问题分析解决方案1.springboot:run2.设置Workingdirectory修改jsp无 查看详情

springboot使用·上篇(springboot注解+集成jdbc+集成druid(德鲁伊)+sql监控)(代码片段)

文章目录SpringBoot的使用SpringBoot注解@SpringBootApplication@SpringBootConfiguration@EnableAutoConfiguration@ComponentScan@Configuration@Bean@ConfigurationPropertiesSpringBoot集成JDBC 查看详情

#springboot集成netty(代码片段)

SpringBoot集成Netty文章目录SpringBoot集成Netty背景描述Netty与SpringBoot整合关注点Netty组件Bootstrap、ServerBootstrapChannelEventLoop、EventLoopGroupChannelHandlerChannelPipelineByteBufPom依赖Yml配置整合Netty步骤服务端客户端背景描述如果需要在Spri 查看详情

springboot集成elasticsearch

点击跳转 查看详情

springboot集成elasticsearch

点击跳转 查看详情

springbootredis缓存(cache)集成

SpringBoot集成教程SpringBoot介绍SpringBoot开发环境搭建(Eclipse)SpringBootHelloWorld(restful接口)例子springboot连接Mysqlspringboot配置druid连接池连接mysqlspringboot集成mybatis(1)springboot集成mybatis(2)–使用pagehelper实现分页springboot集 查看详情

rocketmq集成springboot(代码片段)

RocketMQRocketMQ集成SpringBoot1.项目配置1.1新建项目1.2引入依赖2.生产者实现3.消费者实现总结RocketMQ集成SpringBoot1.项目配置1.1新建项目新建两个SpringBoot项目,项目名分别为:springboot-rocketmq-consumer、springboot-rocketmq-producter; 查看详情

springboot(十八):使用springboot集成fastdfs

SpringBoot(十八):使用SpringBoot集成FastDFS环境:SpringBoot最新版本1.5.9、jdk使用1.8、tomcat8.0功能:使用SpringBoot将文件上传到分布式文件系统FastDFS中。一、pom包配置<dependency><groupId>org.csource</groupId><artifactId> 查看详情

springboot配置全系列

基础配置maven的profile方式springboot的profile使用方式开发模式配置配置tomcat配置web相关配置日志配置JSP配置数据源集成配置集成druid集成mybatis集成Freemarker集成redis集成dubbo集成zookeeper集成rocketmq 查看详情

springboot集成freemarker

     查看详情

springboot集成mybatis通用mapper使用总结

 springboot集成MyBatis通用Mapper使用总结2019年  参考资料:Springboot集成MyBatis通用MapperSpringBoot框架之通用mapper插件(tk.mybatis)springboot如何优雅的使用mybatis-spring-boot-starter三分钟让你看懂Springboot中Mybatis的使用SpringB 查看详情

springboot集成hbase

springboot集成hbase会启动报错主要因为SpringBoot内嵌了Web容器,方便对应用进行微服务化开发和部署。所以打算将HBase的业务应用作为一个单服务进行开发和发布,其他相关的子系统通过RESTfulAPI来访问。搭建项目环境时,需要注意... 查看详情

springboot-springboot集成rabbitmq

一、SpringBoot集成RabbitMQ创建两个模块,一个命名springboot-send,一个命名springboot-receive在两个工程的pom.xml配置文件中引入AMQP依赖<dependencies><dependency><groupId>org.springframework.boot</groupId 查看详情