使用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…...
DeepSeek 赋能智慧能源:微电网优化调度的智能革新路径
目录 一、智慧能源微电网优化调度概述1.1 智慧能源微电网概念1.2 优化调度的重要性1.3 目前面临的挑战 二、DeepSeek 技术探秘2.1 DeepSeek 技术原理2.2 DeepSeek 独特优势2.3 DeepSeek 在 AI 领域地位 三、DeepSeek 在微电网优化调度中的应用剖析3.1 数据处理与分析3.2 预测与…...
Python:操作 Excel 折叠
💖亲爱的技术爱好者们,热烈欢迎来到 Kant2048 的博客!我是 Thomas Kant,很开心能在CSDN上与你们相遇~💖 本博客的精华专栏: 【自动化测试】 【测试经验】 【人工智能】 【Python】 Python 操作 Excel 系列 读取单元格数据按行写入设置行高和列宽自动调整行高和列宽水平…...
Redis相关知识总结(缓存雪崩,缓存穿透,缓存击穿,Redis实现分布式锁,如何保持数据库和缓存一致)
文章目录 1.什么是Redis?2.为什么要使用redis作为mysql的缓存?3.什么是缓存雪崩、缓存穿透、缓存击穿?3.1缓存雪崩3.1.1 大量缓存同时过期3.1.2 Redis宕机 3.2 缓存击穿3.3 缓存穿透3.4 总结 4. 数据库和缓存如何保持一致性5. Redis实现分布式…...
Golang dig框架与GraphQL的完美结合
将 Go 的 Dig 依赖注入框架与 GraphQL 结合使用,可以显著提升应用程序的可维护性、可测试性以及灵活性。 Dig 是一个强大的依赖注入容器,能够帮助开发者更好地管理复杂的依赖关系,而 GraphQL 则是一种用于 API 的查询语言,能够提…...
【单片机期末】单片机系统设计
主要内容:系统状态机,系统时基,系统需求分析,系统构建,系统状态流图 一、题目要求 二、绘制系统状态流图 题目:根据上述描述绘制系统状态流图,注明状态转移条件及方向。 三、利用定时器产生时…...
现代密码学 | 椭圆曲线密码学—附py代码
Elliptic Curve Cryptography 椭圆曲线密码学(ECC)是一种基于有限域上椭圆曲线数学特性的公钥加密技术。其核心原理涉及椭圆曲线的代数性质、离散对数问题以及有限域上的运算。 椭圆曲线密码学是多种数字签名算法的基础,例如椭圆曲线数字签…...
C++ 求圆面积的程序(Program to find area of a circle)
给定半径r,求圆的面积。圆的面积应精确到小数点后5位。 例子: 输入:r 5 输出:78.53982 解释:由于面积 PI * r * r 3.14159265358979323846 * 5 * 5 78.53982,因为我们只保留小数点后 5 位数字。 输…...
Caliper 配置文件解析:config.yaml
Caliper 是一个区块链性能基准测试工具,用于评估不同区块链平台的性能。下面我将详细解释你提供的 fisco-bcos.json 文件结构,并说明它与 config.yaml 文件的关系。 fisco-bcos.json 文件解析 这个文件是针对 FISCO-BCOS 区块链网络的 Caliper 配置文件,主要包含以下几个部…...
vue3+vite项目中使用.env文件环境变量方法
vue3vite项目中使用.env文件环境变量方法 .env文件作用命名规则常用的配置项示例使用方法注意事项在vite.config.js文件中读取环境变量方法 .env文件作用 .env 文件用于定义环境变量,这些变量可以在项目中通过 import.meta.env 进行访问。Vite 会自动加载这些环境变…...
嵌入式学习笔记DAY33(网络编程——TCP)
一、网络架构 C/S (client/server 客户端/服务器):由客户端和服务器端两个部分组成。客户端通常是用户使用的应用程序,负责提供用户界面和交互逻辑 ,接收用户输入,向服务器发送请求,并展示服务…...
