实时分布式日志系统plumelog落地

请添加图片描述

一.系统介绍

  1. 无代码入侵的分布式日志系统,基于log4j、log4j2、logback搜集日志,设置链路ID,方便查询关联日志
  2. 基于elasticsearch作为查询引擎
  3. 高吞吐,查询效率高
  4. 全程不占应用程序本地磁盘空间,免维护;对于项目透明,不影响项目本身运行
  5. 无需修改老项目,引入直接使用,支持dubbo,支持springcloud

二.架构

在这里插入图片描述
这里有两种版本:

  1. plumelog-lite版本,不用部署直接引用到项目中直接使用,不依赖任何外部中间件直接启动,部署极其方便,功能包含,日志查询,链路追踪,日志管理,适合单机小规模项目使用,目前只支持springboot+logback,log4j2组合,但是性能有限,一天10个G以内可以应付,最好是SSD硬盘,适合管理系统类的小玩家,一个公司有很多小系统需要日志集中管理
  2. redis,kafka模式需要单独部署服务,可以集群分布式部署,适合大型玩家,互联网公司

三.应用

3.1 lite应用

3.1.1 修改pom文件

        <dependency>
            <groupId>com.plumelog</groupId>
            <artifactId>plumelog-lite-spring-boot-starter</artifactId>
            <version>3.5.2</version>
        </dependency>

3.1.2 配置logback.xml

	<appender name="plumelog" class="com.plumelog.lite.logback.appender.LiteAppender">
	    <appName>plumelog</appName>
	    <!-- 日志存储位置 -->
	    <logPath>/plumelog/lite</logPath>
	    <!-- 日志保留天数 -->
	    <keepDay>30</keepDay>
	</appender>
        
        <!-- 添加 ref-->
    <root level="INFO">
    <appender-ref ref="plumelog"/>
    </root>

3.1.3 在springboot启动类里添加扫描路径

如果原来你的项目没有扫描路径,不要只加这个,也要把你自己的项目的加了,不然只扫描plumelog的路径了。

@ComponentScan("com.plumelog")

3.1.4 访问

启动你的项目:输入你的项目地址+plumelog/#/访问,例如:http://localhost:8083/plumelog/#/

一定要加这个/#/后缀

在这里插入图片描述

3.1.5 实现控制台时时日志

还提供了控制台的时时日志,按下下文配置即可。
在这里插入图片描述

3.1.6 异常

有些用3.5版本会报错:org.apache.lucene.store.LockObtainFailedException: Lock held by this virtual machine

  1. springcloud-alibaba需要在你的启动类里面加:System.setProperty(“spring.cloud.bootstrap.enabled”, “false”);

    public static void main(String[] args) {
          
          
            System.setProperty("spring.cloud.bootstrap.enabled", "false");
            SpringApplication.run(LogServerStart.class, args);
            }
    
  2. 如果用的logback.xml 改成logback-spring.xml;

请参考官方文档:https://gitee.com/plumeorg/plumelog#/plumeorg/plumelog/blob/master/plumelog-lite/README.md

3.2 独立搭建版本

3.2.1 服务端安装

  1. 安装 redis 或者 kafka(一般公司redis足够) 安装 elasticsearch
  2. 下载安装包,plumelog-server
  3. 下载地址:https://gitee.com/plumeorg/plumelog/releases
  4. 配置plumelog-server,并启动,redis和kafka作为队列模式下可以部署多个plumelog-server达到高可用,配置一样即可
    在这里插入图片描述

3.2.2 配置解析

#值为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=/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模式可以全部注释掉下面配置
#当redis队列性能不够的时候,可以不同的项目单独配置单独的redis队列,用单独的plumelog-server去采集,公用一个管理redis
plumelog.queue.redis.redisHost=127.0.0.1:6379
#如果使用redis有密码,启用下面配置
#plumelog.queue.redis.redisPassWord=123456
#如果要切换db,redis必须要配置密码
#plumelog.queue.redis.redisDb=0
#哨兵模式需要配置的
#plumelog.queue.redis.sentinel.masterName=myMaster
#redis解压缩模式,开启后不消费非压缩的队列
#plumelog.redis.compressor=true

#管理端redis地址 ,集群用逗号隔开,不配置将和队列公用,lite模式可以全部注释掉下面配置,管理redis单独使用的时候支持集群模式
#plumelog.redis.redisHost=127.0.0.1:6379
#如果使用redis有密码,启用下面配置
#plumelog.redis.redisPassWord=123456
#plumelog.redis.redisDb=0
#哨兵模式需要配置的
#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=127.0.0.1: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=100
#拉取时间间隔,kafka不生效
plumelog.interval=100
#plumelog-ui的地址 如果不配置,报警信息里不可以点连接
plumelog.ui.url=http://demo.plumelog.com


#管理密码,手动删除日志的时候需要输入的密码
admin.password=123456
#日志保留天数,配置0或者不配置默认永久保留
admin.log.keepDays=30
#链路保留天数,配置0或者不配置默认永久保留
admin.log.trace.keepDays=30
#登录配置,配置后会有登录界面
#login.username=admin
#login.password=admin

只需要更改redis、es等配置即可,如果有其他配置,请参考注释修改。

3.2.3 springboot+logback整合

其中项目使用了spring cloud alibaba +feign生态,经检测完美运行。

3.2.3.1 pom.xml引入
<dependency>
    <groupId>com.plumelog</groupId>
    <artifactId>plumelog-logback</artifactId>
    <version>3.5.2</version>
</dependency>
3.2.3.2 logback-spring.xml引入

在logback-spring.xml适当的位置根据自己选型加入下文配置。

<appenders>
    <!--使用redis启用下面配置-->
    <appender name="plumelog" class="com.plumelog.logback.appender.RedisAppender">
        <appName>plumelog</appName>
        <redisHost>172.16.249.72:6379</redisHost>
        <redisAuth></redisAuth>
    </appender>
</appenders>
        <!--使用上面三个三选一加入到root下面-->
<root level="INFO">
<appender-ref ref="plumelog"/>
</root>

其中配置各个配置项解释如下:

  1. appName:自定义应用名称
  2. redisHost:redis地址,哨兵模式多个用逗号隔开
  3. redisAuth:redis密码

3.2.4 检测

访问ip:8891即可。同时启动整合后的springBoot项目。

页面统一管理整合进系统的日志,同时可以通过上放查询条件查询。
在这里插入图片描述

3.2.5 时时日志

可以连接具体服务,查看时时日志。
在这里插入图片描述

3.2.6 错误日志统计

可以查看错误日志的数量与类。
在这里插入图片描述

3.2.7 错误报警

在一定时间产生的错误可以通过钉钉、企业微信等发起通知。
在这里插入图片描述
钩子为机器人的Webhook,请自行编写。成功后的情况如下。
在这里插入图片描述

本文只介绍redis版本,如需要kafka版本,请自行参考文档:https://gitee.com/plumeorg/plumelog/blob/master/FASTSTART.md

猜你喜欢

转载自blog.csdn.net/qq_20143059/article/details/123004816