前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >docker安装ELK详细步骤

docker安装ELK详细步骤

作者头像
小炜同学
发布于 2022-09-23 02:47:51
发布于 2022-09-23 02:47:51
2.4K00
代码可运行
举报
文章被收录于专栏:Java领域客栈Java领域客栈
运行总次数:0
代码可运行

该文档适用所有版本的安装

简介

ELK主要由ElasticSearchLogstashKibana三个开源软件组成。

  • Elasticsearch :分布式搜索引擎。具有⾼可伸缩、⾼可靠、易管理等特点。可以⽤于全⽂检索、结构化检索和分析,并能将这三者结合起来。Elasticsearch 是⽤Java 基于 Lucene 开发,现在使⽤最⼴的开源搜索引擎之⼀,Wikipedia 、StackOverflow、Github 等都基于它来构建⾃⼰的搜索引擎。在elasticsearch中,所有节点的数据是均等的。
  • Logstash :数据收集处理引擎。⽀持动态的从各种数据源搜集数据,并对数据进⾏过滤、分析、丰富、统⼀格式等操作,然后存储以供后续使⽤。
  • Kibana :可视化化平台。它能够搜索、展示存储在 Elasticsearch 中索引数据。使⽤它可以很⽅便的⽤图表、表格、地图展示和分析数据。

安装ELK

版本说明:Elasticsearch、Logstash、Kibana、Filebeat安装的版本号必须全部⼀致,不然会出现kibana⽆法显示web⻚⾯。

Elasticsearch与JDK版本要求:https://www.elastic.co/cn/support/matrix#matrix_jvm

镜像版本:https://hub.docker.com/_/elasticsearch

哪个版本?直接最新,反正领导发话了,我丝毫不慌。问题来了,那是生产环境,如果真出问题了,我小命还有不,算了不管了

温馨提示:如果操作系统版本不是很新不要安装最新版本docker,⽐如我centos7安装docker最新版,后⾯出现 linux 与 docker 版本的兼容性问题,报错”container init exited prematurely“,卸载docker安装较早版本即可。

安前须知之直接部署

  • 不能使用root用户登录,需要是用root 之外的用户登录到系统。
  • Linux 的内核必须3.0 以上。
  • elasticsearch 、 logstash 、kibana 版本号必须统一 ~ Linux安装JDK并配置环境变量
  • centos系统 运行内存不能小于2G,若低于2G需要修改jvm。

  vi {jvm_home}/config/jvm.options

  -Xms512m

  -xmx512m

安前须知之docker方式部署

  • 问题排查以及解决方法 获取该docker容器的CONTAINER ID 或者 NAMES docker logs CONTAINER ID/NAMES ❀ 看日志排查问题,如果docker是前段界面,正常的话是不会有日志的,但是如果一直 Restarting 会有详细报错的日志 ,后台日志也都有日志可以查看.
  • max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144] ERROR: [1] bootstrap checks failed [1]: max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]

顾名思义,es最⼤虚拟内存⾄少262144 ❀ 需要在启动elasticsearch之前执行 vim /etc/sysctl.conf #⽂件最后添加⼀⾏: vm.max_map_count=262144 sysctl -p 重启⽣效

  • latest ≠ 最新版 下图是我下的latest版,因为公认latest就是最新版。当时一下子就启起来了,兴奋不已,一看我去这版本什么鬼,脸都黑了...

❀ latest不一定是最新版,建议指定版本拉取

  • Could not create the Java Virtual Machine

问题排查思路,问题是JVM不能正常创建,但我们要查的是导致不能创建的原因。 ...截图小了,就是上面一行,排查出问题是logs读写权限。 chmod 777 /data/elk/es/logs ❀ 命令是chmod而不是chown。chmod是赋予读写权限,而chown是用户权限

  • error downloading geoip database [GeoLite2-ASN.mmdb]

#elasticsearch.yml #关闭geoip数据库的更新 ingest.geoip.downloader.enabled: false

  • FileSystemException: Device or resource busy

❀ 挂载点泄漏是内核3.10的bug,在后续内核版本得到修复,可以通过升级内核。生产环境,因此只能退一步海阔天空了,8版折磨了我很久,换个7版几下搞定~

  • cannot upgrade a node from version [7.7.1] directly to version [8.3.2], upgrade to version [7.17.0] first.

❀ 顾名思义了,之前安装过7.7.1然后基于原来挂载的文件安装8.3.2,把之前文件删了即可

  • 出现/docker-entrypoint.sh: line 43: /conf/zoo.cfg: Permission denied ❀ ⼀般都是⽬录没权限,给对应⽬录添加权限即可 chmod 777 xxx
  • FileNotFoundException: /opt/kafka 2. 13-2. 8. 1/bin/,./config/ tools-log4j. properties (No such file or directory)

❀ 顾名思义,在指定位置创建指定文件即可

  • 创建topic,kafka连zookeeper出现连接超时

❀ 首先查看zk容器是否启动成功docker logs zk,其次查看IP是对应上,再者查看命令是否有问题 ./bin/kafka-topics.sh --create --zookeeper 10.175.127.155:2181 --partitions 1 --replication-factor 1 --topic cloud-log 或者 ./bin/kafka-topics.sh --create --bootstrap-server 10.84.77.10:2181 --partitions 1 --replication-factor 1 --topic cloud-log

  • 其他未提及的问题,前往留言,小编会及时回复哦~

ElasticSearch

❀ 温馨提示:安装前必须看安前须知,并且安装过程根据步骤来

1、创建挂载⽬录

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
mkdir -p /data/elk/es/{config,data,logs}

2、 创建挂载es配置

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
vi /data/elk/es/config/elasticsearch.yml
-----------------------配置内容----------------------------------
cluster.name: "my-es"
network.host: 0.0.0.0
http.port: 9200

3、赋予权限

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
chmod 777 /data/elk
chmod 777 /data/elk/es
chmod 777 /data/elk/es/config
chmod 777 /data/elk/es/data
chmod 777 /data/elk/es/logs
#报错挂载⽬录没权限
"Caused by: java.nio.file.AccessDeniedException: /usr/share/elasticsearch/data/nodes",

4、运⾏elasticsearch

通过镜像,启动⼀个容器,并将9200和9300端⼝映射到本机(elasticsearch的默认端⼝是9200,我们把宿主环境9200端⼝映射到Docker容器中的9200端⼝)。此处建议给容器设置固定ip,我这⾥没设置。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#指定好版本
docker run -it -d -p 9200:9200 -p 9300:9300 --name es -e ES_JAVA_OPTS="-Xms1g -Xmx1g" -e "discovery.type=single-node" --restart=always -v /data/elk/es/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml -v /data/elk/es/data:/usr/share/elasticsearch/data -v /data/elk/es/logs:/usr/share/elasticsearch/logs elasticsearch:7.17.5

❀ 指定好自个需要的版本,并确保镜像仓库存在所指定的版本

6、验证安装是否成功

kibana

1、获取ip

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#获取elasticsearch容器ip
docker inspect --format '{{ .NetworkSettings.IPAddress }}' es

2、新建配置⽂件

❀ ⽤于docker⽂件映射 温馨提示:不存在⽬录需对应新增

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#创建kibana.yml
vi /data/elk/kibana/kibana.yml
-----------------------------------------------------------
#Default Kibana configuration for docker target
server.name: kibana
server.host: "0"
elasticsearch.hosts: ["http://172.17.0.2:9200"]
xpack.monitoring.ui.container.elasticsearch.enabled: true

3、运⾏kibana

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
docker run -d --restart=always --log-driver json-file --log-opt max-size=100m --log-opt max-file=2 --name kibana -p 5601:5601 -v /data/elk/kibana/kibana.yml:/usr/share/kibana/config/kibana.yml kibana:7.17.5

4、访问

浏览器上输⼊:http://ip:5601

logstash

1、编辑logstash.yml配置⽂件

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#IP为es-docker内⽹ip地址
vi /data/elk/logstash/logstash.yml
-----------------------------------------------------------------
http.host: "0.0.0.0"
xpack.monitoring.elasticsearch.hosts: [ "http://172.17.0.2:9200" ]
xpack.monitoring.elasticsearch.username: elastic
xpack.monitoring.elasticsearch.password: changeme
#path.config: /data/elk/logstash/conf.d/*.conf
path.config: /data/docker/logstash/conf.d/*.conf
path.logs: /var/log/logstash

2、编辑logstash.conf⽂件

此处先配置logstash直接采集本地数据发送⾄es

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#IP该服务器的ip
vi /data/elk/logstash/conf.d/syslog.conf
--------------------------------------------------------------------
input {
 syslog {
 type => "system-syslog"
 port => 5044
 }
}
output {
 elasticsearch {
 hosts => ["IP:9200"] # 定义es服务器的ip
 index => "system-syslog-%{+YYYY.MM}" # 定义索引
 }
}

3、编辑本地rsyslog

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#IP该服务器的ip
vi /etc/rsyslog.conf
---------------------------------------------------------------------
*.* @@IP:5044

4、配置修改后重启服务

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
systemctl restart rsyslog

5、运⾏logstash

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
docker run -d --restart=always --log-driver json-file --log-opt max-size=100m --log-opt max-file=2 -p 5044:5044 --name logstash -v /data/elk/logstash/logstash.yml:/usr/share/logstash/config/logstash.yml -v /data/elk/logstash/conf.d/:/data/docker/logstash/conf.d/ --privileged=true logstash:7.17.5

6、测试es接收logstash数据

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[root@Server-148a8793-5c2b-466f-9c0e-8da870ed6105 ~]# curl http://localhost:9200/_cat/indices?v
health status index                           uuid                   pri rep docs.count docs.deleted store.size pri.store.size
green  open   .geoip_databases                VF7a6tzVSYOaEBXKeblVbg   1   0         40            0     37.6mb         37.6mb
green  open   .kibana_7.17.5_001              DRcdoBqdRQmkoSajuGGiXg   1   0         19           30      2.3mb          2.3mb
green  open   .apm-custom-link                zxQpJVrXQmmSQrzZ_gP2_g   1   0          0            0       226b           226b
green  open   .apm-agent-configuration        iia52tRnS-aDLFOjWLj97A   1   0          0            0       226b           226b
green  open   .kibana_task_manager_7.17.5_001 6DY-ncFMTr-QweAjaFpSGA   1   0         17         1314    240.8kb        240.8kb

❀ 获取到system-syslog-相关⽇志,则es已能获取来⾃logstash的数据,kibana中也同步显示数据。

安装kafka

❀ 温馨提示: 出现/docker-entrypoint.sh: line 43: /conf/zoo.cfg: Permission denied ⼀般都是⽬录没权限,给对应⽬录添加权限即可 chmod 777 xxx

1、启动zookeeper容器

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
docker run -d -p 2181:2181 -p 2888:2888 -p 3888:3888 --privileged=true \
--restart=always --name=zkNode-1 \
-v /data/elk/zookeeper/conf:/conf \
-v /data/elk/zookeeper/data:/data \
-v /data/elk/zookeeper/datalog:/datalog wurstmeister/zookeeper

2、启动kafka容器

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
docker run -d --restart=always --name kafka \
-p 9092:9092 \
-v /data/elk/kafka/logs:/opt/kafka/logs \
-v /data/elk/kafka/data:/kafka/kafka-logs \
-v /data/elk/kafka/conf:/opt/kafka/config \
-e KAFKA_BROKER_ID=1 \
-e KAFKA_LOG_DIRS="/kafka/kafka-logs" \
-e KAFKA_ZOOKEEPER_CONNECT=10.84.77.10:2181 \
-e KAFKA_DEFAULT_REPLICATION_FACTOR=1 \
-e KAFKA_LOG_RETENTION_HOURS=72 \
-e KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://10.84.77.10:9092 \
-e ALLOW_PLAINTEXT_LISTENER=yes \
-e KAFKA_LISTENERS=PLAINTEXT://0.0.0.0:9092 -t wurstmeister/zookeeper

docker 启动参数说明: -d:后台启动, --restart=always:如果挂了总是会重启 --name:设置容器名 -p: 设置宿主机与容器之间的端⼝映射,例如:9902:9092,表示将容器中9092端⼝映射到宿主机的9902端⼝,当有请求访问宿主机的9902端⼝时,会被转发到容器内部的9092端⼝ -v:设置宿主机与容器之间的路径或⽂件映射,例如:/home/kafka/logs:/opt/kafka/logs,表示将容器内部的路径/opt/kafka/logs⽬录映射到宿主机的/home/kafka/logs⽬录,可以⽅便的从宿主机/home/kafka/logs/就能访问到容器内的⽬录,⼀般数据⽂件夹,配置⽂件均可如此配置,便于管理和数据持久化 -e 设置环境变量参数,例如-e KAFKA_BROKER_ID=1,表示将该环境变量设置到容器的环境变量中,容器在启动时会读取该环境变量,并替换掉容器中配置⽂件的对应默认配置(server.properties⽂件中的 broker.id=1)

3、测试kafka

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#进⼊kafka容器的命令⾏
docker exec -it kafka /bin/bash
#进⼊kafka所在⽬录
cd /opt/kafka_2.13-2.8.1/
#没有找到就⽤这个命令搜索
find / -name kafka-topics.sh
#创建topic
./bin/kafka-topics.sh --create --zookeeper 10.175.127.155:2181 --partitions 1 --replication-factor 1 --topic cloud-log
#发送消息
./bin/kafka-console-producer.sh --broker-list localhost:9092 --topic cloud-log
#接收消息
./bin/kafka-console-consumer.sh --zookeeper localhost:9092 --topic cloud-log --from-beginning

❀ 由于上⾯并未和kafka产⽣关联,所以修改logstash安装⽬录下的配置⽂件 vi /data/elk/logstash/conf.d/syslog.conf

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
input {
 #获取kafka信息
 kafka {
 #⾃定义话题
 topics_pattern => "cloud-log"
 #kafka ip+端⼝
 bootstrap_servers => "10.175.127.155:9092"
 auto_offset_reset => "earliest"
 consumer_threads => 5
 decorate_events => "true"
 }
}#⽂本格式过滤
filter {
 date {
 timezone => "Asia/Shanghai"
 match => ["logtime", "yyyy-MM-dd HH:mm:ss,SSS"]
 target => "@timestamp"
 remove_field => [ "logtime" ]
 }
}
output {
 #输出⾄es
 elasticsearch {
 hosts => ["http://10.175.127.155:9200"]
 index => "%{[@metadata][kafka][topic]}-%{+YYYY-MM-dd}"
 }
 #本地⽣产⽂件⽇志(⽬录⾃⾏创建)
 file {
 path => "/home/logs/%{+yyyy-MM-dd-HH}.log"
 }
}

❀ 修改完之后重新启动elk

大功告成!!!

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022年08月17日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
【ES三周年】 docker搭建elk初体验
这篇文章将着重于我对ELK的搭建初体验,基于部署和安装的方便,也为了巩固Docker相关的知识点的学习和熟练运行,尝试在使用Docker来搭建整个ELK系统。
猫老师的叶同学
2023/02/23
4700
实战篇-Docker 安装ELK(单节点)
@派大星
2024/04/02
5060
实战篇-Docker 安装ELK(单节点)
Filebeat+Kafka+Logstash+Elasticsearch+Kibana 构建日志分析系统
随着时间的积累,日志数据会越来越多,当你需要查看并分析庞杂的日志数据时,可通过 Filebeat+Kafka+Logstash+Elasticsearch 采集日志数据到Elasticsearch(简称ES)中,并通过 Kibana 进行可视化展示与分析。
高楼Zee
2021/09/23
1.9K0
Filebeat+Kafka+Logstash+Elasticsearch+Kibana 构建日志分析系统
ELK+kafka+Filebeat
软件包官方下载地址:https://www.elastic.co/cn/downloads/ 2、部署ElasticSearch
@凌晨
2021/01/29
6390
ELK+kafka+Filebeat
【日志架构】ELK Stack + Kafka 端到端练习
在前一章中,我们已经学习了如何从头到尾地配置ELK堆栈。这样的配置能够支持大多数用例。然而,对于一个无限扩展的生产环境,瓶颈仍然存在:
架构师研究会
2020/08/12
5260
【日志架构】ELK Stack + Kafka 端到端练习
es集群+elk搭建+kafka搭建分布式日志收集系统
如果没有输入信息表示没有安装。 如果安装可以使用rpm -qa | grep java | xargs rpm -e --nodeps 批量卸载所有带有Java的文件 这句命令的关键字是java
黎明大大
2020/09/08
1K0
es集群+elk搭建+kafka搭建分布式日志收集系统
基于Kafka+ELK搭建海量日志平台
早在传统的单体应用时代,查看日志大都通过SSH客户端登服务器去看,使用较多的命令就是 less 或者 tail。如果服务部署了好几台,就要分别登录到这几台机器上看,等到了分布式和微服务架构流行时代,一个从APP或H5发起的请求除了需要登陆服务器去排查日志,往往还会经过MQ和RPC调用远程到了别的主机继续处理,开发人员定位问题可能还需要根据TraceID或者业务唯一主键去跟踪服务的链路日志,基于传统SSH方式登陆主机查看日志的方式就像图中排查线路的工人一样困难,线上服务器几十上百之多,出了问题难以快速响应,因此需要高效、实时的日志存储和检索平台,ELK就提供这样一套解决方案。
王知无-import_bigdata
2019/07/29
9K0
基于Kafka+ELK搭建海量日志平台
容器部署ELK7.10,适用于生产
一、elk架构简介 首先 logstash 具有日志采集、过滤、筛选等功能,功能完善但同时体量也会比较大,消耗系统资源自然也多。filebeat作为一个轻量级日志采集工具,虽然没有过滤筛选功能,但是仅
YP小站
2021/01/29
1.9K0
容器部署ELK7.10,适用于生产
Filebeat5+Kafka+ELK Docker搭建日志系统
纯粹是处于个人爱好,各种技术只要跟 Docker 搭边就倾爱它的 Docker 镜像版本。本文除了filebeat agent是二进制版本直接安装在应用机上,与docker无关,其他都是基于docker 镜像版本的集群安装。
曲水流觞
2019/11/05
9460
Filebeat5+Kafka+ELK Docker搭建日志系统
背景介绍
使用Filebeat收集本地日志数据,Filebeat监视日志目录或特定的日志文件,再发送到消息队列到kafka,然后logstash去获取消费,利用filter功能过滤分析,最终存储到elasticsearch中。
钢铁知识库
2022/08/20
7110
ELK7.x日志系统搭建 4. 结合kafka集群完成日志系统
以上是我的节点及机器上安装的相关软件,东西会比较多,但是运行都离不开我们上面的架构图。
憧憬博客
2020/07/21
9610
ELK7.x日志系统搭建 4. 结合kafka集群完成日志系统
一文轻松搞定ELK日志实时采集分析平台
ELK是三个开源软件的缩写,分别表示:Elasticsearch , Logstash, Kibana , 它们都是开源软件。
一行Java
2022/04/07
3.2K0
一文轻松搞定ELK日志实时采集分析平台
7000 字 | 20 图 | 一文带你搭建一套 ELK Stack 日志平台
最近在折腾 ELK 日志平台,它是 Elastic 公司推出的一整套日志收集、分析和展示的解决方案。
悟空聊架构
2022/05/13
8640
7000 字 | 20 图 | 一文带你搭建一套 ELK Stack 日志平台
使用 Docker Compose V2 快速搭建日志分析平台 ELK (Elasticsearch、Logstash 和 Kibana)
ELK的架构有多种,本篇分享使用的架构如图所示: Beats(Filebeat) -> -> Elasticsearch -> Kibana,目前生产环境一天几千万的日志,内存占用大概 10G 左右
易墨
2024/01/21
3.7K1
使用 Docker Compose V2 快速搭建日志分析平台 ELK (Elasticsearch、Logstash 和 Kibana)
ELK+FileBeat+Kafka分布式系统搭建图文教程
filebeat收集需要提取的日志文件,将日志文件转存到kafka集群中,logstash处理kafka日志,格式化处理,并将日志输出到elasticsearch中,前台页面通过kibana展示日志。
王知无-import_bigdata
2020/08/20
2K0
ELK+FileBeat+Kafka分布式系统搭建图文教程
Docker 入门到实战教程(十二)ELK+Filebeat搭建日志分析系统
一般我们需要进行日志分析场景:直接在日志文件中 grep、awk 就可以获得自己想要的信息。但在规模较大的场景中,此方法效率低下,面临问题包括日志量太大如何归档、文本搜索太慢怎么办、如何多维度查询。需要集中化的日志管理,所有服务器上的日志收集汇总。常见解决思路是建立集中式日志收集系统,将所有节点上的日志统一收集,管理,访问。
小东啊
2020/07/23
4.7K1
Docker 入门到实战教程(十二)ELK+Filebeat搭建日志分析系统
日志分析平台ELK 7.0时代来了
集群架构图 1. Elasticsearch集群部署 1.1 初始化java组件 # 安装jdk root@es-logs-20-114:/usr/local# ls -l | grep jdk lrwxrwxrwx 1 root root 22 Apr 1 2017 jdk -> /usr/local/jdk1.8.0_65 drwxr-xr-x 8 root root 4096 Nov 25 2015 jdk1.8.0_65 # 配置java环境变量 export JAVA_HOME
公众号: 云原生生态圈
2021/11/15
3460
日志分析平台ELK 7.0时代来了
【ES三周年】ELK保姆级安装部署教程
在后台开发中,日志系统是一个很重要的系统,一个架构良好的日志系统,可以帮助开发者更清楚的了解服务器的状态和系统安全状况,从而保证服务器的稳定运行。日志主要包括系统日志和应用程序日志,运维和开发人员可以通过日志了解服务器中软硬件的信息,检查应用程序或系统的故障,了解故障出现的原因,以便解决问题。
xiangzhihong
2022/11/16
4.2K0
【ES三周年】ELK保姆级安装部署教程
ELK 日志分析系统整合 KafKa Zookeeper 集群
kafka/zookeeper 集群配置请参考公众号ELK专栏《KafKa 工作原理 && 集群部署(一)》的文章。
Kevin song
2020/04/27
1.1K0
docker安装logstash
需要使用docker 安装Logstash,来收集文件/var/log/messages
py3study
2020/09/24
9.2K0
docker安装logstash
相关推荐
【ES三周年】 docker搭建elk初体验
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验