docker搭建EFK

2024-04-07 07:04
文章标签 docker 搭建 efk

本文主要是介绍docker搭建EFK,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

  • elasticsearch
    • 1.创建网络
    • 2.拉取镜像
    • 3.创建容器
      • 如果出现启动失败,提示目录挂载失败,可以考虑如下措施
    • 开放防火墙端口
    • 4.验证安装成功
    • 重置es密码
    • 关闭https连接
    • 创建kibana用户
      • 创建新账户
      • 给账户授权
  • kibana
    • 1.创建容器
    • 2.验证安装成功
    • 3.es为kibana创建用户
    • 4.修改中文以及配置登陆es的账号和密码
    • 常见问题
      • 没有自动连接ES
      • Chrome,提示请升级浏览器
    • 创建filebeat用户
      • 1.创建filebeat用户
    • 配置文件异常导致docker无法启动之后如何修改配置文件
      • 方法一
      • 方法二
  • filebeat
    • filebeat启动
      • windows
      • linux
    • filebeat配置
      • 日志采集
      • filebeat控制台打印
      • 2.修改filebeat输出到es的配置
    • kibana数据展示
  • 注意
  • 参考文章:

elasticsearch

1.创建网络

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

docker network create elastic

2.拉取镜像

docker pull elasticsearch:8.13.0
docker pull kibana:8.13.0

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

yum erase docker
yum install docker-ce

如果不先remove老镜像直接升级docker,可能会存在无法删除老镜像的问题,可以通过rm -rf /var/lib/docker
解决,注意,注意,注意:该命令会删除所有的镜像,在删除前,要先备份好需要保存的镜像。

3.创建容器

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规则,将要挂载的目录添加到白名单

chcon -Rt svirt_sandbox_file_t /home/dockerfile/tomcat/logs

2.用chmod 777命

开放防火墙端口

#开放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容器

docker exec -it elasticsearch /bin/bash

执行

elasticsearch-reset-password -u elastic

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

关闭https连接

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

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

先更新apt,执行

apt-get update

,然后再执行安装vim命令

apt-get install vim
cd  /usr/share/elasticsearch/config

打开 elasticsearch.yml 文件 找到

 xpack.security.http.ssl: //启用https 
enabled: true 
keystore.path: certs/http.p12

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

重新启动es

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.

创建新账户

elasticsearch-users useradd 用户名

给账户授权

elasticsearch-users roles -a superuser 用户名
elasticsearch-users roles -a kibana_system 用户名

kibana

1.创建容器

docker run -d --name kibana --network elastic -p 15601:5601  kibana:8.13.0

容器创建完成后,会自动连接同一网络中的es

2.验证安装成功

浏览器访问http://ip:15601,如果出现如下这种信息,则kibana安装成功

在这里插入图片描述

3.es为kibana创建用户

4.修改中文以及配置登陆es的账号和密码

cd  /usr/share/kibana/config

打开 kibana.yml 文件 增加i18n.locale: “zh-CN” 配置中文
将elasticsearch.hosts: [ “http://elasticsearch:9200” ] 改为 具体 Elasticsearch 通信地址
增加

elasticsearch.username: "elastic" elasticsearch.password: "elastic" # 和这行

常见问题

没有自动连接ES

如果没有自动连接,可以使用 elasticsearch-create-enrollment-token 工具。 Kibana 生成一个新的注册令牌:
进入docker容器

docker exec -it elasticsearch /bin/bash

执行

elasticsearch-create-enrollment-token -s kibana

在15601管理界面输入后开始连接es,如下图
在这里插入图片描述

如果可以访问但是提示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;

在这里插入图片描述

1.3 新建一个用户拥有此权限
在这里插入图片描述

配置文件异常导致docker无法启动之后如何修改配置文件

方法一

把docker容器中的配置文件复制到主机中,然后在主机中修改,修改完成后再复制到docker容器中

  1. 复制docker容器的文件到主机中
docker cp [容器id]:docker容器中配置文件路径  主机路径
docker cp mysql:/etc/mysql/my.cnf /home/my.cnf
  1. 修改配置文件中出错的部分
  2. 配置文件到docker容器中
docker cp 主机文件路径 容器id:docker容器中配置文件路径
docker cp /home/my.cnf mysql:/etc/mysql/my.cnf
  1. 重启容器

方法二

运行命令

docker inspect [CONTAINER ID]

,可以找到如下的内容
在这里插入图片描述

看到MergedDir:
cd到 MergedDir, 会发现和容器里的目录结构是一样的.
这样我们就可以在前者中,也就是在容器已经 “exit” 的情况下,修改容器中的配置文件, 修改完成后重启容器.

filebeat

filebeat启动

windows

下载filebeat后,cmd进入文件夹内,执行命令启动程序,filebeat.yml为配置文件

filebeat -e -c filebeat.yml

linux

filebeat配置

日志采集

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控制台打印

output.console:pretty: true

2.修改filebeat输出到es的配置

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: falseescape_html: truejson.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数据展示

展示收集的日志信息

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
这样就将日志信息收集展示出来了。

注意

文中所有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)

这篇关于docker搭建EFK的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/881934

相关文章

如何用Docker运行Django项目

本章教程,介绍如何用Docker创建一个Django,并运行能够访问。 一、拉取镜像 这里我们使用python3.11版本的docker镜像 docker pull python:3.11 二、运行容器 这里我们将容器内部的8080端口,映射到宿主机的80端口上。 docker run -itd --name python311 -p

搭建Kafka+zookeeper集群调度

前言 硬件环境 172.18.0.5        kafkazk1        Kafka+zookeeper                Kafka Broker集群 172.18.0.6        kafkazk2        Kafka+zookeeper                Kafka Broker集群 172.18.0.7        kafkazk3

【IPV6从入门到起飞】5-1 IPV6+Home Assistant(搭建基本环境)

【IPV6从入门到起飞】5-1 IPV6+Home Assistant #搭建基本环境 1 背景2 docker下载 hass3 创建容器4 浏览器访问 hass5 手机APP远程访问hass6 更多玩法 1 背景 既然电脑可以IPV6入站,手机流量可以访问IPV6网络的服务,为什么不在电脑搭建Home Assistant(hass),来控制你的设备呢?@智能家居 @万物互联

pico2 开发环境搭建-基于ubuntu

pico2 开发环境搭建-基于ubuntu 安装编译工具链下载sdk 和example编译example 安装编译工具链 sudo apt install cmake gcc-arm-none-eabi libnewlib-arm-none-eabi libstdc++-arm-none-eabi-newlib 注意cmake的版本,需要在3.17 以上 下载sdk 和ex

禅道Docker安装包发布

禅道Docker安装包发布 大家好, 禅道Docker安装包发布。 一、下载地址 禅道开源版:   /dl/zentao/docker/docker_zentao.zip  备用下载地址:https://download.csdn.net/download/u013490585/16271485 数据库用户名: root,默认密码: 123456。运行时,可以设置 MYSQL_ROOT_P

828华为云征文|华为云Flexus X实例docker部署rancher并构建k8s集群

828华为云征文|华为云Flexus X实例docker部署rancher并构建k8s集群 华为云最近正在举办828 B2B企业节,Flexus X实例的促销力度非常大,特别适合那些对算力性能有高要求的小伙伴。如果你有自建MySQL、Redis、Nginx等服务的需求,一定不要错过这个机会。赶紧去看看吧! 什么是华为云Flexus X实例 华为云Flexus X实例云服务是新一代开箱即用、体

docker-compose安装和简单使用

本文介绍docker-compose的安装和使用 新版docker已经默认安装了docker-compose 可以使用docker-compose -v 查看docker-compose版本 如果没有的话可以使用以下命令直接安装 sudo curl -L https://github.com/docker/compose/releases/download/1.16.1/docker-c

01 Docker概念和部署

目录 1.1 Docker 概述 1.1.1 Docker 的优势 1.1.2 镜像 1.1.3 容器 1.1.4 仓库 1.2 安装 Docker 1.2.1 配置和安装依赖环境 1.3镜像操作 1.3.1 搜索镜像 1.3.2 获取镜像 1.3.3 查看镜像 1.3.4 给镜像重命名 1.3.5 存储,载入镜像和删除镜像 1.4 Doecker容器操作 1.4

JavaFX环境的搭建和一个简单的例子

之前在网上搜了很多与javaFX相关的资料,都说要在Eclepse上要安装sdk插件什么的,反正就是乱七八糟的一大片,最后还是没搞成功,所以我在这里写下我搭建javaFX成功的环境给大家做一个参考吧。希望能帮助到你们! 1.首先要保证你的jdk版本能够支持JavaFX的开发,jdk-7u25版本以上的都能支持,最好安装jdk8吧,因为jdk8对支持JavaFX有新的特性了,比如:3D等;

springboot+maven搭建的项目,集成单元测试

springboot+maven搭建的项目,集成单元测试 1.在pom.xml文件中引入单元测试的依赖包 <!--单元测试依赖--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></depen