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 是否参与主节点竞选
true 指定该节点是否存储索引数据,默认为true。本例没配置,所有节点都存储 node.data:
包括主节点
# 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
修改配置:
:
type: log
enabled: true
paths:
/data/home/app/domains/cpay_domain/logs/cpay-tms-gate.log
:
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页面,选择红框中的按钮
进入索引创建模式
创建索引之后,点击红框内按钮,即可展示日志的信息,服务搭建完成。
文章不错?点个【在看】吧! ?