使用docker-compose安装ELK(elasticsearch,logstash,kibana)并简单使用
首先服务器上需要安装docker已经docker-compose,如果没有,可以参考我之前写的文章进行安装。
https://blog.csdn.net/a_lllk/article/details/143382884?spm=1001.2014.3001.5502
1.下载并启动elk容器
先创建一个网关,让所有的容器共用此网关,方便容器之间互相通信。
docker network create elk-net
编写docker-compose.yml,我这里的docker-compose版本是2.8.0,可以根据自己安装的docker-compose去调整version。ELK的版本都使用的事8.6.2。
version: '2.8'
services:elasticsearch:image: docker.elastic.co/elasticsearch/elasticsearch:8.6.2restart: alwayscontainer_name: esenvironment:- "ES_JAVA_OPTS=-Xms256m -Xmx512m"- "discovery.type=single-node"- "ELASTIC_USERNAME=elastic"- "ELASTIC_PASSWORD=elastic"- "ingest.geoip.downloader.enabled=false"- "xpack.security.transport.ssl.enabled=false"- "xpack.security.http.ssl.enabled=false"- "xpack.security.enabled=true"- "bootstrap.memory_lock=true"- "cluster.name=es-cluster"ports:- "9200:9200"- "9300:9300"privileged: truenetworks:- elk-netlogstash:image: docker.io/logstash:8.6.2container_name: logstashenvironment:- "LS_JAVA_OPTS=-Xmx256m -Xms256m"ports:- "5044:5044" # Beats通信- "9600:9600" # API通信networks:- elk-netrestart: alwaysprivileged: truekibana:image: docker.elastic.co/kibana/kibana:8.6.2container_name: kibanaenvironment:- "ELASTICSEARCH_HOSTS=http://elasticsearch:9200"- "SERVER_NAME=kibana"- "XPACK_SECURITY_ENABLED=true"ports:- "5601:5601"networks:- elk-netrestart: alwaysprivileged: truenetworks:elk-net:driver: bridge
将文件放入服务器的任意目录,然后输入以下命令运行。
docker-compose up -d
稍等一会,等镜像下载并创建容器,我这里因为早就下载好了镜像,所以就直接创建了容器。

可以使用docker ps -a查看容器的创建情况,我的容器创建如下图

可以使用ip+端口的形式去查看运行容器的情况,这里注意如果是服务器的话记得打开对于端口。
elasticsearch使用ip+:9200端口去访问

kibana使用ip+:5601去访问。这里注意,如果页面显示"Kibana server is not ready yet."是正常情况,因为目前并没有对elasticsearch做任何配置,kibana是没有检测到es的存在。

logstash暂时没有验证的方式,只要看容器的启动状态是up就行了。
2.配置ELK
2.1.配置elasticsearch
首先在服务器目录创建一个文件夹,来存放容器中的数据。
mkdir -p /usr/local/docker/elasticsearch
然后将容器中的配置文件及data,logs目录复制到当前宿主机指定目录下。
docker cp es:/usr/share/elasticsearch/config /usr/local/docker/elasticsearch/config
docker cp es:/usr/share/elasticsearch/data /usr/local/docker/elasticsearch/data
docker cp es:/usr/share/elasticsearch/logs /usr/local/docker/elasticsearch/logs
进入config目录,有一个elasticsearch.yml文件,这个就是容器的配置文件。
我一般为了保险起见,都会先复制一个没有修改过的配置文件,避免修改配置文件出错时,容器启动报错。
cp elasticsearch.yml elasticsearch-backup.yml
然后修改配置文件,内容如下:
vim elasticsearch.yml

cluster.name: "es-cluster"
network.host: 0.0.0.0node.name: node-01
path.data: /usr/share/elasticsearch/data
path.logs: /usr/share/elasticsearch/logs
http.port: 9200
discovery.type: single-node
xpack.security.enabled: true
bootstrap.memory_lock: true
保存并退出,es的配置文件就编辑好了。
2.配置kibana
同样创建一个文件夹,来存放容器中的数据。
mkdir -p /usr/local/docker/kibana
将需要的文件复制到宿主机中。
docker cp kibana:/usr/share/kibana/config /usr/local/docker/kibana/docker cp kibana:/usr/share/kibana/data /usr/local/docker/kibana/docker cp kibana:/usr/share/kibana/logs /usr/local/docker/kibana/
进入config目录,编辑名为kibana.yml的配置文件。
vim kibana.yml
配置文件内容如下

#
# ** THIS IS AN AUTO-GENERATED FILE **
#
# Default Kibana configuration for docker target
server.host: "0.0.0.0"
server.shutdownTimeout: "5s"
elasticsearch.hosts: [ "http://elasticsearch:9200" ]
elasticsearch.username: "elastic"
elasticsearch.password: "elastic"
monitoring.ui.container.elasticsearch.enabled: true
#界面汉化
i18n.locale: "zh-CN"
##启用或禁用 Kibana 报告功能的角色管理
xpack.reporting.roles.enabled: false
保存并退出,kibana配置文件就算改好了。
3.配置logstash
创建文件夹
mkdir -p /usr/local/docker/kibana
从容器中复制文件夹
docker cp logstash:/usr/share/logstash/pipeline/ /usr/local/docker/logstash/
进入/logstash/pipeline,编辑logstash.conf
input {beats {port => 5044}
}output {elasticsearch {hosts => ["http://elasticsearch:9200"]user => "elastic"password => "elastic"index => "logs-%{+YYYY.MM.dd}"}
}
3.重新创建容器
上面就对所有容器的配置文件做了处理,然后因为第一次启动的时候没有挂载目录,所以更改的配置配置文件也不会生效,所以我们就需要重新创建一下容器,并将所有编辑的配置文件挂载到容器中去
首先对所有容器进行移除
docker stop es logstash kibana
docker rm es logstash kibana
然后重新编辑上面的docker-compose.yml,将宿主机中的目录挂载到容器中。
version: '2.8'
services:elasticsearch:image: docker.elastic.co/elasticsearch/elasticsearch:8.6.2restart: alwayscontainer_name: esvolumes:- /usr/local/docker/elasticsearch/data:/usr/share/elasticsearch/data - /usr/local/docker/elasticsearch/logs:/usr/share/elasticsearch/logs - /usr/local/docker/elasticsearch/config:/usr/share/elasticsearch/config environment:- "ES_JAVA_OPTS=-Xms256m -Xmx512m"- "discovery.type=single-node"- "ELASTIC_USERNAME=elastic"- "ELASTIC_PASSWORD=elastic"- "ingest.geoip.downloader.enabled=false"- "xpack.security.transport.ssl.enabled=false"- "xpack.security.http.ssl.enabled=false"- "xpack.security.enabled=true"- "bootstrap.memory_lock=true"- "cluster.name=es-cluster"ports:- "9200:9200"- "9300:9300"privileged: truenetworks:- elk-netlogstash:image: docker.io/logstash:8.6.2container_name: logstashenvironment:- "LS_JAVA_OPTS=-Xmx256m -Xms256m"volumes:- /usr/local/docker/logstash/pipeline/logstash.conf:/usr/share/logstash/pipeline/logstash.conf:rw # Logstash配置ports:- "5044:5044" # Beats通信- "9600:9600" # API通信networks:- elk-netrestart: alwaysprivileged: truekibana:image: docker.elastic.co/kibana/kibana:8.6.2container_name: kibanaenvironment:- "ELASTICSEARCH_HOSTS=http://elasticsearch:9200"- "SERVER_NAME=kibana"- "XPACK_SECURITY_ENABLED=true"volumes:- /usr/local/docker/kibana/logs:/usr/share/kibana/logs - /usr/local/docker/kibana/data:/usr/share/kibana/data- /usr/local/docker/kibana/config:/usr/share/kibana/config ports:- "5601:5601"networks:- elk-netrestart: alwaysprivileged: truenetworks:elk-net:driver: bridge
运行命令,还是生成了三个容器。使用上面的ip+端口的方式去验证,发现es可以访问,但是kibana一直在尝试重启,说明配置文件存在问题。

使用log命令查看kibana的启动日志,
docker logs -f kibana
发现es报错了,报错信息如下
"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. Learn more: https://www.elastic.co/guide/en/elasticsearch/reference/8.0/service-accounts.html"

这里大概意思就是elastic作为超级账号,是不能在kibana中直接使用,这里推荐使用账户token的方式去连接es。所以这里需要使用token的方式去连接es。
先进入到es的容器之中,然后运行一下命令,生成对应的token令牌。
进入容器:
docker exec -it es /bin/bash
运行生成令牌命令:
bin/elasticsearch-service-tokens create elastic/kibana default
复制等号后面的token信息

exit;退出容器,然后进入kibana的配置文件存放位置
cd usr/local/docker/kibana/config/
编辑kibana.yml,内容如下:

将之前配置的用户名和密码注释或删除,然后新增elasticsearch.serviceAccountToken,内容为刚才容器中返回的token信息。
然后wq!保存,重启kibana
docker restart kibana
然后使用ip+:5601的方式访问kibana,发现已经可以正常登录使用了,也就是kibana已经成功连接了es。


4.在SpringBoot项目中简单使用
elk的使用方式有很多种,这里简单演示一下整合springBoot。
先创建一个springBoot项目,并导入以下jar包
<!-- Logback Classic --><dependency><groupId>ch.qos.logback</groupId><artifactId>logback-classic</artifactId><version>1.2.11</version></dependency><!-- Logstash Logback Encoder --><dependency><groupId>net.logstash.logback</groupId><artifactId>logstash-logback-encoder</artifactId><version>6.3</version></dependency>
然后在application.properties同级目录,新建一个文件,文件名就是"logback-spring.xml"

然后xml内容如下。
<?xml version="1.0" encoding="UTF-8"?>
<configuration><appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"><encoder><pattern>%d{yyyy-MM-dd HH:mm:ss} - %msg%n</pattern></encoder></appender><!-- 控制台输出 --><appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"><layout class="ch.qos.logback.classic.PatternLayout"><pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %highlight(%-5level) %cyan(%logger{50}.%M.%L) - %highlight(%msg)%n</pattern></layout></appender><!-- logback 输出 --><appender name="STASH" class="net.logstash.logback.appender.LogstashTcpSocketAppender"><destination>60.204.148.130:5044</destination><encoder class="net.logstash.logback.encoder.LogstashEncoder"><includeCallerData>true</includeCallerData><timeZone>UTC</timeZone><customFields>{"server_name":"demo-server"}</customFields></encoder></appender><root level="DEBUG"><!-- 将日志发送到Logstash --><appender-ref ref="STDOUT"/><appender-ref ref="STASH"/></root>
</configuration>
然后直接启动springBoot项目,我这边为了演示,level使用的是debug模式,如果觉得debug模式记录太多的话,可以将xml最下面的root level值改为info.
然后访问kibana主页,点击右侧management下面的Stack Management。

进入Stack Management后,选择右边的索引管理。

这里已经成功根据配置文件,新建了一个记录springBoot项目运行日志的索引。

然后可以点击右侧Management下的开发工具。

在左边控制台中输入下面命令,去查看日志的记录清空。
GET /logs-2025.01.16/_search // _search
{"sort": [{"@timestamp": {"order": "desc"}}], "query": {"match_all": {}}
}

相关文章:
使用docker-compose安装ELK(elasticsearch,logstash,kibana)并简单使用
首先服务器上需要安装docker已经docker-compose,如果没有,可以参考我之前写的文章进行安装。 https://blog.csdn.net/a_lllk/article/details/143382884?spm1001.2014.3001.5502 1.下载并启动elk容器 先创建一个网关,让所有的容器共用此网…...
深度学习中超参数
深度学习中的超参数(hyperparameters)是决定网络结构的变量(例如隐藏层数量)和决定网络训练方式的变量(例如学习率)。超参数的选择会显著影响训练模型所需的时间,也会影响模型的性能。超参数是在训练开始之前设置的,而不是从数据中学习的参数。超参数是模…...
[JavaScript] 运算符详解
文章目录 算术运算符(Arithmetic Operators)注意事项: 比较运算符(Comparison Operators)注意事项: 逻辑运算符(Logical Operators)短路运算:逻辑运算符的返回值…...
Hooks 使用规则
Hooks 使用规则 命名规则 Hook 必须 useXxx 格式来命名。 PS:这种命名规则也很易读,简单粗暴 调用位置 Hook 或自定义 Hook ,只能在两个地方被调用 组件内部其他 Hook 内部 组件外部,或一个普通函数中,不能调用…...
Ubuntu 24.04 LTS 安装 Docker Desktop
Docker 简介 Docker 简介和安装Ubuntu上学习使用Docker的详细入门教程Docker 快速入门Ubuntu版(1h速通) Docker 安装 参考 How to Install Docker on Ubuntu 24.04: Step-by-Step Guide。 更新系统和安装依赖 在终端中运行以下命令以确保系统更新并…...
智能创造的幕后推手:AIGC浪潮下看AI训练师如何塑造智能未来
文章目录 一、AIGC时代的算法与模型训练概览二、算法与模型训练的关键环节三、AI训练师的角色与职责四、AI训练师的专业技能与素养五、AIGC算法与模型训练的未来展望《AI训练师手册:算法与模型训练从入门到精通》亮点内容简介作者简介谷建阳 目录 《AI智能化办公&am…...
从 JIRA 数据到可视化洞察:使用 Python 创建自定义图表
引言 在项目管理和软件开发中,JIRA 是最广泛使用的工具之一,尤其是在追踪问题、任务和团队进度方面。对于开发者和团队来说,能够从 JIRA 中提取并分析数据,以便更好地理解项目状态和趋势,至关重要。虽然 JIRA 本身提供…...
【网络原理】万字详解 HTTP 协议
🥰🥰🥰来都来了,不妨点个关注叭! 👉博客主页:欢迎各位大佬!👈 文章目录 1. HTTP 前置知识1.1 HTTP 是什么1.2 HTPP 协议应用场景1.3 HTTP 协议工作过程 2. HTTP 协议格式2.1 fiddler…...
PHP企业IM客服系统
💬 企业IM客服系统——高效沟通,无缝连接的智慧桥梁 🚀 卓越性能,释放无限可能 在瞬息万变的商业环境中,我们深知沟通的力量。因此,基于先进的ThinkPHP5框架与高性能的Swoole扩展,我们匠心独运…...
Linux操作系统的灵魂,深度解析MMU内存管理
在计算机的奇妙世界里,我们每天使用的操作系统看似流畅自如地运行着各类程序,背后实则有着一位默默耕耘的 “幕后英雄”—— 内存管理单元(MMU)。它虽不常被大众所熟知,却掌控着计算机内存的关键命脉,是保障…...
PHP代码审计学习01
目录 两种思路 addslashes函数和magic_quotes_gpc配置: 今天来开php代码审计。 PHP无框架项目SQL注入挖掘技巧。 可以看看小迪老师的学习流程或者说是路线吧。 其中,最下面的代码审计工具推荐用下面两款,fortify,seay。 &…...
《数据思维》之数据可视化_读书笔记
文章目录 系列文章目录前言一、pandas是什么?二、使用步骤 1.引入库2.读入数据总结 前言 数据之道,路漫漫其修远兮,吾将上下而求索。 一、数据可视化 最基础的数据可视化方法就是统计图。一个好的统计图应该满足四个标准:准确、有…...
深度学习常见术语解释
正例与负例: 在分类任务中,通常将目标类别称为正例(positive),非目标类别称为负例(negative)。 True Positives(TP): 被正确地划分为正例的个数,…...
重温STM32之环境安装
缩写 CMSIS:common microcontroller software interface standard 1,keil mdk安装 链接 Keil Product Downloads 安装好后,开始安装平台软件支持包(keil 5后不在默认支持所有的平台软件开发包,需要自行下载&#…...
使用Flask和Pydantic实现参数验证
使用Flask和Pydantic实现参数验证 1 简介 Pydantic是一个用于数据验证和解析的 Python 库,版本2的性能有较大提升,很多框架使用Pydantic做数据校验。 # 官方参考文档 https://docs.pydantic.dev/latest/# Github地址 https://github.com/pydantic/pyd…...
python_在钉钉群@人员发送消息
python_在钉钉群人员发送消息 1、第一种 企业内部机器人群聊实现人接入指南,适用于群机器人接收消息,处理完一系列的动作之后,将消息返回给发消息的人员,同时该人员。 需要在企微后台新建一个自建应用,在自建应用里…...
C语言之装甲车库车辆动态监控辅助记录系统
🌟 嗨,我是LucianaiB! 🌍 总有人间一两风,填我十万八千梦。 🚀 路漫漫其修远兮,吾将上下而求索。 C语言之装甲车库车辆动态监控辅助记录系统 目录 一、前言 1.1 (一)…...
线性代数概述
矩阵与线性代数的关系 矩阵是线性代数的研究对象之一: 矩阵(Matrix)是一个按照长方阵列排列的复数或实数集合,是线性代数中的核心概念之一。矩阵的定义和性质构成了线性代数中矩阵理论的基础,而矩阵运算则简洁地表示和…...
使用 ChatGPT 生成和改进你的论文
文章目录 零、前言一、操作引导二、 生成段落或文章片段三、重写段落四、扩展内容五、生成大纲内容六、提高清晰度和精准度七、解决特定的写作挑战八、感受 零、前言 我是虚竹哥,目标是带十万人玩转ChatGPT。 ChatGPT 是一个非常有用的工具,可以帮助你…...
Linux命令行工具-使用方法
参考资料 Linux网络命令:网络工具socat详解-CSDN博客 arm-linux-gnueabihf、aarch64-linux-gnu等ARM交叉编译GCC的区别_aarch64-elf-gcc aarch64-linux-gnu-CSDN博客 解决Linux内核问题实用技巧之-dev/mem的新玩法-腾讯云开发者社区-腾讯云 热爱学习地派大星-CS…...
STM32H7 SPI4与W25Q128 Flash通信实战:50MHz时钟配置避坑指南
STM32H7 SPI4与W25Q128 Flash通信实战:50MHz时钟配置避坑指南 在嵌入式开发中,高速SPI通信一直是工程师们面临的挑战之一。特别是当我们需要在STM32H7系列微控制器上实现50MHz时钟频率的SPI4接口与W25Q128 Flash通信时,各种意想不到的问题往往…...
TinyEngine 与 AI 的融合,本质上是从“可视化拖拽”升级为“自然语言驱动”的智能开发基座
TinyEngine 与 AI 的融合,本质上是从“可视化拖拽”升级为“自然语言驱动”的智能开发基座。这种融合并非简单的功能叠加,而是通过 MCP(Model Context Protocol)协议 让 AI 获得了直接操作低代码引擎的能力,实现了“对…...
Python从入门到精通(第36章):多线程编程与线程安全
开头导语 写循环时,很多需求是重复的:拼接多个迭代器、取前N个、按相邻相同键分组……itertools 提供了这些常见迭代需求的函数式解决方案,更重要的是,所有函数都返回惰性迭代器——不占额外内存。本章围绕 itertools 模块展开,讲解 count/cycle/repeat、chain/islice/co…...
数据结构与算法的实战场景剖析(持续更新)
1. 排序算法在数据库索引中的实战应用 数据库索引就像图书馆的目录系统,而排序算法就是构建这个目录的核心工具。在实际项目中,我们经常需要根据不同的查询需求选择合适的排序算法来构建索引。比如MySQL的InnoDB引擎就采用了B树作为索引结构,…...
GBase 8c数据库全链路精准降本详解(下)
南大通用GBase 8c数据库(gbase database)用五招硬核技术,从存储、内存、CPU到I/O,全链路精准降本。不是省钱降质,而是让每一分硬件投入都产生最大价值。3第三招:内存精准管控,不浪费每一兆内存价格居高不下…...
代驾软件可以自己改界面吗?
在选择代驾软件时,很多企业主和创业者都非常关心一个问题:代驾软件的界面是否可以自定义? 这个问题的答案是肯定的。本文将详细介绍如何自定义代驾软件的界面,并提供具体的数据和案例支撑,帮助你更好地理解和操作。一、…...
DFRobot_BMP280库深度解析:嵌入式BMP280传感器驱动开发指南
1. DFRobot_BMP280库深度解析:面向嵌入式工程师的BMP280传感器驱动开发指南BMP280是博世(Bosch)推出的高精度数字环境传感器,集成温度、气压测量功能,并支持基于气压反推海拔高度。DFRobot为其SEN0372模块开发的DFRobo…...
VL53L0X ToF测距模块Arduino驱动库详解
1. 项目概述Deneyap Derinlik ler,即 Deneyap ToF Range Finder Sensor,是一款基于 STMicroelectronics VL53L0X 飞行时间(Time-of-Flight, ToF)测距传感器的国产化 Arduino 兼容模块。该模块由土耳其 Deneyap 教育平台推出&#…...
BUUCTF-[GYCTF2020]FlaskApp 从SSTI到PIN码生成的完整利用链分析
1. SSTI漏洞基础与Flask应用风险 Flask作为轻量级Python Web框架,开发者常因模板渲染不当引发SSTI(服务器端模板注入)。我在实际测试中发现,当用户输入直接拼接到模板时,比如render_template_string(request.args.get(…...
电容是什么?一个“快充快放”的微型充电宝轮
一、前言:什么是 OFA VQA 模型? OFA(One For All)是字节跳动提出的多模态预训练模型,支持视觉问答、图像描述、图像编辑等多种任务,其中视觉问答(VQA)是最常用的功能之一——输入一张…...
