ELK+FileBeat+Kafka分布式系统搭建图文教程

时间:2022-07-23
本文章向大家介绍ELK+FileBeat+Kafka分布式系统搭建图文教程,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

工作流程


filebeat收集需要提取的日志文件,将日志文件转存到kafka集群中,logstash处理kafka日志,格式化处理,并将日志输出到elasticsearch中,前台页面通过kibana展示日志。

使用kafka集群做缓存层,而不是直接将filebeat收集到的日志信息写入logstash,让整体结构更健壮,减少网络环境,导致数据丢失。filebeat负责将收集到的数据写入kafka,logstash取出数据并处理。

硬件条件支持


一共使用了4台服务器:

每台服务器都需要安装jdk,配置环境变量。

修改全局配置文件,作用于所有用户:

sudo vi /etc/profile
export JAVA_HOME=JDK安装路径
export PATH=$JAVA_HOME/bin:$PATH

系统调优

vim /etc/sysctl.conf
fs.file-max=65536
vm.max_map_count = 262144

vim /etc/security/limits.conf
* soft nofile 65535
* hard nofile 131072
* soft nproc 2048
* hard nproc 4096

使用的软件版本

应用安装


kafka、zookeeper集群搭建

在10.16.10.113、10.16.10.114、10.16.8.187服务器中搭建kafka集群,关闭防火墙

关闭防火墙命令:

systemctl stop firewalld

查看防火墙状态:

systemctl status firewalld

zookeeper搭建

本次直接使用kafka自带的zookeeper,不需要单独下载zookeeper

解压安装包到/usr/local/kafka目录下

vim config/zookeeper.properties

修改配置内容:

clientPort=2181
maxClientCnxns=100
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/usr/local/kafka/zookeeper/data
dataLogDir=/usr/local/kafka/zookeeper/log
server.1=10.16.10.113:12888:13888
server.2=10.16.10.114:12888:13888
server.3=10.16.8.187:12888:13888

注意:dataDir、dataLogDir文件目录需要手动创建。

三台服务器配置内容一致,需要在dataDir目录下创建myid文件,文件的内容必须与zookeeper.properties中的编号保持一致。

kafka搭建

vim config/server.properties

修改配置内容:

broker.id=1
prot = 9092
host.name = 10.16.10.113
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=/usr/local/kafka-logs
num.partitions=16
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
zookeeper.connect=10.16.10.113:2181,10.16.10.114:2181,10.16.8.187:2181
zookeeper.connection.timeout.ms=6000
group.initial.rebalance.delay.ms=0

注意:每台服务器除broker.id 和 host.name 两个属性需要修改之外,其他属性保持一致。

验证

启动zookeeper

nohup sh zookeeper-server-start ../config/zookeeper.properties &

启动kafka

nohup sh kafka-server-start ../config/server.properties &

创建topic

/usr/local/kafka/bin/kafka-topics.sh --create --zookeeper 10.16.10.113:2181,10.16.10.114:2181,10.16.8.187:2181 --replication-factor 1 --partitions 2   --topic  testtopic

查看topic

/usr/local/kafka/bin/kafka-topics.sh --zookeeper  10.16.10.113:2181,10.16.10.114:2181,10.16.8.187:2181  --list

写入消息:

命令:

/usr/local/kafka/bin/kafka-console-producer.sh --broker-list 10.16.10.113:9092 --topic testtopic

消费消息:

命令:

/usr/local/kafka/bin/kafka-console-consumer.sh --bootstrap-server   10.16.10.113:9092  --from-beginning --topic testtopic

能正常的写入消息、消费消息,kafka集群完成。

ELK 搭建


在10.16.10.113、10.16.10.114、10.16.3.165搭建elasticsearch,,注意关闭防火墙,修改系统的配置,注意es的启动必须是非root用户启动。

安装elasticsearch

解压文件到/usr/local/目录下,以10.16.3.165为主节点master

vim elasticsearch/config/elasticsearch.yml

修改配置:

###配置解释
# cluster.name 集群名称
# node.name 节点主机名
# node.master 是否参与主节点竞选
# node.data:true  指定该节点是否存储索引数据,默认为true。本例没配置,所有节点都存储

包括主节点

# discovery.zen.ping.unicast.hosts 配置上elasticsearch 集群除本机外其他机器
# cluster.initial_master_nodes 引导启动集群的机器IP或者主机名
# http.port http端口,kibana中会用到 。
# transport.tcp.port 设置节点间交互的tcp端口,默认是9300。
cluster.name: elkmaster
node.name: 10.16.3.165
node.master: true
path.logs: /usr/local/data/log/
network.host: 10.16.3.165
http.port: 9200
discovery.zen.ping.unicast.hosts: ["10.16.10.113","10.16.10.114"]
cluster.initial_master_nodes: ["10.16.3.165"]

注意:其他两台服务器,作为solver,需要修改cluster.name、node.name、network.host为自身的配置node.naster: false。最后两个属性根据服务器内容进行修改。

安装kibana

在10.16.3.165服务器上安装kibana

解压文件到/usr/local/目录下

vim kibana/config/kibana.yml

修改配置:

# i18n.locale: "zh-CN"  web界面中文
# server.port  监听端口
server.port: 5601
server.host: "10.16.3.165"
elasticsearch.hosts: ["http://10.16.3.165:9200"]
i18n.locale: "zh-CN"

验证

启动之前切换为非root用户。

启动elasticsearch:

命令:

nohup sh elasticsearch &
# 正确的用法是下面
/bin/elasticsearch -d

启动kibana

命令:

nohup sh kibana &

三台服务器访问地址ip:9200,出现如图结果说明elasticsearch启动成功

10.16.3.165访问10.16.3.165:5601,出现如下结果说明kibana启动成功

filebeat安装

在10.16.3.166服务器搭建filebeat服务

解压文件到/usr/local/目录下

vim filebeat/filebeat.yml

修改配置:

filebeat.inputs:
- type: log
  enabled: true
  paths:
    - /data/home/app/domains/cpay_domain/logs/cpay-tms-gate.log
 output.kafka:
    enable: true
    hosts: ["10.16.8.187:9092"]
    topic: es-tmslogs
    compression: gzip
max_message_bytes: 100000

注意:paths表示需要提取的日志的路径,将日志输出到kafka中,创建topic

启动filebeat:

命令:

./filebeat -e -c filebeat.yml

logstash安装

在10.16.3.165服务器搭建logstash服务

解压文件到/usr/local/目录下,创建用于本次处理的配置文件logstashfortms.conf

vim  logstash/config/logstashfortms.conf

配置内容:

input{
    kafka{
        bootstrap_servers => "10.16.10.113:9092,10.16.10.114:9092,10.16.8.187:9092"
        topics => ["es-tmslogs"]
        codec => json
    }
}
output{
    elasticsearch {
        hosts => ["10.16.3.165:9200"]
        index => "logstash-%{+YYYY.MM.dd}"
    }
}

启动logstash:

命令:

nohup sh logstash -f  ../config/logesforcpay.conf &

kibana页面操作

安装完成以后访问10.16.3.165:5601页面,选择红框中的按钮

进入索引创建模式

创建索引之后,点击红框内按钮,即可展示日志的信息,服务搭建完成。