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)

相关推荐
黄毛火烧雪下5 小时前
【Ruby 】脚本和自动化语言 常用的内容
运维·自动化·ruby
小白不想白a6 小时前
【shell】每日shell练习:安全日志入侵检测/系统配置文件合规检查
运维·服务器
洛克大航海7 小时前
Linux 中新建用户
linux·运维·服务器
三口吃掉你8 小时前
Docker安装Elasticsearch、kibana、IK分词器
elasticsearch·docker·kibana·ik分词器
dehuisun8 小时前
jenkins流水线部署springboot项目
运维·jenkins
fly五行8 小时前
Windows 系统下使用 Docker 安装 Milvus 向量数据库
windows·docker·milvus
爱宇阳9 小时前
离线环境下运行 Docker 容器编排指南
docker·容器·eureka
蜜蜜不吃糖9 小时前
解决Vcenter告警datastore存储容量不足问题
linux·运维·服务器
东城绝神9 小时前
《Linux运维总结:基于ARM64+X86_64架构CPU使用docker-compose一键离线部署redis 7.4.5容器版分片集群》
linux·运维·redis·架构·分片集群
Java陈序员10 小时前
免费开源!一款操作 MySQL 和 MariaDB 的 Web 界面工具!
mysql·docker·php·mariadb