在分布式系统中,服务要部署多台服务器,没有日志服务看日志是很崩溃的。
在日志框架选型的时候,我参考了zipkin,skywalking,graylog(说的是免费的啦,在不考虑成本的情况下,我会使用阿里云的日志服务), 也是我在项目中使用过的。
框架 | 代码入侵性 | 字段可选 | 上下文查看 | UI |
---|---|---|---|---|
zipkin | 高 | 否 | 否 | 页面简单,查询语法太单一了 |
skywalking | 低 | 否 | 否 | 带了很多监控,查询语法丰富,但是看日志很不方便,UI不喜欢 |
graylog | 低 | 是 | 否 | 页面简单,字段可选,查询语法丰富 |
1. 安装graylog
graylog配置inputs, System/Inputs -> Inputs。 选择GELF UCP。
Title: 增加命名
Port: 默认端口
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。
常用语法
一般在“搜索框”中进行日志搜索查询时常用的语法如下:
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*
注意:以上示例中涉及的符合全部是英文符号,且字母不区分大小写**