总体流程
日志–>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