• SpringBoot分布式框架


    00、为什么需要分布式日志组件?

    在文章正式开始之前,我分享下一个系统,它的架构如下:

    每次当我查问题的时候,我都能把问题初步定位在 逻辑层 ,但为了能给业务方交代,我需要 给证据 业务方面(日志信息就是铁证)。

    一个请求肯定是被这8台机器内的某一台处理,但具体是哪一台,我不知道。所以,我需要上每台机器上 grep 一把日志,然后才能找出对应的日志证明我的分析。

    有的时候,可能 接入层 也需要一起参与进去,就排查一个问题,人都傻了了(翻看日志的时间占用了太久了)。

    后来啊,看了同事的骚操作(在 item2 编写脚本: 快速登录堡垒机 (免去输入账号和密码信息),根据应用服务器数量来切割窗口并且切换到对应的日志目录)。说白了就是 一键登录 多台应用服务器。嗯,这查日志的速度比起以前又快了好多。

    再后来,公司运维侧又主力推在 Web页面 上登录应用服务器( 自动登录堡垒机 ),这能省去编写脚本( 支持批量操作 )。但从当时的体验上,没有问题 item2 访问得流畅(总感觉卡卡的)。

    不过还有问题,因为我们在很多时候是不知道在 info / warn / error 哪个文件下。很多时候只能一个一个文件去查,虽然说可以直接查 通配符 一把查,如果日志过大,带来停顿时间也挺烦的。

    系统一旦被问到业务问题,查日志的频率实在是太高了。于是我在某个Q规划的时候是想自己把日志信息写入到 搜索引擎 ,顺便学习下搜索引擎的知识。然后这个规划被组内的某个大佬看到了,在底下评论: 要不来试试Graylog ?

    原来组内本身就在维护了一个 日志框架 ,只是我不知道...于是我接入了 Graylog 日志,工作效率杠杠提高了

    自从接入了之后,我就没登录过应用服务器了,有次差点连 grep 都不会写了。

    01、轻量级ELK(Graylog)

    说起ELK,即便没用过肯定也听说过这玩意了,在后端是真的流行。这次austin接入一个比较轻量级的ELK框架: Graylog

    这个框架我感觉蛮好用的,作为 使用方 接入起来 异常简单 (我估摸运维应该也挺简单的,很多用Graylog是直接发UDP到Server,不用在机器上装agent收集日志)

    一图胜十言:

    据我了解,有相当多的企业使用它来 查看日志和业务监控告警 ,这篇文章我就直接让你们体验体验吧。

    02、部署Graylog

    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-it elasticsearch:9200 --  /docker-entrypoint.sh      networks:        - graylog      restart: always      depends_on:        - mongo        - elasticsearch      ports:        - 9009:9000        - 1514:1514        - 1514:1514/udp        - 12201:12201        - 12201:12201/udpnetworks:    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 字段,保存就完事了(其他不用动)。

    03、SpringBoot使用GrayLog

    还记得我们 austin 项目使用的日志框架吗?没错,就是logback。我们要把日志数据写入Graylog很简单,只需要两步:

    1、引入依赖:

    <dependency>  <groupId>de.siegmargroupId>  <artifactId>logback-gelfartifactId>  <version>3.0.0version>dependency>
    

    2、在 logback.xml 配置graylog相关的信息:

    <appender name="GELF" class="de.siegmar.logbackgelf.GelfUdpAppender">    <graylogHost>ipgraylogHost>    <graylogPort>12201graylogPort>    <maxChunkSize>508maxChunkSize>    <useCompression>trueuseCompression>  <encoder class="de.siegmar.logbackgelf.GelfEncoder">        <includeRawMessage>falseincludeRawMessage>    <includeMarker>trueincludeMarker>    <includeMdcData>trueincludeMdcData>    <includeCallerData>falseincludeCallerData>    <includeRootCauseData>falseincludeRootCauseData>        <includeLevelName>trueincludeLevelName>    <shortPatternLayout class="ch.qos.logback.classic.PatternLayout">      <pattern>%m%nopexpattern>    shortPatternLayout>    <fullPatternLayout class="ch.qos.logback.classic.PatternLayout">      <pattern>%d - [%thread] %-5level %logger{35} - %msg%npattern>    fullPatternLayout>        <staticField>app_name:austinstaticField>  encoder>appender>
    

    在这个配置信息里,唯一要改的也只是 ip 的地址,到这里接入就完毕了,我们再打开控制台,就能看到日志的信息啦。

    04、懂点GrayLog

    懂点GrayLog查询语法:这块我日常来来去去其实就用几个,我来展示下我平时用的吧。

    1、根据字段精确查询: full_message:"13788888888"

    2、查询错误日志信息: level_name:"ERROR"

    3、组合多字段查询: level_name:"INFO" AND full_message:"13788888888"

    在接入的时候,仔细的小伙伴可能会发现我这边在Input的时候选择的是 GELF ,然后在引入Maven依赖的时候也有 GELF 的字样。那 GELF 是啥意思呢?

    这块在官网也有给出对应的解释: The Graylog Extended Log Format (GELF) is a log format that avoids the shortcomings of classic plain syslog

    GELF 是一种日志格式,能避免传统意义上的 syslogs 的一些问题,而我们引入的Maven依赖则是把日志格式化成 GELF 格式然后append到GrayLog上。

  • 相关阅读:
    基于ssm的人力资源管理系统
    Nginx监控模块vts
    猿创征文 | 开箱即用 yyg-cli:快速创建 vue3 组件库和vue3 全家桶项目
    力扣 (LeetCode) 字节校园 算法与数据结构
    含文档+PPT+源码等]精品基于PHP实现的社团活动小程序[包运行成功]计算机PHP毕业设计微信小程序项目源码
    minikube部署K8s命令
    松散正则表达式在Python中的用法详解
    python神经网络编程 豆瓣,python神经网络图像分类
    MATLAB | App Designer·我用MATLAB制作了一款LATEX公式实时编辑器
    力扣每日一题:1779. 找到最近的有相同 X 或 Y 坐标的点【思维水题】
  • 原文地址:https://blog.csdn.net/weixin_62421895/article/details/126031501