在微服务架构中,一个服务通常都会有多个实例,而这些服务实例可能会被部署到不同的机器或虚拟容器上。此时对于日志数据的查看和分析就会变得困难起来,因为这些服务的日志数据都散落在各自实例所在的机器或容器上。例如,我现在要在订单服务里查找一个订单id为1的日志,而订单服务有10个实例并且部署在10台不同的机器上,那么我就得一台台的去找这个日志数据。所以这时候我们就需要有一个可以实现日志聚合的工具,将所有实例的日志数据都聚合在一个地方,那么我们就不需要到每个实例去找日志了,而本文将使用的日志聚合工具为Graylog
部署Graylog
老样子,直接上docker-compose,如果一直跟着我的步伐,应该对着不陌生了。docker-compose.yml 的内容其实我也是抄官网的,这里还是贴下吧(就不用你们翻了)
version:'3'
services:
mongo:
image:mongo:4.2
networks:
-graylog
elasticsearch:
image:docker.elastic.co/elasticsearch/elasticsearch-oss:7.10.2
environment:
-http.host=0.0.0.0
-transport.host=localhost
-network.host=0.0.0.0
-"ES_JAVA_OPTS=-Dlog4j2.formatMsgNoLookups=true-Xms512m-Xmx512m"
ulimits:
memlock:
soft:-1
hard:-1
deploy:
resources:
limits:
memory:1g
networks:
-graylog
graylog:
image:graylog/graylog:4.2
environment:
-GRAYLOG_PASSWORD_SECRET=somepasswordpepper
-GRAYLOG_ROOT_PASSWORD_SHA2=8c6976e5b5410415bde908bd4dee15dfb167a9c873fc4bb8a81f6f2ab448a918
-GRAYLOG_HTTP_EXTERNAL_URI=http://ip:9009/#这里注意要改ip
entrypoint:/usr/bin/tini--wait-for-itelasticsearch:9200--/docker-entrypoint.sh
networks:
-graylog
restart:always
depends_on:
-mongo
-elasticsearch
ports:
-9009:9000
-1514:1514
-1514:1514/udp
-12201:12201
-12201:12201/udp
networks:
graylog:
driver:bridg
这个文件里唯一需要改动的就是 ip (本来的端口是 9000 的,我由于已经占用了 9000 端口了,所以我这里把端口改成了 9009 ,你们可以随意)
嗯,写完 docker-compose.yml 文件,直接 docker-compose up -d 它就启动起来咯。
启动以后,我们就可以通过 ip:port 访问对应的Graylog后台地址了,默认的账号和密码是 admin/admin
随后,我们配置下 inputs 的配置,找到 GELF UDP ,然后点击 Launch new input ,只需要填写 Title 字段,保存就完事了(其他不用动)。
基于 Spring Boot + MyBatis Plus + Vue & Element 实现的后台管理系统 + 用户小程序,支持 RBAC 动态权限、多租户、数据权限、工作流、三方登录、支付、短信、商城等功能
- 项目地址:https://gitee.com/zhijiantianya/ruoyi-vue-pro
- 视频教程:https://doc.iocoder.cn/video/
Spring Boot 集成GrayLog
首先创建一个SpringBoot项目,SpringBoot默认自带的日志框架是Logback,我们可以到 Graylog组件市场查找Logback相应的组件。
添加依赖如下:
<dependency>
<groupId>de.siegmargroupId>
<artifactId>logback-gelfartifactId>
<version>3.0.0version>
dependency>
接着在项目的resources目录下,新建一个logback.xml
文件,编辑文件内容如下:
<appendername="GELF"class="de.siegmar.logbackgelf.GelfUdpAppender">
<graylogHost>ipgraylogHost>
<graylogPort>12201graylogPort>
<maxChunkSize>508maxChunkSize>
<useCompression>trueuseCompression>
<encoderclass="de.siegmar.logbackgelf.GelfEncoder">
<includeRawMessage>falseincludeRawMessage>
<includeMarker>trueincludeMarker>
<includeMdcData>trueincludeMdcData>
<includeCallerData>falseincludeCallerData>
<includeRootCauseData>falseincludeRootCauseData>
<includeLevelName>trueincludeLevelName>
<shortPatternLayoutclass="ch.qos.logback.classic.PatternLayout">
<pattern>%m%nopexpattern>
shortPatternLayout>
<fullPatternLayoutclass="ch.qos.logback.classic.PatternLayout">
<pattern>%d-[%thread]%-5level%logger{35}-%msg%npattern>
fullPatternLayout>
<staticField>app_name:austinstaticField>
encoder>
appender>
在这个配置信息里,唯一要改的也只是 ip 的地址,到这里接入就完毕了,我们再打开控制台,就能看到日志的信息啦。
配置完成后启动项目,启动完成后正常情况下可以在Graylog的Search界面中查看日志信息:
点击一条日志信息会展开详细的字段:
以上是最简单的日志配置,如果希望对更多配置项进行自定义的话,可以参考该组件的GitHub文档,上面有具体的配置项说明
现在我们已经成功将项目的日志数据发送到了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
审核编辑 :李倩
-
框架
+关注
关注
0文章
398浏览量
17415 -
spring
+关注
关注
0文章
338浏览量
14299 -
日志
+关注
关注
0文章
138浏览量
10628 -
SpringBoot
+关注
关注
0文章
173浏览量
164
原文标题:SpringBoot接入轻量级分布式日志框架GrayLog
文章出处:【微信号:芋道源码,微信公众号:芋道源码】欢迎添加关注!文章转载请注明出处。
发布评论请先 登录
相关推荐
评论