欢迎您访问365答案网,请分享给你的朋友!
生活常识 学习资料

docker部署elk+kafka

时间:2023-07-16

安装所需包docker pull elasticsearch:7.17.0docker pull kibana:7.17.0docker pull logstash:7.17.0docker pull elastic/filebeat:7.17.0docker pull wurstmeister/kafkadocker pull wurstmeister/zookeeper步骤一、优化系统参数vi /etc/security/limits.conf ---在文件最后面添加如下内容* soft nofile 65536* hard nofile 131072* soft nproc 2048* hard nproc 4096# vi /etc/sysctl.confvm.max_map_count=655360# sysctl -pvm.max_map_count = 655360步骤二、Docker搭建es,kibana(详情请看之前文案)docker run --restart=always --name es01 -p 9200:9200 -p 9300:9300 --net mynetwork --ip 172.18.0.4 -e ES_JAVA_OPTS="-Xms512m -Xmx512m" -v /kdata/elasticsearch/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml -v /kdata/elasticsearch/data:/usr/share/elasticsearch/data -v /kdata/elasticsearch/plugins:/usr/share/elasticsearch/plugins -v /kdata/elasticsearch/logs:/usr/share/elasticsearch/logs -d elasticsearch:7.17.0docker run --restart=always --name kibana -p 5601:5601 -e TZ="Asia/Shanghai" -e "I18N_LOCALE=zh-CN" --net mynetwork --ip 172.18.0.5 -v /kdata/kibana/config/kibana.yml:/usr/share/kibana/config/kibana.yml -d kibana:7.17.0步骤三、Docker运行Kafka、Zookeeper1、拉取镜像# docker pull wurstmeister/kafka# docker search zookeeper2、启动容器首先启动zookeeper# docker run --restart=always --name zookeeper --net mynetwork --ip 172.18.0.2 -p 2181:2181 -v /etc/localtime:/etc/localtime -d wurstmeister/zookeeper 然后再启动Kafka#docker run --restart=always -d --name kafka --net mynetwork --ip 172.18.0.3 -p 9092:9092 -e KAFKA_BROKER_ID=0 -e KAFKA_ZOOKEEPER_CONNECT=192.168.20.100:2181 -e KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://192.168.20.100:9092 -e KAFKA_LISTENERS=PLAINTEXT://0.0.0.0:9092 -v /etc/localtime:/etc/localtime -t wurstmeister/kafkadocker run --restart=always -d --name kafka --net mynetwork --ip 172.18.0.3 -p 9092:9092 -e KAFKA_BROKER_ID=0 -e KAFKA_ZOOKEEPER_CONNECT=192.168.20.101:2181 -e KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://192.168.20.101:9092 -e KAFKA_LISTENERS=PLAINTEXT://0.0.0.0:9092 -v /etc/localtime:/etc/localtime -t wurstmeister/kafkadocker run --restart=always -d --name kafka --net mynetwork --ip 172.18.0.3 -p 9092:9092 -e KAFKA_BROKER_ID=0 -e KAFKA_ZOOKEEPER_CONNECT=192.168.20.102:2181 -e KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://192.168.20.102:9092 -e KAFKA_LISTENERS=PLAINTEXT://0.0.0.0:9092 -v /etc/localtime:/etc/localtime -t wurstmeister/kafka# -e KAFKA_BROKER_ID=0 在kafka集群中,每个kafka都有一个BROKER_ID来区分自己# -e KAFKA_ZOOKEEPER_ConNECT=1192.168.20.100:2181/kafka 配置zookeeper管理kafka的路径# -e KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://192.168.20.100:9092 把kafka的地址端口注册给zookeeper# -e KAFKA_LISTENERS=PLAINTEXT://0.0.0.0:9092 配置kafka的监听端口# -v /etc/localtime:/etc/localtime 容器时间同步虚拟机的时间docker logs -f --tail=1000 kafkacd /opt/kafka_2.13-2.8.1/bin可为集群之外的客户端链接–env KAFKA_ADVERTISED_HOST_NAME=kafka所在宿主机的IP (一定要是公网ip,否则远程是无法操作kafka的,kaka tools也是无法使用的,如果仅仅紧紧集群服务器间通信可以 设置 内网IP),中间的kafka所在宿主机的IP,如果不这么设置,可能会导致在别的机器上访问不到kafka。3、验证kafka是否可以使用# docker exec -it kafka bashcd /opt/kafka_2.13-2.8.1/bin运行kafka生产者发送消息./kafka-console-producer.sh --broker-list localhost:9092 --topic sun >cc #手动输入>kk>{"datas":[{"channel":"","metric":"temperature","producer":"ijinus","sn":"IJA0101-00002245","time":"1543207156000","va运行kafka消费者接收消息./kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic sun --from-beginning kkcckk{"datas":[{"channel":"","metric":"temperature","producer":"ijinus","sn":"IJA0101-00002245","time":"1543207156000","vakafka可视化工具kafka tool:https://www.kafkatool.com/download.html步骤四、安装filebeatcd /kdata/filebeat/vi filebeat.yml#添加信息:- type: log enabled: true paths: - /root/a.log #测试日志文件 - /var/path2/*.log#output.elasticsearch: #添加注释 # Array of hosts to connect to. # hosts: ["localhost:9200"] output.kafka: enabled: true hosts: ["192.168.20.100:9092"] topic: "kk_consumer" compression: gzip max_message_bytes: 100000000# nohup ./filebeat -e -c filebeat.yml &#执行docker run --name filebeat --user=root --net elasticsearch_default -v /var/log/nginx/:/var/log/nginx/ -v /kdata/filebeat/filebeat.yml:/usr/share/filebeat/filebeat.yml:ro -v /var/lib/docker/containers:/var/lib/docker/containers:ro -v /var/run/docker.sock:/var/run/docker.sock:ro -d elastic/filebeat:7.17.0步骤五、运行logstashcd /kdata/logstashvi logstash.yml ##新建文件,添加如下两行:##注意这行是表示容器里面配置文件的路径,照写就行,不要写成自己本地新建的路径,这里博主踩坑花了很长时间 path.config: /usr/share/logstash/conf.d/*.conf path.logs: /var/log/logstashcd /kdata/logstash/conf.dvi mylogstash.conf#测试内容如下:input { beats { port => 5044 codec => "json"}}output { elasticsearch { hosts => ["192.168.20.100:9200","http://192.168.20.101:9200","http://192.168.20.102:9200"] index => "nginx-access-log-%{+YYYY.MM.dd}"} stdout { codec => rubydebug }}#执行docker run --restart=always -it --name logstash -p 5044:5044 --net mynetwork --ip 172.18.0.3 -v /kdata/logstash/logstash.yml:/usr/share/logstash/config/logstash.yml -v /kdata/logstash/conf.d/:/usr/share/logstash/conf.d/ -d logstash:7.17.0#查看日志docker logs -f logstash#进入logstash容器docker exec -it logstash bash####################################################filebeat.yml 配置文件的编写filebeat.inputs:- type: log # 是否启动 enabled: true encoding: "utf-8" # 从那个路径收集日志,如果存在多个 input ,则这个 paths 中的收集的日志最好不要重复,否则会出现问题 # 日志路径可以写通配符 paths: - "/Users/huan/soft/elastic-stack/filebeat/filebeat/springboot-admin.log" # 如果日志中出现了 DEBUG 的字样,则排除这个日志 exclude_lines: - "DEBUG" # 添加自定义字段 fields: "application-servic-name": "admin" # fields 中的字段不放在根级别 ,true表示放在根级别 fields_under_root: false # 添加一个自定义标签 tags: - "application-admin" # 多行日志的处理,比如java中的异常堆栈 multiline: # 正则表达式 pattern: "^[+" # 是否开启正则匹配,true:开启,false:不开启 negate: true # 不匹配正则的行是放到匹配到正则的行的after(后面)还是before(前面) match: after # 多行日志结束的时间,多长时间没接收到日志,如果上一个是多行日志,则认为上一个结束了 timeout: 2s # 使用es的ignes node 的pipeline处理数据,这个理论上要配置到output.elasticsearch下方,但是测试的时候发现配置在output.elasticsearch下方不生效。 pipeline: pipeline-filebeat-springboot-admin # 配置索引模板的名字和索引模式的格式setup.template.enabled: falsesetup.template.name: "template-springboot-admin"setup.template.pattern: "springboot-admin-*"# 索引的生命周期,需要禁用,否则可能无法使用自定义的索引名字setup.ilm.enabled: false# 数据处理,如果我们的数据不存在唯一主键,则使用fingerprint否则可以使用add_id来实现processors: # 指纹,防止同一条数据在output的es中存在多次。(此处为了演示使用message字段做指纹,实际情况应该根据不用的业务来选择不同的字段) - fingerprint: fields: ["message"] ignore_missing: false target_field: "@metadata._id" method: "sha256"# 输出到es中output.elasticsearch: # es 的地址 hosts: - "http://localhost:9200" - "http://localhost:9201" - "http://localhost:9202" username: "elastic" password: "123456" # 输出到那个索引,因为我们这个地方自定义了索引的名字,所以需要下方的 setup.template.[name|pattern]的配置 index: "springboot-admin-%{[agent.version]}-%{+yyyy.MM.dd}" # 是否启动 enabled: true

Copyright © 2016-2020 www.365daan.com All Rights Reserved. 365答案网 版权所有 备案号:

部分内容来自互联网,版权归原作者所有,如有冒犯请联系我们,我们将在三个工作时内妥善处理。