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

x

Nhận xét

Bài đăng phổ biến từ blog này

ActiveMQ 5.x

Redo and undo Log in MySQL transaction

[Kubernetes Series] - Bài 19 - Adding custom resource to Kubernetes