总体流程

日志–>filebeat–>kafka–>logstash–>ES–>kibana

elk收集nginx日志配置_kafka


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