Kafka Broker

Supported OS Linux Windows Mac OS

통합 버전4.0.0

Kafka 대시보드

개요

Kafka 브로커 메트릭을 확인하여 Kafka 클러스터 상태와 성능을 실시간으로 전방위 모니터링하세요. 이 통합을 통해, Kafka 배포에서 메트릭과 로그를 수집하여 텔레메트리를 시각화하고 Kafka 스택 성능에 대한 알림을 받을 수 있습니다.

참고:

  • 이 점검은 인스턴트당 350개 메트릭으로 제한됩니다. 반환되는 메트릭의 수는 에이전트 상태 출력에 나와 있습니다. 아래 설정을 편집하여 관심 있는 메트릭을 지정할 수 있습니다. 수집하려는 메트릭을 커스터마이즈하는 방법에 대한 자세한 지침은 JMX 점검 설명서를 참조하세요.
  • 이 통합이 첨부된 샘플 설정은 Kafka >= 0.8.2에서만 작동합니다. 그 이전 버전을 실행 중인 경우 에이전트 v5.2.x 릴리스 샘플 파일을 참조하세요.
  • Kafka 소비자 메트릭을 수집하려면 kafka_consumer 점검을 참조하세요.

설정

설치

에이전트의 Kafka 점검에는 Datadog 에이전트 패키지가 포함되어 있으므로 Kafka 노드에 추가로 설치할 필요가 없습니다.

점검은 JMXFetch를 사용해 JMX에서 메트릭을 수집합니다. 에이전트에서 JMXFetch를 실행하려면 각 kafka 노드에 JVM이 필요합니다. 이를 위해 Kafka가 사용하는 것과 동일한 JVM을 사용할 수 있습니다.

참고: Kafka 점검은 Apache Kafka(Amazon MSK) 관리형 스트리밍과 함께 사용할 수 없습니다. 대신 Amazon MSK 통합을 사용하세요.

설정

호스트

호스트에서 실행 중인 에이전트에 이 점검을 구성하는 방법:

메트릭 수집
  1. 에이전트 설정 디렉터리 루트에 있는 conf.d/ 폴더에서 kafka.d/conf.yaml 파일을 편집합니다. Kafka 빈 이름은 실행 중인 실제 Kafka 버전에 따라 달라집니다. 에이전트와 함께 제공되는 예시 설정 파일이 가장 최신 설정이므로 이 파일을 기본으로 사용합니다. 참고: 예시의 에이전트 버전은 설치한 것보다 더 최신 에이전트 버전일 수 있습니다.

  2. 에이전트를 다시 시작합니다.

로그 수집

에이전트 버전 > 6.0에서 사용 가능

  1. Kafka는 기본적으로 log4j 로거를 사용합니다. 파일에 로깅을 활성화하고 형식을 커스터마이즈하려면 log4j.properties 파일을 편집하세요.

      # Set root logger level to INFO and its only appender to R
      log4j.rootLogger=INFO, R
      log4j.appender.R.File=/var/log/kafka/server.log
      log4j.appender.R.layout=org.apache.log4j.PatternLayout
      log4j.appender.R.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n
    
  2. 기본적으로 Datadog 통합 파이프라인은 다음과 같은 변환 패턴을 지원합니다.

      %d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n
      %d [%t] %-5p %c - %m%n
      %r [%t] %p %c %x - %m%n
      [%d] %p %m (%c)%n
    

    다른 형식을 사용하는 경우 통합 파이프라인을 복제하여 편집합니다.

  3. 로그 수집은 Datadog 에이전트에서 기본적으로 비활성화되어 있습니다. datadog.yaml 파일에서 활성화합니다.

    logs_enabled: true
    
  4. kafka.d/conf.yaml 파일에 다음 설정 블록을 추가합니다. 환경에 따라 pathservice 파라미터 값을 변경합니다. 사용 가능한 모든 설정 옵션은 kafka.d/conf.yaml 샘플을 참조하세요.

    logs:
      - type: file
        path: /var/log/kafka/server.log
        source: kafka
        service: myapp
        #To handle multi line that starts with yyyy-mm-dd use the following pattern
        #log_processing_rules:
        #  - type: multi_line
        #    name: log_start_with_date
        #    pattern: \d{4}\-(0?[1-9]|1[012])\-(0?[1-9]|[12][0-9]|3[01])
    
  5. 에이전트를 다시 시작합니다.

컨테이너화된 환경

메트릭 수집

컨테이너화된 환경의 경우 JMX를 사용한 자동탐지 가이드를 참조하세요.

로그 수집

에이전트 버전 > 6.0에서 사용 가능

Datadog 에이전트에서 로그 수집은 기본값으로 비활성화되어 있습니다. 이를 활성화하려면 쿠버네티스(Kubernetes) 로그 수집을 참조하세요.

파라미터
<LOG_CONFIG>{"source": "kafka", "service": "<SERVICE_NAME>"}

검증

에이전트 상태 하위 명령어를 실행하고 JMXFetch 섹션에서 kafka를 찾습니다.

========
JMXFetch
========
  Initialized checks
  ==================
    kafka
      instance_name : kafka-localhost-9999
      message :
      metric_count : 46
      service_check_count : 0
      status : OK

수집한 데이터

메트릭

kafka.consumer.bytes_consumed
(gauge)
The average number of bytes consumed per second for a specific topic.
Shown as byte
kafka.consumer.bytes_in
(gauge)
Consumer bytes in rate.
Shown as byte
kafka.consumer.delayed_requests
(gauge)
Number of delayed consumer requests.
Shown as request
kafka.consumer.expires_per_second
(gauge)
Rate of delayed consumer request expiration.
Shown as eviction
kafka.consumer.fetch_rate
(gauge)
The minimum rate at which the consumer sends fetch requests to a broker.
Shown as request
kafka.consumer.fetch_size_avg
(gauge)
The average number of bytes fetched per request for a specific topic.
Shown as byte
kafka.consumer.fetch_size_max
(gauge)
The maximum number of bytes fetched per request for a specific topic.
Shown as byte
kafka.consumer.kafka_commits
(gauge)
Rate of offset commits to Kafka.
Shown as write
kafka.consumer.max_lag
(gauge)
Maximum consumer lag.
Shown as offset
kafka.consumer.messages_in
(gauge)
Rate of consumer message consumption.
Shown as message
kafka.consumer.records_consumed
(gauge)
The average number of records consumed per second for a specific topic.
Shown as record
kafka.consumer.records_per_request_avg
(gauge)
The average number of records in each request for a specific topic.
Shown as record
kafka.consumer.zookeeper_commits
(gauge)
Rate of offset commits to ZooKeeper.
Shown as write
kafka.expires_sec
(gauge)
Rate of delayed producer request expiration.
Shown as eviction
kafka.follower.expires_per_second
(gauge)
Rate of request expiration on followers.
Shown as eviction
kafka.log.flush_rate.rate
(gauge)
Log flush rate.
Shown as flush
kafka.messages_in.rate
(gauge)
Incoming message rate.
Shown as message
kafka.net.bytes_in.rate
(gauge)
Incoming byte rate.
Shown as byte
kafka.net.bytes_out
(gauge)
Outgoing byte total.
Shown as byte
kafka.net.bytes_out.rate
(gauge)
Outgoing byte rate.
Shown as byte
kafka.net.bytes_rejected.rate
(gauge)
Rejected byte rate.
Shown as byte
kafka.net.processor.avg.idle.pct.rate
(gauge)
Average fraction of time the network processor threads are idle.
Shown as fraction
kafka.producer.available_buffer_bytes
(gauge)
The total amount of buffer memory that is not being used (either unallocated or in the free list)
Shown as byte
kafka.producer.batch_size_avg
(gauge)
The average number of bytes sent per partition per-request.
Shown as byte
kafka.producer.batch_size_max
(gauge)
The max number of bytes sent per partition per-request.
Shown as byte
kafka.producer.buffer_bytes_total
(gauge)
The maximum amount of buffer memory the client can use (whether or not it is currently used).
Shown as byte
kafka.producer.bufferpool_wait_ratio
(gauge)
The fraction of time an appender waits for space allocation.
kafka.producer.bufferpool_wait_time
(gauge)
The fraction of time an appender waits for space allocation.
kafka.producer.bufferpool_wait_time_ns_total
(gauge)
The total time in nanoseconds an appender waits for space allocation.
Shown as nanosecond
kafka.producer.bytes_out
(gauge)
Producer bytes out rate.
Shown as byte
kafka.producer.compression_rate
(gauge)
The average compression rate of record batches for a topic
Shown as fraction
kafka.producer.compression_rate_avg
(rate)
The average compression rate of record batches.
Shown as fraction
kafka.producer.delayed_requests
(gauge)
Number of producer requests delayed.
Shown as request
kafka.producer.expires_per_seconds
(gauge)
Rate of producer request expiration.
Shown as eviction
kafka.producer.io_wait
(gauge)
Producer I/O wait time.
Shown as nanosecond
kafka.producer.message_rate
(gauge)
Producer message rate.
Shown as message
kafka.producer.metadata_age
(gauge)
The age in seconds of the current producer metadata being used.
Shown as second
kafka.producer.record_error_rate
(gauge)
The average per-second number of errored record sends for a topic
Shown as error
kafka.producer.record_queue_time_avg
(gauge)
The average time in ms record batches spent in the record accumulator.
Shown as millisecond
kafka.producer.record_queue_time_max
(gauge)
The maximum time in ms record batches spent in the record accumulator.
Shown as millisecond
kafka.producer.record_retry_rate
(gauge)
The average per-second number of retried record sends for a topic
Shown as record
kafka.producer.record_send_rate
(gauge)
The average number of records sent per second for a topic
Shown as record
kafka.producer.record_size_avg
(gauge)
The average record size.
Shown as byte
kafka.producer.record_size_max
(gauge)
The maximum record size.
Shown as byte
kafka.producer.records_per_request
(gauge)
The average number of records sent per second.
Shown as record
kafka.producer.request_latency_avg
(gauge)
Producer average request latency.
Shown as millisecond
kafka.producer.request_latency_max
(gauge)
The maximum request latency in ms.
Shown as millisecond
kafka.producer.request_rate
(gauge)
Number of producer requests per second.
Shown as request
kafka.producer.requests_in_flight
(gauge)
The current number of in-flight requests awaiting a response.
Shown as request
kafka.producer.response_rate
(gauge)
Number of producer responses per second.
Shown as response
kafka.producer.throttle_time_avg
(gauge)
The average time in ms a request was throttled by a broker.
Shown as millisecond
kafka.producer.throttle_time_max
(gauge)
The maximum time in ms a request was throttled by a broker.
Shown as millisecond
kafka.producer.waiting_threads
(gauge)
The number of user threads blocked waiting for buffer memory to enqueue their records.
Shown as thread
kafka.replication.active_controller_count
(gauge)
Number of active controllers in the cluster.
Shown as node
kafka.replication.isr_expands.rate
(gauge)
Rate of replicas joining the ISR pool.
Shown as node
kafka.replication.isr_shrinks.rate
(gauge)
Rate of replicas leaving the ISR pool.
Shown as node
kafka.replication.leader_count
(gauge)
Number of leaders on this broker.
Shown as node
kafka.replication.leader_elections.rate
(gauge)
Leader election rate.
Shown as event
kafka.replication.max_lag
(gauge)
Maximum lag in messages between the follower and leader replicas.
Shown as offset
kafka.replication.offline_partitions_count
(gauge)
Number of partitions that don't have an active leader.
kafka.replication.partition_count
(gauge)
Number of partitions across all topics in the cluster.
kafka.replication.unclean_leader_elections.rate
(gauge)
Unclean leader election rate.
Shown as event
kafka.replication.under_min_isr_partition_count
(gauge)
Number of under min ISR partitions.
kafka.replication.under_replicated_partitions
(gauge)
Number of under replicated partitions.
kafka.request.channel.queue.size
(gauge)
Number of queued requests.
Shown as request
kafka.request.fetch.failed.rate
(gauge)
Client fetch request failures rate.
Shown as request
kafka.request.fetch_consumer.rate
(gauge)
Fetch consumer requests rate.
Shown as request
kafka.request.fetch_consumer.time.99percentile
(gauge)
Total time in ms to serve the specified request.
Shown as millisecond
kafka.request.fetch_consumer.time.avg
(gauge)
Total time in ms to serve the specified request.
Shown as millisecond
kafka.request.fetch_follower.rate
(gauge)
Fetch follower requests rate.
Shown as request
kafka.request.fetch_follower.time.99percentile
(gauge)
Total time in ms to serve the specified request.
Shown as millisecond
kafka.request.fetch_follower.time.avg
(gauge)
Total time in ms to serve the specified request.
Shown as millisecond
kafka.request.fetch_request_purgatory.size
(gauge)
Number of requests waiting in the producer purgatory.
Shown as request
kafka.request.handler.avg.idle.pct.rate
(gauge)
Average fraction of time the request handler threads are idle.
Shown as fraction
kafka.request.metadata.time.99percentile
(gauge)
Time for metadata requests for 99th percentile.
Shown as millisecond
kafka.request.metadata.time.avg
(gauge)
Average time for metadata request.
Shown as millisecond
kafka.request.offsets.time.99percentile
(gauge)
Time for offset requests for 99th percentile.
Shown as millisecond
kafka.request.offsets.time.avg
(gauge)
Average time for an offset request.
Shown as millisecond
kafka.request.produce.failed.rate
(gauge)
Failed produce requests rate.
Shown as request
kafka.request.produce.rate
(gauge)
Produce requests rate.
Shown as request
kafka.request.produce.time.99percentile
(gauge)
Time for produce requests for 99th percentile.
Shown as millisecond
kafka.request.produce.time.avg
(gauge)
Average time for a produce request.
Shown as millisecond
kafka.request.producer_request_purgatory.size
(gauge)
Number of requests waiting in the producer purgatory
Shown as request
kafka.request.update_metadata.time.99percentile
(gauge)
Time for update metadata requests for 99th percentile.
Shown as millisecond
kafka.request.update_metadata.time.avg
(gauge)
Average time for a request to update metadata.
Shown as millisecond
kafka.server.socket.connection_count
(gauge)
Number of currently open connections to the broker.
Shown as connection
kafka.session.fetch.count
(gauge)
Number of fetch sessions.
kafka.session.fetch.eviction
(gauge)
Eviction rate of fetch session.
Shown as event
kafka.session.zookeeper.disconnect.rate
(gauge)
Zookeeper client disconnect rate.
Shown as event
kafka.session.zookeeper.expire.rate
(gauge)
Zookeeper client session expiration rate.
Shown as event
kafka.session.zookeeper.readonly.rate
(gauge)
Zookeeper client readonly rate.
Shown as event
kafka.session.zookeeper.sync.rate
(gauge)
Zookeeper client sync rate.
Shown as event
kafka.topic.messages_in.rate
(gauge)
Incoming message rate by topic
Shown as message
kafka.topic.net.bytes_in.rate
(gauge)
Incoming byte rate by topic.
Shown as byte
kafka.topic.net.bytes_out.rate
(gauge)
Outgoing byte rate by topic.
Shown as byte
kafka.topic.net.bytes_rejected.rate
(gauge)
Rejected byte rate by topic.
Shown as byte

이벤트

Kafka 점검은 이벤트를 포함하지 않습니다.

서비스 점검

kafka.can_connect
Returns CRITICAL if the Agent is unable to connect to and collect metrics from the monitored Kafka instance, WARNING if no metrics are collected, and OK otherwise.
Statuses: ok, critical, warning

트러블슈팅

참고 자료

Kafka 소비자 통합

Kafka 대시보드

개요

이 에이전트 통합은 Kafka 소비자로부터 메시지 오프셋 메트릭을 수집합니다. 이 점검은 Kafka 브로커로부터 하이워터 오프셋을, Kafka(또는 기존 고객의 경우 Zookeeper)에 저장된 소비자 오프셋을 전달한 다음 소비자 지연을 계산합니다(브로커 오프셋 및 소비자 오프셋 간 차이).

참고:

  • 이 통합은 브로커 오프셋보다 먼저 소비자 오프셋을 점검합니다. 최악의 시나리오에서 소비자 지연이 약간은 과장될 수 있습니다. 반대 순서로 오프셋을 점검하면 마이너스 값이 나올 정도로 소비자 지연이 정확하지 않을 수 있습니다. 이는 최악의 시나리오가 보통 메시지 표시를 건너뛰고 있다는 신호입니다
  • Kafka 브로커 또는 자바 기반 소비자/생산자로부터 JMX 메트릭을 수집하려면 Kafka 브로커 통합을 참조하세요.

설정

설치

에이전트의 Kafka 소비자 점검은 Datadog 에이전트 패키지에 포함되어 있습니다. Kafka 노드에 별도의 설치가 필요하지 않습니다.

설정

호스트

Kafka 소비자를 실행하는 호스트에서 실행되는 에이전트 점검을 설정하려면

메트릭 수집
  1. 에이전트 설정 디렉토리 루트의 conf.d/ 폴더에 있는 kafka_consumer.d/conf.yaml 파일을 편집합니다. 사용 가능한 모든 설정 옵션은 kafka_consumer.d/conf.yaml 샘플을 참조하세요.

  2. 에이전트를 재시작합니다.

로그 수집

이 점검은 추가 로그를 수집하지 않습니다. Kafka 브로커에서 로그를 수집하려면 Kafka 로그 수집 지침을 참조하세요.

컨테이너화된 환경

컨테이너화된 환경의 경우 자동탐지 통합 템플릿에 아래 파라미터를 적용하는 방법이 안내되어 있습니다.

메트릭 수집
파라미터
<INTEGRATION_NAME>kafka_consumer
<INIT_CONFIG>비어 있음 또는 {}
<INSTANCE_CONFIG>{"kafka_connect_str": <KAFKA_CONNECT_STR>}
예: {"kafka_connect_str": "server:9092"}
로그 수집

이 점검은 추가 로그를 수집하지 않습니다. Kafka 브로커에서 로그를 수집하려면 Kafka 로그 수집 지침을 참조하세요.

검증

에이전트 상태 하위 명령을 실행하고 점검 섹션에서 kafka_consumer를 찾습니다.

수집한 데이터

메트릭

kafka.broker_offset
(gauge)
Current message offset on broker.
Shown as offset
kafka.consumer_lag
(gauge)
Lag in messages between consumer and broker.
Shown as offset
kafka.consumer_offset
(gauge)
Current message offset on consumer.
Shown as offset
kafka.estimated_consumer_lag
(gauge)
Lag in seconds between consumer and broker. This metric is provided through Data Streams Monitoring. Additional charges may apply.
Shown as second

이벤트

소비자_지연:
Datadog 에이전트는 consumer_lag 메트릭 값이 0 이하로 내려가면 topic, partitionconsumer_group과 함께 태깅하여 이벤트를 내보냅니다.

서비스 점검

Kafka 소비자 점검에는 서비스 점검이 포함되어 있지 않습니다.

트러블슈팅

Kerberos GSSAPI 인증

Kafka 클러스터 의 케베로스(Kerberos) 설정에 따라 다음을 설정해야 할 수도 있습니다.

  • Datadog 에이전트가 Kafka 브로커에 연결하도록 설정된 Kafka 클라이언트입니다. Kafka 클라이언트는 케베로스 주체로 추가하고 케베로스 키탭으로 추가해야 합니다. Kafka 클리이언트는 또한 유효한 케베로스 티켓을 보유해야 합니다.
  • Kafka 브로커에 대한 보안 연결을 인증하는 TLS 인증서입니다.
    • JKS 키 저장소를 사용하는 경우, 키 저장소에서 인증서를 내보내야 하며 파일 경로는 해당 tls_cert 및/또는 tls_ca_cert 옵션으로 설정해야 합니다.
    • 인증서를 인증하는 데 개인 키가 필요한 경우, tls_private_key 옵션으로 설정해야 합니다. 해당되는 경우, 개인 키 비밀번호는 tls_private_key_password로 설정해야 합니다.
  • KRB5_CLIENT_KTNAME 환경 변수가 기본 경로(예: KRB5_CLIENT_KTNAME=/etc/krb5.keytab)와 다른 경우 클라이언트의 케베로스 키 탭 위치를 가리키는 환경 변수를 의미합니다.
  • KRB5CCNAME 환경 변수가 기본 경로(예: KRB5CCNAME=/tmp/krb5cc_xxx)와 다른 경우 Kafka 클라이언트 의 Kerberos 자격 증명 티켓 캐시를 가리키는 환경 변수를 의미합니다.
  • Datadog 에이전트가 해당 환경 변수에 액세스할 수 없는 경우 운영 체제의 Datadog 에이전트 서비스 설정 재정의 파일에 있는 환경 변수를 설정합니다. Datadog 에이전트 서비스 유닛 파일 수정 절차는 리눅스(Linux) 운영 체제에 따라 달라질 수 있습니다. 예를 들어 리눅스 systemd 환경을 생각해 볼 수 있습니다.

리눅스 시스템 예시

  1. 환경 파일에서 환경 변수를 수정합니다. 예: /path/to/environment/file
KRB5_CLIENT_KTNAME=/etc/krb5.keytab
KRB5CCNAME=/tmp/krb5cc_xxx
  1. Datadog 에이전트 서비스 설정 재정의 파일을 생성합니다. sudo systemctl edit datadog-agent.service

  2. 재정의 파일에 다음을 설정합니다.

[Service]
EnvironmentFile=/path/to/environment/file
  1. 다음 명령을 실행하여 systemd 데몬, Datadog-에이전트 서비스, Datadog 에이전트를 다시 로드합니다.
sudo systemctl daemon-reload
sudo systemctl restart datadog-agent.service
sudo service datadog-agent restart

참고 자료