【Project】基于kafka的高可用分布式日志监控与告警系统

底层学习笔记

kafka数据存储

kafka最高水位线机制

Kraft模式

zooker和kraft

系统部署与使用说明

本系统主要包含 Kafka、Filebeat、Nginx(搭配 Keepalived)以及 Python 消费者程序的配置与部署,用于处理和存储 Nginx 访问日志。以下是详细的配置、部署和使用说明。

1. Kafka 配置与启动

1.1 配置文件

Kafka 采用 KRaft 模式,涉及三个节点(kafka01、kafka02、kafka03),各节点配置文件如下:

  • kafka01/opt/kafka_2.13-3.6.1/config/kraft/server.properties
yaml 复制代码
process.roles=broker,controller
node.id=1
controller.quorum.voters=1@192.168.100.150:9093,2@192.168.100.151:9093,3@192.168.100.152:9093
listeners=PLAINTEXT://kafka01:9092,CONTROLLER://kafka01:9093
inter.broker.listener.name=PLAINTEXT
advertised.listeners=PLAINTEXT://kafka01:9092
controller.listener.names=CONTROLLER
listener.security.protocol.map=CONTROLLER:PLAINTEXT,PLAINTEXT:PLAINTEXT,SSL:SSL,SASL_PLAINTEXT:SASL_PLAINTEXT,SASL_SSL:SASL_SSL
num.network.threads=3
num.io.threads=8
socket.send.buffer.bytes=102400
socket.receive.buffer.bytes=102400
socket.request.max.bytes=104857600
log.dirs=/var/lib/kafka
num.partitions=1
num.recovery.threads.per.data.dir=1
offsets.topic.replication.factor=1
transaction.state.log.replication.factor=1
transaction.state.log.min.isr=1
log.retention.hours=168
log.segment.bytes=1073741824
log.retention.check.interval.ms=300000
  • kafka02/opt/kafka_2.13-3.6.1/config/kraft/server.properties
yaml 复制代码
process.roles=broker,controller
node.id=2
controller.quorum.voters=1@192.168.100.150:9093,2@192.168.100.151:9093,3@192.168.100.152:9093
listeners=PLAINTEXT://kafka02:9092,CONTROLLER://kafka02:9093
inter.broker.listener.name=PLAINTEXT
advertised.listeners=PLAINTEXT://kafka02:9092
controller.listener.names=CONTROLLER
listener.security.protocol.map=CONTROLLER:PLAINTEXT,PLAINTEXT:PLAINTEXT,SSL:SSL,SASL_PLAINTEXT:SASL_PLAINTEXT,SASL_SSL:SASL_SSL
num.network.threads=3
num.io.threads=8
socket.send.buffer.bytes=102400
socket.receive.buffer.bytes=102400
socket.request.max.bytes=104857600
log.dirs=/var/lib/kafka
num.partitions=1
num.recovery.threads.per.data.dir=1
offsets.topic.replication.factor=1
transaction.state.log.replication.factor=1
transaction.state.log.min.isr=1
log.retention.hours=168
log.segment.bytes=1073741824
log.retention.check.interval.ms=300000
  • kafka03/opt/kafka_2.13-3.6.1/config/kraft/server.properties
yaml 复制代码
process.roles=broker,controller
node.id=3
controller.quorum.voters=1@192.168.100.150:9093,2@192.168.100.151:9093,3@192.168.100.152:9093
listeners=PLAINTEXT://kafka03:9092,CONTROLLER://kafka03:9093
inter.broker.listener.name=PLAINTEXT
advertised.listeners=PLAINTEXT://kafka03:9092
controller.listener.names=CONTROLLER
listener.security.protocol.map=CONTROLLER:PLAINTEXT,PLAINTEXT:PLAINTEXT,SSL:SSL,SASL_PLAINTEXT:SASL_PLAINTEXT,SASL_SSL:SASL_SSL
num.network.threads=3
num.io.threads=8
socket.send.buffer.bytes=102400
socket.receive.buffer.bytes=102400
socket.request.max.bytes=104857600
log.dirs=/var/lib/kafka
num.partitions=1
num.recovery.threads.per.data.dir=1
offsets.topic.replication.factor=1
transaction.state.log.replication.factor=1
transaction.state.log.min.isr=1
log.retention.hours=168
log.segment.bytes=1073741824
log.retention.check.interval.ms=300000

1.2 启动与关闭命令

bash 复制代码
# 启动 Kafka
/opt/kafka_2.13-3.6.1/bin/kafka-server-start.sh -daemon /opt/kafka_2.13-3.6.1/config/kraft/server.properties
# 关闭 Kafka(可选)
#/opt/kafka_2.13-3.6.1/bin/kafka-server-stop.sh

1.3 格式化存储

bash 复制代码
kafka-storage.sh format  --cluster-id BlQPRL0HSdaaMwvx_dVcAQ  --config /opt/kafka_2.13-3.6.1/config/kraft/server.properties --node-id 1

2. Filebeat 配置

Filebeat 用于收集 Nginx 访问日志并发送到 Kafka,配置文件如下:

bash 复制代码
filebeat.inputs:
- type: log
  enabled: true
  paths:
    - /usr/local/nginx1/logs/access.log
output.kafka:
  hosts: ["kafka01:9092","kafka02:9092","kafka03:9092"]
  topic: nginxlog
  keep_alive: 10s

3. Nginx 配置

3.1 Keepalived 配置

bash 复制代码
! Configuration File for keepalived
global_defs {
    router_id LVS_DEVEL
}
vrrp_script chk_nginx {
    script "/etc/keepalived/check_nginx.sh"
    interval 10
    weight -5
    fall 2
    rise 1
}
vrrp_instance VI_1 {
    state MASTER
    interface ens33
    mcast_src_ip 192.168.100.150
    virtual_router_id 51
    priority 100
    advert_int 2
    authentication {
        auth_type PASS
        auth_pass BLUEKING_NGINX_HA
    }
    virtual_ipaddress {
        192.168.100.100/24
    }
    track_script {
      chk_nginx
    }
}

3.2 检查脚本

bash 复制代码
#!/bin/bash
process_name="nginx"
process_abs_path="/usr/local/nginx1/sbin/nginx"

function is_nginx_running() {
    process_info=$(ps --no-header -C $process_name -o ppid,pid,args | awk '{printf $1 "|" $2 "|" ; for (i=3; i<=NF; i++) { printf "%s ", $i };printf "\n"}' | grep master)
    if [[ -z "$process_info" ]]; then
        return 1
    else
        process_pids=($(echo "$process_info" | awk -F'|' '{print $2}'))
        for _pid in "${process_pids[@]}"; do
            abs_path=$(readlink -f /proc/$_pid/exe)
            if [ "$abs_path" == "$(readlink -f "$process_abs_path")" ]; then
                return 0
            fi
        done
        return 2
    fi
}

err=0
for k in $(seq 1 3); do
    is_nginx_running
    if [[ $? != "0" ]]; then
        err=$((err + 1))
        sleep 1
    else
        err=0
        break
    fi
done

if [[ $err != "0" ]]; then
    exit 1  # 仅返回失败状态,不停止 keepalived
else
    exit 0
fi

4. Python 程序

4.1 依赖安装

bash 复制代码
pip install kafka-python==2.0.2 pymongo==4.13.0 mysql-connector-python==9.3.0 redis==4.5.5 kombu==5.3.1 celery==5.3.1

4.2 代码

https://github.com/Lenoud/nginx-monitor-kafka-python

5. 注意事项

  • 确保各节点的网络连通性,特别是 Kafka 节点之间以及与 MySQL 数据库的连接。
  • 检查各配置文件中的 IP 地址、端口号、用户名和密码等信息是否正确。
  • 在启动 Kafka 之前,确保已完成存储格式化操作。
  • 若需要修改日志存储策略或 Kafka 配置,可根据实际需求调整相应的配置文件。

完成整个系统的部署和配置,实现 Nginx 访问日志的收集、传输和存储。

相关推荐
Bug退退退1235 小时前
RabbitMQ 高级特性之死信队列
java·分布式·spring·rabbitmq
prince056 小时前
Kafka 生产者和消费者高级用法
分布式·kafka·linq
csdn_aspnet7 小时前
在 Windows 上安装和运行 Apache Kafka
windows·kafka
幼稚园的山代王14 小时前
RabbitMQ 4.1.1初体验-队列和交换机
分布式·rabbitmq·ruby
小新学习屋14 小时前
Spark从入门到熟悉(篇三)
大数据·分布式·spark
沉着的码农18 小时前
【设计模式】基于责任链模式的参数校验
java·spring boot·分布式
ZHOU_WUYI1 天前
一个简单的分布式追踪系统
分布式
码不停蹄的玄黓1 天前
MySQL分布式ID冲突详解:场景、原因与解决方案
数据库·分布式·mysql·id冲突
王小王-1231 天前
基于Hadoop的公共自行车数据分布式存储和计算平台的设计与实现
大数据·hive·hadoop·分布式·hadoop公共自行车·共享单车大数据分析·hadoop共享单车