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

标签: 实时 分布 式日 | 发表时间:2022-04-27 13:03 | 作者:小鲍侃java
出处:https://juejin.cn/tag/%E6%9E%B6%E6%9E%84

theme: v-green

一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第25天, 点击查看活动详情

一.系统介绍

  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

相关 [实时 分布 式日] 推荐:

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

- - 掘金 架构
这是我参与「掘金日新计划 · 4 月更文挑战」的第25天, 点击查看活动详情. 无代码入侵的分布式日志系统,基于log4j、log4j2、logback搜集日志,设置链路ID,方便查询关联日志. 基于elasticsearch作为查询引擎. 全程不占应用程序本地磁盘空间,免维护;对于项目透明,不影响项目本身运行.

分布式日志

- - Java - 编程语言 - ITeye博客
最近完成一个简单的日志管理系统,拿出来跟大家分享一下. 3、支持文件输出、habse输出、mongodb输出. 基于以上三点功能,我们下面详细说明. 说道支持这个功能,有个同事认为没有这个必要,他的观点是log4j的配置不需要经常变动,不需要支持这样的功能;本人的观点是“配置可以进行统一管理、而且正式机跟测试机的log4j的配置肯定会有一些差异的”,因此这个功能是必须的.

分布式日志收集收集系统:Flume

- - 标点符
Flume是一个分布式、可靠、和高可用的海量日志采集、聚合和传输的系统. 支持在系统中定制各类数据发送方,用于收集数据;同时,Flume提供对数据进行简单处理,并写到各种数据接受方(可定制)的能力. Flume 初始的发行版本目前被统称为 Flume OG(original generation),属于 cloudera.

分布式日志收集系统Apache Flume的设计介绍

- - CSDN博客架构设计推荐文章
Flume是Cloudera公司的一款高性能、高可能的分布式日志收集系统. 现在已经是Apache Top项目. 同Flume相似的日志收集系统还有 Facebook Scribe, Apache Chuwka, Apache Kafka(也是LinkedIn的). Flume是后起之秀,本文尝试简要分析Flume数据流通过程中提供的组件、可靠性保证来介绍Flume的主要设计,不涉及Flume具体的安装使用,也不涉及代码层面的剖析.

微服务实现简单的分布式日志追踪

- - DockOne.io
最近想给项目添加一个简单的分布式请求跟踪功能,从前端发起请求到网关,再从网关调用 Spring Cloud 的微服务,这些过程中希望能从日志中看到一个分布式 ID 的链路,通过请求的 ID 可以追踪整一条链路,方便问题的排查. 现成的方案自然是使用 SkyWalking 、 Spring Cloud Sleuth 、Zipkin 之类的组件,但是想到主要的目的记录一个可以一直贯通各个服务的 ID,方便日志查询,也就不想引入太多复杂的组件,最终决定通过 MDC 在日志中输出追踪的 ID,然后在 Feign 和 RestTemplate 中将请求 ID 在微服务中传递.

分布式实时搜索方案介绍-senseidb

- - 五四陈科学院-坚信科学,分享技术
以下内容由 [五四陈科学院]提供. zoie:由linkedin开源的建立在lucene之上提供实时索引的系统. 它利用两 个内存索引一个硬盘索引来实现实时搜索. bobo-browse:由linkedin开源的基于lucene的分类浏览搜索系统. zookeeper:一个分布式的,开放源码的分布式应用程序协调服务,常用来做配置服务.

Sensei:分布式, 实时, 半结构化数据库

- - ITeye博客
在未出现开源搜索引擎以前, Doug Cutting整了个Lucene, 随后Yonik Seeley写了一个Solr, 在2010年 Shay Banon发布了ElasticSearch, 大概在两年前, 我们迎来了Sensei, 最近他们发布了1.0版本, 下面通过 @sematext对LinkedIn的搜索架构师John Wang的一个采访.

开源分布式搜索平台ELK(Elasticsearch+Logstash+Kibana)+Redis+Syslog-ng实现日志实时搜索

- - C1G军火库
ElasticSearch是一个基于Lucene构建的开源,分布式,RESTful搜索引擎. 设计用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便. 支持通过HTTP使用JSON进行数据索引. logstash是一个应用程序日志、事件的传输、处理、管理和搜索的平台. 你可以用它来统一对应用程序日志进行收集管理,提供 Web 接口用于查询和统计.

Facebook的实时Hadoop系统

- wangjia - Solrex Shuffling
Facebook 在今年六月 SIGMOD 2011 上发表了一篇名为“Apache Hadoop Goes Realtime at Facebook”的会议论文 (pdf),介绍了 Facebook 为了打造一个实时的 HBase 系统使用到的独门秘技. 由于该论文提到的应用场景与小弟负责的系统要解决的问题域有相似之处,因而抽时间仔细阅读了这篇论文.

Storm 实时性分析

- - CSDN博客架构设计推荐文章
都说Storm是一个实时流处理系统,但Storm的实时性体现在什么方面呢. 首先有一个前提:这里的实时性和我们通常所说的实时系统(芯片+汇编或C编写的实时处理软件)的实时性肯定是没法比的,也不是同一个概念. 这里的实时性应该是一个相对的实时性(相对于Hadoop之类 ). 总结一下,Storm的实时性可能主要体现在:.