docker搭建EFK

目录

elasticsearch

1.创建网络

因需要与kibana互联,所以将kibana和elasticsearch创建在共同网络中

bash 复制代码
docker network create elastic

2.拉取镜像

bash 复制代码
docker pull elasticsearch:8.13.0
docker pull kibana:8.13.0

如果不带版本号,则默认拉取lasted,docker下载完后如果留意下镜像的修改日期,如果docker版本太低可能拉取的lasted不是最新版,先remove该镜像,卸载docker,升级docker,然后重新拉取lasted

bash 复制代码
yum erase docker
yum install docker-ce

如果不先remove老镜像直接升级docker,可能会存在无法删除老镜像的问题,可以通过rm -rf /var/lib/docker

解决,注意,注意,注意:该命令会删除所有的镜像,在删除前,要先备份好需要保存的镜像。

3.创建容器

bash 复制代码
docker run --name elasticsearch --network elastic -p 19200:9200 -p 19300:9300 -v /home/docker/elasticsearch/data:/usr/share/elasticsearch/data --privileged -e "discovery.type=single-node" -d elasticsearch:8.13.0

命令解释:

--network elastic :加入一个名为elastic的网络中

-p 19200:9200:端口映射配置(物理机:容器)

-e 表示额外参数

"discovery.type=single-node" 表示 指定 Elasticsearch 节点在单节点模式下运行,即启动一个独立的 Elasticsearch 实例而不是一个多节点集群

-d 表示后台运行

-v 命令的意思是将Docker内部创建的名为data 的数据卷挂载到容器内的 /usr/share/elasticsearch/data 目录。这样,Elasticsearch的数据就会被存储在 es-data 这个数据卷中,而不是容器内部的存储层,从而实现了数据的持久化。

如果出现启动失败,提示目录挂载失败,可以考虑如下措施

1.(我试着没用) CentOS7中的安全模块selinux把权限禁掉了,无法使用-v命令进行挂载需要,添加selinux规则,将要挂载的目录添加到白名单

bash 复制代码
chcon -Rt svirt_sandbox_file_t /home/dockerfile/tomcat/logs

2.用chmod 777命

开放防火墙端口

bash 复制代码
#开放19200端口用于http通信
firewall-cmd --zone=public --add-port=19200/tcp --permanent
#开放19300端口用于ES集群间通信
firewall-cmd --zone=public --add-port=19300/tcp --permanent
#重新加载防火墙使开放的端口即时生效
firewall-cmd --reload

4.验证安装成功

浏览器访问https://ip:19200,如果出现如下这种信息,则es安装成功

es默认开启了ssl验证,所以需要使用https

重置es密码

Elasticsearch8默认用户名为elastic, 密码可以使用以下命令进行重置

进入docker容器

bash 复制代码
docker exec -it elasticsearch /bin/bash

执行

bash 复制代码
elasticsearch-reset-password -u elastic

如果启动报错:received plaintext http traffic on an https channel, closing connection Netty4 Http Channel

关闭https连接

1.默认是没有vi命令的,所以需要先安装vim,需要root权限

bash 复制代码
docker exec -u 0 -it some-kibana bash #(使用root用户的命令-u 0 )

先更新apt,执行

bash 复制代码
apt-get update

,然后再执行安装vim命令

bash 复制代码
apt-get install vim
bash 复制代码
cd  /usr/share/elasticsearch/config

打开 elasticsearch.yml 文件 找到

bash 复制代码
 xpack.security.http.ssl: //启用https 
enabled: true 
keystore.path: certs/http.p12

这样就可以直接 使用http访问

重新启动es

bash 复制代码
docker restart elasticsearch

创建kibana用户

无法使用elastic用户登陆kibana,所以需要为kibana创建用户

FATAL\]\[root\] Error: \[config validation of \[elasticsearch\].username\]: value of "elastic" is forbidden. This is a superuser account that cannot write to system indices that Kibana needs to function. Use a service account token instead. #### 创建新账户 ```bash elasticsearch-users useradd 用户名 ``` #### 给账户授权 ```bash elasticsearch-users roles -a superuser 用户名 elasticsearch-users roles -a kibana_system 用户名 ``` ## kibana ### 1.创建容器 ```bash docker run -d --name kibana --network elastic -p 15601:5601 kibana:8.13.0 ``` 容器创建完成后,会自动连接同一网络中的es ### 2.验证安装成功 浏览器访问http://ip:15601,如果出现如下这种信息,则kibana安装成功 ![在这里插入图片描述](https://file.jishuzhan.net/article/1777967176574046210/a5f6266cfdd524c7c474c43d403ecfd4.webp) ### 3.es为kibana创建用户 ### 4.修改中文以及配置登陆es的账号和密码 ```bash cd /usr/share/kibana/config ``` 打开 kibana.yml 文件 增加i18n.locale: "zh-CN" 配置中文 将elasticsearch.hosts: \[ "http://elasticsearch:9200" \] 改为 具体 Elasticsearch 通信地址 增加 ```bash elasticsearch.username: "elastic" elasticsearch.password: "elastic" # 和这行 ``` ### 常见问题 #### 没有自动连接ES 如果没有自动连接,可以使用 elasticsearch-create-enrollment-token 工具。 Kibana 生成一个新的注册令牌: 进入docker容器 ```bash docker exec -it elasticsearch /bin/bash ``` 执行 ```bash elasticsearch-create-enrollment-token -s kibana ``` 在15601管理界面输入后开始连接es,如下图 ![在这里插入图片描述](https://file.jishuzhan.net/article/1777967176574046210/3aaef003139ba052b65ef0f73a4504cd.webp) 如果可以访问但是提示kibana未成功运行,则意味着kibana虽启动成功,但是连接es失败,可以通过docker logs kibana查看容器日志, #### Chrome,提示请升级浏览器 .如果使用Chrome,提示请升级浏览器,则可以尝试关闭所有插件,查看能否访问,(后期可以逐个开启插件来排除问题插件) ### 创建filebeat用户 #### 1.创建filebeat用户 1.1 首先创建个角色,名为"beats_write",集群权限为:monitor,manage_index_templates; 1.2 此角色对索引的操作权限为:write、delete、create_index monitor; ![在这里插入图片描述](https://file.jishuzhan.net/article/1777967176574046210/663555ae9dd66dab524c9d35a0efaeaf.webp) 1.3 新建一个用户拥有此权限 ![在这里插入图片描述](https://file.jishuzhan.net/article/1777967176574046210/0c0423dcc16e1de1a3731bac4d3f1a76.webp) ### 配置文件异常导致docker无法启动之后如何修改配置文件 #### 方法一 把docker容器中的配置文件复制到主机中,然后在主机中修改,修改完成后再复制到docker容器中 1. 复制docker容器的文件到主机中 ```bash docker cp [容器id]:docker容器中配置文件路径 主机路径 docker cp mysql:/etc/mysql/my.cnf /home/my.cnf ``` 2. 修改配置文件中出错的部分 3. 配置文件到docker容器中 ```bash docker cp 主机文件路径 容器id:docker容器中配置文件路径 docker cp /home/my.cnf mysql:/etc/mysql/my.cnf ``` 5. 重启容器 #### 方法二 运行命令 ```bash docker inspect [CONTAINER ID] ``` ,可以找到如下的内容 ![在这里插入图片描述](https://file.jishuzhan.net/article/1777967176574046210/f6eaa97e64bf2450d4a645c497bac086.webp) 看到MergedDir: cd到 MergedDir, 会发现和容器里的目录结构是一样的. 这样我们就可以在前者中,也就是在容器已经 "exit" 的情况下,修改容器中的配置文件, 修改完成后重启容器. ## filebeat ### filebeat启动 #### windows 下载filebeat后,cmd进入文件夹内,执行命令启动程序,filebeat.yml为配置文件 ```bash filebeat -e -c filebeat.yml ``` #### linux ### filebeat配置 #### 日志采集 ```bash filebeat.inputs: # filestream is an input for collecting log messages from files. - type: log #filestream为单行输入,无法进行多行匹配 # Unique ID among all inputs, an ID is required. id: my-filestream-id # Change to true to enable this input configuration. enabled: true # Paths that should be crawled and fetched. Glob based paths. paths: # 日志存放路径 # /var/log/*.log - C:\rzxh\adminlogs\*.log #encoding: GB2312 # 防止中文乱码,不是必须的,出现乱码再处理 multiline.pattern: '^\d{2}:\d{2}:\d{2}\.\d{3}' # 匹配以 HH:mm:ss.SSS 开头的行 multiline.negate: true # 忽略不匹配多行模式的行 multiline.match: after # 匹配模式后的行将被合并到上一行 processors: - decode_json_fields: fields: ["message"] target: "" overwrite_keys: true - dissect: tokenizer: "%{time} [%{thread}] %{level} %{logger} - [%{method},%{line}] - %{message}" #将数据以json形式存储 field: "message" target_prefix: "rzxhlog_" # 字段前缀,如果不填写会议dissect为前缀 target_type: "text" ``` #### filebeat控制台打印 ```bash output.console: pretty: true ``` #### 2.修改filebeat输出到es的配置 ```bash output.elasticsearch: # Array of hosts to connect to. hosts: ["ip:19200"] # Protocol - either `http` (default) or `https`. protocol: "http" # Authentication credentials - either API key or username/password. #api_key: "id:api_key" username: "用户名" password: "密码" indices: - index: "rzxh127-other-%{+yyyy.MM.dd}" when.contains: message: "INFO" # 如果message包含INFO,进入该索引 - index: "rzxh127-error-%{+yyyy.MM.dd}" when.contains: message: "ERROR" # 如果message包含ERROR,进入该索引 codec.json: pretty: false escape_html: true json.keys_under_root: true # 开启json格式 json.overwrite_keys: true ### 加入以下内容,output.elasticsearch.index 才会生效 setup.ilm.enabled: false # 关闭索引生命周期 setup.template.enabled: false # 允许自动生成index模板 setup.template.overwrite: true # 如果存在模块则覆盖 #setup.template.name: "docker" # 生成index模板的名称 #setup.template.pattern: "docker-*" # 生成index模板匹配的index格式 ``` 修改完之后需要重启filebeat; ### kibana数据展示 展示收集的日志信息 ![在这里插入图片描述](https://file.jishuzhan.net/article/1777967176574046210/bd0aea44dc46594c1671a7a477a895e5.webp) ![在这里插入图片描述](https://file.jishuzhan.net/article/1777967176574046210/e2349b8f708c8cf17afdd9c9b0210107.webp) ![在这里插入图片描述](https://file.jishuzhan.net/article/1777967176574046210/499dd4442e9fa71bc3c6ad026dd2745b.webp) ![在这里插入图片描述](https://file.jishuzhan.net/article/1777967176574046210/31eb2d34292cdf20d731fb7ad5f9b98f.webp) 这样就将日志信息收集展示出来了。 ## 注意 文中所有8.13.0为本文所用版本,需要根据自己的版本调整 文中所有的15601、19200、19300,需要根据自己的服务器端口调整 文中所有的中文用户名、密码、ip、端口,需要自己根据实际情况修改 ## 参考文章: Docker上安装部署Elasticsearch(ES)详细教程 (https://blog.csdn.net/djdjfjf1/article/details/134775443) Docker安装ElasticSearch8.X docker安装elasticsearch8.X完整详细教程(https://blog.csdn.net/qq_40739917/article/details/131654563) Docker run 容器使用-v挂载目录总会启动失败的解决方案 (https://blog.csdn.net/csdn_life18/article/details/126168588) docker 容器内报错 E: List directory /var/lib/apt/lists/partial is missing. - Acquire ( : No such file or directory) 或者其他权限 PermissionError: \[Errno 13\] Permission denied:(https://www.cnblogs.com/maxiaohei/p/16321356.html) docker pull 拉取镜像错误missing signature key(https://blog.csdn.net/m0_38138371/article/details/133276396) Elasticsearch8重置elastic用户密码(https://blog.csdn.net/liboi11/article/details/124266367) Kibana:使用 Docker 安装 Kibana - 8.x(https://blog.csdn.net/UbuntuTouch/article/details/130921373) Docker安装Elasticsearch8\&Kibana8,自定义Docker目录情景下的配置修改(https://blog.csdn.net/Sucrapipple/article/details/136950567) docker镜像无法删除解决(https://www.cnblogs.com/hongweigg/p/16979765.html) elasticsearch7.x 开启安全认证xpack,以及kibana、logstash、filebeat组件连接开启安全认证的es;(https://blog.csdn.net/qq_44930876/article/details/128653811) kibana设置中文访问界面(https://blog.csdn.net/m0_62755217/article/details/133813292) docker安装kibana并配置es的密码(https://blog.csdn.net/qq_52594679/article/details/136257664) docker容器无法启动,修改容器内文件2种方式(https://blog.csdn.net/JineD/article/details/109577016) 容器部署es和kibana,挂载数据卷并开启es安全验证(https://blog.csdn.net/weixin_46030885/article/details/128784226) 手把手系列 - 搭建 efk 8 收集 docker 容器日志 (https://www.cnblogs.com/hukey/p/16454187.html) ELK相关问题及解决办法(https://zhuanlan.zhihu.com/p/685830904) Filebeat之多行匹配模式理解记忆方式(https://blog.csdn.net/sinat_33622098/article/details/112648307) Filebeat输出json格式的日志并指定message字段的值(https://blog.csdn.net/kali_yao/article/details/124637646)

相关推荐
WCL-JAVA21 分钟前
Docker快速安装MongoDB并配置主从同步
mongodb·docker·容器
安顾里38 分钟前
Linux命令-tar
linux·运维·服务器
沐土Arvin1 小时前
Nginx 核心配置详解与性能优化最佳实践
运维·开发语言·前端·nginx·性能优化
下一秒_待续1 小时前
.Net8项目使用docker、docker-compose部署步骤
docker·容器·.net
有莘不破呀1 小时前
服务器磁盘卷组缓存cache设置介绍
linux·运维·服务器
DBWYX1 小时前
gcc 链接顺序,静态库循环依赖问题
linux·运维·服务器
zxsz_com_cn1 小时前
风电行业预测性维护解决方案:AIoT驱动下的风机健康管理革命
大数据·运维·人工智能
我们的五年2 小时前
【Linux系统】进程间通信-System V消息队列
linux·运维·服务器·c++
island13142 小时前
【Linux网络#18】:深入理解select多路转接:传统I/O复用的基石
linux·运维·数据库
mingyuewu3 小时前
MAC环境给docker换源
docker