apache druid 使用 log4j2 防止日誌爆炸(0.13版本)

apache druid 使用 log4j2 防止日誌爆炸(0.13版本)


Apache druid

Druid 是一個分佈式的、支持實時多維 OLAP 分析的數據處理系統。它既支持高速的數據實時攝入處理,也支持實時且靈活的多維數據分析查詢。因此 Druid 最常用的場景就是大數據背景下、靈活快速的多維 OLAP 分析。 另外,Druid 還有一個關鍵的特點:它支持根據時間戳對數據進行預聚合攝入和聚合分析,因此也有用戶經常在有時序數據處理分析的場景中用到它


apache druid 使用 log4j2 防止日誌爆炸(0.13版本)


druid 日誌爆炸

環境默認的輸出日誌經常出現一個文件幾十G的情況,需要通過提供的日誌配置自行調整,防止這種日誌文件爆炸情況。

日誌正常分隔一般根據大小或是時間兩個維度。

druid 提供log4j2的日誌配置。

日誌配置目標

apache druid 包含多個節點coordinator,overlord,MiddleManager,Broker,Historical.

集群本身共用一個日誌配置文件(_common).

目標:不同的節點輸出至自身的配置文件中。


apache druid 使用 log4j2 防止日誌爆炸(0.13版本)


配置實例

本次以broker 節點為例

在broker中包含運行配置文件。

<code>

jvm

.config

runtime

.properties

/<code>

在jvm.config加入參數 -Dlogfile.name=broker

<code>

-server

-Xms64g

-Xmx64g

-XX:MaxDirectMemorySize=15360m

-Duser.timezone=UTC+0800

-Dfile.encoding=UTF-8

-Djava.io.tmpdir=var/tmp

-Djava.util.logging.manager=org.apache.logging.log4j.jul.LogManager

-Dlogfile.name=broker

/<code>

log4j2配置文件

滾動策略每100M 一個文件。

<code> 

<

Configuration

status

=

"WARN"

>

<

properties

>

<

property

name

=

"pattern"

>

%d{yyyy-MM-dd HH:mm:ss} %processId [%t] %-5p %c{1}:%L - %msg%n

property

>

<

property

name

=

"patternNoTime"

>

%msg%n

property

>

<

property

name

=

"patternMetrics"

>

%d %-8r %m%n

property

>

<

property

name

=

"logPath"

>

logs

property

>

properties

>

<

appenders

>

<

RollingFile

name

=

"STDOUT"

fileName

=

"${logPath}/${sys:logfile.name}.log"

filePattern

=

"${logPath}/${sys:logfile.name}-%d{yyyy-MM-dd}.log.%i"

>

<

PatternLayout

>

<

pattern

>

${pattern}

pattern

>

PatternLayout

>

<

Policies

>

<

SizeBasedTriggeringPolicy

size

=

"100 MB"

/>

Policies

>

<

DefaultRolloverStrategy

max

=

"4"

>

<

Delete

basePath

=

"${logPath}"

maxDepth

=

"2"

>

<

IfFileName

glob

=

"*.log.*"

/>

<

IfLastModified

age

=

"2d"

/>

Delete

>

DefaultRolloverStrategy

>

RollingFile

>

<

RollingFile

name

=

"METRICS"

fileName

=

"${logPath}/${sys:logfile.name}.metrics"

filePattern

=

"${logPath}/${sys:logfile.name}-%d{yyyy-MM-dd}.metrics.%i.gz"

>

<

PatternLayout

>

<

pattern

>

${patternMetrics}

pattern

>

PatternLayout

>

<

Policies

>

<

SizeBasedTriggeringPolicy

size

=

"50 MB"

/>

Policies

>

<

DefaultRolloverStrategy

max

=

"4"

>

<

Delete

basePath

=

"${logPath}"

maxDepth

=

"2"

>

<

IfFileName

glob

=

"*.gz"

/>

<

IfLastModified

age

=

"2d"

/>

Delete

>

DefaultRolloverStrategy

>

RollingFile

>

appenders

>

<

loggers

>

<

Root

level

=

"info"

>

<

appender-ref

ref

=

"STDOUT"

/>

Root

>

<

Logger

name

=

"org.apache.druid.java.util.emitter.core.LoggingEmitter"

level

=

"error"

additivity

=

"false"

>

<

appender-ref

ref

=

"METRICS"

/>

Logger

>

loggers

>

Configuration

>

/<code>

總結

本文件雖然可以按照預期生成日誌,避免短時間內的日誌爆炸,但刪除過期日誌一直未能正常生效。

<code>	

<

DefaultRolloverStrategy

max

=

"4"

>

<

Delete

basePath

=

"${logPath}"

maxDepth

=

"2"

>

<

IfFileName

glob

=

"*.log.*"

/>

<

IfLastModified

age

=

"2d"

/>

Delete

>

DefaultRolloverStrategy

>

/<code>

這個策略在本地程序中測試時可以生效。

文章整理不易,點贊支持下吆。


分享到:


相關文章: