当前位置: 首页 > news >正文

[微服务]ELK Stack安装与配置全指南

目录

一、ELK相关介绍

1.1 什么是ELK Stack

1.2 ELK核心组件与功能

1.3 ELK优势

1.4 ES数据库结构对比SqlServer

二、安装ELK

2.1 window安装

2.2 Docker下环境搭建

2.2.1 安装7.16.3版本ElasticSearch

2.2.2 安装7.16.3版本Kibana :

2.2.3 安装8.0.0版本ElasticSearch

2.2.4 配置支持跨域

2.2.5 安装插件

2.3 集群构建

2.3.1 环境准备

2.3.2 集群构建思路

2.3.3 docker-Compose集群配置

三、文章总结


一、ELK相关介绍

1.1 什么是ELK Stack

        ‌ELK Stack是由Elasticsearch、Logstash和Kibana三个核心组件构成的日志管理与分析解决方案,支持日志的收集、存储、检索及可视化。Java开发的高性能分布式日志系统,支持亿级的查询。

        官网:ELK Stack:Elasticsearch、Kibana、Beats 和 Logstash | Elastic

1.2 ELK核心组件与功能

  1. Elasticsearch(ES)‌高性能的数据库引擎

    • 分布式搜索与分析引擎,负责海量数据的实时存储、索引与检索,基于Lucene构建,支持水平扩展与高可用架构。‌‌
    • 特点:自动分片、副本机制、RESTful API接口,适用于全文搜索和结构化数据分析。‌‌
  2. Logstash‌ 收集和保存数据的工具

    • 数据收集与处理管道,分为输入(Input)、过滤(Filter)、输出(Output)三个阶段,支持200+插件,可解析非结构化数据(如日志文件)并进行格式转换。‌‌
    • 资源消耗较高,常与轻量级工具(如Filebeat)配合使用。‌‌
  3. Kibana‌。操作使用管理 ES数据库的客户端

    • 数据可视化平台,提供交互式仪表盘、图表及DevTools工具,便于用户查询和分析Elasticsearch中的数据。‌‌

4.Beats: 高性能是数据工具.(可选组件)

        Beats 不是一个单独的软件,而是一系列的数据采集器.每一个 Beat 都是一个独立的组件,负责采集特定类型的数据,并将这些数据发送到 Elasticsearch 或者 Logstash 进行后续处理。例如,Filebeat 专门用于收集和转发日志文件,Metricbeat 用于收集系统和服务的运行指标,Packetbeat 用于收集网络流量数据等。

1.3 ELK优势

  1. 支持分布式,支持集群部署,便于横向扩展和高可用。
  2. 大数据量支持,PB级数据查询---关系型数据库没法比
  3. 毫秒级响应
  4. 添加索引时性能稳定
  5. 支持频繁更新(数据)(不推荐)
  6. 添加索引,支持近时搜索(1秒延迟)
  7. 支持结构化查询:支持RESTful API,支持JSON数据结构通过 HTTP查询数据,关系型数据库中支持的各种操作,基本上都可以在这里完成;

1.4 ES数据库结构对比SqlServer

SqlServer数据库ES数据库
数据库Index索引库:以索引为单位,内存保存,提高性能
数据库表type类型: ES在8.0版本去掉类型,但是默认有类型:_doc
表-行document 文档: 一个文档就类似于一行数据
表-列field 字段 (非分词字段和分词字段)

二、安装ELK

2.1 window安装

        PS:ES是java开发,所以需要安装jdk,建议安装jdk --version 11 +

        1.检查本地是否安装jdk

java -version  

        2.Jdk下载地址和安装:

https://download.oracle.com/java/17/latest/jdk-17_windows-x64_bin.exe ( sha256)

2.2 Docker下环境搭建

环境准备:

Linux-CentOS7
Docker version: Docker version 23.0.3,
elasticsearch官网:
https://www.elastic.co/guide/en/elasticsearch/reference/current/docker.html

2.2.1 安装7.16.3版本ElasticSearch

#拉取镜像
docker pull elasticsearch:7.16.3
#如果没有可用的镜像源,可以用官网自带的下载
docker pull docker.elastic.co/elasticsearch/elasticsearch:7.16.3
#使用docker镜像启动容器   ElasticSearch单节点集群
docker run -p 9200:9200 -p 9300:9300 -d -e "discovery.type=single-node" -e ES_JAVA_OPTS="-Xms512m -
Xmx512m" elasticsearch:7.16.3
#下面是通过镜像ID启动容器
docker run -p 9200:9200 -p 9300:9300 -d -e "discovery.type=single-node" -e ES_JAVA_OPTS="-Xms512m -
Xmx512m" 镜像id
#支持跨域的启动
docker run -p 9200:9200 -p 9300:9300 -d -e "discovery.type=single-node" -e ES_JAVA_OPTS="-Xms512m -
Xmx512m" -e"http.cors.enabled=true" -e "http.cors.allow-origin="*"" elasticsearch:7.16.3

         ElasticSearch 启动都是集群 无论是一个还是多个,一个就是单节点集群。浏览器访问 ip:9200  如果出现以下界面就是安装成功。

ps:在使用docker命令启动时,注意相关参数的正确写入,否则会出现如下异常“Unrecognized option: - ”

2.2.2 安装7.16.3版本Kibana :

#创建网络(两种都可以,一种是默认一种使用桥接网络)
#保证kibana可以访问es
docker network create elastic#拉取镜像
docker pull docker.elastic.co/kibana/kibana:7.16.3
#运行kibana
docker run --name kib01-test --net elastic -p 5601:5601 -e
"ELASTICSEARCH_HOSTS=http://ip:9200" kibana:7.16.3

        Kibana默认的端口监听: 5601

2.2.3 安装8.0.0版本ElasticSearch

        8.0后的ES安装和以前版本会有不同。

# 拉取镜像
docker pull docker.elastic.co/elasticsearch/elasticsearch:8.0.0
docker pull docker.elastic.co/kibana/kibana:8.0.0
# 创建网络
docker network create elastic
# 启动 Elastic Search 8.0.0
docker run -it --name elasticsearch --net elastic --restart=always -p 9200:9200 -p 9300:9300 -e
"discovery.type=single-node" docker.elastic.co/elasticsearch/elasticsearch:8.0.0
# 第一次的日志中会打印出默认用户elastic的初始密码,以及用于Kibana启动的enrollment token(半小时有效)注意保存

        密码记录:

Elasticsearch安全功能已自动配置!
身份验证已启用,群集连接已加密。
-> Password for the elastic user (reset with `bin/elasticsearch-reset-password -u elastic`):
aV3Fl5SeEk6TttXnMiSB
-> HTTP CA certificate SHA-256 fingerprint:
f8577d958c7845dd88edbfd1bc140e6618dc19c755607671e8330074de9ec36e
-> Configure Kibana to use this cluster:
* Run Kibana and click the configuration link in the terminal when Kibana starts.
* Copy the following enrollment token and paste it into Kibana in your browser (valid for the next 30
minutes):
eyJ2ZXIiOiI4LjAuMCIsImFkciI6WyIxNzIuMjAuMC4yOjkyMDAiXSwiZmdyIjoiZjg1NzdkOTU4Yzc4NDVkZDg4ZWRiZmQxYmMxNDB
lNjYxOGRjMTljNzU1NjA3NjcxZTgzMzAwNzRkZTllYzM2ZSIsImtleSI6Im9VZVdSWDhCMUw2ZFBhOGJ6SE81OjYyNDF1SVZSUWd5dk
s5ZDdXU1hZZlEifQ==
-> Configure other nodes to join this cluster:
* Copy the following enrollment token and start new Elasticsearch nodes with `bin/elasticsearch --
enrollment-token <token>` (valid for the next 30 minutes):
eyJ2ZXIiOiI4LjAuMCIsImFkciI6WyIxNzIuMjAuMC4yOjkyMDAiXSwiZmdyIjoiZjg1NzdkOTU4Yzc4NDVkZDg4ZWRiZmQxYmMxNDB
lNjYxOGRjMTljNzU1NjA3NjcxZTgzMzAwNzRkZTllYzM2ZSIsImtleSI6Im8wZVdSWDhCMUw2ZFBhOGJ6SFByOnU2RkR6cG5TUjVTS3
NmZzJVMUhrdncifQ==
If you're running in Docker, copy the enrollment token and run:
`docker run -e "ENROLLMENT_TOKEN=<token>" docker.elastic.co/elasticsearch/elasticsearch:8.0.0`
------------------------------------------------------------------------------------------------------

        运行8.0.0Kibana

# 启动 Kibana 8.0.0
docker run --name kibana --net elastic -p 5601:5601 docker.elastic.co/kibana/kibana:8.0.0
# 第一次的日志中会打印出启动配置网址,在浏览器打开并输入enrollment token,等待完成配置
# 使用用户名elastic和之前保存的密码登录

2.2.4 配置支持跨域

        1、修改docker中elasticsearch的elasticsearch.yml文件--支持跨域

        ps:修改了网络配置,重启网卡后,如果docker 容器链接不上,重启docker引擎

#进入到容器
docker exec -it elasticsearch /bin/bash
修改
vi config/elasticsearch.ym
增加配置信息
http.cors.enabled: true
http.cors.allow-origin:"*"
#重启容器

        2、在启动容器时写入环境变量

docker run -p 9200:9200 -p 9300:9300 -d -e "discovery.type=single-node" -e ES_JAVA_OPTS="-Xms512m -Xmx512m" -e"http.cors.enabled=true" -e "http.cors.allow-origin="*"" elasticsearch:7.16.3

2.2.5 安装插件

        1、安装ik分词器

# 安装ik分词器
# 下载 https://github.com/medcl/elasticsearch-analysis-ik/releases
4、配置支持跨域
修改docker中elasticsearch的elasticsearch.yml文件--支持跨域
docker cp elasticsearch-analysis-ik-8.0.0.zip elasticsearch:/usr/share/elasticsearch/plugins
# 进入elasticsearch命令行
cd plugins/
mkdir ik
mv elasticsearch-analysis-ik-8.0.0.zip ik/
cd ik/
unzip elasticsearch-analysis-ik-8.0.0.zip
rm elasticsearch-analysis-ik-8.0.0.zip
# 重启es和kibana
docker restart elasticsearch
docker restart kibana

# 在kibana中测试ik分词器
GET _analyze
{
"text" : "测试一下分词器",
"analyzer": "ik_max_word"
}

        2、支持Sql查询:

1.获取elasticsearch容器的ID
docker ps  
2.进入elasticsearch的docker容器
docker exec -it 容器ID /bin/bash
3.安装elasticsearch对应的elasticsearch-sql插件
./bin/elasticsearch-plugin install https://github.com/NLPchina/elasticsearch-
sql/releases/download/7.16.3.0/elasticsearch-sql-7.16.3.0.zip
4.Elasticsearch-sql默认支持查询最大记录数10000,更改最大查询值100000000
curl -X PUT --header 'Content-Type: application/json' --header 'Accept: application/json'        
http://192.168.1.131:9200/logs*/_settings -d '{"index":{ "max_result_window":1000000000}}'
备注:http://192.168.1.131:9200替换成对应的elasticsearch服务器地址
5.退出容器

        3、浏览器插件

  • Multi Elasticsearch Head
  • Elasticsearch Tools
  • 国人开发的浏览器插件:es-client

2.3 集群构建

        官方提供的ElasticSearch 只会有32个G,ElasticSearch 号称百亿数据库,所以必须的支持扩容,支持集群.

        一个ElasticSearch 服务器支持32个G,那么10个ElasticSearch 服务器就可以支持320个G。。。。。

        ElasticSearch 生来就是集群的,前面Docker的启动的其实也是集群,叫单节点集群。

2.3.1 环境准备

Linux系统:CentOS7

Docker version: 26.1.4

2.3.2 集群构建思路

        启动多个Docker,每一个Docker就是一个独立的系统,每个Dokcer中独立的有ElasticSearch的进

程;其实就是多个Docker 容器集群。每一个启动的Docker配置好配置文件即可;如果使用Docker

Compose来做,可以做到一键启动集群;

        集群前环境准备:

1.挂载的目录必须设置完全权限: chmod 777 /root/elk/data01

2.调高vm线程数限制 (解决Elasticsearch启动时出现的vm.max_map_count不足问题,需要调整Linux系统的内核参数)

        若集群时出现如下问题:

#进入配置文件
vim /etc/sysctl.conf
#调整vm线程数
vm.max_map_count=655360 
#执行生效
sysctl –p

     3、或者直接执行下面代码 sysctl -w vm.max_map_count=655360

        临时修改,重启后失效:

sudo sysctl -w vm.max_map_count=262144

2.3.3 docker-Compose集群配置

1、配置ES集群所在文件夹结构

   

2、yml文件内容

version: '3.4'services:es01:image: "docker.elastic.co/elasticsearch/elasticsearch:7.16.3"container_name: es01ports:- "9200:9200"- "9300:9300"environment:node.name: es01discovery.seed_hosts: es01,es02,es03cluster.initial_master_nodes: es01,es02,es03cluster.name: myclusterES_JAVA_OPTS: -Xms512m -Xmx512mvolumes:- "./data01:/usr/share/elasticsearch/data"- "./plugins/ik:/usr/share/elasticsearch/plugins/ik" - "./plugins/sql:/usr/share/elasticsearch/plugins/sql"ulimits:memlock:soft: -1hard: -1es02:image: "docker.elastic.co/elasticsearch/elasticsearch:7.16.3"container_name: es02ports:- "9201:9200"- "9301:9300"environment:node.name: es02discovery.seed_hosts: es01,es02,es03cluster.initial_master_nodes: es01,es02,es03cluster.name: myclusterES_JAVA_OPTS: -Xms512m -Xmx512mvolumes:- "./data02:/usr/share/elasticsearch/data"- "./plugins/ik:/usr/share/elasticsearch/plugins/ik" - "./plugins/sql:/usr/share/elasticsearch/plugins/sql"ulimits:memlock:soft: -1hard: -1es03:image: "docker.elastic.co/elasticsearch/elasticsearch:7.16.3"container_name: es03ports:- "9202:9200"- "9302:9300"environment:node.name: es03discovery.seed_hosts: es01,es02,es03cluster.initial_master_nodes: es01,es02,es03cluster.name: myclusterES_JAVA_OPTS: -Xms512m -Xmx512mvolumes:- "./data03:/usr/share/elasticsearch/data"- "./plugins/ik:/usr/share/elasticsearch/plugins/ik" - "./plugins/sql:/usr/share/elasticsearch/plugins/sql"ulimits:memlock:soft: -1hard: -1kibana:image: docker.elastic.co/kibana/kibana:7.16.3container_name: kibanadepends_on:- es01- es02- es03ports:- "5601:5601"- "9600:9600"environment:SERVERNAME: kibanaELASTICSEARCH_HOSTS: '["http://es01:9200","http://es02:9200","http://es03:9200"]'ES_JAVA_OPTS: -Xmx512m -Xms512m

三、文章总结

        Elasticsearch (ES)是一个基于 Lucene 的开源搜索引擎,它不但稳定、可靠、快速,而且也具有良好的水平扩展能力,是专门为分布式环境设计的,Elasticsearch是面向文档型数据库。很多商城项目中会把商品订单信息存储到ES中。没有最好的技术只有最适合项目。

http://www.dtcms.com/a/332601.html

相关文章:

  • Pytest项目_day17(随机测试数据)
  • 大模型微调分布式训练-大模型压缩训练(知识蒸馏)-大模型推理部署(分布式推理与量化部署)-大模型评估测试(OpenCompass)
  • 专题:2025跨境电商市场布局、供应链与产业带赋能报告 |附130+份报告PDF、原数据表汇总下载
  • Sparse-ICP—(3) 点到面稀疏迭代最近点算法(matlab版)
  • PDF Replacer:高效便捷的PDF文档内容替换专家
  • 国内多光谱相机做得好的厂家有哪些?-多光谱相机品牌厂家
  • 8月4日实训考察:重庆五一职院走进成都国际影像产业园
  • ffmpeg-调整视频分辨率
  • 网站与政务新媒体自查情况的报告工具功能
  • Web攻防-大模型应用LLM搭建接入第三方内容喂养AI插件安全WiKI库技术赋能
  • 编程练习---邮费计算
  • 计算机网络 THU 考研专栏简介
  • SDN控制器是什么?它在网络里的作用相当于什么?
  • Easy Rules 规则引擎详解
  • 数据结构:二叉树的表示方式(Representation of Binary Trees)
  • 基于MIMO的MATLAB预编码
  • 【Kubernetes知识点问答题】kubernetes 控制器
  • 力扣400:第N位数字
  • JavaScript性能优化30招
  • 「 CentOS7 安装部署k8s」
  • 2025新版 工业级定位系统哪家技术好?
  • 用3D打印重新定义骑行-中科米堆CASAIM自行车座椅个性化设计
  • 源网荷储充:零碳园区实现 “净零排放” 的系统解决方案
  • WinForm 简单用户登录记录器实现教程
  • 【3D图像技术分析及实现】3DGS与深度学习网络结合以实现跨场景迁移的研究调研
  • LLaMA Factory 是一个简单易用且高效的大型语言模型(Large Language Model)训练与微调平台。
  • Product Hunt 每日热榜 | 2025-08-15
  • 【Linux基础知识系列】第九十五篇 - 使用who和w命令查看登录用户
  • Java——ACM编程
  • python的美食交流社区系统