使用docker-compose安装ELK(elasticsearch,logstash,kibana)并简单使用

embedded/2025/1/18 3:40:08/

首先服务器上需要安装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": {}}
}


http://www.ppmy.cn/embedded/154840.html

相关文章

【docker踩坑记录】

docker踩坑记录 踩坑记录(持续更新中.......)docker images 权限问题 踩坑记录(持续更新中…) docker images 权限问题 permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Head "http://%2Fvar%2Frun%2Fdocker.s…

Android SystemUI——基础简介(一)

Android SystemUI 是 Android 操作系统的一部分,负责处理与用户界面相关的所有元素。它是 Android 设备上的一个关键组件,管理着屏幕顶部的状态栏(显示时间、信号强度、电池电量等)、屏幕底部的导航栏(返回、主页、最近的应用程序等按钮)、锁屏界面以及各种系统级别的交互…

Oracle分析工具-Logminer

关键字&#xff1a; Oracle&#xff0c;分析工具&#xff0c;增量解析 1. 概述 Logminer是自Oracle8i以后推出的分析工具&#xff0c;它可以读取 Oracle 数据库的归档日志和在线日志&#xff0c;并将其转换为易于分析的格式。logminer分析工具由一组PL/SQL包和一些动态视图组…

【网络】TLS四次握手

HTTPS和HTTP主要不同就是多一个TLS的一个流程&#xff0c;是一个在传输层的安全协议。 四次握手&#xff1a; 第一次握手&#xff1a;客户端向服务端发送加密通信请求&#xff08;ClientHello&#xff09;。在这一步主要发送以下信息&#xff1a; 客户端支持的TLS版本客户端…

20250114面试鸭特训营第22天

更多特训营笔记详见个人主页【面试鸭特训营】专栏 250114 1. TCP/IP 四层模型是什么&#xff1f; TCP/IP四层模型是一个基于实际网络通信的分层协议模型&#xff0c;主要用于描述互联网通信协议的体系结构。它将网络通信过程分为四个层次&#xff0c;分别为&#xff1a;网络接…

[操作系统] 深入理解操作系统的概念及定位

概念 任何计算机系统都包含⼀个基本的程序集合&#xff0c;称为操作系统(OS)。 其核心功能如图片所示&#xff0c;包括&#xff1a; 内核 (Kernel)&#xff1a; 内核是操作系统的核心部分&#xff0c;被认为是狭义上的操作系统&#xff0c;直接与硬件打交道。负责进程管理、内…

nvm 管理nodejs,安装pnpm后报错,出现:pnpm不是内部或外部命令,也不是可运行的程序或批处理文件。

系统环境&#xff1a;window11&#xff0c;exe安装版nvm出现的该问题&#xff0c;&#xff08;如果是解压缩配置版本&#xff0c;环境变量自己配置&#xff0c;可能就不会出现这个问题了&#xff09; 注意&#xff1a;安装nvm时&#xff0c;两个路径尽量放到一个盘上&#xff…

28:CAN总线入门一:CAN的基本介绍

CAN总线入门 1、CAN总线简介和硬件电路1.1、CAN简要介绍1.2、硬件电路1.3、CAN总线的电平标准 2、帧格式2.1、数据帧&#xff08;掌握&#xff09;2.2、遥控帧&#xff08;掌握&#xff09;2.3、错误帧&#xff08;了解&#xff09;2.4、过载帧&#xff08;了解&#xff09;2.5…