美文网首页
接入plumelog分布式日志收集系统

接入plumelog分布式日志收集系统

作者: 生不悔改 | 来源:发表于2023-02-26 11:18 被阅读0次

    背景

    当前商城是分布式,部署了xxxxx-c,xxxxx-pc,base-system三套业务系统。存在以下问题:

    1.出现错误,无法及时的查看到对应的错误日志。

    2.无法查看整个链路的请求,需要开发人员或者运维人员花费大量的时间去整理问题日志,找寻问题日志。

    3.日志搜索缓慢,耗时,耗人。

    解决方案

    目前业界常见的分布式日志解决方案有:

    1.elk:filebeat+Elasticsearch+kibana

    2.Graylog:Elasticsearch + Graylog Server + Graylog Web

    3.skywalking

    4.plumelog:plumelog-server+Elasticsearch+redis/kafka

    .....

    方案选择

    目的:

    1.收集分布式日志方便日常日志查询

    2.拥有链路追踪,方便定位

    3.拥有告警功能,方便及时解决问题

    4.简单,方便部署

    基于以上目的,选择了网上的plumelog解决方案

    原因:

    1.使用方便,接入简单

    2.需要依赖的系统少,可以用业务系统的redis/kafka和es

    3.查询方便,支持链路追踪,告警

    4.系统轻量

    plumelog系统架构

    image.png

    plumelog3.5版本已经将ui集成在server中,只需要启动server即可访问。

    接入plumelog步骤

    服务端部署

    plumelog的Gitee官网地址:

    https://gitee.com/plumeorg/plumelog 可以下载源码

    下载plumelog-server

    image.png

    maven打包

    image.png

    上传相关jar包和配置

    image.png

    修改配置文件

    spring.application.name=plumelog-server
    server.port=8891
    spring.thymeleaf.mode=LEGACYHTML5
    spring.mvc.view.prefix=classpath:/templates/
    spring.mvc.view.suffix=.html
    spring.mvc.static-path-pattern=/plumelog/**
    spring.boot.admin.context-path=admin
    
    #值为4种 redis,kafka,rest,restServer,lite
    #redis 表示用redis当队列
    #kafka 表示用kafka当队列
    #rest 表示从rest接口取日志
    #restServer 表示作为rest接口服务器启动
    #ui 表示单独作为ui启动
    #lite 简易模式启动不需要配置redis,es等
    plumelog.model=redis
    #lite模式下日志存储路径
    #plumelog.lite.log.path=/Users/lucene
    
    #如果使用kafka,启用下面配置
    #plumelog.kafka.kafkaHosts=172.16.247.143:9092,172.16.247.60:9092,172.16.247.64:9092
    #plumelog.kafka.kafkaGroupName=logConsumer
    
    #队列redis地址,model配置redis集群模式,哨兵模式用逗号隔开,队列redis不支持集群模式,lite模式可以全部注释掉下面配置
    plumelog.queue.redis.redisHost=192.168.xxx.xxx:6379
    #如果使用redis有密码,启用下面配置
    plumelog.queue.redis.redisPassWord=mtmy
    plumelog.queue.redis.redisDb=15
    #哨兵模式需要配置的
    #plumelog.queue.redis.sentinel.masterName=myMaster
    #redis解压缩模式,开启后不消费非压缩的队列
    #plumelog.redis.compressor=true
    
    #管理端redis地址 ,集群用逗号隔开,不配置将和队列公用,lite模式可以全部注释掉下面配置
    #plumelog.redis.redisHost=127.0.0.1:6379
    #如果使用redis有密码,启用下面配置
    plumelog.redis.redisPassWord=mtmy
    plumelog.redis.redisDb=15
    #哨兵模式需要配置的
    #plumelog.redis.sentinel.masterName=myMaster
    
    #如果使用rest,启用下面配置
    #plumelog.rest.restUrl=http://127.0.0.1:8891/getlog
    #plumelog.rest.restUserName=plumelog
    #plumelog.rest.restPassWord=123456
    
    #elasticsearch相关配置,Hosts支持携带协议,如:http、https,集群逗号隔开,lite模式可以全部注释掉下面配置
    plumelog.es.esHosts=http://xxx.xxx.xxx.xxx:9200
    plumelog.es.shards=5
    plumelog.es.replicas=1
    plumelog.es.refresh.interval=30s
    #日志索引建立方式day表示按天、hour表示按照小时
    plumelog.es.indexType.model=day
    #hour模式下需要配置这个
    #plumelog.es.maxShards=100000
    #ES设置密码,启用下面配置
    #plumelog.es.userName=elastic
    #plumelog.es.passWord=elastic
    #是否信任自签证书
    #plumelog.es.trustSelfSigned=true
    #是否hostname验证
    #plumelog.es.hostnameVerification=false
    
    #以下配置不管什么模式都要配置
    #单次拉取日志条数
    plumelog.maxSendSize=5000
    #拉取时间间隔,kafka不生效
    plumelog.interval=1000
    #plumelog-ui的地址 如果不配置,报警信息里不可以点连接
    plumelog.ui.url=http://demo.plumelog.com
    
    #管理密码,手动删除日志的时候需要输入的密码
    admin.password=123456
    #日志保留天数,配置0或者不配置默认永久保留
    admin.log.keepDays=7
    #链路保留天数,配置0或者不配置默认永久保留
    admin.log.trace.keepDays=7
    #登录配置,配置后会有登录界面
    #login.username=admin
    #login.password=admin
    
    #防止健康检查异常错误
    spring.elasticsearch.rest.uris=${plumelog.es.esHosts}</pre>
    

    启动服务端

    image.png

    1.引入pom依赖

    <!-- 分布式日志plumelog依赖 -->
    <dependency>
      <groupId>com.plumelog</groupId>
      <artifactId>plumelog-logback</artifactId>
      <version>3.5</version>
    </dependency>
    
    <!--traceId组件-->
    <dependency>
      <groupId>com.plumelog</groupId>
      <artifactId>plumelog-trace</artifactId>
      <version>3.5.3</version>
    </dependency>
    

    2.引入拦截器(给每个请求打上traceId)

    @Configuration
    public class InterceptorConfig implements WebMvcConfigurer {
    
      @Override
      public void addInterceptors(InterceptorRegistry registry) {
        // 自定义拦截器,添加拦截路径和排除拦截路径
        registry.addInterceptor(new PlumeLogTraceIdInterceptor()).addPathPatterns("/**");
      }
    }
    

    3.引入advice,生成调用链路

    @Aspect
    @Component
    public class AspectConfig extends AbstractAspect {
      // 写你需要生成链路的业务包路劲
      @Around(value = "within(com.application.partition.applet.V1_0_0.controller..*)")
      public Object around(JoinPoint joinPoint) throws Throwable {
        return aroundExecute(joinPoint);
      }
    }
    

    4.基于logback日志系统的日志配置文件修改

    <!--  <springProperty scope="context" name="plumelog.appName" source="spring.application.name"/>-->
    <!--  <springProperty scope="context" name="plumelog.redisHost" source="plumelog.redisHost"/>-->
    <!--  <springProperty scope="context" name="plumelog.redisAuth" source="plumelog.redisAuth"/>-->
    <!--  <springProperty scope="context" name="plumelog.masterName" source="plumelog.masterName"/>-->
    <!--  <springProperty scope="context" name="plumelog.env" source="spring.profiles.active"/>-->
    
    <appender name="plumelog" class="com.plumelog.logback.appender.RedisAppender">
      <appName>####</appName>
      <redisHost>####</redisHost>
      <!-- 有密码的添加redis密码-->
      <redisAuth>###</redisAuth>
      <redisPort>###</redisPort>
      <redisDb>###</redisDb>
      <!--    <expand>sleuth</expand>-->
    </appender>
    <!-- 日志输出级别 -->
    <root level="info">
      <appender-ref ref="plumelog"/>
    </root>
    

    plumelog前台展示

    日志查询

    image.png

    1.中文需要用双引号包含 例如:"异常",默认会被按照单字体分割检索


    image.png image.png

    2.多个检索条件可以用 AND OR NOT 来组合查询 例如 "异常" AND "内容"
    [图片上传中...(image.png-6adc35-1677467868469-0)]

    3.单个不可分割单词可以用*开头或者结尾进行模糊匹配 例如 *NullPointerException;查询到了java.lang.NullPointerException;


    image.png
    • 4.注意:英文符号的 . : 等不是默认的分隔符;需要用上面的方式去匹配
    • 表格区域说明
    • 1.点击列内容帮旁边的放大镜按钮可以完成快速筛选
    • 2.左下角可以开启关闭显示字段,不关闭浏览器设置不会消失
    • 3.右下角可以自定义每页日志显示条数,方便不通人的阅读习惯


      image.png

    链路追踪

    image.png
    image.png

    报警管理

    image.png
    image.png

    相关文章

      网友评论

          本文标题:接入plumelog分布式日志收集系统

          本文链接:https://www.haomeiwen.com/subject/krzqldtx.html