【Linux】ELK+Filebeat+Kafka+Zookeeper构建海量日志分析平台

搭建海量日志分析平台,可以完成对大规模项目的日志收集及分析等,运维人员可以直观的看到哪个服务器/集群出了什么状况。

基本架构:

由于虚拟机数量的限制,将这套架构部署在三台虚拟机上用来练习:
 

192.168.22.137filebeat+kafka+zookeeper+logstash+es
192.168.22.138filebeat+kafka+zookeeper+es
192.168.22.143filebeat+kafka+zookeeper+es+kibana

其中:

(1)filebeat:收集web服务器集群的日志

(2)kafka+zookeeper:用来做filebeat和logstash之间的数据管道,相当于在他们之间建立了一个缓冲池

(3)logstash:用于处理来自kafka的数据,将数据发送到es去

(4)es:检索及分析数据

(5)kibana:可视化平台

一,Filebeat

filebeat是轻量级的日志收集工具,只负责日志的收集与转发。

工作原理:

        filebeat启动后通过input 读取指定的日志路径

        为日志文件启动收割进程harvester,收割到的数据会发送到spooler缓冲池

        缓冲池将采集的数据统一发送给es,kafka等

关于filebeat的配置文件可以参考filebeat.yml(三台配置相同):

filebeat.prospectors:
- type: log
  enabled: true
  paths:
    - /var/log/nginx/access.log
output.kafka:
  enabled: true
  hosts: ["192.168.22.137:9092", "192.168.22.138:9092","192.168.22.143:9092"]
  topic: 'test-log'
filebeat的启动方式:
# 前台启动
./filebeat -e -c filebeat-name.yml

# 后台启动
nohup ./filebeat -e -c filebeat-name.yml &
-e : 输出到标准输出,默认输出到 syslog logs
-c : 指定配置文件

二,Zookeeper

zookeeper是一个分布式的开源协调服务,用于分布式系统的协调和管理,提供了一些分布式程序所需要的一些关键功能,包括分布式同步,状态检测等

ZooKeeper 为了保证集群中各个节点读写数据的一致性和可用性,设计并实现了ZAB 协议(原子广播协议)

一个zk集群包含一个leader和多个follower,observer(无投票权)

修改配置文件(三台相同):

[root@localhost apache-zookeeper-3.7.1-bin]# grep -Ev '^$|#' conf/zoo.cfg
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/opt/zookeeper/apache-zookeeper-3.7.1-bin/data
dataLogDir=/opt/zookeeper/apache-zookeeper-3.7.1-bin/logs
clientPort=2181
server.1=192.168.22.137:2888:38888
server.2=192.168.22.138:2888:38888
server.3=192.168.22.143:2888:38888
启动zookeeper:
# 启动
./bin/zkServer.sh start

# 查看状态
./bin/zkServer.sh status

三,Kafka

Kafka是一个分布式的消息队列系统,可以实现数据的发布和订阅,作为一个缓冲层处于生产者与消费者之间。

工作原理:

        生产者(Producers)将消息生产出来发送到指定的topic中,

        Brokers 存储来自生产者的消息,并在消费者请求时将消息提供给消费者,

        所有订阅了该 topic的消费者(Consumers)都可以接收到该 topic 下的所有消息,

修改配置文件(三台需要根据ip修改配置):

[root@localhost kafka_2.11-2.2.1]# grep -Ev '^$|#' config/server.properties
broker.id=1
listeners=PLAINTEXT://192.168.22.137:9092
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/kafka/kafka_2.11-2.2.1/logs
num.partitions=3
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=60
log.segment.bytes=1073741824
log.retention.check.interval.ms=300000
zookeeper.connect=192.168.22.137:2181,192.168.22.138:2181,192.168.22.143:2181
zookeeper.connection.timeout.ms=6000
group.initial.rebalance.delay.ms=0
启动kafka:
# 后台启动
./bin/kafka-server-start.sh -daemon config/server.properties

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

四,Logstash

logstash是收集处理转发数据工具,具有处理转换数据的功能。

工作原理:

        logstash从input获取数据,通过filters过滤转换数据,最终通过output转发输出

        

配置文件格式:

input {
  kafka {
  codec => "json"
  bootstrap_servers => "192.168.22.137:9092,192.168.22.138:9092,192.168.22.143:9092"
  topics => "test-log"
  consumer_threads => 2
  }
}

filter {
  grok{
     match => {"message" => "%{IPV4:ip}"}
  }

}

output {
  elasticsearch {
    hosts => ["192.168.22.137:9200","192.168.22.138:9200","192.168.22.143:9200"]
  }
}
logstash启动:
# 命令行方式
./logstash -e 'input{ stdin{} } output{ stdout{ codec => rubydebug } }'

# 配置文件方式

# 前台
./logstash -f logstash.conf

# 后台
nohup ./logstash -f logstash.conf &

五,Elastic Search

es是一个搜索服务器,用于检索搜索分析及存储数据

es使用倒排索引来加速查找过程

倒排索引工作流程:

倒排索引根据划分词语建立新的文档,在新的文档中查找过滤数据,找到符合的数据在原文档中的位置等,最终去原文档根据关联信息获取全部信息

1,分词:根据数据及算法构建词条

2,建立倒排表:包含刚才构建的词条,以及在原文档的位置,id等

3,索引:可以为倒排表建立索引,加速在倒排表的查找

4,返回原文档查询:根据在倒排表获取的部分id信息等,在原文档查找即可

es搭建一般为集群模式,所以需要修改配置文件(三台需要根据nodename修改配置):

[root@localhost elasticsearch-6.5.4]# grep -Ev '^$|#' config/elasticsearch.yml
cluster.name: es-clusters
node.name: node01
network.host: 0.0.0.0
http.port: 9200
discovery.zen.ping.unicast.hosts: ["192.168.22.137","192.168.22.138","192.168.22.143"]
discovery.zen.minimum_master_nodes: 2
es启动:

        es不支持root用户启动,所以需要创建普通用户启动

# 后台启动
./elasticsearch -d

六,Kibana

kibana是一个数据分析和可视化平台,只需要安装配置后即可使用
配置文件:
[root@localhost kibana-6.5.4-linux-x86_64]# grep -Ev '^$|#' config/kibana.yml
server.port: 5601
server.host: "192.168.22.143"
elasticsearch.url: "http://192.168.22.143:9200"
kibana启动:
# 前台启动
./bin/kibana

# 后台启动
nohup ./bin/kibana &

可以通过ip+端口在浏览器访问

七,项目总结:

通过搭建海量日志分析平台可以更方便快捷的掌握服务器集群的状态。使用filebeat用于收集服务集群的日志文件,将其转发到zookeeper+kafka实现的缓冲池中。通过zookeeper+kafka实现数据发布与订阅从而完成异步处理数据,logstash可以从缓冲池中没有压力的获取数据并进行过滤转换,最终将数据转发到es集群上存储,通过kibana可视化平台查找观察分析数据等。

  • 39
    点赞
  • 38
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值