ELFK + Kafka + Zabbix日志收集告警

环境准备

  • 角色划分:
系统:CentOS 7

es主节点/es数据节点/kibana/head			192.168.1.253

kafka/zookeeper/logstash				192.168.1.253

日志测试/filebeat						192.168.1.253
  • 关闭防火墙和selinux:
# systemctl stop firewalld && systemctl disable firewalld

# sed -i 's/=enforcing/=disabled/g' /etc/selinux/config  && setenforce 0
  • 配置系统环境:
# vim /etc/security/limits.conf

* soft nofile 65536
* hard nofile 131072
* soft nproc 2048
* hard nproc 4096
# vim /etc/sysctl.conf

vm.max_map_count=655360

# sysctl -p
  • 安装Java环境:
# tar zxf jdk-8u191-linux-x64.tar.gz && mv jdk1.8.0_191/ /usr/local/jdk

# vim /etc/profile

JAVA_HOME=/usr/local/jdk
PATH=$PATH:$JAVA_HOME/bin:$JAVA_HOME/jre/bin
CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/jre/lib
export JAVA_HOME PATH CLASSPATH

# source !$

# java -version

# ln -s /usr/local/jdk/bin/java /usr/local/bin/java

ELFK结合Kafka

生产初期,Service服务较少,访问量较少,使用ELFK集群就可以满足生产需求。但随着业务量的不断增加,日志量成倍增长,针对此情况,需要对ELFK增加消息队列,以减轻前端ES集群的压力。

那么选择redis还是kafka作为消息队列呢?从以下三点考虑:

* 消息推送的可靠性:

    Redis 消息推送(基于分布式 Pub/Sub)多用于实时性较高的消息推送,并不保证可靠。 
    Redis-Pub/Sub 断电就会清空数据,而使用 Redis-List 作为消息推送虽然有持久化,也并非完全可靠不会丢失。

    Kafka 虽然有一些延迟但保证可靠。

* 订阅功能的分组:

    Redis 发布订阅除了表示不同的 topic 外,并不支持分组。

    Kafka 中发布一个内容,多个订阅者可以分组,同一个组里只有一个订阅者会收到该消息,这样可以用作负载均衡。

* 集群资源的消耗:

    Redis 3.0之后个有提供集群ha机制,但是要为每个节点都配置一个或者多个从节点,从节点从主节点上面拉取数据,主节点挂了,从节点顶替上去成为主节点,但是这样对资源比较浪费。

    Kafka 作为消息队列,能充分的运用集群资源,每个应用相当于一个topic,一个topic可拥有多个partition,并且partition能轮询分配到每个节点上面,并且生产者生产的数据也会均匀的放到partition中,
    即使上层只有1个应用kafka集群的资源也会被充分的利用到,这样就避免了redis集群出现的数据倾斜问题,并且kafka有类似于hdfs的冗余机制,一个broker挂掉了不影响整个集群的运行。

这里,我们选择kafka作为消息队列,配置kafka集群,结合ELFK集群收集应用日志。

Elasticsearch、Kibana及Head安装过程此处省略。


kafka集群安装

Apache kafka是消息中间件的一种,是一种分布式的、基于发布/订阅的消息系统。能实现一个为处理实时数据提供一个统一、高吞吐、低延迟的平台,且拥有分布式的,可划分的,冗余备份的持久性的日志服务等特点。

  • 环境准备:
kafka/zookeeper/logstash                192.168.1.253
  • 下载安装kafka:
# cd /software

# wget http://mirrors.tuna.tsinghua.edu.cn/apache/kafka/2.2.0/kafka_2.11-2.2.0.tgz

# tar zxf kafka_2.11-2.2.0.tgz && mv kafka_2.11-2.2.0 /usr/local/kafka
  • 修改zookeeper配置:
# vim /usr/local/kafka/config/zookeeper.properties

dataDir=/usr/local/kafka/zookeeper
clientPort=2181
maxClientCnxns=1024
tickTime=2000
initLimit=20
syncLimit=10
server.1=192.168.1.253:2888:3888

说明:

tickTime : 这个时间是作为 Zookeeper 服务器之间或客户端与服务器之间维持心跳的时间间隔,也就是每个 tickTime 时间就会发送一个心跳。

2888 端口:表示的是这个服务器与集群中的 Leader 服务器交换信息的端口;

3888 端口:表示的是万一集群中的 Leader 服务器挂了,需要一个端口来重新进行选举,选出一个新的 Leader ,而这个端口就是用来执行选举时服务器相互通信的端口。
  • 创建所需目录、文件:

在zookeeper目录下创建myid文件,里面的内容为数字,用于标识主机,如果这个文件没有的话,zookeeper是没法启动的。

# mkdir /usr/local/kafka/zookeeper

# echo 1 > /usr/local/kafka/zookeeper/myid                  #如果是集群,每台机器id不同即可
  • 修改kafka配置:
# vim /usr/local/kafka/config/server.properties

broker.id=1                 #ID唯一,填数字
port=9092
host.name=192.168.1.253                 #本机ip
log.dirs=/data/kafka/kafka-logs                 #数据存放目录,不是日志目录
num.partitions=16               #每个topic的默认分区数
log.retention.hours=168                 #过期时间,默认为1周
zookeeper.connect=192.168.1.253:2181                #zookeeper ip及端口

# mkdir -p /data/kafka
  • 配置zookeeper服务:
# vim /usr/bin/zk_kafka

#!/bin/bash
#chkconfig: 2345 55 24
#description: zookeeper and kafka service manager

BASE_DIR=/usr/local/kafka
SERVICE=$1

START_ZK()
{
   
    cd $BASE_DIR
    nohup $BASE_DIR/bin/zookeeper-server-start.sh $BASE_DIR/config/zookeeper.properties &>/dev/null &
}
STOP_ZK()
{
   
    cd $BASE_DIR
    nohup $BASE_DIR/bin/zookeeper-server-stop.sh &>/dev/null &
}
START_KAFKA()
{
   
    cd $BASE_DIR
    nohup $BASE_DIR/bin/kafka-server-start.sh $BASE_DIR/config/server.properties &>/dev/null &
}
STOP_KAFKA()
{
   
    cd $BASE_DIR
    nohup $BASE_DIR/bin/kafka-server-stop.sh &>/dev/null &
}

if [ -z "$1" ];
then
    echo $"Usage: $0 {zookeeper|kafka} {start|stop|restart}"
    exit 0
else
    if [ "$1" != "zookeeper" ] && [ "$1" != "kafka" ];
    then
        echo $"Usage: $0 {zookeeper|kafka} {start|stop|restart}"
        exit 1
    fi
fi

START()
{
   
    if [ "$SERVICE" = "zookeeper" ];
    then
        START_ZK
        if 
  • 1
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值