基于docker搭建单机版ELK+filebeat+kafka

上一节写了最简单架构的搭建和日志采集:传送门

主要有这几种架构方式

1. Elasticsearch + Logstash + Kibana

每台机器(客户端)上部署Logstash,logstash收集了数据直接往es里面写,es分析日志,kibana查询es的数据做展示。

这是一种最简单的架构。这种架构虽然是官网介绍里的方式,但是往往在生产中很少使用。因为这样要在每台机器上都部署logstash,资源消耗比较大。

2. Elasticsearch + Logstash + filebeat + Kibana

每台机器(客户端)上部署filebeat收集数据,filebeat往1台logstash里面写,logstash往es里面写,es分析日志,kibana查询es的数据做展示。

与上一种架构相比,这种架构增加了一个filebeat模块。filebeat是一个轻量的日志收集代理,优势是消耗非常少的资源(较logstash), 所以生产中,往往会采取这种架构方式,但是这种架构有一个缺点,当logstash出现故障, 会造成日志的丢失。

3.  Elasticsearch + Logstash + filebeat + kafka(也可以是其他中间件,比如RabbitMQ) + Kibana

每台机器(客户端)上部署filebeat收集数据,filebeat往消息中间件集群写,1台logstash消费消息中间件集群然后往es里面写,es分析日志,kibana查询es的数据做展示。

这种架构是上面那个架构的完善版,通过增加中间件,来避免数据的丢失。当Logstash出现故障,日志还是存在中间件中,当Logstash再次启动,则会读取中间件中积压的日志。
 本节还是基于上一节的简单架构增加 filebeat和kafka组件完善

1. 下载镜像

# zookeeper镜像
docker pull wurstmeister/zookeeper
# kafka镜像
docker pull wurstmeister/kafka

2. 启动ZK

docker run -d --name zookeeper -p 2181:2181 wurstmeister/zookeeper

3. 启动kafka

docker run -d --name kafka \
--env KAFKA_ADVERTISED_HOST_NAME=localhost \
--env KAFKA_ZOOKEEPER_CONNECT=10.33.2.23:2181 \
--env KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://10.33.2.23:9092 \
--env KAFKA_LISTENERS=PLAINTEXT://0.0.0.0:9092 \
--env KAFKA_HEAP_OPTS="-Xmx256M -Xms128M" \
--net=host wurstmeister/kafka

10.33.2.23 是服务器ip

4. 验证kafka是否生效

进入kafka容器

docker exec -it kafka /bin/bash

cd /opt/kafka_2.12-2.2.0/bin/


新建一个test主题,并以生产者身份进行消息生产

./kafka-topics.sh --create --zookeeper 10.30.2.222:2181 --replication-factor 1 --partitions 1 --topic test
./kafka-console-producer.sh --broker-list 10.30.2.222:9092 --topic test
>hello # 发送一条消息并回车
>world

打开一个新的ssh连接,同样进入kafka容器,模拟消费者接收消息

docker exec -it kafka /bin/bash

cd /opt/kafka_2.12-2.2.0/bin/
# 以消费者身份接收消息
./kafka-console-consumer.sh --bootstrap-server 10.30.2.222:9092 --topic test --from-beginning
hello # 成功接收到消息
world

5. 安装Filebeat

docker pull elastic/filebeat:6.4.1     #拉取镜像

启动filebeat

docker run -d --name=filebeat elastic/filebeat:6.4.1

拷贝文件赋予权限,/home/images/elk_single/filebeat/为自己新建的文件夹,自行修改

docker cp filebeat:/usr/share/filebeat /home/images/elk_single/filebeat/

chmod 777 -R  /home/images/elk_single/filebeat

chmod go-w /home/images/elk_single/filebeat/filebeat/filebeat.yml 

修改配置文件filebeat.yml ,/home/application/logs/springboot.log为宿主机日志路径,

topic: 'elk-%{[fields][log_topics]}' , 则是输出的topic的名称 例如对于第一个则topic的名称为

elk-springboot-test-application

filebeat.inputs:
- type: log
  enabled: true
  paths:
    - /home/application/logs/springboot.log
  fields:
    log_topics: springboot-test-application
- type: log
  enabled: true
  paths:
    - /home/image/nginx/access.log
  fields:
    log_topics: nginx  

output.kafka:
  hosts: ["10.1.2.3:9200"]
  topic: 'elk-%{[fields][log_topics]}'

启动filebeat,将要收集的日志目录从外面挂进来

docker run -d --name=filebeat -v /home/images/elk_single/filebeat/filebeat:/usr/share/filebeat -v /home/application/logs/:/home/application/logs elastic/filebeat:6.4.1

修改logstash配置文件,input设置为kafka输入

input {
  kafka{
    bootstrap_servers => "10.1.2.3:9092"
    topics_pattern  => "elk-.*"
    consumer_threads => 5
    decorate_events => true
    codec => "json"
    auto_offset_reset => "latest"
  }
}
output {
  elasticsearch {
    hosts => "es:9200"
    index => "logstash-%{+YYYY.MM.dd}"
  }
}

然后向日志文件里加东西试试,启动一个kafka的消费者消费到就成功了

echo "我是日志" >> /home/application/logs/springboot.log 

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
ELK(Elasticsearch、Logstash、Kibana)是一个开源的日志管理和分析平台,能够帮助企业收集、存储、搜索、分析和可视化各种类型的日志数据。而Kafka是一个高吞吐量的分布式消息队列系统,可以用来收集和传输大规模的日志数据。Reyslog是一个开源的日志收集器,可以帮助企业从各种不同的数据源中收集日志数据。Filebeat是一个轻量级的日志收集工具,可以帮助企业从各种不同的文件中收集日志数据。 以下是ELK+kafka+reyslog+filebeat企业级部署的步骤: 1. 安装和配置Elasticsearch、Logstash和Kibana,并确保它们能够正常运行。可以使用docker-compose等工具来简化部署过程。 2. 安装和配置Kafka,并创建一个主题(topic)用于存储日志数据。 3. 安装和配置Reyslog,并将其配置为从各种不同的数据源中收集日志数据,并将其发送到Kafka主题(topic)中。 4. 安装和配置Filebeat,并将其配置为从各种不同的文件中收集日志数据,并将其发送到Kafka主题(topic)中。 5. 在Kibana中创建一个索引(index),并定义一个包含所有必需字段的映射(mapping)。然后,使用Logstash来将从Kafka主题(topic)中接收到的日志数据转换为适合索引(index)的格式,并将其存储在Elasticsearch中。 6. 在Kibana中创建一个仪表板(dashboard),并使用其可视化功能来呈现和分析日志数据。可以使用各种不同的可视化插件来创建自定义可视化效果。 7. 部署整个系统,并定期监控其性能和可用性,以确保其正常运行。 总之,ELK+kafka+reyslog+filebeat企业级部署需要进行一系列复杂的配置和设置,需要具备一定的技术知识和实践经验。建议企业可以考虑使用专业的日志管理和分析平台,如Splunk等,以简化部署和管理过程。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值