ELK(Elasticsearch、Logstash、Kbana)安装及Spring应用

Elasticsearch安装及Spring应用

  • 一、引言
  • 二、基本概念
    • 1.索引(Index)
    • 2.类型(Type)
    • 3.文档(Document)
    • 4.分片(Shard)
    • 5.副本(Replica)
  • 二、ELK搭建
    • 1.创建挂载的文件
    • 2.创建配置文件
    • 3.运行容器
      • 1. docker compose一键搭建
      • 2.单独运行
  • 三、项目集成
  • 版本注意

一、引言

Elasticsearch 是一个开源的分布式搜索和分析引擎,基于 Apache Lucene 构建。它提供了一个分布式、多租户的全文搜索引擎,具有高可用性、可扩展性和高性能等特点。Elasticsearch 广泛应用于日志分析、全文搜索、商业智能等领域。

二、基本概念

1.索引(Index)

定义:索引是 Elasticsearch 中存储数据的逻辑容器,类似于关系型数据库中的数据库。一个索引可以包含多个文档,并且可以在多个节点上进行分片存储。
示例:假设我们要构建一个电商平台的搜索系统,可以创建一个名为 products 的索引来存储所有商品信息。

2.类型(Type)

定义:在 Elasticsearch 7.x 及以前的版本中,类型是索引内部的逻辑分区,类似于关系型数据库中的表。但从 Elasticsearch 8.x 开始,类型已被弃用,一个索引中只能有一个 “_doc” 类型。
历史示例(7.x 及以前):在 products 索引中,可以定义 clothes、electronics 等不同类型来区分不同类别的商品。

3.文档(Document)

定义:文档是 Elasticsearch 中存储的基本数据单元,类似于关系型数据库中的一行记录。文档以 JSON 格式表示,包含一个或多个字段。
示例:一个商品文档可能如下所示:

{"id": 1,"name": "iPhone 15","price": 999,"category": "electronics"
}

4.分片(Shard)

定义:为了实现分布式存储和处理,索引会被划分为多个分片。每个分片是一个独立的 Lucene 索引,可以存储部分文档数据。分片可以分布在不同的节点上,提高系统的可扩展性和容错性。
示例:如果我们将 products 索引划分为 5 个分片,那么每个分片将存储一部分商品文档。

5.副本(Replica)

定义:副本是分片的复制,用于提高数据的可用性和容错性。每个分片可以有零个或多个副本,副本会分布在不同的节点上。当某个节点出现故障时,副本可以接替该节点上的分片继续提供服务。
示例:如果我们为 products 索引的每个分片设置 1 个副本,那么总共会有 10 个分片(5 个主分片和 5 个副本分片)。

二、ELK搭建

ELK分别是Elasticsearch、Logstash、Kibana

  • Elasticsearch:存储大量日志,并为其创建索引,提供查询。

  • Logstash:负责从应用,也就是我们的程序的日志采集、处理加工数据给Elasticsearch

  • Kbana:从Elasticsearch搜索日志,并展示到页面,供用户使用。

1.创建挂载的文件

es挂载:

mkdir -p /usr/docker/elk/elasticsearch/{config,plugins,data,logs}

kibana挂载:

mkdir -p /usr/docker/elk/kibana/config

logstash挂载:

mkdir -p /usr/docker/elk/logstash/config

2.创建配置文件

ES挂载具体配置

vim /usr/docker/elk/elasticsearch/config/elasticsearch.yml
#输入下面命令:
http.host: 0.0.0.0
xpack.security.enabled: false

http.host:任何地址都可以访问。
xpack.security.enabled:关闭密码认证

Kibana挂载具体配置

vim /usr/docker/elk/kibana/config/kibana.yml
# 内容
server.host: "0.0.0.0" 
elasticsearch.url: "http://192.168.1.37:9200"  # 注意7.X以上版本用elasticsearch.hosts: ["http://192.168.1.37:9200"]
xpack.security.enabled: false

elasticsearch.hosts:指向es地址

Logstash挂载具体配置

vim /usr/docker/elk/logstash/config/logstash.yml
#内容:
http.host: "0.0.0.0"
xpack.monitoring.elasticsearch.url: http://192.168.1.37:9200# 注意7.X以上版本用elasticsearch.hosts: ["http://192.168.1.37:9200"]#记录存放:
cd  /usr/docker/elk/logstash/config
touch  log
chmod 777 log

配置mysql

vim /usr/docker/elk/logstash/config/logstash.confinput {stdin {}jdbc {jdbc_connection_string => "jdbc:mysql://192.168.1.103:3306/wpx_resource?characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=false&serverTimezone=Asia/Shanghai&nullCatalogMeansCurrent=true&allowPublicKeyRetrieval=true"jdbc_user => "root"jdbc_password => "Abc123!_"jdbc_driver_library => "/usr/share/logstash/config/mysql-connector-java-8.0.18.jar"jdbc_driver_class => "com.mysql.cj.jdbc.Driver"jdbc_paging_enabled => "true"jdbc_page_size => "3000"# 将 create_date 转换为时间戳statement => "SELECT resources_id, resources_name, resources_type, resources_size, resource_suffix, out_path, local_path, video_id, duration, all_parent_ids, parent_resource_id, parent_public_directory_ids, UNIX_TIMESTAMP(create_date) as create_date_timestamp, modify_date, create_by_id, create_by, modify_by_id, modify_by, is_share, is_public, tenant_id, download_num, public_resource_id, review_result, review_state, del_flag FROM resource_manage"schedule => "*/1 * * * *"use_column_value => falsetracking_column_type => "timestamp"# 使用转换后的字段名tracking_column => "create_date_timestamp"record_last_run => truejdbc_default_timezone => "Asia/Shanghai"last_run_metadata_path => "/usr/share/logstash/config/log"}
}output {elasticsearch {hosts => ["192.168.1.37:9200"]index => "resource_manage"document_id => "%{resources_id}"}stdout {codec => json_lines}
}

数据库连接配置:

  • jdbc_connection_string:指定要连接的 MySQL 数据库的连接字符串,包括数据库的地址(192.168.239.131)、端口(3306)、数据库名(test)以及一些连接参数(如字符编码和时区)。
  • jdbc_user 和 jdbc_password:分别是连接数据库的用户名和密码。
  • jdbc_driver_library:指定 MySQL JDBC 驱动的 JAR 文件路径。
  • jdbc_driver_class:指定 JDBC 驱动类的名称。

分页配置:

  • jdbc_paging_enabled:启用分页查询,设置为 true 表示开启分页功能。
  • jdbc_page_size:每次查询的记录数,这里设置为 300000。

查询配置:

  • statement:定义要执行的 SQL 查询语句,这里是从 sys_log 表中查询指定的列。

定时任务配置:

  • schedule:使用 cron 表达式指定查询的执行频率,*/1 * * * * 表示每分钟执行一次查询。

增量查询配置:

  • use_column_value:是否使用列的值来跟踪数据,这里设置为 false。
  • tracking_column_type:跟踪列的数据类型,这里是 timestamp 类型。
  • tracking_column:指定用于跟踪数据的列名,这里是 oper_time 列。
  • record_last_run:是否记录上次查询的时间,设置为 true 表示记录。
  • last_run_metadata_path:指定记录上次查询时间的文件路径。

时区配置:

  • jdbc_default_timezone:指定数据库的默认时区为 Asia/Shanghai。

注意需要自己下载mysql-connector-java-8.0.28.jar或者将本地的拷贝到挂载的logstash/config中

流水线指定上面的配置文件

vim /mydata/elk/logstash/config/pipelines.yml
#内容:- pipeline.id: resource_managepath.config: "/usr/share/logstash/config/logstash.conf"

最后/usr/docker/elk/logstash/config目录如下
在这里插入图片描述
防止保存没有修改权限,可以把上面建的文件夹和文件赋予修改权限:

chmod 777 文件名称

注意如果是6版本需要配置log4j2.properties文件

cd /usr/docker/elk/logstash/config
vim log4j2.properties
#添加内容
status = error
name = LogstashPropertiesConfig#filename = /usr/share/logstash/logsappender.rolling.type = RollingFile
appender.rolling.name = RollingFile
appender.rolling.fileName = logs/logstash.log
appender.rolling.filePattern = logs/logstash-%d{yyyy-MM-dd}-%i.log.gz
appender.rolling.layout.type = PatternLayout
appender.rolling.layout.pattern = [%d{ISO8601}][%-5p][%-25c] %m%n
appender.rolling.policies.type = Policies
appender.rolling.policies.time.type = TimeBasedTriggeringPolicy
appender.rolling.policies.time.interval = 1
appender.rolling.policies.time.modulate = true
#appender.rolling.policies.size.type = SizeBasedTriggeringPolicy
#appender.rolling.policies.size.size=50MB
#appender.rolling.strategy.type = DefaultRolloverStrategy
#appender.rolling.strategy.max = 5appender.console.type = Console
appender.console.name = plain_console
appender.console.layout.type = PatternLayout
appender.console.layout.pattern = [%d{ISO8601}][%-5p][%-25c] %m%nappender.json_console.type = Console
appender.json_console.name = json_console
appender.json_console.layout.type = JSONLayout
appender.json_console.layout.compact = true
appender.json_console.layout.eventEol = truerootLogger.level = ${sys:ls.log.level}
rootLogger.appenderRef.rolling.ref = RollingFile
rootLogger.appenderRef.console.ref = ${sys:ls.log.format}_console

因为不同版本有不同的配置所以最好还是先不挂载进行运行。然后将里面的配置文件考出来之后修改,然后删除容器后重新挂载修改

3.运行容器

elasticsearch、kibana、logstash版本必须一致。如果使用springboot集成需要注意和spring版本统一。

1. docker compose一键搭建

在elk目录创建:

vim docker-compose.yml

内容如下:

services:elasticsearch:image: elasticsearch:6.5.4container_name: elasticsearchports:- "9200:9200"- "9300:9300"environment:- cluster.name=elasticsearch- discovery.type=single-node- "ES_JAVA_OPTS=-Xms512m -Xmx512m"volumes:- /usr/docker/elk/elasticsearch/plugins:/usr/share/elasticsearch/plugins- /usr/docker/elk/elasticsearch/data:/usr/share/elasticsearch/data- /usr/docker/elk/elasticsearch/logs:/usr/share/elasticsearch/logskibana:image: kibana:6.5.4container_name: kibanaports:- "5601:5601"depends_on:- elasticsearchenvironment:I18N_LOCALE: zh-CNvolumes:- /usr/docker/elk/kibana/config/kibana.yml:/usr/share/kibana/config/kibana.ymllogstash:image: logstash:6.5.4container_name: logstashports:- "5044:5044"volumes:- /usr/docker/elk/logstash/config:/usr/share/logstash/configdepends_on:- elasticsearch

使用docker compose 命令运行

一定要在docker-compose.yml所在目录执行命令!!

docker compose up -d

2.单独运行

运行elasticsearch

docker run --name elasticsearch -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" -e ES_JAVA_OPTS="-Xms64m -Xmx512m" -v /usr/docker/elk/elasticsearch/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml -v /usr/docker/elk/elasticsearch/data:/usr/share/elasticsearch/data -v  /usr/docker/elk/elasticsearch/plugins:/usr/share/elasticsearch/plugins -d elasticsearch:6.5.4

运行Kibana

docker run --name kibana -v /usr/docker/elk/kibana/config/kibana.yml:/usr/share/kibana/config/kibana.yml -p 5601:5601 -d kibana:6.5.4

运行Logstash

docker run -d -p 5044:5044 -v /usr/docker/elk/logstash/config:/usr/share/logstash/config --name logstash logstash:6.5.4

三、项目集成

我这里使用的是spring-boot-starter-data-elasticsearch包集成。需要注意版本限制。

maven引入依赖

		<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-elasticsearch</artifactId></dependency>

修改yml文件
根据版本不同有的可能不一样。需要自己查看自己版本的

  data:elasticsearch:cluster-nodes: 192.168.1.37:9200cluster-name: elasticsearch

定义映射对象

import com.baomidou.mybatisplus.extension.activerecord.Model;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.springframework.data.annotation.Id;
import org.springframework.data.elasticsearch.annotations.Document;
import org.springframework.data.elasticsearch.annotations.Field;
import org.springframework.data.elasticsearch.annotations.FieldType;import java.math.BigDecimal;
import java.time.LocalDateTime;/*** 资源管理-es映射** @date 2025年03月13日13:15:34*/
@EqualsAndHashCode(callSuper = true)
@Data
@Document(indexName = "resource_manage", type = "doc", useServerConfiguration = true, createIndex = false)
public class EsResourceManage extends Model<EsResourceManage> {private static final long serialVersionUID = 1L;/*** id*/@Idprivate String resources_id;/*** 资源名称*/@Field(type = FieldType.Text)private String resources_name;/*** 资源类型(1:文件夹,2:视频,3:文档,4:图片,5:音频,6:模型)*/private String resources_type;/*** 资源大小*/private BigDecimal resources_size;/*** 资源后缀(doc,txt,jpg,mp4等)*/private String resource_suffix;/*** 外部存储路径*/private String out_path;}

方式一:继承 ElasticsearchRepository

ElasticsearchRepository 提供了一个高级的抽象,使得你可以在不编写任何实现代码的情况下,直接使用预定义的CRUD方法和查询方法。

/*** es映射-Repository类* @author :lzy* @date :2025/3/13 13:16*/
@Repository
public interface EsResourceManageRepository extends ElasticsearchRepository<EsResourceManage, String> {}

然后就可以直接使用了,属性jpa的同学可以直接上手
在这里插入图片描述

方式二:使用ElasticsearchRestTemplate

与 ElasticsearchRepository 相比,ElasticsearchRestTemplate 更适合用于复杂查询 。
比如 多个条件组合、范围查询、模糊查询、聚合查询等复杂场景
还支持分页、排序、过滤等高级功能

@RestController
@RequestMapping("/employeeInfo")
public class EmployeeElasticController {@Autowiredprivate ElasticsearchRestTemplate elasticsearchRestTemplate;@RequestMapping("/template/save")public String  templateSave() throws Exception  {SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");EmployeeInfo employeeInfo = new EmployeeInfo(8888L, "2001", "张八", "zhangsan", "Java", 1, 19, new BigDecimal("12500.01"), simpleDateFormat.parse("2019-09-10"), "备注");elasticsearchRestTemplate.save(employeeInfo);return "success";}

版本注意

springboot 、spring-data-elasticsearch、elasticserach的版本对应关系
在这里插入图片描述
对照地址

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/35430.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Redis,从数据结构到集群的知识总结

Redis基础部分 2. 数据结构 redis底层使用C语言实现&#xff0c;这里主要分析底层数据结构 2.1 动态字符串(SDS) 由于C底层的字符串数组一旦遇到’\0’就会认为这个字符串数组已经结束&#xff0c;意味着无法存储二进制数据&#xff08;如图片、音频等&#xff09;&#xff…

【redis】Jedis 操作 Redis 基础指令(下)

列表操作 lpush/rpush 和 lpop/rpop 将一个或者多个元素从左/右侧放入&#xff08;头/尾插&#xff09;到 list 中 依次头插 从 list 左/右侧取出元素&#xff08;即头/尾删&#xff09; public static void test1(Jedis jedis) { jedis.flushAll(); long n jedis.lpush(…

基于消失点标定前视相机外参

1. 消失点 艺术家&工程师在纸上表现立体图时,常用一种透视法,这种方法源于人们的视觉经验:近大远小,且平行的直线都消失于无穷远处同一个点。就像我们观察两条平行的铁轨时会觉得他们相交于远处的一点,我们把这个点称为消失点。 图1 铁轨组成的消失点 2. 在标定中的应…

TypeScript接口 interface 高级用法完全解析

TypeScript接口 interface 高级用法完全解析 mindmaproot(TypeScript接口高级应用)基础强化可选属性只读属性函数类型高级类型索引签名继承与合并泛型约束设计模式策略模式工厂模式适配器模式工程实践声明合并类型守卫装饰器集成一、接口核心机制深度解析 1.1 类型兼容性原理 …

Vue3 Pinia $subscribe localStorage的用法 Store的组合式写法

Vue3 Pinia $subscribe 可以用来监视Stroe数据的变化 localStorage的用法 localStorage中只能存字符串&#xff0c;所有对象要选转成json字符串 定义store时&#xff0c;从localStorage中读取数据talkList可能是字符串也可能是空数组 Store的组合式写法 直接使用reactiv…

新版AndroidStudio / IDEA上传项目到Gitee

目录 1.Gitee创建仓库 2.填写仓库的信息 3.创建成功后复制仓库的地址 4.检查AndroidStudio是否配置Git 5.点击测试 6.之后Create Git Repository 7.添加到本地仓库 8.提交项目 9.添加上传仓库的地址 10.上传成功 11.去Gitee上刷新检查 1.Gitee创建仓库 2.填写仓库的…

用 Vue 3.5 TypeScript 重新开发3年前甘特图的核心组件

回顾 3年前曾经用 Vue 2.0 开发了一个甘特图组件&#xff0c;如今3年过去了&#xff0c;计划使用Vue 3.5 TypeScript 把组件重新开发&#xff0c;有机会的话再开发一个React版本。 关于之前的组件以前文章 Vue 2.0 甘特图组件 下面录屏是是 用 Vue 3.5 TypeScript 开发的目前…

C语言【数据结构】:时间复杂度和空间复杂度.详解

引言 详细介绍什么是时间复杂度和空间复杂度。 前言&#xff1a;为什么要学习时间复杂度和空间复杂度 算法在编写成可执行程序后&#xff0c;运行时需要耗费时间资源和空间(内存)资源。因此衡量一个算法的好坏&#xff0c;一般是从时间和空间两个维度来衡量的&#xff0c;即时…

Matlab 基于专家pid控制的时滞系统

1、内容简介 Matlab 185-基于专家pid控制的时滞系统 可以交流、咨询、答疑 2、内容说明 略 在处理时滞系统&#xff08;Time Delay Systems&#xff09;时&#xff0c;使用传统的PID控制可能会面临挑战&#xff0c;因为时滞会导致系统的不稳定或性能下降。专家PID控制通过结…

MyBatis源码分析のSql执行流程

文章目录 前言一、准备工作1.1、newExecutor 二、执行Sql2.1、getMappedStatement2.2、query 三、Cache装饰器的执行时机四、补充总结 前言 本篇主要介绍MyBatis解析配置文件完成后&#xff0c;执行sql的相关逻辑&#xff1a; public class Main {public static void main(Str…

【MySQL】数据库基础

目录 一、什么是数据库1.1 为什么要有数据库1.2 数据库的本质是什么1.3 在Linux下看一下数据库 二、主流数据库三、基本使用3.1 连接服务器3.2 服务器&#xff0c;数据库&#xff0c;表关系 四、MySQL架构五、SQL分类六、存储引擎6.1 存储引擎是什么6.2 查看存储引擎6.3 存储引…

算是解决可以访问github但无法clone的问题

本文的前提是使用了**且可以正常访问github 查看代理的端口 将其配置到git 首先查看git配置 git config --list然后添加配置&#xff0c;我这边使用的是Hiddfy默认的端口是12334&#xff0c;如果是clash应该是7890 git config --global http.proxy 127.0.0.1:12334其他 删除…

SpringBoot第三站:配置嵌入式服务器使用外置的Servlet容器

目录 1. 配置嵌入式服务器 1.1 如何定制和修改Servlet容器的相关配置 1.server.port8080 2. server.context-path/tx 3. server.tomcat.uri-encodingUTF-8 1.2 注册Servlet三大组件【Servlet&#xff0c;Filter&#xff0c;Listener】 1. servlet 2. filter 3. 监听器…

AdaLoRA 参数 配置:CAUSAL_LM“ 表示因果语言模型任务

AdaLoRA 参数 配置:CAUSAL_LM" 表示因果语言模型任务 config = AdaLoraConfig( init_r=16, # 增加 LoRA 矩阵的初始秩 lora_alpha=32, target_modules=[“q_proj”, “v_proj”], lora_dropout=0.1, bias=“none”, task_type=“CAUSAL_LM” ) 整体功能概述 AdaLoraCon…

IP 协议

文章目录 IP 协议概述数据包格式首部校验和实例分析实例一 分片抓包分析参考 本文为笔者学习以太网对网上资料归纳整理所做的笔记&#xff0c;文末均附有参考链接&#xff0c;如侵权&#xff0c;请联系删除。 IP 协议 概述 IP 协议是 TCP/IP 协议簇中的核心协议&#xff0c;也…

日常开发记录-radioGroup组件

日常开发记录-radioGroup组件 1.前提2.问题&#xff1a;无限循环调用3.解释Vue 事件传播机制分析与无限循环原因解释4.解决 1.前提 在上一章的&#xff0c;我们实现了radio组件。从这进入了解 新增个radioGroup组件呢。 <template><divclass"q-radio-group&quo…

API调用comfyui工作流,做一个自己的app,chatgpt给我写的前端,一键创建自己的卡通形象,附源码

前言 工具介绍 首先 comfyui你是少不了的&#xff0c;这个是工作流的后端支持&#xff0c;用这个去调试工作流和生成API可调用文件 前端我们就用很流行的gradio吧&#xff0c;什么你一时半会没有学gradio的计划&#xff0c;没事&#xff0c;笔者也没系统学过&#xff0c;我干…

【网络】数据流(Data Workflow)Routes(路由)、Controllers(控制器)、Models(模型) 和 Middleware(中间件)

在图片中&#xff0c;数据流&#xff08;Data Workflow&#xff09;描述了应用程序中数据的流动过程&#xff0c;涉及 Routes&#xff08;路由&#xff09;、Controllers&#xff08;控制器&#xff09;、Models&#xff08;模型&#xff09; 和 Middleware&#xff08;中间件&…

【通义千问】蓝耘智算 | 智启未来:蓝耘MaaS×通义QwQ-32B引领AI开发生产力

【作者主页】Francek Chen 【专栏介绍】 ⌈ ⌈ ⌈人工智能与大模型应用 ⌋ ⌋ ⌋ 人工智能&#xff08;AI&#xff09;通过算法模拟人类智能&#xff0c;利用机器学习、深度学习等技术驱动医疗、金融等领域的智能化。大模型是千亿参数的深度神经网络&#xff08;如ChatGPT&…

Scratch 3.0安装包,支持Win7/10/11、Mac电脑手机平板、少儿便编程的启蒙软件。

Scratch是一款由麻省理工学院&#xff08;MIT&#xff09; 设计开发的少儿编程工具。其特点是&#xff1a;使用者可以不认识英文单词&#xff0c;也可以不使用键盘&#xff0c;就可以进行编程。构成程序的命令和参数通过积木形状的模块来实现。用鼠标拖动指令模块到脚本区就可以…