springboot 日志跟踪 集成graylog

396 阅读1分钟

在分布式系统中,服务要部署多台服务器,没有日志服务看日志是很崩溃的。

在日志框架选型的时候,我参考了zipkin,skywalking,graylog(说的是免费的啦,在不考虑成本的情况下,我会使用阿里云的日志服务), 也是我在项目中使用过的。

框架代码入侵性字段可选上下文查看UI
zipkin页面简单,查询语法太单一了
skywalking带了很多监控,查询语法丰富,但是看日志很不方便,UI不喜欢
graylog页面简单,字段可选,查询语法丰富

1. 安装graylog

graylog配置inputs, System/Inputs -> Inputs。 选择GELF UCP。

Title: 增加命名

Port: 默认端口

image.png

2. 配置maven

<!-- 日志记录-->
<dependency>
    <groupId>de.siegmar</groupId>
    <artifactId>logback-gelf</artifactId>
    <version>4.0.0</version>
</dependency>

<!-- 日志跟踪,生成traceId-->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-sleuth</artifactId>
</dependency>

3. logback-spring.xml 配置

修改graylogHost,graylogPort

<appender name="GELF" class="de.siegmar.logbackgelf.GelfUdpAppender">
    <graylogHost>192.168.202.128</graylogHost>
    <graylogPort>12201</graylogPort>
    <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>${CONSOLE_LOG_PATTERN_NO_COLOR}</pattern>
        </shortPatternLayout>
        <fullPatternLayout class="ch.qos.logback.classic.PatternLayout">
            <pattern>${CONSOLE_LOG_PATTERN_NO_COLOR}</pattern>
        </fullPatternLayout>
        <!-- 配置应用名称(服务名称),通过staticField标签可以自定义一些固定的日志字段 -->
        <staticField>app_name:graylog-sleuth</staticField>
    </encoder>
</appender>


<root level="INFO">
    <appender-ref ref="GELF"/>
</root>

测试

调用接口,打印一些info日志,就可以在graylog看到日志了。根据traceId搜索调用链 traceId:0b02e43b05a2683f,每一个请求会生成一个traceId。

image.png

常用语法

一般在“搜索框”中进行日志搜索查询时常用的语法如下:  

1、**模糊查询**:直接输入  baseid

2、**精确查询**:加引号    “baseid”

3、**字段查询**: team:base 或 ztyq:base-web  其中 team 的值主要有 **base、apply、supply、chengdu、xman** ,由于 ztyq 的值比较多在此不一一列举。

4、**多字段查询**:ztyq:(base-service base-web)

5、**多条件查询**:team:base AND ztyq:base-web OR source:192.168.0.4  

6、**正则匹配查询**:ztyq:base-web AND baseid:12?4*

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