plumelog介绍与应用-一个简单易用的java分布式日志系统

这篇具有很好参考价值的文章主要介绍了plumelog介绍与应用-一个简单易用的java分布式日志系统。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

官方文档:http://www.plumelog.com/zh-cn/docs/FASTSTART.html

简介

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

架构

plumelog介绍与应用-一个简单易用的java分布式日志系统,开源框架,plumelog

  • 应用服务通过整合plumelog客户端,搜集日志并推送kafka,redis等队列
  • plumelog-server 负责把队列中的日志日志异步写入到elasticsearch
  • plumelog_ui为操作界面客户端,用于查询日志,使用各种定制功能

常见部署模型

  • 单redis小集群模式,大部分中小规模项目
    plumelog介绍与应用-一个简单易用的java分布式日志系统,开源框架,plumelog
  • kafka集群模式,每个项目量都很大
    plumelog介绍与应用-一个简单易用的java分布式日志系统,开源框架,plumelog

功能

日志查询

plumelog介绍与应用-一个简单易用的java分布式日志系统,开源框架,plumelog

扩展字段

  1. 在系统扩展字段里添加扩展字段,字段值为 orderid 显示值为 订单编号

  2. 查询的时候选择应用名,下面会显示扩展字段,可以通过扩展字段查询

MDC.put("orderid","1");
MDC.put("userid","4");
logger.info("扩展字段");

链路追踪

设置追踪码后,支持注解手动打点和切面全局打点

滚动日志

可以连接到机器上,查看实时日志
plumelog介绍与应用-一个简单易用的java分布式日志系统,开源框架,plumelog

错误统计

错误报警

支持通过webhook自定义报警

索引管理

查看和操作ES索引

plumelog&ELK

  1. plumelog日志是客户端上报的方式,客户端配置极其简单,不需要像logstash一样去解析日志的格式,因为plumelog客户端已经格式化好了,traceid的设计都是内置的,这些用户都不用刻意去管,跨线程跨应用链路传递都是内置的组件
  2. 部署简单,你只要个有redis,就行了,ELK组合要完成完整部署,可能还需要配置kafka,filebeat之类的组件,而且版本需统一
  3. 日志的查询速度大于ELK,因为plumelog查询是优化过的,比kibanna通用查询快很多,plumelog的查询界面就是专门按照国人习惯设计的
  4. 很多人用ELK到了大量日志的时候发现,检索效率极其下降,那是因为ES的索引等设计不合理造成的,plumelog专业处理日志,索引的设置都已经早就设计好了,不需要使用者自己去优化
  5. ELK不是专业处理日志的,plumelog在日志上功能就很多,例如扩展字段,链路追踪,错误报警,错误统计后续还有QPS统计等功能,ELK都是没有的

多大体量

根据用户反馈,目前搜集到最大的用户每日日志量已经到达3TB,并稳定运行

部署应用

第一步:安装 redis 或者 kafka(一般公司redis足够) redis 官网:https://redis.io kafka:http://kafka.apache.org

第二步:安装 elasticsearch 官网下载地址:https://www.elastic.co/cn/downloads/past-releases

第三步:下载安装包,plumelog-server 下载地址:https://gitee.com/plumeorg/plumelog/releases

第四步:配置plumelog-server,并启动,redis和kafka作为队列模式下可以部署多个plumelog-server达到高可用,配置一样即可

第五步:后台查询语法详见plumelog使用指南

应用案例

以mservice为例,查询线上问题时,提供的是用户Id或订单号

之前查日志:
  1. 根据custId找到udid,根据订单号找到custId再找到udid。
  2. 到kibana根据udid和时间点找到对应的请求记录,找到对应的机器,找到请求的唯一标识“tc”
  3. 登录机器,根据“tc”参数查询elk日志,找到对应的线程号。
  4. 根据线程号和时间范围过滤default日志。
现在查询日志:
  1. 登录plumeLog页面,根据用户Id或订单号查询,即可查询到关键日志,大致定位问题。
  2. 根据日志的hostIp参数登录到机器根据追踪码过滤即可得到详细日志。
整合过程
  1. pom添加依赖

    <dependency>
        <groupId>com.plumelog</groupId>
        <artifactId>plumelog-logback</artifactId>
        <version>3.5.2</version>
    </dependency>
    
  2. logback.xml添加appender,注意区分测试和线上环境

    <appenders>
        <!--使用redis启用下面配置-->
        <appender name="plumelog" class="com.plumelog.logback.appender.RedisAppender">
            <appName>plumelog</appName>
            <redisHost>172.16.249.72:6379</redisHost>
            <redisAuth>123456</redisAuth>
        </appender>
        <!-- 使用kafka启用下面配置 -->
        <appender name="plumelog" class="com.plumelog.logback.appender.KafkaAppender">
            <appName>plumelog</appName>
            <kafkaHosts>172.16.247.143:9092,172.16.247.60:9092,172.16.247.64:9092</kafkaHosts>
        </appender>
        <!-- 使用lite模式启用下面配置 -->
        <appender name="plumelog" class="com.plumelog.logback.appender.LiteAppender">
            <appName>worker</appName>
            <plumelogHost>localhost:8891</plumelogHost>
        </appender>
    </appenders>
            <!--使用上面三个三选一加入到root下面-->
    <root level="INFO">
    	<appender-ref ref="plumelog"/>
    </root>
    
     <!-- 结合环境配置案例-->
    <springProfile name="dev">
        <root level="INFO">
            <appender-ref ref="plumelog" />
        </root>
    </springProfile>
    <springProfile name="test">
        <root level="INFO">
            <appender-ref ref="plumelog" />
        </root>
    </springProfile>
    <springProfile name="prod">
        <root level="INFO">
            <appender-ref ref="plumelog" />
        </root>
    </springProfile>
    
  3. 代码调整输出日志

    1. 当前只把部分关键日志输出到plumeLog,可以解决大部分问题,每条日志都有机器IP
    2. 把用户Id作为扩展字段,方便搜索。
    3. 链路追踪:将“tc”参数作为追踪码,调用交易时,将其放到head中传给交易,可以直接根据追踪码搜索,串联mservice和交易系统。
    4. 将“tc”参数放到MDC中,输出到日志头,可以直接根据“tc”参数过滤日志
  4. 下载server包,调整server配置文件文章来源地址https://www.toymoban.com/news/detail-685681.html

   spring.application.name=plumelog_server
   spring.profiles.active=test-confidential
   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
   #redis 表示用redis当队列
   #kafka 表示用kafka当队列
   #rest 表示从rest接口取日志
   #restServer 表示作为rest接口服务器启动
   #ui 表示单独作为ui启动
   #lite 简易模式启动不需要配置redis等
   plumelog.model=kafka
   #plumelog.lite.log.path=/Users/chenlongfei/lucene
   # 如果使用kafka,启用下面配置
   plumelog.kafka.kafkaHosts=broker.kafka.mid:443,broker.kafka.mid:443
   plumelog.kafka.kafkaGroupName=logConsumer
   
   #队列redis地址,model配置redis集群模式,哨兵模式用逗号隔开,队列redis不支持集群模式
   #plumelog.queue.redis.redisHost=127.0.0.1:6379
   #如果使用redis有密码,启用下面配置
   #plumelog.queue.redis.redisPassWord=123456
   #plumelog.queue.redis.redisDb=0
   #哨兵模式需要配置的
   #plumelog.queue.redis.sentinel.masterName=myMaster
   
   #管理端redis地址 ,集群用逗号隔开,不配置将和队列公用
   plumelog.redis.redisHost=127.0.0.1:8389,127.0.0.1:8388
   #如果使用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
   
   #redis解压缩模式,开启后不消费非压缩的队列
   #plumelog.redis.compressor=true
   
   #elasticsearch相关配置,Hosts支持携带协议,如:http、https
   plumelog.es.esHosts=127.0.0.1:9200
   plumelog.es.shards=5
   plumelog.es.replicas=0
   plumelog.es.refresh.interval=30s
   #日志索引建立方式day表示按天、hour表示按照小时
   plumelog.es.indexType.model=day
   #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://plumelog.ck.api:8891
   
   #管理密码,手动删除日志的时候需要输入的密码
   admin.password=123456
   
   #日志保留天数,配置0或者不配置默认永久保留
   admin.log.keepDays=30
   #链路保留天数,配置0或者不配置默认永久保留
   admin.log.trace.keepDays=30
   #登录配置,配置后会有登录界面
   #login.username=admin
   #login.password=admin
  1. 部署server,当前已部署6个pod。
  2. 当前实际应用中,日常每天日志总量200多万条。2G左右。

到了这里,关于plumelog介绍与应用-一个简单易用的java分布式日志系统的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 一个开源、免费在线数据建模、元数据管理平台,简单易用

    一、开源项目简介 ERD Online 是一个开源、免费在线数据建模、元数据管理平台。提供简单易用的元数据设计、关系图设计、SQL查询等功能,辅以版本、导入、导出、数据源、SQL解析、审计、团队协作等功能、方便我们快速、安全的管理数据库中的元数据。 使用AGPL-3.0开源协议

    2024年02月02日
    浏览(57)
  • 开发一个简单易用的SDK的详细步骤(超详细,超适用)

    创建starter步骤 1.新建一个 spring boot 初始化项目 2.添加依赖,Lombok, Spring Configuration Processor Spring Configuration Processor 的作用是自动生成代码提示 3.修改 pom 文件的版本号,并删除 build 4.删除原本自动创建的主类,新建一个类, 并添加需要用到的依赖 5.在 resources 目录下新建 META-

    2023年04月15日
    浏览(37)
  • NSubstitute:一个简单易用、灵活多变的.NET单元测试模拟框架

    推荐一个简单易用、灵活多变的.NET单元测试模拟框架,让开发者能够更轻松地进行单元测试。 NSubstitute是一个开源的.NET单元测试模拟类库,该框架设计的主要目标是提供一个简单明了、易用性强、贴近自然语言的模拟测试框架。它使得开发者能够专注于测试工作,而不是纠

    2024年02月07日
    浏览(47)
  • 【Unity小技巧】手戳一个简单易用的游戏UI框架(附源码)

    参考原视频链接: 【视频】:https://www.bilibili.com/video/BV1zT411b7L3/ 注意 :本文为学习笔记记录,推荐支持原作者,去看原视频自己手敲代码理解更加深入 开发一款游戏美术成本是极其高昂的,以我们常见的宣传片CG为例,动辄就要成百上千万的价格,因此这种美术物料一般只

    2024年02月11日
    浏览(52)
  • Java实现AES加密工具类 - 简单易用的数据加密解决方案

    当我们涉及到敏感数据的存储和传输时,数据加密是非常重要的。加密可以确保数据的保密性和完整性,并帮助我们防止数据泄露和攻击。在Java中,使用标准的加密算法和库可以很容易地实现数据加密和解密。本篇文章将介绍一个简单的Java工具类,该工具类使用AES对称加密

    2024年02月11日
    浏览(45)
  • Dify.AI:简单易用的 LLMOps 平台,可视化创造和运营你的 AI 原生应用

    Dify 一词源自  D efine + Mo dify ,意指定义并持续改进你的 AI 应用。 随着大型语言模型(LLM)不断涌现的各种能力,AI 应用的场景变得更加广阔。然而,对于大多数开发者而言,基于 GPT 等大型语言模型、Langchain 等技术框架开发 AI 应用仍然是一项门槛极高的任务。开发者必须

    2024年02月11日
    浏览(41)
  • Java开发手册之单元测试,软件测试端简单易用的SPI框架

    【推荐】编写单元测试代码遵守 BCDE 原则,以保证被测试模块的交付质量。 B:Border,边界值测试,包括循环边界、特殊取值、特殊时间点、数据顺序等。 C:Correct,正确的输入,并得到预期的结果。 D:Design,与设计文档相结合,来编写单元测试。 E:Error,强制错误信息输

    2024年04月25日
    浏览(47)
  • 【Java】x-easypdf: 一种简单易用的PDF处理库

    引言 在处理和生成PDF文档时,有许多库可供选择。其中,x-easypdf是一种简单易用的PDF处理库,可以帮助开发人员轻松地创建、编辑和操作PDF文档。本文将介绍x-easypdf的基本概念、安装方法、主要功能以及使用示例。 安装x-easypdf 要使用x-easypdf,首先需要将其安装到项目中。您

    2024年02月09日
    浏览(38)
  • Lattics:一款简单易用、好看强大的「类脑式」知识管理工具,笔记应用与写作软件二合一

    随着数字化时代的到来,越来越多的人意识到 知识管理 的重要性。笔记软件和写作软件作为一种常用的知识管理工具,一直以来备受关注。从最早的印象笔记、有道云、为知笔记、幕布mubu到近几年的思源 Siyuan、熊掌记 Bear、flomo浮墨笔记、石墨、语雀yueque、WPS、Notion、Flow

    2024年02月03日
    浏览(36)
  • 只用Mysql搞一个分布式锁

    在web开发中,分布式的锁的应用场景甚多,我们可以通过分布式锁来进行一些仅依赖于数据库的事务很难直接保证原子性的操作,比如多种不同数据源的访问,网络通信等等。多数情况下我们会使用memcache的add, redis中在set中指定nx参数等来完成。 下面介绍一个仅依赖Mysql来完

    2024年01月22日
    浏览(45)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包