总体流程
日志–>filebeat–>kafka–>logstash–>ES–>kibana
1.Filebeat
- 官网下载并安装Filebeat
- 编写Filebeat配置文件:在Filebeat配置文件中指定需要收集的日志文件路径和输出方式
filebeat.inputs:
- type: log
enabled: true
paths:
- /path/to/log/file # 文件路径
fields:
type: java-log
output.kafka: # 输出方式
hosts: ["192.168.96.131:9092"]
topic: "my-topic"
指定需要收集的日志文件路径和输出方式。Filebeat将从指定路径中读取日志文件,并将日志数据发送到Kafka的my-topic主题中。
- 配置Java应用程序:在Java应用程序中添加Log4j或Logback等日志框架,并将日志输出到指定的日志文件中
- 启动Filebeat服务,让它开始收集日志并将日志数据发送到Kafka中
[root@elktest1 filebeat-7.8.0-linux-x86_64]# nohup ./filebeat -e -c filebeat.yml &
- 在Kafka中查看收集到的日志数据,并在Elasticsearch和Kibana中进行搜索和分析
2.Kafka
- 官网下载kafka(注:因 Kafka 依赖于zookeeper,如果想要使用 Kafka,就必须安装 ZK,Kafka 中的消费偏置信息、Kafka集群、topic信息会被存储在 ZK 中,新版本的 kafka 自带有 zookeeper)
- 修改zk配置文件zookeeper.properties,指定Zookeeper的数据目录和端口号等信息
[root@elktest2 config]# vim /usr/local/elk/kafka_2.13-2.6.0/config/zookeeper.properties
# 添加如下配置
dataDir=/opt/data/zookeeper/data
dataLogDir=/opt/data/zookeeper/logs
clientPort=2181
tickTime=2000 # 心跳间隔时间,每隔两秒发送一个心跳
initLimit=20 # Leader - Fllower 初始通信时限,表示20个心跳间隔
syncLimit=10 # Leader - Follower同步通信时限,表示10个心跳间隔,即tickTime*10
# 设置 broker id 的服务地址
server.1=192.168.96.131:2888:3888 # kafka 集群 IP:Port
# 修改主机 zookeeper 配置
# 创建 data、log 目录
[root@elktest2 config]# mkdir -p /opt/data/zookeeper/{data,logs}
# 创建 myid 配置文件,写入服务 broker.id 的属性值
[root@elktest2 config]# echo 1 > /opt/data/zookeeper/data/myid # myid号按顺序排
kafka1 echo 1 > /opt/data/zookeeper/data/myid
- 修改kafka配置文件server.properties
# 加入如下配置信息
[root@elktest2 config]# vim /usr/local/elk/kafka_2.13-2.6.0/config/server.properties # 在最后添加
broker.id=1
listeners=PLAINTEXT://192.168.96.131:9092 # 注意!! 此处 ip 地址为每台主机的本机 IP
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=/opt/data/kafka/logs
num.partitions=6 # 分区数量
num.recovery.threads.per.data.dir=1
offsets.topic.replication.factor=2
transaction.state.log.replication.factor=1
transaction.state.log.min.isr=1
log.retention.hours=168
log.segment.bytes=536870912
log.retention.check.interval.ms=300000
zookeeper.connect=192.168.96.131:2181
zookeeper.connection.timeout.ms=6000
group.initial.rebalance.delay.ms=0
创建 kafka 日志文件目录
[root@elktest2 config]# mkdir -p /opt/data/kafka/log
Kafka 节点按以上步骤依次配置
- 启动ZK
[root@elktest2 config]# cd /usr/local/elk/kafka_2.13-2.6.0
[root@elktest2 kafka_2.13-2.6.0]# nohup bin/zookeeper-server-start.sh config/zookeeper.properties &
- 启动Kafka(说明:启动Kafka之前,请确保已经启动 ZK,否则Kafka会报错而导致无法启动。)
[root@elktest2 ~]# cd /usr/local/elk/kafka_2.13-2.6.0/
[root@elktest2 kafka_2.13-2.6.0]# nohup bin/kafka-server-start.sh config/server.properties &
- 创建Kafka主题
[root@elktest2 kafka_2.13-2.6.0]# bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic log-topic
Created topic log-topic.
3.Logstash
- 官网下载Logstash
- 设置配置文件
[root@elktest2 logstash-7.8.0]# mkdir -p /usr/local/elk/logstash-7.8.0/etc/conf.d
[root@elktest2 logstash-7.8.0]# cd /usr/local/elk/logstash-7.8.0/etc/conf.d/
[root@elktest2 conf.d]# vim kafka-input.conf
# 加入以下内容
input {
kafka {
type => "kafka-input_log"
client_id => "kafka-input_cli"
group_id => "kafka-input_grp"
topics => "log-topic"
bootstrap_servers => "192.168.96.131:9092"
}
}
output {
stdout {codec => rubydebug}
elasticsearch {
hosts => ["http://192.168.96.131:9200"]
index => "%{type}"
}
}
- 启动Logstash
[root@elktest2 ~]# cd /usr/local/elk/logstash-7.8.0/
[root@elktest2 logstash-7.8.0]# nohup bin/logstash -f etc/conf.d/test-tmp.conf --config.reload.automatic &
--config.reload.automatic
选项的意思是启用自动配置加载,以至于每次修改完配置文件以后无需停止然后重启Logstash
4.ElasticSearch
- 配置JDK环境(es 要依赖与 java 环境运行)
- 下载和安装Elasticsearch
- 找到 config 目录下的 elasticsearch.yml 文件,修改配置
cluster.name: es-application
node.name: node-1
#对所有 IP 开放
network.host: 0.0.0.0
#HTTP 端口号
http.port: 9200
#ElasticSearch 数据文件存放目录
path.data: /usr/elasticsearch-7.9.3/data
#ElasticSearch 日志文件存放目录
path.logs: /usr/elasticsearch-7.9.3/logs
- 配置完之后,因为 ElasticSearch 使用非 root 用户启动,所以创建一个用户
# 创建用户
useradd yehongzhi
# 设置密码
passwd yehongzhi
# 赋予用户权限
chown -R yehongzhi:yehongzhi /usr/elasticsearch-7.9.3/
- 然后切换用户,启动。
# 切换用户
su yehongzhi
# 启动 -d 表示后台启动
./bin/elasticsearch -d
5.Kibana
- 官网下载压缩包,然后解压
- 找到 /config 目录下的 kibana.yml 文件,修改配置
server.port: 5601
server.host: "192.168.96.131"
elasticsearch.hosts: ["http://192.168.96.131:9200"]
- 和 ElasticSearch 一样,不能使用 root 用户启动,需要创建一个用户
# 创建用户
useradd kibana
# 设置密码
passwd kibana
# 赋予用户权限
chown -R kibana:kibana /usr/kibana/
- 启动服务(启动 Kibana前,需确保 ES 至少有一台可用)
#切换用户
su kibana
#非后台启动,关闭 shell 窗口即退出
./bin/kibana
#后台启动
nohup ./bin/kibana &
启动步骤
启动ES–>启动Kibana–>启动Kafka–>启动Logstash–>启动Filebeat