KEMBAR78
Kafka monitoring using Prometheus and Grafana | PPTX
구성도
Kafka Cluster
node exporter : 서버 자원(CPU, Memory, Disk) 지표 수집
jmx exporter : Kafka 구동과 관련된 jmx 지표 수집
개요
기동 순서 기동 대상 포트 기동 방법 역할
1. JMX exporter
모든 Broker
8088
Kafka 기동시 jar 파일
실행됨(agent)
Kafka의 JMX 정보 송신
2. Node exporter 9100 ./node_exporter 서버의 자원상황 송신
3. Prometheus
모니터링 서버
9090 ./prometheus 메트릭 수집
4. Grafana 3000
systemctl start
grafana-server.service 메트릭 시각화
1. JMX Exporter (1/5)
Prometheus와 연동하기 위한 일종의 Agent 파일
https://repo1.maven.org/maven2/io/prometheus/jmx/jmx_prometheus_javaagent/
모든 Broker에 해당
1. JMX Exporter (2/5)
wget https://repo1.maven.org/maven2/io/prometheus/jmx/jmx_prometheus_javaagent/0.17.2/jmx_prometheus_javaagent-0.17.2.jar
아래와 같이 JMX_Exporter 파일을 다운로드 한다.
모든 Broker에 해당
1. JMX Exporter (3/5)
https://github.com/prometheus/jmx_exporter/tree/main/example_configs
wget https://raw.githubusercontent.com/prometheus/jmx_exporter/main/example_configs/kafka-2_0_0.yml
아래와 같이 JMX_Exporter 파일 실행에 적용할 설정 파일을 다운로드 한다.(수집할 JMX를 정의한 설정 파일)
모든 Broker에 해당
1. JMX Exporter (4/5)
if [ "x$KAFKA_HEAP_OPTS" = "x" ]; then
export KAFKA_HEAP_OPTS="-Xmx1G -Xms1G"
fi
if [ "x$KAFKA_OPTS" = "x" ]; then
export KAFKA_OPTS="-javaagent:/root/monitor/jmx_prometheus_javaagent-0.17.2.jar=8088:/root/monitor/kafka-2_0_0.yml"
fi
EXTRA_ARGS=${EXTRA_ARGS-'-name kafkaServer -loggc'}
카프카 재기동
kafka-server-stop.sh
kafka-server-start.sh -daemon $KAFKA/config/server.properties
$KAFKA/bin/kafka-server-start.sh 에서 아래 붉은색 추가(Kafka 기동시 JMX Exporter를 같이 시작하기 위함)
모든 Broker에 해당
Kafka 재기동 이후 Exporter 정상 여부 확인
curl localhost:8088
차후, Prometheus 서버 및 웹 화면에서 메트릭 전송을 위해 방화벽 개방
firewall-cmd --permanent --zone=public --add-port=8088/tcp
firewall-cmd --reload
firewall-cmd --list-ports
1. JMX Exporter (5/5)
모든 Broker에 해당
wget https://github.com/prometheus/node_exporter/releases/download/v1.4.0/node_exporter-1.4.0.linux-amd64.tar.gz
tar -xzf node_exporter-1.4.0.linux-amd64.tar.gz
firewall-cmd --permanent --zone=public --add-port=9100/tcp
firewall-cmd --reload
firewall-cmd --list-ports
./node_exporter (압축 해제한 디렉토리에서 쉘파일 실행)
2. Node Exporter
모든 Broker에 해당
https://prometheus.io/download/
(방화벽 해제)
(압축 해제)
wget https://github.com/prometheus/prometheus/releases/download/v2.40.3/prometheus-2.40.3.linux-amd64.tar.gz
tar -xzf prometheus-2.40.3.linux-amd64.tar.gz
vi prometheus.yml
모니터링할 서버에 설치 및 실행
# my global config
global:
scrape_interval: 10s # Set the scrape interval to every 15 seconds. Default is every 1 minute.
evaluation_interval: 10s # Evaluate rules every 15 seconds. The default is every 1 minute.
# scrape_timeout is set to the global default (10s).
scrape_configs:
# The job name is added as a label `job=<job_name>` to any timeseries scraped from this config.
- job_name: "kafka"
# metrics_path defaults to '/metrics'
# scheme defaults to 'http'.
static_configs:
- targets: ["master:8088","slave1:8088","slave2:8088"]
- job_name: "server status"
static_configs:
- targets: ["master:9100","slave1:9100","slave2:9100"]
3. Prometheus (1/4)
(압축 해제한 디렉토리에 있는 설정 파일 편집)
(JMX Exporter 접속 정보)
(Node Exporter 정보)
#포트 개방
firewall-cmd --permanent --zone=public --add-port=9090/tcp
firewall-cmd--reload
firewall-cmd --list-ports
#실행
./prometheus
모니터링할 서버에 설치 및 실행
3. Prometheus (2/4)
3. Prometheus (3/4)
웹 브라우저 접속하여 2개의 exporter에서
수집한 Metric 정상 수신 여부 확인
모니터링할 서버에 설치 및 실행
3. Prometheus (4/4)
모니터링할 서버에 설치 및 실행
https://grafana.com/grafana/download
4. Grafana (1/10)
모니터링할 서버에 설치 및 실행
wget https://dl.grafana.com/enterprise/release/grafana-enterprise-9.2.6-1.x86_64.rpm
yum install grafana-enterprise-9.2.6-1.x86_64.rpm
firewall-cmd --permanent --zone=public --add-port=3000/tcp
firewall-cmd --reload
firewall-cmd --list-ports
systemctl start grafana-server.service
4. Grafana (2/10)
모니터링할 서버에 설치 및 실행
(서비스 실행)
(서비스 등록 및 부팅시 자동 실행 : systemctl enable grafana-server.service)
서버 접속 예시 : http://192.168.56.30:3000/login
Email or username: admin
Password: admin
모니터링할 서버에 설치 및 실행
4. Grafana (3/10)
(Password Setting)
모니터링할 서버에 설치 및 실행
4. Grafana (4/10)
Click ↓
모니터링할 서버에 설치 및 실행
4. Grafana (5/10)
Click ↓
① Prometheus Server Endpoing ↓
② Click ↓
모니터링할 서버에 설치 및 실행
4. Grafana (6/10)
node_exporter 대시보드 설정
1860↓
Prometheus↓
모니터링할 서버에 설치 및 실행
4. Grafana (7/10)
결과 화면
모니터링할 서버에 설치 및 실행
4. Grafana (8/10)
jmx_exporter 대시보드 설정
11962↓
Prometheus↓
https://grafana.com/grafana/dashboards/11962-kafka-metrics/
모니터링할 서버에 설치 및 실행
4. Grafana (9/10)
[참고] 사용 가능한 Grafana Metrics 조회
모니터링할 서버에 설치 및 실행
4. Grafana (10/10)
결과 화면
https://grafana.com/grafana/dashboards/?search=kafka
[Tip] Grafana
[참고] 기타 유용한 Grafana Metrics
[Tip] Grafana
[참고] ID : 721
[Tip] Grafana
[참고] ID : 8582
[Tip] Grafana
[참고] ID : 8582
[Tip] Grafana
* 즐겨찾기 활용

Kafka monitoring using Prometheus and Grafana

  • 2.
    구성도 Kafka Cluster node exporter: 서버 자원(CPU, Memory, Disk) 지표 수집 jmx exporter : Kafka 구동과 관련된 jmx 지표 수집
  • 3.
    개요 기동 순서 기동대상 포트 기동 방법 역할 1. JMX exporter 모든 Broker 8088 Kafka 기동시 jar 파일 실행됨(agent) Kafka의 JMX 정보 송신 2. Node exporter 9100 ./node_exporter 서버의 자원상황 송신 3. Prometheus 모니터링 서버 9090 ./prometheus 메트릭 수집 4. Grafana 3000 systemctl start grafana-server.service 메트릭 시각화
  • 4.
    1. JMX Exporter(1/5) Prometheus와 연동하기 위한 일종의 Agent 파일 https://repo1.maven.org/maven2/io/prometheus/jmx/jmx_prometheus_javaagent/ 모든 Broker에 해당
  • 5.
    1. JMX Exporter(2/5) wget https://repo1.maven.org/maven2/io/prometheus/jmx/jmx_prometheus_javaagent/0.17.2/jmx_prometheus_javaagent-0.17.2.jar 아래와 같이 JMX_Exporter 파일을 다운로드 한다. 모든 Broker에 해당
  • 6.
    1. JMX Exporter(3/5) https://github.com/prometheus/jmx_exporter/tree/main/example_configs wget https://raw.githubusercontent.com/prometheus/jmx_exporter/main/example_configs/kafka-2_0_0.yml 아래와 같이 JMX_Exporter 파일 실행에 적용할 설정 파일을 다운로드 한다.(수집할 JMX를 정의한 설정 파일) 모든 Broker에 해당
  • 7.
    1. JMX Exporter(4/5) if [ "x$KAFKA_HEAP_OPTS" = "x" ]; then export KAFKA_HEAP_OPTS="-Xmx1G -Xms1G" fi if [ "x$KAFKA_OPTS" = "x" ]; then export KAFKA_OPTS="-javaagent:/root/monitor/jmx_prometheus_javaagent-0.17.2.jar=8088:/root/monitor/kafka-2_0_0.yml" fi EXTRA_ARGS=${EXTRA_ARGS-'-name kafkaServer -loggc'} 카프카 재기동 kafka-server-stop.sh kafka-server-start.sh -daemon $KAFKA/config/server.properties $KAFKA/bin/kafka-server-start.sh 에서 아래 붉은색 추가(Kafka 기동시 JMX Exporter를 같이 시작하기 위함) 모든 Broker에 해당
  • 8.
    Kafka 재기동 이후Exporter 정상 여부 확인 curl localhost:8088 차후, Prometheus 서버 및 웹 화면에서 메트릭 전송을 위해 방화벽 개방 firewall-cmd --permanent --zone=public --add-port=8088/tcp firewall-cmd --reload firewall-cmd --list-ports 1. JMX Exporter (5/5) 모든 Broker에 해당
  • 9.
    wget https://github.com/prometheus/node_exporter/releases/download/v1.4.0/node_exporter-1.4.0.linux-amd64.tar.gz tar -xzfnode_exporter-1.4.0.linux-amd64.tar.gz firewall-cmd --permanent --zone=public --add-port=9100/tcp firewall-cmd --reload firewall-cmd --list-ports ./node_exporter (압축 해제한 디렉토리에서 쉘파일 실행) 2. Node Exporter 모든 Broker에 해당 https://prometheus.io/download/ (방화벽 해제) (압축 해제)
  • 10.
    wget https://github.com/prometheus/prometheus/releases/download/v2.40.3/prometheus-2.40.3.linux-amd64.tar.gz tar -xzfprometheus-2.40.3.linux-amd64.tar.gz vi prometheus.yml 모니터링할 서버에 설치 및 실행 # my global config global: scrape_interval: 10s # Set the scrape interval to every 15 seconds. Default is every 1 minute. evaluation_interval: 10s # Evaluate rules every 15 seconds. The default is every 1 minute. # scrape_timeout is set to the global default (10s). scrape_configs: # The job name is added as a label `job=<job_name>` to any timeseries scraped from this config. - job_name: "kafka" # metrics_path defaults to '/metrics' # scheme defaults to 'http'. static_configs: - targets: ["master:8088","slave1:8088","slave2:8088"] - job_name: "server status" static_configs: - targets: ["master:9100","slave1:9100","slave2:9100"] 3. Prometheus (1/4) (압축 해제한 디렉토리에 있는 설정 파일 편집) (JMX Exporter 접속 정보) (Node Exporter 정보)
  • 11.
    #포트 개방 firewall-cmd --permanent--zone=public --add-port=9090/tcp firewall-cmd--reload firewall-cmd --list-ports #실행 ./prometheus 모니터링할 서버에 설치 및 실행 3. Prometheus (2/4)
  • 12.
    3. Prometheus (3/4) 웹브라우저 접속하여 2개의 exporter에서 수집한 Metric 정상 수신 여부 확인 모니터링할 서버에 설치 및 실행
  • 13.
    3. Prometheus (4/4) 모니터링할서버에 설치 및 실행
  • 14.
  • 15.
    wget https://dl.grafana.com/enterprise/release/grafana-enterprise-9.2.6-1.x86_64.rpm yum installgrafana-enterprise-9.2.6-1.x86_64.rpm firewall-cmd --permanent --zone=public --add-port=3000/tcp firewall-cmd --reload firewall-cmd --list-ports systemctl start grafana-server.service 4. Grafana (2/10) 모니터링할 서버에 설치 및 실행 (서비스 실행) (서비스 등록 및 부팅시 자동 실행 : systemctl enable grafana-server.service)
  • 16.
    서버 접속 예시: http://192.168.56.30:3000/login Email or username: admin Password: admin 모니터링할 서버에 설치 및 실행 4. Grafana (3/10) (Password Setting)
  • 17.
    모니터링할 서버에 설치및 실행 4. Grafana (4/10) Click ↓
  • 18.
    모니터링할 서버에 설치및 실행 4. Grafana (5/10) Click ↓ ① Prometheus Server Endpoing ↓ ② Click ↓
  • 19.
    모니터링할 서버에 설치및 실행 4. Grafana (6/10) node_exporter 대시보드 설정 1860↓ Prometheus↓
  • 20.
    모니터링할 서버에 설치및 실행 4. Grafana (7/10) 결과 화면
  • 21.
    모니터링할 서버에 설치및 실행 4. Grafana (8/10) jmx_exporter 대시보드 설정 11962↓ Prometheus↓
  • 22.
    https://grafana.com/grafana/dashboards/11962-kafka-metrics/ 모니터링할 서버에 설치및 실행 4. Grafana (9/10) [참고] 사용 가능한 Grafana Metrics 조회
  • 23.
    모니터링할 서버에 설치및 실행 4. Grafana (10/10) 결과 화면
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.

Editor's Notes

  • #16 그라파나 자동 실행 : systemctl enable grafana-server.service