Kafka Monitoring with Prometheus and Grafana
The reference setup uses 3 applications:
- Prometheus
- jmx_exporter in either server or agent mode
- Grafana
Installation and setup
- structure directory :
- Root:
- kafka
- kafka-monitor/prometheus :
jmx_prometheus_javaagent-0.11.0.jar
kafka-2-0-0.yml
prometheus:
prometheus
prometheus.yml
.......
prometheus-2.9.2.linux-amd64.tar.gz
zookeeper.yaml
Step 1: Insrall Kafka
# Download the 2.2.0 release and un-tar it.
> tar -xzf kafka_2.12-2.2.0.tgz
> cd kafka_2.12-2.2.0
Step 2 : Setup Kafka Cluster
> mkdir -p /root/kafka/data/zookeeper
> mkdir -p /root/kafka/data/kafka
3 node:
node 1:
> echo "1" > /root/kafka/data/zookeeper/myid
# Edit file :/root/kafka/config/server.properties
Change line :
broker.id=1
log.dirs=/root/kafka/data/kafka
zookeeper.connect=node1:2181,node2:2181,node3:2181 // edit file hosts or ip
# Edit file : root/kafka/config/zookeeper.properties
Change line :
server.1=node1:2888:3888 // server.1 thì 1 đây có nghĩ giá tri broker.id=1
server.2=node2:2888:3888
server.3=node3:2888:3888
initLimit=5
syncLimit=2
2 node tương tự như node 1:
node 2: broker.id=2
node 3: broker.id=3
Step 3 : Create service kafka and zookeeper:
# Create service kafka.service
> create file /lib/systemd/system/kafka.service and add Content :
"
[Unit]
Description=Apache Kafka - broker
After=network.target
[Service]
Type=simple
User=root
Group=root
Environment="KAFKA_HEAP_OPTS=-Xmx256M -Xms128M"
Environment="KAFKA_OPTS=-javaagent:/root/kafka-monitor/prometheus/\
jmx_prometheus_javaagent-0.11.0.jar=8080:/root/kafka-monitor/prometheus/\
kafka-2-0-0.yml"
ExecStart=/root/kafka/bin/kafka-server-start.sh \
/root/kafka/config/server.properties
Environment=JMX_PORT=9998
[Install]
WantedBy=multi-user.target
"
> systemctl enable kafka.service
# Create service zookeeper.service
> create file /lib/systemd/system/zookeeper.service and add Content :
[Unit]
Description=Apache Kafka-ZooKeeper
After=network.target
[Service]
User=root
Group=root
SyslogIdentifier=zookeeper
Environment="EXTRA_ARGS=-javaagent:/root/kafka-monitor/prometheus/\
jmx_prometheus_javaagent-0.11.0.jar=8081:/root/kafka-monitor/\
prometheus/zookeeper.yaml"
ExecStart=/root/kafka/bin/zookeeper-server-start.sh \
/root/kafka/config/zookeeper.properties
#Environment=JMX_PORT=9990
TimeoutStopSec=180
Restart=no
[Install]
WantedBy=multi-user.target
> systemctl enable zookeeper.service
Step 4 : Enable JMX in kafka
# Edit : /root/kafka/bin/kafka-run-class.sh and change line on 3 node :
if [ $JMX_PORT ]; then
KAFKA_JMX_OPTS="-Djava.rmi.server.hostname=192.168.209.131\
- Dcom.sun.management.jmxremote=true\
-Dcom.sun.management.jmxremote.authenticate=false \
-Dcom.sun.management.jmxremote.ssl=false \
- Dcom.sun.management.jmxremote.port=$JMX_PORT "
fi
Step 5 : Install prometheus
> cd /root
> mkdir -p /kafka-monitor/prometheus
> cd /root/kafka-monitor/prometheus
> wget https://repo1.maven.org/maven2/io/prometheus/jmx\
/jmx_prometheus_javaagent/0.3.1/jmx_prometheus_javaagent-0.3.1.jar
> wget https://raw.githubusercontent.com/prometheus/\
jmx_exporter/master/example_configs/kafka-0-8-2.yml
# Download and install prometheus
> cd /root/kafka-monitor/prometheus
>wget https://github.com/prometheus/prometheus/releases/\
download/v2.3.2/prometheus-2.3.2.linux-amd64.tar.gz
> tar -xzf prometheus-*.tar.gz
> mv prometheus-2.3.2.linux-amd64 prometheus
> rm prometheus-*.tar.gz
> cd /root/kafka-monitor/prometheus/prometheus
> nano prometheus.yml
# Setup Prometheus SystemD file
> vi /lib/systemd/system/prometheus.service
> mkdir -p /root/kafka-monitor/prometheus/prometheus/data
# ADD contain :
[Unit]
Description=Prometheus Server
After=network-online.target
[Service]
User=root
ExecStart=/root/kafka-monitor/prometheus/prometheus/prometheus\
--config.file=/root/kafka-monitor/prometheus/prometheus/prometheus.yml\
--storage.tsdb.path=/root/kafka-monitor/prometheus/prometheus/data
[Install]
WantedBy=multi-user.target
> systemctl enable prometheus.service
Step 6 : Install Grafana
> cd /root
> wget https://s3-us-west-2.amazonaws.com/grafana-releases/release/\
grafana-5.2.1.linux-amd64.tar.gz
> tar -zxvf grafana-*.gz
> rm grafana-*.gz
> mv grafana-*/ grafana
> cd grafana
# enable anonymous authentication by setting
> vi conf/defaults.ini
# you can type "/anonymous" to jump the right line
# Insert following Content:
# [auth.anonymous]
# enabled = true
# org_name = Main Org.
# org_role = Admin
# Start grafana:
> bin/grafana-server
# Setup as SystemD service:
> sudo nano /etc/systemd/system/grafana.service
Add Content :
# /etc/systemd/system/grafana.service
[Unit]
Description=Grafana Server
After=network-online.target
[Service]
User=root
WorkingDirectory=/root/kafka-monitor/grafana
ExecStart=/root/kafka-monitor/grafana/bin/grafana-server
[Install]
WantedBy=multi-user.target
> systemctl enable grafana
Step 7 : Starting
- systemctl start zookeeper
- systemctl start kafka
- systemctl start prometheus
http://localhost:9090
- systemctl start grafana
http://localhost:3000
Link file download : https://drive.google.com/drive/folders/1O3BosKYG38sG-DjvbTEyGl89qNKOPdEG?usp=sharing
# Download the 2.2.0 release and un-tar it.
> tar -xzf kafka_2.12-2.2.0.tgz
> cd kafka_2.12-2.2.0
Step 2 : Setup Kafka Cluster
> mkdir -p /root/kafka/data/zookeeper
> mkdir -p /root/kafka/data/kafka
3 node:
node 1:
> echo "1" > /root/kafka/data/zookeeper/myid
# Edit file :/root/kafka/config/server.properties
Change line :
broker.id=1
log.dirs=/root/kafka/data/kafka
zookeeper.connect=node1:2181,node2:2181,node3:2181 // edit file hosts or ip
# Edit file : root/kafka/config/zookeeper.properties
Change line :
server.1=node1:2888:3888 // server.1 thì 1 đây có nghĩ giá tri broker.id=1
server.2=node2:2888:3888
server.3=node3:2888:3888
initLimit=5
syncLimit=2
2 node tương tự như node 1:
node 2: broker.id=2
node 3: broker.id=3
Step 3 : Create service kafka and zookeeper:
# Create service kafka.service
> create file /lib/systemd/system/kafka.service and add Content :
"
[Unit]
Description=Apache Kafka - broker
After=network.target
[Service]
Type=simple
User=root
Group=root
Environment="KAFKA_HEAP_OPTS=-Xmx256M -Xms128M"
Environment="KAFKA_OPTS=-javaagent:/root/kafka-monitor/prometheus/\
jmx_prometheus_javaagent-0.11.0.jar=8080:/root/kafka-monitor/prometheus/\
kafka-2-0-0.yml"
ExecStart=/root/kafka/bin/kafka-server-start.sh \
/root/kafka/config/server.properties
Environment=JMX_PORT=9998
[Install]
WantedBy=multi-user.target
"
> systemctl enable kafka.service
# Create service zookeeper.service
> create file /lib/systemd/system/zookeeper.service and add Content :
[Unit]
Description=Apache Kafka-ZooKeeper
After=network.target
[Service]
User=root
Group=root
SyslogIdentifier=zookeeper
Environment="EXTRA_ARGS=-javaagent:/root/kafka-monitor/prometheus/\
jmx_prometheus_javaagent-0.11.0.jar=8081:/root/kafka-monitor/\
prometheus/zookeeper.yaml"
ExecStart=/root/kafka/bin/zookeeper-server-start.sh \
/root/kafka/config/zookeeper.properties
#Environment=JMX_PORT=9990
TimeoutStopSec=180
Restart=no
[Install]
WantedBy=multi-user.target
> systemctl enable zookeeper.service
Step 4 : Enable JMX in kafka
# Edit : /root/kafka/bin/kafka-run-class.sh and change line on 3 node :
if [ $JMX_PORT ]; then
KAFKA_JMX_OPTS="-Djava.rmi.server.hostname=192.168.209.131\
- Dcom.sun.management.jmxremote=true\
-Dcom.sun.management.jmxremote.authenticate=false \
-Dcom.sun.management.jmxremote.ssl=false \
- Dcom.sun.management.jmxremote.port=$JMX_PORT "
fi
Step 5 : Install prometheus
> cd /root
> mkdir -p /kafka-monitor/prometheus
> cd /root/kafka-monitor/prometheus
> wget https://repo1.maven.org/maven2/io/prometheus/jmx\
/jmx_prometheus_javaagent/0.3.1/jmx_prometheus_javaagent-0.3.1.jar
> wget https://raw.githubusercontent.com/prometheus/\
jmx_exporter/master/example_configs/kafka-0-8-2.yml
# Download and install prometheus
> cd /root/kafka-monitor/prometheus
>wget https://github.com/prometheus/prometheus/releases/\
download/v2.3.2/prometheus-2.3.2.linux-amd64.tar.gz
> tar -xzf prometheus-*.tar.gz
> mv prometheus-2.3.2.linux-amd64 prometheus
> rm prometheus-*.tar.gz
> cd /root/kafka-monitor/prometheus/prometheus
> nano prometheus.yml
# Setup Prometheus SystemD file
> vi /lib/systemd/system/prometheus.service
> mkdir -p /root/kafka-monitor/prometheus/prometheus/data
# ADD contain :
[Unit]
Description=Prometheus Server
After=network-online.target
[Service]
User=root
ExecStart=/root/kafka-monitor/prometheus/prometheus/prometheus\
--config.file=/root/kafka-monitor/prometheus/prometheus/prometheus.yml\
--storage.tsdb.path=/root/kafka-monitor/prometheus/prometheus/data
[Install]
WantedBy=multi-user.target
> systemctl enable prometheus.service
Step 6 : Install Grafana
> cd /root
> wget https://s3-us-west-2.amazonaws.com/grafana-releases/release/\
grafana-5.2.1.linux-amd64.tar.gz
> tar -zxvf grafana-*.gz
> rm grafana-*.gz
> mv grafana-*/ grafana
> cd grafana
# enable anonymous authentication by setting
> vi conf/defaults.ini
# you can type "/anonymous" to jump the right line
# Insert following Content:
# [auth.anonymous]
# enabled = true
# org_name = Main Org.
# org_role = Admin
# Start grafana:
> bin/grafana-server
# Setup as SystemD service:
> sudo nano /etc/systemd/system/grafana.service
Add Content :
# /etc/systemd/system/grafana.service
[Unit]
Description=Grafana Server
After=network-online.target
[Service]
User=root
WorkingDirectory=/root/kafka-monitor/grafana
ExecStart=/root/kafka-monitor/grafana/bin/grafana-server
[Install]
WantedBy=multi-user.target
> systemctl enable grafana
Step 7 : Starting
- systemctl start zookeeper
- systemctl start kafka
- systemctl start prometheus
http://localhost:9090
- systemctl start grafana
http://localhost:3000
Link file download : https://drive.google.com/drive/folders/1O3BosKYG38sG-DjvbTEyGl89qNKOPdEG?usp=sharing
x
Nhận xét
Đăng nhận xét