[ 
https://issues.apache.org/jira/browse/KAFKA-7800?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Manikumar resolved KAFKA-7800.
------------------------------
    Fix Version/s: 2.4.0
       Resolution: Fixed

> Extend Admin API to support dynamic application log levels
> ----------------------------------------------------------
>
>                 Key: KAFKA-7800
>                 URL: https://issues.apache.org/jira/browse/KAFKA-7800
>             Project: Kafka
>          Issue Type: New Feature
>            Reporter: Stanislav Kozlovski
>            Assignee: Stanislav Kozlovski
>            Priority: Major
>             Fix For: 2.4.0
>
>
> [https://cwiki.apache.org/confluence/display/KAFKA/KIP-412%3A+Extend+Admin+API+to+support+dynamic+application+log+levels]
> Logging is a critical part of any system's infrastructure. It is the most 
> direct way of observing what is happening with a system. In the case of 
> issues, it helps us diagnose the problem quickly which in turn helps lower 
> the 
> [MTTR|http://enterprisedevops.org/article/devops-metric-mean-time-to-recovery-mttr-definition-and-reasoning].
> Kafka supports application logging via the log4j library and outputs messages 
> in various log levels (TRACE, DEBUG, INFO, WARN, ERROR). Log4j is a rich 
> library that supports fine-grained logging configurations (e.g use INFO-level 
> logging in {{kafka.server.ReplicaManager}} and use DEBUG-level in 
> {{kafka.server.KafkaApis}}).
> This is statically configurable through the 
> [log4j.properties|https://github.com/apache/kafka/blob/trunk/config/log4j.properties]
>  file which gets read once at broker start-up.
> A problem with this static configuration is that we cannot alter the log 
> levels when a problem arises. It is severely impractical to edit a properties 
> file and restart all brokers in order to gain visibility of a problem taking 
> place in production.
> It would be very useful if we support dynamically altering the log levels at 
> runtime without needing to restart the Kafka process.
> Log4j itself supports dynamically altering the log levels in a programmatic 
> way and Kafka exposes a [JMX 
> API|https://github.com/apache/kafka/blob/trunk/core/src/main/scala/kafka/utils/Log4jController.scala]
>  that lets you alter them. This allows users to change the log levels via a 
> GUI (jconsole) or a CLI (jmxterm) that uses JMX.
> There is one problem with changing log levels through JMX that we hope to 
> address and that is *Ease of Use*:
>  * Establishing a connection - Connecting to a remote process via JMX 
> requires configuring and exposing multiple JMX ports to the outside world. 
> This is a burden on users, as most production deployments may stand behind 
> layers of firewalls and have policies against opening ports. This makes 
> opening the ports and connections in the middle of an incident even more 
> burdensome
>  * Security - JMX and tools around it support authentication and 
> authorization but it is an additional hassle to set up credentials for 
> another system.
>  * Manual process - Changing the whole cluster's log level requires manually 
> connecting to each broker. In big deployments, this is severely impractical 
> and forces users to build tooling around it.
> h4. Proposition
> Ideally, Kafka would support dynamically changing log levels and address all 
> of the aforementioned concerns out of the box.
> We propose extending the IncrementalAlterConfig/DescribeConfig Admin API with 
> functionality for dynamically altering the broker's log level.
> This approach would also pave the way for even finer-grained logging logic 
> (e.g log DEBUG level only for a certain topic) and would allow us to leverage 
> the existing *AlterConfigPolicy* for custom user-defined validation of 
> log-level changes.
> These log-level changes will be *temporary* and reverted on broker restart - 
> we will not persist them anywhere.



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

Reply via email to