kafka 日志相关配置

日志目录

  • ${kafka.logs.dir}/server.log :服务器日志
  • ${kafka.logs.dir}/state-change.log:状态变化日志
  • ${kafka.logs.dir}/kafka-request.log:请求处理日志
  • ${kafka.logs.dir}/log-cleaner.log:日志清理
  • ${kafka.logs.dir}/controller.log:管理日志
  • ${kafka.logs.dir}/kafka-authorizer.log:认证日志

log4j.properties 文件

log4j.properties 是 kafka 操作日志配置文件

log4j.properties 文件的一些说明

# 日志级别覆盖规则  优先级:ALL < DEBUG < INFO <WARN < ERROR < FATAL < OFF
# 1.子日志log4j.logger会覆盖主日志log4j.rootLogger,这里设置的是日志输出级别,Threshold设置appender的日志接收级别;
# 2.log4j.logger级别低于Threshold,appender接收级别取决于Threshold级别;
# 3.log4j.logger级别高于Threshold,appender接收级别取决于log4j.logger级别,因为输出里就没有Threshold要求的日志;
# 4.子logger设置,主要与rootLogger区分开打印日志 一般与log4j.additivity配合使用
# log4j.additivity 是否继承父Logger的输出源(appender),默认是true 
# true 在stdout, kafkaAppender里输出 也会在stateChangeAppender输出
# 这里需要单独输出 所以设置为false 只会在stateChangeAppender输出
# log4j.logger后面如果没有appender,则默认使用log4j.rootLogger后面设置的appender
# 如果使用org.apache.log4j.RollingFileAppender  可以使用MaxFileSize设置最大文件大小  MaxBackupIndex设置最大文件数量

config/log4j.properties中日志的级别设置有的是TRACE,在长时间运行过程中产生的日志大小吓人,所以如果没有特殊需求,强烈建议将其更改成INFO级别。

具体修改方法如下所示,将config/log4j.properties文件中最后的几行中的TRACE改成INFO或INFO以上

# 主日志设置 
log4j.rootLogger=ERROR, stdout, kafkaAppender# 控制台的appender和layout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=[%d] %p %m (%c)%n# kafkaAppender的appender和layout
log4j.appender.kafkaAppender=org.apache.log4j.DailyRollingFileAppender
log4j.appender.kafkaAppender.DatePattern='.'yyyy-MM-dd-HH
log4j.appender.kafkaAppender.File=${kafka.logs.dir}/server.log
log4j.appender.kafkaAppender.layout=org.apache.log4j.PatternLayout
log4j.appender.kafkaAppender.layout.ConversionPattern=[%d] %p %m (%c)%n# 状态变化日志
log4j.appender.stateChangeAppender=org.apache.log4j.DailyRollingFileAppender
log4j.appender.stateChangeAppender.DatePattern='.'yyyy-MM-dd-HH
log4j.appender.stateChangeAppender.File=${kafka.logs.dir}/state-change.log
log4j.appender.stateChangeAppender.layout=org.apache.log4j.PatternLayout
log4j.appender.stateChangeAppender.layout.ConversionPattern=[%d] %p %m (%c)%n# 请求处理日志
log4j.appender.requestAppender=org.apache.log4j.DailyRollingFileAppender
log4j.appender.requestAppender.DatePattern='.'yyyy-MM-dd-HH
log4j.appender.requestAppender.File=${kafka.logs.dir}/kafka-request.log
log4j.appender.requestAppender.layout=org.apache.log4j.PatternLayout
log4j.appender.requestAppender.layout.ConversionPattern=[%d] %p %m (%c)%n# 日志清理格式
log4j.appender.cleanerAppender=org.apache.log4j.DailyRollingFileAppender
log4j.appender.cleanerAppender.DatePattern='.'yyyy-MM-dd-HH
log4j.appender.cleanerAppender.File=${kafka.logs.dir}/log-cleaner.log
log4j.appender.cleanerAppender.layout=org.apache.log4j.PatternLayout
log4j.appender.cleanerAppender.layout.ConversionPattern=[%d] %p %m (%c)%n# controller 日志格式
log4j.appender.controllerAppender=org.apache.log4j.DailyRollingFileAppender
log4j.appender.controllerAppender.DatePattern='.'yyyy-MM-dd-HH
log4j.appender.controllerAppender.File=${kafka.logs.dir}/controller.log
log4j.appender.controllerAppender.layout=org.apache.log4j.PatternLayout
log4j.appender.controllerAppender.layout.ConversionPattern=[%d] %p %m (%c)%n# authorizer日志格式
log4j.appender.authorizerAppender=org.apache.log4j.DailyRollingFileAppender
log4j.appender.authorizerAppender.DatePattern='.'yyyy-MM-dd-HH
log4j.appender.authorizerAppender.File=${kafka.logs.dir}/kafka-authorizer.log
log4j.appender.authorizerAppender.layout=org.apache.log4j.PatternLayout
log4j.appender.authorizerAppender.layout.ConversionPattern=[%d] %p %m (%c)%n######################################################
# zookeeper
log4j.logger.org.apache.zookeeper=INFO# kafka
log4j.logger.kafka=INFO# org.apache.kafka
log4j.logger.org.apache.kafka=INFO# 请求处理日志
log4j.logger.kafka.request.logger=INFO, requestAppender
log4j.additivity.kafka.request.logger=false
# log4j.logger.kafka.network.Processor=INFO, requestAppender
# log4j.additivity.kafka.network.Processor=false  # 配置文件有的没有
# log4j.logger.kafka.server.KafkaApis=INFO, requestAppender
log4j.additivity.kafka.server.KafkaApis=false
log4j.logger.kafka.network.RequestChannel$=INFO, requestAppender
log4j.additivity.kafka.network.RequestChannel$=false# controller
log4j.logger.kafka.controller=INFO, controllerAppender
log4j.additivity.kafka.controller=false#kafka-logs清理
log4j.logger.kafka.log.LogCleaner=INFO, cleanerAppender
log4j.additivity.kafka.log.LogCleaner=false#状态变化日志
# log4j.logger.state.change.logger=INFO, stateChangeAppender
# log4j.additivity.state.change.logger=false#authorizer
log4j.logger.kafka.authorizer.logger=INFO, authorizerAppender
log4j.additivity.kafka.authorizer.logger=false

server.properties 文件

kafka 数据

在server.properties中配置了log.dirs值,其实表示的是kafka数据的存放目录,而非日志目录

log.dirs=/data/kafka

kafka 日志清理

Kafka日志管理器允许定制删除策略。目前的策略是删除修改时间在N天之前的日志(按时间删除),也可以使用另外一个策略:保留最后的N GB数据的策略(按大小删除)。为了避免在删除时阻塞读操作,采用了copy-on-write形式的实现,删除操作进行时,读取操作的二分查找功能实际是在一个静态的快照副本上进行的,这类似于Java的CopyOnWriteArrayList。

Kafka消费日志删除思想:Kafka把topic中一个parition大文件分成多个小文件段,通过多个小文件段,就容易定期清除或删除已经消费完文件,减少磁盘占用

log.cleanup.policy=delete启用删除策略
# 直接删除,删除后的消息不可恢复。可配置以下两个策略:
# 清理超过指定时间清理: 
log.retention.hours=168
# 超过指定大小后,删除旧的消息:
log.retention.bytes=1073741824

也可以写个定时清理脚本来清除日志结合

crontab 脚本

0 0 2 \* \* ? /home/cluster/kafka211/bin/cleanupkafkalog.sh

清理脚本

#!/bin/bash# log dir
logDir=/log/kafka
#keep 60 file
count=60
count=$[$count+1]
LOGNUM=`ls -l /home/cluster/kafka211/logs/server.log.* |wc -l`
if [ $LOGNUM -gt 0 ]; thenls -t $logDir/server.log.* | tail -n +$count | xargs rm -f
fi#kafkaServer.out 
if [ -e "$logDir/kafkaServer.out" ]; thenrm -f /home/cluster/kafka211/logs/kafkaServer.out
fi

压缩策略

只保留每个key最后一个版本的数据。

log.cleaner.enable=true    # 首先在broker的配置中设置启用cleaner,这个默认是关闭的。
log.cleanup.policy=compact # 在Topic的配置中设置,启用压缩策略。

bin/kafka-run-class.sh 文件

GC 日志

kafka默认打印GC日志,如下,

$ ls
kafka-authorizer.log          kafkaServer-gc.log.3  kafkaServer-gc.log.8      server.log.2018-10-22-14
kafka-request.log             kafkaServer-gc.log.4  kafkaServer-gc.log.9      server.log.2018-10-22-15
kafkaServer-gc.log.0          kafkaServer-gc.log.5  kafkaServer.out
kafkaServer-gc.log.1          kafkaServer-gc.log.6  server.log
kafkaServer-gc.log.2.current  kafkaServer-gc.log.7  server.log.2018-10-22-13

生产环境不需要GC。修改 bin/kafka-run-class.sh脚本,将参数 KAFKA_GC_LOG_OPTS=" " 设置为空格即可,重启kafka之后就不再打印GC日志了。

[cluster@PCS102 bin]$ vim kafka-run-class.shGC_FILE_SUFFIX='-gc.log'
GC_LOG_FILE_NAME=''
if [ "x$GC_LOG_ENABLED" = "xtrue" ]; thenGC_LOG_FILE_NAME=$DAEMON_NAME$GC_FILE_SUFFIXKAFKA_GC_LOG_OPTS="-Xloggc:$LOG_DIR/$GC_LOG_FILE_NAME -verbose:gc -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+PrintGCTimeStamps -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=10 -XX:GCLogFileSize=100M"
KAFKA_GC_LOG_OPTS=" "
fi

日志保存目录

Kafka运行时日志默认输出到$KAFKA_HOME/logs目录下,容易撑爆分区,造成操作系统崩溃。需要将日志输出到指定分区,比如/var/log目录下
修改 bin/kafka-run-class.sh 脚本增加一行 LOG_DIR="/var/log/kafka"

LOG_DIR=/var/log/kafka  # 我是新增的
# Log directory to use
if [ "x$LOG_DIR" = "x" ]; thenLOG_DIR="$base_dir/logs"
fi

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/453834.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

linux mc服务器 mod_如何在linux搭建MC服务器

摘要&#xff1a;前言Q&#xff1a;为什么要用linux搭建MC服务器&#xff1f;A&#xff1a;因为linux系统占用率低&#xff0c;跑服务器效果非常好Q&#xff1a;看不懂linux ssh&#xff0c;后期自己无力运维怎么办A&#xff1a;没关系&#xff0c;这个教程是通过安装BT...前言…

flask-SQLAlchemy 使用 session.commit() 处理异常回滚

最为原始的try/except办法&#xff0c;多次插入数据就要写多次&#xff0c;很麻烦&#xff0c;使用python原生的contextlib.contextmanager简化代码&#xff01; try:user_db User(emailself.email, nicknameself.nickname, passwordself.password)db.session.add(user_db)#所…

小米机器人清理主刷和轴承_扫地机主刷怎样更换

原标题&#xff1a;扫地机主刷怎样更换随着电动扫地机逐渐取代手动清洁&#xff0c;电动扫地机的工作量不断增加&#xff0c;从而导致主刷磨损更加严重&#xff0c;并增加了主刷更换的次数。因此&#xff0c;伟顿在这里告诉大家扫地机主刷怎样更换&#xff1a;1 .首先&#xff…

多线程编程指南

1. 多线程编程指南1--线程基础 线程编程指南1--线程基础 Wednesday, 29. March 2006, 11:48:45 多线程 本文出自:BBS水木清华站 作者:Mccartney (coolcat) (2002-01-29 20:25:25) multithreading可以被翻译成多线程控制。与传统的UNIX不同&#xff0c;一个传统 的UNIX进…

路由器和猫的区别

路由器和猫的区别 网络在我们现在生活中必不可少,我们链接互联网经常需要用到猫和路由器,但是依然有很多菜鸟根本不知道什么是猫什么是路由器,至于猫和路由器怎么使用就更不知道了,下面给大家详细的讲解下路由器和猫的区别。 路由器和猫的用途和链接位置不一样,如下图: 路由器:…

Docker 精通之 docker-compose

1、Docker-compose简介 1.1、ocker-compose简介 Docker-Compose项目是Docker官方的开源项目&#xff0c;负责实现对Docker容器集群的快速编排。   Docker-Compose将所管理的容器分为三层&#xff0c;分别是工程&#xff08;project&#xff09;&#xff0c;服务&#xff08…

json数据格式 穗康码_Json数据格式

JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。JSON采用完全独立于语言的文本格式&#xff0c;这些特性使JSON成为理想的数据交换语言。易于人阅读和编写&#xff0c;同时也易于机器解析和生成。JSON 比 XML 更小、更快&#xff0c;更易解析。JSON建构于两种结…

Linux 系统版本查询

显示Linux版本信息输入"cat /proc/version",说明正在运行的内核版本。输入"cat /etc/issue", 显示的是发行版本信息。输入"lsb_release -a ",可对多个linux版本适用。输入"uname -a ",可显示电脑以及操作系统的相关信息。转载于:https…

kafka 命令行命令大全

kafka 脚本 connect-distributed.sh connect-mirror-maker.sh connect-standalone.sh kafka-acls.sh kafka-broker-api-versions.sh kafka-configs.sh kafka-console-consumer.sh kafka-console-producer.sh kafka-consumer-groups.sh kafka-consumer-perf-test.sh kafka-dele…

kotlin将对象转换为map_Kotlin程序将哈希映射(HashMap)转换为列表(List)

Kotlin程序将哈希映射(HashMap)转换为列表(List)在此程序中&#xff0c;您将学习在Kotlin中将map转换为列表的不同方法。示例&#xff1a;将map转换为列表示例import java.util.ArrayListimport java.util.HashMapfun main(args: Array) {val map HashMap()map.put(1, "a…

零元学Expression Blend 4 - Chapter 4元件重复运用的观念

零元学Expression Blend 4 - Chapter 4元件重复运用的观念 原文:零元学Expression Blend 4 - Chapter 4元件重复运用的观念本章将教大家Blend元件重复运用的观念&#xff0c;这在Silverlight设计中是非常重要的&#xff0c;另外加码赠送渐层工具(Gradient Tool)。 ? 本章将教…

Python 内置模块之 ConfigParser - 解析 ini 文件

ini配置文件是被configParser直接解析然后再加载的&#xff0c;如果只是修改配置文件&#xff0c;并不会改变已经加载的配置 INI文件结构简单描述 INI文件就是扩展名为“ini”的文件。在Windows系统中&#xff0c;INI文件是很多&#xff0c;最重要的就是“System.ini”、“Sy…

电脑老是弹出vrvedp_m_出现三个可疑进程vrvedp_m.exe vrvrf_c.exe vrvsafec.exe

满意答案 你机器里装了北信源的DeviceRegist软件,这个软件不是杀毒软件或者防毒软件,而是一个远程桌面管理软件。这类软件其实和木马程序原理上一样,只不过是正规软件公司开发的,但是流氓程度不容小觑,即使在安全模式下也会加载vrvrf_c.exe,vrvedp_m.exe,vrvsafec.exe,wat…

音视频编解码 文件格式 协议内容详解

编解码学习笔记&#xff08;一&#xff09;&#xff1a;基本概念 媒体业务是网络的主要业务之间。尤其移动互联网业务的兴起&#xff0c;在运营商和应用开发商中&#xff0c;媒体业务份量极重&#xff0c;其中媒体的编解码服务涉及需求分析、应用开发、释放license收费等等。最…

git 拉取远程其他分支代码_【记录】git 拉取远程分支代码,同步到另一个git上...

最近有需求从某git 上拉取所有分支代码同步到另一git上&#xff0c;现记录操作步骤&#xff0c;以便日后使用&#xff1a;1&#xff1a;先克隆其中一个分支代码到本地环境git clone -b test http://账号:密码XXX.git2&#xff1a;查看本地分支git brach3&#xff1a;查看远程分…

WIN下的CMD下载命令

certutil -urlcache -split -f 远程地址 本地保存的文件跑径与文 件名 # 如里不写本地文 件名与路径名&#xff0c; 会自动跟远程文 件名相同&#xff0c; 并保存到当前目 录下另一个是&#xff1a; bitsadmin /rawreturn /transfer getfile http://download.sysinternals.com…

python 第三方模块之 APScheduler - 定时任务

介绍 APScheduler的全称是Advanced Python Scheduler。它是一个轻量级的 Python 定时任务调度框架。APScheduler 支持三种调度任务&#xff1a;固定时间间隔&#xff0c;固定时间点&#xff08;日期&#xff09;&#xff0c;Linux 下的 Crontab 命令。同时&#xff0c;它还支持…

hadoop分布式搭建

一&#xff0c;前提&#xff1a;下载好虚拟机和安装完毕Ubuntu系统。因为我们配置的是hadoop分布式&#xff0c;所以需要两台虚拟机&#xff0c;一台主机&#xff08;master&#xff09;&#xff0c;一台从机&#xff08;slave&#xff09; 选定一台机器作为 Master 在 Master …

Python 第三方模块之 imgaug (图像增强)

imgaug是一个封装好的用来进行图像augmentation的python库,支持关键点(keypoint)和bounding box一起变换。 项目主页: imgaug doc 1. 安装和卸载 # 通过github安装 sudo pip install githttps://github.com/aleju/imgaug# 通过pypi安装 sudo pip install imgaug# 本地安装, …

MPEG(mpeg1,mpeg2,mpeg4) 与H264 QP值间 关系

H264 Quant与MPEG Quant数值参对表 x264vfw 的1pass 是按照I q:21P q:24B q:26的量化算的,而且在vfw里面不能改变这些参数.但在mencoder里则可以定义1pass的 qp_constant<1−51>这个和xvid不同的,xvid一般是用q2跑1pass的,当然你也可以在x264设置一下,但是要清楚的是 H.2…