基于docker的ELK+filebeat+kafka环境部署

news/2024/11/8 12:18:11/

基于docker的ELK+filebeat+kafka环境部署

  • ELK以及常用模式
  • 环境部署
    • 一、docker
    • 二、centos
    • 三、kafka
    • 四、filebeat(centos容器中)
    • 五、logstash
    • 六、elasticsearch(es)
    • 七、kibana
    • 八、最后走一遍过程
    • 九、docker-compose和dockerfile

ELK以及常用模式

什么是elk以及常用模式

环境部署

顺序:和log走向一直filebeat->kafka->logstash

filebeat
kafka
logstash
es
kibana

环境:centos7虚拟机(首先要关闭防火墙,然后要关闭防火墙,最后关闭防火墙)
centos6.x用的是iptable,centos7.x用的是firewall
不关闭防火墙会导致容器之间不能通讯

一、docker

1、安装docker

yum install docker -y

2、启动docker

systemctl start docker

二、centos

  1. 拉取centos镜像
    产生的log文件和filebeat运行在这个centos容器中
    拉取镜像:
docker pull centos

完成之后可以使用docker images查看镜像情况

  1. 制作centos容器
docker run -itd --name centos --privileged=true centos /sbin/init

这里需要使用–privileged=true获得root权限,才能使用systemctl等指令
使用docker ps查看容器情况

三、kafka

主要参考了这篇文章
快速搭建kafka集群

可以再通过python操作一次kafka确定是可以正常工作的,同时要开启一个终端运行kafka的消费者脚本

from kafka import KafkaProducer
producer = KafkaProducer(bootstrap_servers='10.211.55.4:32771')  # 连接kafka
msg = "hello python kafka"".encode('utf-8')  
producer.send('mykafka', msg)
producer.close()

遇到的坑:

  1. 创建容器,创建kafka的topic一切顺利,就是在生产者生产消息的时候报LEADER_NOT_AVALIBLE的错误,找了很多资料,无果。最后发现其实就是防火墙的问题,因为kafka基于zookeeper,需要在集群之间通讯。
  2. 在把防火墙设置为开机关闭后,重启虚拟机之后启动kafka容器,又报/var/run/docker.sock权限不足的问题,找了很多原因,也无果,回忆了一下,也就做了关闭防火墙这个操作,于是把防火墙又打开,重新创建了容器,又好了,具体为什么还不太清楚。

四、filebeat(centos容器中)

进入centos容器:

docker exec -it --privileged=true centos /bin/bash

安装wget:

yum install wget -y

在elastic官网找到下载地址

进入自己filebeat的目录
wget https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-7.9.3-linux-x86_64.tar.gz

解压即安装
配置(.yml)如下:

filebeat.inputs:
- type: logenabled: truepaths:- /usr/log/elk.log
output.kafka:hosts: ["10.211.55.4:32770","10.211.55.4:32771","10.211.55.4:32769"]topic: 'mykafka'
  1. 默认的output是elasticsearch,需要注释掉
  2. output.kafka里的hosts的ip就是虚拟机的ip,端口需要在虚拟机上docker ps看一下映射的端口,这个端口可能根据kafka启动的情况变动,一定要注意,不然也会报错。后续应该要改一下这个端口映射,不可能一直修改配置。

配置完成之后启动filebeat

./filebeat -e -c filebeat.yml

然后向日志文件里加东西试试

echo "filebeat test" >> /usr/log/elk.log

kafka这边的消费者终端能收到东西就说明filebeat到kafka这里是好了

五、logstash

  1. 拉取logstash镜像
    logstash的镜像没法直接pull logstash来拉取
    我们在dockerhub中找到需要的版本,找到对应的dockerfile中的版本全名,如:docker.elastic.co/logstash/logstash:7.9.3
docker pull docker.elastic.co/logstash/logstash:7.9.3

完成之后可以使用docker images查看镜像情况

  1. 制作logstash容器
docker run -itd -p 5044:5044 -p 5045:5045 --name logstash -e ES_JAVA_OPTS="-Xms1G -Xmx1G" logstash:7.9.3

使用docker ps查看容器情况

进入logstash容器修改配置文件(也可以通过映射文件,在外面直接修改然后再启动容器)

logstash.yml:

http.host: "0.0.0.0"
xpack.monitoring.elasticsearch.hosts: [ "http://10.211.55.4:9200" ]

elk.config:

input {kafka {bootstrap_servers => ["10.211.55.4:32771,10.211.55.4:32769,10.211.55.4:32770"]consumer_threads => 1topics => ["mykafka"]auto_offset_reset => "earliest"auto_commit_interval_ms => 1000}
}
output {stdout{}elasticsearch {hosts => "http://10.211.55.4:9200"index => "%{[@metadata][beat]}-%{[@metadata][version]}-%{+YYYY.MM.dd}"#user => "elastic"#password => "changeme"}
}

测试阶段可以在input里面加一个stdin{},可以通过控制台输入

启动logstash:

bin/logstash -f config/elk.config

可能会遇到这个报错

Logstash could not be started because there is already another instance using the 
configured data directory.  If you wish to run multiple instances, you must changethe "path.data" setting.

到data目录下删除.lock文件即可

六、elasticsearch(es)

es的镜像没法直接pull elasticsearch来拉取
我们在dockerhub中找到需要的版本,找到对应的dockerfile中的版本全名,如:docker.elastic.co/elasticsearch/elasticsearch:7.9.3

docker pull docker.elastic.co/elasticsearch/elasticsearch:7.9.3

创建需要挂载的文件夹和配置文件

mkdir -p /opt/es/config
mkdir -p /opt/es/data
echo "http.host: 0.0.0.0" >> /opt/es/config/elasticsearch.yml
docker run --name es --privileged=true -p 9200:9200 -p 9300:9300-e "discovery.type=single-node" -e ES_JAVA_OPTS="-Xms64m -Xmx128m" -v /opt/es/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml -v /opt/es/data:/usr/share/elasticsearch/data -v /opt/es/plugins:/usr/share/elasticsearch/plugins -d docker.elastic.co/elasticsearch/elasticsearch:7.9.3 /usr/sbin/init
  1. 要注意一点,这些相关的文件夹和elasticsearch.yml一定要自己创建出来,不然docker会帮你创建一个叫elasticsearch.yml的文件夹,又报一些莫名其妙的错误
  2. data文件夹需要给权限chmod -R 777不然没法创建下面相应的文件夹,大概就是会报node之类的文件夹没权限

其他没什么了,可以直接访问9200端口看看能不能用

七、kibana

和es一样,拉镜像,建容器

docker pull docker.elastic.co/kibana/kibana:7.9.3
docker run -d --restart=always --log-driver json-file 
--log-opt max-size=100m --log-opt max-file=2 --name xinyar-kibana -p 5601:5601 
-v /opt/elk/kibana.yml:/usr/share/kibana/config/kibana.yml 
docker.elastic.co/kibana/kibana::7.9.3

也是直接浏览器访问5601端口即可,需要添加一些索引搜索之类的,需要自己研究一下,写起来比较麻烦,略过。

八、最后走一遍过程

filebeat加入日志

echo "elktest" >> /usr/log/elk.log

kafka消费:

bash-4.4# kafka-console-consumer.sh --bootstrap-server kafka_kafka-cluster_1:9092 from-beginning --topic mykafka
{"@timestamp":"2020-11-04T11:14:13.688Z","@metadata":{"beat":"filebeat","type":"_doc","version":"7.9.3"},"input":{"type":"log"},"agent":{"type":"filebeat","version":"7.9.3","hostname":"a630f42b741e","ephemeral_id":"fa366576-e93b-4c97-bda3-8ee53078552a","id":"b523dfc7-956b-4b17-a272-50befeccbd38","name":"a630f42b741e"},"ecs":{"version":"1.5.0"},"host":{"hostname":"a630f42b741e","architecture":"x86_64","os":{"name":"CentOS Linux","kernel":"3.10.0-1127.el7.x86_64","codename":"Core","platform":"centos","version":"8 (Core)","family":"redhat"},"id":"a630f42b741edd05d37d5cf9bb264c66","containerized":true,"ip":["172.17.0.3","fe80::42:acff:fe11:3"],"name":"a630f42b741e","mac":["02:42:ac:11:00:03"]},"message":"elktest","log":{"file":{"path":"/usr/log/elk.log"},"offset":6}}

logstash的stdout:

{"@timestamp" => 2020-11-04T11:14:16.176Z,"@version" => "1","message" => "{\"@timestamp\":\"2020-11-04T11:14:13.688Z\",\"@metadata\":{\"beat\":\"filebeat\",\"type\":\"_doc\",\"version\":\"7.9.3\"},\"input\":{\"type\":\"log\"},\"agent\":{\"type\":\"filebeat\",\"version\":\"7.9.3\",\"hostname\":\"a630f42b741e\",\"ephemeral_id\":\"fa366576-e93b-4c97-bda3-8ee53078552a\",\"id\":\"b523dfc7-956b-4b17-a272-50befeccbd38\",\"name\":\"a630f42b741e\"},\"ecs\":{\"version\":\"1.5.0\"},\"host\":{\"hostname\":\"a630f42b741e\",\"architecture\":\"x86_64\",\"os\":{\"name\":\"CentOS Linux\",\"kernel\":\"3.10.0-1127.el7.x86_64\",\"codename\":\"Core\",\"platform\":\"centos\",\"version\":\"8 (Core)\",\"family\":\"redhat\"},\"id\":\"a630f42b741edd05d37d5cf9bb264c66\",\"containerized\":true,\"ip\":[\"172.17.0.3\",\"fe80::42:acff:fe11:3\"],\"name\":\"a630f42b741e\",\"mac\":[\"02:42:ac:11:00:03\"]},\"message\":\"elktest\",\"log\":{\"file\":{\"path\":\"/usr/log/elk.log\"},\"offset\":6}}"
}

最后就是kibana的web界面,内容都差不多,截图不太方便,就不发了

九、docker-compose和dockerfile

后续看看能不能把这些合并起来


http://www.ppmy.cn/news/172091.html

相关文章

ctfshow 密码挑战(上)

由于题目有点小难&#xff0c;老攒着不发我很难受&#xff0c;拆成上下两篇 我真聪明 目录 真Beginner Lousy RSA Not That Right Use so Damn big e? Hammingway 真Beginner assert(len(open(flag.txt, rb).read()) < 50) assert(str(int.from_bytes(open(flag.txt,…

Android最新的各个分支版本号(2013-10-27)

用如下命令&#xff0c;可以获取android最新的各个分支版本号&#xff1a; gaojsubuntu:~$ git ls-remote --tags https://android.googlesource.com/platform/manifest 返回结果如下&#xff1a; 94a37a478df450531a31d3cc8529c58a798066e2 refs/tags/android-1.6_r1.1_ 93b16…

OpenStack 虚拟机冷/热迁移的实现原理与代码分析

目录 文章目录 目录前文列表冷迁移代码分析(基于 Newton)Nova 冷迁移实现原理热迁移代码分析Nova 热迁移实现原理向 libvirtd 发出 Live Migration 指令监控 libvirtd 的数据迁移状态NUMA 亲和、CPU 绑定、SR-IOV 网卡的热迁移问题最后参考资料前文列表 《OpenStack 虚拟机的…

Zsh与Oh-My-Zsh的安装与设置

zsh是linux下一个强大的终端&#xff0c;但是ubuntu默认的终端是bash。ohmyzsh是基于zsh的一个扩展工具集&#xff0c;提供了丰富的扩展功能。 安装Zsh sudo apt-get install zsh查看当前系统已经安装了那些终端&#xff0c;如果有 /bin/zsh 这个默认终端&#xff0c;我们就下…

Docker Review - Docker 概念 入门篇

文章目录 PreWhats Docker ?Why Docker ?Docker vs VM常用概念安装Docker1. 查看服务器信息2. 卸载旧的版本3. 依赖的安装包4. 设置国内镜像地址5. 更新yum软件包索引6. 安装docker7. 启动Docker8. 查看docker version9. docker hello world10. 查看下载的镜像11. 卸载Docker…

ext4 extent详解3之内核源码流程讲解

本文在前两篇《ext4 extent详解1之示意图演示》和《ext4 extent详解2之内核源码详解》讲解ext4 extent 文章的基础上&#xff0c;本文从内核源码、实例演示等角度详细介绍ext4 extent B树的形成过程&#xff0c;希望看过本文的读者能理解ext4 extent B树的工作原理。 1 &#…

OpenStack 虚拟机冷/热迁移功能实践与流程分析

目录 文章目录 目录前文列表官方文档虚拟机迁移的应用场景需要迁移的虚拟机数据类型虚拟机迁移的存储场景文件存储块存储非共享存储迁移的类型迁移的方式执行虚拟机冷迁移冷迁移日志分析执行虚拟机热迁移热迁移日志分析问题:Live migration failed with error: Unable to find…

Error response from daemon:###unable to delete ### (must be forced) - image is being used by stopped

具体错误&#xff1a;Error response from daemon: conflict: unable to delete f2e2f7b8308b (must be forced) - image is being used by stopped container 51d010d3b755 错误解析&#xff1a;这是由于要删除的目标镜像中有容器存在&#xff0c;故无法删除镜像 解决办法&a…