ELK 日志系统的常见解决方案:
通常的产品或项目部署至服务器,服务一般会打印日志便于线上问题跟踪。
使用 Log4j 中的自定义 Appender,将服务运行打印的日志直接推送到 Kafka 中。经由 Logstash 消费 Kafka 生产的数据,进行加工过滤后输出到 ElasticSearch 进行日志数据的存储与全文检索。使用 Kibana 对日志数据进行可视化操作。

1. 单点日志系统设计

  • 相对于 Filebeat 日志收集后输出到 Kafka 的方案,需要服务器存储日志文件。当随着业务复杂性上升,单日日志量也会较大,存储历史日志将占用服务器内存,且不便管理。
  • 使用自定义 Appender 直接打印日志上报 Kafka,去掉了 Filebeat 日志收集,并解决了日志文件存储空间占用的问题。不过也存在因网络传输等原因造成日志丢失的风险。

2. 自定义Appender打包说明

  • 应用场景
    应用于 ELK 日志直推 Kafka 设计场景,自定义 Appender 项目开发打Jar包如下
    log-system-util-1.0-SNAPSHOT-jar-with-dependencies.jar
  • 功能设计
    项目打印日志,通过 log4j 将日志信息推送到 Kafka;
    作为日志服务器监测对接应用存活状态,心跳监测或轮询监测;
  • 本地开发自定义 Appender 项目
    实现 Appender 打印日志上报指定 Kafka 服务,项目本地打 jar 包,已供多应用对接此工具
  • 安装 jar 包到 maven 仓库
    mvn install:install-file
    -Dfile=C:\Users\Zxy\Desktop\CODE\log-system-util-1.0-SNAPSHOT-jar-with-dependencies.jar
    -DgroupId=cn.nascent -DartifactId=log-system-util
    -Dversion=1.0 -Dpackaging=jar

当出现BUILD SUCCESS 时就说明安装成功
命令说明
(1)-Dfile jar包所在路径,需要包含jar包名.例如:xx/xx/xx/**.jar
(2)-DgroupId 指定导入jar时的groupid,可以自定义,cn.nascent就是自定义的
(3)-DartifactId指定导入jar时的artifactId,可以自定义,log-system-util就是自定义的
(4)-Dversion 指定导入jar时的版本号,可以自定义。这里的1.0就是自定义的
(5)-Dpackaging 指定文件类型 ,由于这里是jar包的形式,所以这里得是jar

  • 引入依赖
    pers.niaonao 、 log-system-util 、 1.0.0 就是安装jar包时指定的参数
<dependency><groupId>pers.niaonao</groupId><artifactId>log-system-util</artifactId><version>1.0.0</version>
</dependency>
  • 修改log4j.properties配置文件
#输出到kafka
log4j.logger.pers.niaonao=INFO,KAFKA
# appender KAFKA
log4j.appender.KAFKA=pers.niaonao.kafka.KafkaLog4jAppender

3. 使用示例

package pers.niaonao;import org.apache.log4j.Logger;public class MyAppender {private static Logger LOGGER = Logger.getLogger(MyAppender.class);public static void main(String[] args) throws InterruptedException {int times = 16;String mess = "Test My Appender";String sendMess = null;for (int i = 0; i < times; i++) {sendMess = mess + "=======>" + i;MyAppender.LOGGER.info(sendMess);Thread.sleep(300);}}
}

注意
(1) 不可以将 Kafka 定义到 rootLogger 中,这会造成程序的卡顿。因此需要另外定义一个 rootLogger。
(2) log4j.logger.后,=之前的的必须是你的包名。当你指定了这个包名之后,那么在这个包下的类产生的日志才会通过下面定义的appender 输送到 kafka 中。
(3) log4j.appender.KAFKA 这条配置,会在LogManager 类加载时,作为一个 appender 添加到以 log4j.logger 后面跟的包名为名的 logger 中去。之后这个包下的类获取 Logger 时会在类 Hierarchy.class 中的 updateParents 方法中将配置文件中的 appender 添加到在类中获取的 logger(Logger.getLogger(xx.class)) 中。

参考文章
ELK日志系统设计方案-Filebeat日志收集推送Kafka
ELK日志系统设计方案-Log4j日志直推Kafka
ELK日志系统设计方案-集群扩展
ELK日志系统部署实现
Powered By niaonao

ELK日志系统设计方案-Log4j日志直推Kafka相关推荐

  1. Java日志系统02 ---- Log4j日志

    目录标题 前言 简介 使用 Maven依赖 快速测试代码 使用properties文件进行配置 开启内置日志 Log4j组件 日志系统的自定义配置 自定义消息输出格式 自定义输出方式 输出日志到文件 ...

  2. Java日志系统01 ---- JUL日志

    目录 前言 简介 使用 日志对象的父子关系 前言 当前文章只是学习笔记,具体请点击超链接:视频 简介 JUL日志是JDK自带的日志工具.无需引入任何依赖.在日常开发中并不会使用到JUL日志,仅用来作为 ...

  3. 【日志系统】Loki日志监控 - 入门初体验

    使用Grafana+Loki+Promtail入门级部署分布式日志系统(windows环境)

  4. log4j日志 linux配置,Log4j 日志详细用法

    简单的说log4j就是帮助开发人员进行日志输出管理的API类库.它最重要的特点就可以配置文件灵活的设置日志信息的优先级.日志信息的输出目的地.日志信息的输出格式 Log4j 除了可以记录程序运行日志信 ...

  5. python的日志模块:logging;django的日志系统;django日志输出时间修改

    Django的log,主要是复用Python标准库中的logging模块,在settings.py中进行配置 源代码 1.__init__.py包含以下类: StreamHandler Formatt ...

  6. mysql spring 整合日志_Spring整合log4j日志组件(转)

    Log4j是Apache的一个开放源代码项目,通过使用Log4j,控制日志信息输送的目的地可以为控制台.文件.数据库.GUI组件.甚至是套接口服务器.NT的事件记录器.UNIX Syslog守护进程等 ...

  7. idea控制台输出日志过多,修改log4j日志级别去掉没用的

    打开log4j.properties文件,找到log4j.rootLogger,改为log4j.rootLogger = INFO, Console ,File 参考文章:https://blog.c ...

  8. 创业公司 互联网架构方案 整体技术栈 基础设施 数据库 服务治理 消息中间件 日志系统 ELK 自动化部署

    欢迎关注博主公众号:[矿洞程序员]文章由陈晓阳原创. 本人微信:chenxiaoyangzxy. 免费提供本人大量学习资料. 从零开始搭建创业公司后台技术栈 原创: 潘锦 说到后台技术栈,脑海中是不是 ...

  9. Loki 学习总结(1)—— Loki 中小项目日志系统的不二之选

    前言 项目做正规了,日志系统是少不了的,目前大部分日志平台推荐基于 ELK 构建,不过 ELK 算是比较重了,架构太大,中小项目不太好 Hold 住,希望找一款简单一些的,如果实在找不到再上 ELK, ...

  10. 再见笨重的ELK!这套轻量级日志收集方案要火!

    之前一直使用的日志收集方案是ELK,动辄占用几个G的内存,有些配置不好的服务器有点顶不住!最近发现一套轻量级日志收集方案: Loki+Promtail+Grafana(简称LPG), 几百M内存就够了 ...

最新文章

  1. 【论文写作分析】之三《基于预训练语言模型的案件要素识别方法》
  2. java难点在哪里_java的难点在哪?
  3. 【数学与算法】二部图、匈牙利匹配、稳定婚配
  4. Monster Hunter(2020南京M)
  5. html代码高亮带行号,kindeditor代码高亮自动行号功能
  6. Cloud Native的设计哲学理念,kubernetes云生态操作系统
  7. 1909升级卡64_【春节配置推荐】第3期:设计娱乐万元配置推荐、四代升级建议参考...
  8. 个性化商品搜索相关研究梳理
  9. asp.net 下载大文件
  10. Microsoft Deployment Toolkit build 8456
  11. .aspx(或.asp)文件与.html(.htm)文件的区别与联系
  12. emu8086,汇编程序:屏幕输入字符串,设置寄存器的值
  13. 如何正确地将Blender模型导入进Unity3D
  14. Windows10重装专业版和mysql缺少dll文件或找不到入口点DLLRegisterServer问题处理
  15. AAAI 2020 | 清华大学:借助BabelNet构建多语言义原知识库
  16. 服务器先装系统还是先做热备,安装ibm服务器双机热备操作系统图文详细步骤.doc...
  17. 瑞吉外卖_短信验证bug
  18. 医院门诊透视的生活万花筒
  19. 人工智能技术发展概述
  20. 言语如何成为交互设计的基础

热门文章

  1. 华为鸿蒙内涵,“鸿蒙”两个字有何真意,还得让古人来解读
  2. 大佛顶首楞严经摄论 太虚大师著 -读记
  3. Johnson法则 BZOJ 3709 Bohater、洛谷 P1080 国王游戏、ZOJ3689 Digging
  4. 移植 μC/OS-III 到 STM32
  5. html nav标签无序排列,web前端分享HTML5中的nav标签
  6. 三分钟带你了解月薪5W的web前端开发到底是干嘛!
  7. 3D数学基础:向量运算
  8. 微信商户收款码在哪里下载 -PC端
  9. Could not instantiate the executor. Make sure a planner module is on the classpath
  10. 显著性水平与p值的区别