ELK日志系统设计方案-Log4j日志直推Kafka
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相关推荐
- Java日志系统02 ---- Log4j日志
目录标题 前言 简介 使用 Maven依赖 快速测试代码 使用properties文件进行配置 开启内置日志 Log4j组件 日志系统的自定义配置 自定义消息输出格式 自定义输出方式 输出日志到文件 ...
- Java日志系统01 ---- JUL日志
目录 前言 简介 使用 日志对象的父子关系 前言 当前文章只是学习笔记,具体请点击超链接:视频 简介 JUL日志是JDK自带的日志工具.无需引入任何依赖.在日常开发中并不会使用到JUL日志,仅用来作为 ...
- 【日志系统】Loki日志监控 - 入门初体验
使用Grafana+Loki+Promtail入门级部署分布式日志系统(windows环境)
- log4j日志 linux配置,Log4j 日志详细用法
简单的说log4j就是帮助开发人员进行日志输出管理的API类库.它最重要的特点就可以配置文件灵活的设置日志信息的优先级.日志信息的输出目的地.日志信息的输出格式 Log4j 除了可以记录程序运行日志信 ...
- python的日志模块:logging;django的日志系统;django日志输出时间修改
Django的log,主要是复用Python标准库中的logging模块,在settings.py中进行配置 源代码 1.__init__.py包含以下类: StreamHandler Formatt ...
- mysql spring 整合日志_Spring整合log4j日志组件(转)
Log4j是Apache的一个开放源代码项目,通过使用Log4j,控制日志信息输送的目的地可以为控制台.文件.数据库.GUI组件.甚至是套接口服务器.NT的事件记录器.UNIX Syslog守护进程等 ...
- idea控制台输出日志过多,修改log4j日志级别去掉没用的
打开log4j.properties文件,找到log4j.rootLogger,改为log4j.rootLogger = INFO, Console ,File 参考文章:https://blog.c ...
- 创业公司 互联网架构方案 整体技术栈 基础设施 数据库 服务治理 消息中间件 日志系统 ELK 自动化部署
欢迎关注博主公众号:[矿洞程序员]文章由陈晓阳原创. 本人微信:chenxiaoyangzxy. 免费提供本人大量学习资料. 从零开始搭建创业公司后台技术栈 原创: 潘锦 说到后台技术栈,脑海中是不是 ...
- Loki 学习总结(1)—— Loki 中小项目日志系统的不二之选
前言 项目做正规了,日志系统是少不了的,目前大部分日志平台推荐基于 ELK 构建,不过 ELK 算是比较重了,架构太大,中小项目不太好 Hold 住,希望找一款简单一些的,如果实在找不到再上 ELK, ...
- 再见笨重的ELK!这套轻量级日志收集方案要火!
之前一直使用的日志收集方案是ELK,动辄占用几个G的内存,有些配置不好的服务器有点顶不住!最近发现一套轻量级日志收集方案: Loki+Promtail+Grafana(简称LPG), 几百M内存就够了 ...
最新文章
- 【论文写作分析】之三《基于预训练语言模型的案件要素识别方法》
- java难点在哪里_java的难点在哪?
- 【数学与算法】二部图、匈牙利匹配、稳定婚配
- Monster Hunter(2020南京M)
- html代码高亮带行号,kindeditor代码高亮自动行号功能
- Cloud Native的设计哲学理念,kubernetes云生态操作系统
- 1909升级卡64_【春节配置推荐】第3期:设计娱乐万元配置推荐、四代升级建议参考...
- 个性化商品搜索相关研究梳理
- asp.net 下载大文件
- Microsoft Deployment Toolkit build 8456
- .aspx(或.asp)文件与.html(.htm)文件的区别与联系
- emu8086,汇编程序:屏幕输入字符串,设置寄存器的值
- 如何正确地将Blender模型导入进Unity3D
- Windows10重装专业版和mysql缺少dll文件或找不到入口点DLLRegisterServer问题处理
- AAAI 2020 | 清华大学:借助BabelNet构建多语言义原知识库
- 服务器先装系统还是先做热备,安装ibm服务器双机热备操作系统图文详细步骤.doc...
- 瑞吉外卖_短信验证bug
- 医院门诊透视的生活万花筒
- 人工智能技术发展概述
- 言语如何成为交互设计的基础
热门文章
- 华为鸿蒙内涵,“鸿蒙”两个字有何真意,还得让古人来解读
- 大佛顶首楞严经摄论 太虚大师著 -读记
- Johnson法则 BZOJ 3709 Bohater、洛谷 P1080 国王游戏、ZOJ3689 Digging
- 移植 μC/OS-III 到 STM32
- html nav标签无序排列,web前端分享HTML5中的nav标签
- 三分钟带你了解月薪5W的web前端开发到底是干嘛!
- 3D数学基础:向量运算
- 微信商户收款码在哪里下载 -PC端
- Could not instantiate the executor. Make sure a planner module is on the classpath
- 显著性水平与p值的区别