ELK日志分析实战宝典之ElasticSearch从入门到服务器部署与应用

目录

ELK工作原理展示图

一、ElasticSearch介绍(数据搜索和分析)

1.1、特点

1.2、数据组织方式

1.3、特点和优势

1.3.1、分布式架构

1.3.2、强大的搜索功能

1.3.3、数据处理与分析

1.3.4、多数据类型支持

1.3.5、易用性与生态系统

1.3.6、高性能

1.3.7、灵活的数据模型

1.3.8、可视化和监控

1.4、Elasticsearch核心概念

二、Logstash介绍(数据处理和日志收集)

2.1、Logstash介绍

2.2、Logstash的stdin标注输入

2.3、Logstash的file输入文件

参数:

path

start_position

stat_interval

sincedb_path

discover_interval

exclude

ignore_older

2.4、Logstash过滤器值grok正则匹配

2.5、Logstash过滤器之mutate

2.6、Logstash过滤器之GeoIP地址查询

2.7、Logstash过滤器之useragent匹配归类

2.8、Logstash的output配置

2.9、Logstash的配置文件

三、Kibana介绍

四、ELK部署实战

4.1、Elasticsearch(ES)部署配置(Version: 8.17.0)

4.1.1、Elasticsearch(ES)下载安装

4.1.2、Elasticsearch(ES)配置

4.1.3、Elasticsearch配置参数解释

4.1.4、jvm堆大小配置

4.1.5、系统优化

4.1.6、启动ES


elk:日志搜集平台

Elastic StackELKElasticSearchLogstashKibana三个开源工具组成

ELK工作原理展示图

Logstash收集Appserver产生的log,并存放到ElasticSearch集群中,而Kibana则从ES集群中查询数据生成图标再返回给Browser

一、ElasticSearch介绍(数据搜索和分析)

ElasticSearch是一个基于Lucene的开源分布式搜索服务。用于处理大规模数据的快速检索和分析,并具有高可扩展性、高性能和强大的全文搜索能力。

1.1、特点

分布式,零配置,自动发现,索引自动分片,索引副本机制等。它提供了一个分布式多用户能力的全文搜索引擎。Elasticsearch是用Java开发的,并作为Apache许可条款下的开放源码发布,是第二流行的企业搜索引擎。设计用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。 在elasticsearch中,所有节点的数据是均等的。

1.2、数据组织方式

索引(库)-->类型(表)-->文档(记录

1.3、特点和优势

综合来说就是搜索很快,支持多类型数据可以监控可视化,并且有丰富插件,还有就是能够数据冗余高可用

1.3.1、分布式架构

  1. 可扩展性:Elasticsearch采用分布式架构,数据存储在多个节点上。可以通过添加新节点轻松扩展集群,处理PB级别的数据。
  2. 数据冗余与高可用性:支持数据分片和副本机制。当某个节点出现故障时,副本分片可以立即接管工作,确保数据的可用性和搜索服务的正常运行。

1.3.2、强大的搜索功能

  1. 全文搜索:基于Lucene构建,提供了非常强大的全文搜索能力。能够理解文本的语义,对文档中的文本内容进行深度分析。
  2. 实时搜索:能够实时索引新数据并立即用于搜索。
  3. 复杂查询支持:支持多种复杂的查询类型,如布尔查询、范围查询、模糊查询等。

1.3.3、数据处理与分析

  1. 聚合功能:提供强大的聚合功能,可以对数据进行分组、统计和分析。
  2. 数据关联与嵌套查询:支持处理具有复杂结构的数据,包括数据的嵌套和关联关系。

1.3.4、多数据类型支持

  1. 通用数据类型支持:可以处理各种类型的数据,包括文本、数字、日期、地理位置等。
  2. 非结构化数据处理:尤其擅长处理非结构化数据,如日志文件、文档内容等。

1.3.5、易用性与生态系统

  1. 简单的API与RESTful接口:提供了简单易用的API,通过RESTful接口与外部应用进行交互。
  2. 丰富的插件与集成:拥有丰富的插件生态系统,可以与其他工具和技术进行集成。

1.3.6、高性能

  1. 快速搜索:Elasticsearch 优化了搜索速度,能够快速返回搜索结果,即使是在大规模数据集上。
  2. 高效索引:Elasticsearch 优化了数据索引过程,可以高效地处理大量数据的索引。

1.3.7、灵活的数据模型

  1. 无模式(Schema-less):Elasticsearch 是无模式的,这意味着你可以存储结构化、半结构化或非结构化的数据,无需预先定义数据结构。
  2. 动态映射:Elasticsearch 可以自动检测并映射新的字段,使得数据索引和搜索更加灵活。

1.3.8、可视化和监控

  1. Kibana:Elasticsearch 的可视化工具 Kibana 可以轻松创建图表和仪表板,帮助用户直观地理解数据。
  2. Elasticsearch 监控:提供了监控工具,可以监控集群状态、性能指标等。

1.4、Elasticsearch核心概念

  1. Cluster:集群,包含多个节点,每个节点属于哪个集群是通过一个配置来决定的,对于中小型企业刚开始集群就一个节点很正常
  2. Node:节点,集群中的一个节点,节点也要一个名称(默认是随机分配的),节点的名称很重要(在执行运维管理的时候方便故障排查),默认的节点会加入一个名称为“elasticsearch”的集群,如果直接启动一堆节点,那么它们会自动组成一个“elasticsearch”的集群,当然一个节点也可以组成一个集群。
  3. Document:文档,ES中最小的数据单元,一个document可以是一条客户数据,一条商品分类数据,一条订单数据,通常用JSON数据结构表示,每个index下的type中都可以存储多个document
  4. Index:索引,包含一堆相似结构的文档数据,比如可以有一个客户索引,商品分类索引,订单索引,索引有一个名称。
  5. Type:类型,每个索引里面都可以有一个或多个type,type是index的一个逻辑数据分类,一个type下的document有相同的filed。比如博客系统,有一个索引,一个用户数据type,博客数据type,评论数据type。
  6. shard:单机服务器无法存储大量数据,ES可以将一个索引中的数据分割为多个shard,分布在多台机器上存储,有了shard就可以横向扩展,存储更多的数据,让搜索和分析操作分布到多台机器上执行,提高吞吐量和性能。
  7. replica:任何一个服务器都会出现故障,此时shard可能会丢失,因此为每个shard建立多个replica副本,replica可以在shard故障时候提供备用服务

二、Logstash介绍(数据处理和日志收集)

Logstash的设计目的是为了简化从各种来源收集、转换和发送数据的过程,使其易于存储、分析和可视化。

2.1、Logstash介绍

Logstash是一个完全开源工具,可以对你的日志进行收集、过滤、分析,并将其存储供以后使用(如,搜索),logstash带有一个web界面,搜索和展示所有日志。 只收集和过滤日志,和改格式。(就是系统各个服务的日志,可以过滤并分析,还可以搜索指定服务的日志)

简单来说logstash就是一根具备实时数据传输能力的管道,负责将数据信息从管道的输入端传输到管道的输出端;与此同时这根管道还可以让你根据自己的需求在中间加上滤网,Logstash提供里很多功能强大的滤网以满足你的各种应用场景。

Logstash的事件(logstash将数据流中等每一条数据称之为一个event)处理流水线有三个主要角色完成:inputs –> filters –> outputs:

ogstash整个工作流分为三个阶段:输入、过滤、输出。每个阶段都有强大的插件提供支持:

Input (必须),设置数据来源

Filter(可选),负责数据处理与转换

output(必须),负责数据输出

2.2、Logstash的stdin标注输入

input {

  stdin {

    # 可选配置,例如添加字段或标签

    add_field => { "source" => "standard_input" }

    tags => [ "user_input" ]

  }

}

Logstash将从标准输入读取数据,并通过add_field添加一个额外的字段source,值为standard_input。tags配置用于添加标签user_input到事件中

filter {

  # 这里可以添加过滤器来处理输入数据

  # 例如,使用grok插件解析日志数据

  grok {

    match => { "message" => "%{COMBINEDAPACHELOG}" }

  }

}

output {

  # 输出处理后的数据到标准输出

  stdout { codec => rubydebug }

  

  # 或者输出到Elasticsearch

  elasticsearch {

    hosts => ["localhost:9200"]

    index => "myindex"

  }

}

2.3、Logstash的file输入文件

input {

  file {

    path => ["/var/log/messages", "/var/log/syslog"]

    start_position => "beginning"

    sincedb_path => "/var/lib/logstash/sincedb"

    stat_interval => 2

  }

}

Logstash会监控/var/log/messages和/var/log/syslog文件,从头开始读取文件内容,并将读取位置存储在/var/lib/logstash/sincedb中

参数:

path

指定要监控的文件或文件模式的路径。可以使用通配符来匹配多个文件。

示例:path => "/var/log/*.log"

start_position

指定Logstash开始读取文件的位置。可以是beginning(从头开始读取)或end(从文件末尾开始读取,类似于tail -F)。

示例:start_position => "beginning"

stat_interval

指定Logstash检查文件状态(如文件大小变化)的频率,以秒为单位。

示例:stat_interval => 2

sincedb_path

指定用于存储文件读取位置的数据库路径。Logstash会记录每个文件最后读取的位置,以便在重启后可以从上次中断的地方继续读取。

示例:sincedb_path => "/var/lib/logstash/sincedb"

discover_interval

指定Logstash发现新文件的频率,以秒为单位。

示例:discover_interval => 15

exclude

指定要排除的文件名模式。

示例:exclude => [ "*.gz", "*.zip" ]

ignore_older

指定忽略比指定时间更早的文件。

示例:ignore_older => 86400 (忽略一天前的文件)

2.4、Logstash过滤器值grok正则匹配

%{PATTERN_NAME:FIELD_NAME}

PATTERN_NAME 是预定义的正则表达式模式名称或自定义模式名称。

FIELD_NAME 是捕获的字段名,用于在Logstash事件中存储匹配的数据。

Logstash自带了许多预定义的Grok模式需要时百度

使用Grok过滤器解析Nginx访问日志的示例

filter {

  grok {

    match => { "message" => "%{NGINXACCESS} %{DATA:response_time} %{DATA:upstream_response_time}" }

  }

}

%{NGINXACCESS} 是一个预定义的Grok模式,用于匹配Nginx访问日志的常见格式。response_time 和 upstream_response_time 是自定义的字段名,用于捕获响应时间和上游响应时间。

2.5、Logstash过滤器之mutate

Logstash 的 mutate 过滤器是用于对重命名、删除、替换、修改数据类型等进行各种修改操作

filter {

  mutate {

    convert => { "age" => "integer" }          # 将 age 字段转换为整数类型

    gsub => [ "message", "\s+", "_" ]        # 将 message 字段中的多个空格替换为下划线

    split => [ "tags", "," ]              # 将 tags 字段根据逗号分隔为数组

    rename => { "old_name" => "new_name" }   # 将 old_name 字段重命名为 new_name

    remove_field => [ "temp_field" ]       # 删除 temp_field 字段

    add_field => { "new_field" => "new_value" } # 添加一个新字段 new_field,值为 new_value

  }

}

2.6、Logstash过滤器之GeoIP地址查询

GeoIP库可以根据IP地址提供对应的地域信息,包括国别,省市,经纬度等,对于可视化地图和区域统计非常有用。

单独安装命令

bin/logstash-plugin install logstash-filter-geoip

用例:

filter {

  geoip {

    source => "src_ip"         # 指定包含 IP 地址的字段名

    target => "geoip_data"    # 指定存储地理位置信息的字段名

    database => "/path/to/GeoLite2-City.mmdb" # 指定 GeoIP 数据库的路径

    # 可选的配置参数

    add_field => { "[geoip][coordinates]" => "%{[geoip][latitude]},%{[geoip][longitude]}" }

    remove_field => ["[geoip][database]" ] # 移除不必要的信息

  }

}

geolite库下载地址:https://dev.maxmind.com/geoip/geolite2-free-geolocation-data/

日志数据中有一个字段 src_ip 包含 IP 地址,通过上述配置,Logstash 将会使用 GeoIP 数据库来查询该 IP 地址的地理位置,并将结果存储在 geoip_data 字段中。结果可能包括国家名称 ([geoip][country_name])、城市名称 ([geoip][city_name])、经纬度 ([geoip][latitude] 和 [geoip][longitude]) 等信息。

2.7、Logstash过滤器之useragent匹配归类

解析用户代理(User-Agent)字符串,并从中提取有关用户设备的详细信息(操作系统、浏览器类型、版本号等)

安装命令

bin/logstash-plugin install logstash-filter-useragent

用例:

filter {

  useragent {

    source => "user_agent_string"   # 指定包含 User-Agent 字符串的字段名

    target => "user_agent_info"   # 指定存储解析后信息的字段名

    remove_field => ["user_agent_string"] # 可选:移除原始的 User-Agent 字段

  }

}

Logstash 将会解析User-Agent字符串,并将结果存储在 user_agent_info 字段中。

2.8、Logstash的output配置

Logstash 支持多种输出插件,使得数据可以流向各种不同的系统和服务,如 Elasticsearch、Kafka、文件系统、数据库等。

output {

  # 输出处理后的数据到标准输出

  stdout { codec => rubydebug }

  

  # 或者输出到Elasticsearch

  elasticsearch {

    hosts => ["localhost:9200"]

    index => "myindex"

  }

}

2.9、Logstash的配置文件

input {

  # 定义输入插件和配置选项

}

filter {

  # 定义过滤器插件和配置选项

}

output {

  # 定义输出插件和配置选项

}

、Kibana介绍

Kibana 是一个基于浏览器页面的Elasticsearch前端展示工具,也是一个开源和免费的工具,Kibana可以为 Logstash 和 ElasticSearch 提供的日志分析友好的 Web 界面,可以帮你汇总、分析和搜索重要数据日志

四、ELK部署实战

这里用单节点部署


4.1、Elasticsearch(ES)部署配置(Version: 8.17.0

4.1.1、Elasticsearch(ES)下载安装

新增repo配置yum源以下载 

[elasticsearch]
name=Elasticsearch repository for 8.x packages
baseurl=https://artifacts.elastic.co/packages/8.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=0
autorefresh=1
type=rpm-md
[root@ES ~]# yum install --enablerepo=elasticsearch elasticsearch

jdk下载对应芯片及服务器版本的。(Version: 8.17.0的ES需要17以上)

[root@ES ~]# yum install java-17-openjdk-devel
#设置环境变量
export JAVA_HOME=/usr/lib/jvm/java-17-openjdk
export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH    
export CLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib:$JAVA_HOME/lib/tools.jar 
[root@ES ~]# java -version
openjdk version "17.0.13" 2024-10-15 LTS
OpenJDK Runtime Environment (Red_Hat-17.0.13.0.11-1) (build 17.0.13+11-LTS)
OpenJDK 64-Bit Server VM (Red_Hat-17.0.13.0.11-1) (build 17.0.13+11-LTS, mixed mode, sharing)
4.1.2、Elasticsearch(ES)配置
#创建运行ES的普通用户
[root@ES ~]# useradd users
[root@ES ~]# echo "123456" | passwd --stdin "users"
Changing password for user elasticsearch.
passwd: all authentication tokens updated successfully.
#配置ES
#vim /etc/elasticsearch/elasticsearch.yml 
#sed -ri '/^#/d' /etc/elasticsearch/elasticsearch.yml 
#没配置集群发现,默认多播(multicast)发现其他集群节点
# 集群名称
cluster.name: elk
# 节点名称
node.name: elk01
# 配置集群的初始主节点
cluster.initial_master_nodes: ["elk01"]
# 角色配置
node.roles: ["master", "data"]
# 数据路径
path.data: /var/lib/elasticsearch
# 日志路径
path.logs: /var/log/elasticsearch
# 是否内存锁定
bootstrap.memory_lock: false
# 网络主机设置
network.host: 0.0.0.0
# HTTP 端口
http.port: 9200
# 启用 CORS
http.cors.enabled: true
# 允许的 CORS 来源
http.cors.allow-origin: "*"
#关闭安全功能
xpack.security.enabled: false
# 禁用 SSL 传输层安全性
xpack.security.transport.ssl.enabled: false
xpack.security.http.ssl.enabled: false
4.1.3、Elasticsearch配置参数解释

集群设置

cluster.name:my_cluster

集群名称,同一集群节点名称需相同

node.name

node-1

节点名称,唯一标识

node.master

true

节点是否为主节点(8.x已废弃)使用node.roles代替

node.data

true

节点是否存储索引数据

node.roles

["master", "data"]

8.x以上使用。 "master" 角色(参与主节点选举和管理集群状态),"data" 角色(存储和索引数据),"ingest" 角色(处理数据摄入管道)

discovery.seed_hosts

["host1", "host2", "10.211.55.10:9300"]

集群中用于节点发现

cluster.initial_master_nodes

["host1", "host2"]

集群初始化时参与主节点选举节点

discovery.zen.minimum_master_nodes

2

设置选举主节点时需要参与的最少候选节点数。官方推荐(n/2)+1

discovery.zen.ping.timeout

1s

节点发现过程中的 ping 超时时间

网络设置

network.host

0.0.0.0 

监听网络请求的接口地址

http.port

9200

 服务端口号,默认9200

transport.tcp.port

9300

TCP 端口号,默认9300

存储设置

path.data

/path/to/data

索引数据存储路径

path.logs

/path/to/logs

日志文件存储路径

path.plugins

/path/to/plugins

插件存放路径(默认是es根目录下的plugins文件夹)

内存设置

bootstrap.memory_lock

true

是否在启动时锁定内存,防止内存交换到磁盘flase为否

ES_JAVA_OPTS

-Xms2g -Xmx2g

Java虚拟机(JVM)的堆内存大小

索引设置

index.number_of_shards

5

新索引默认分片数量

index.number_of_replicas

1

新索引默认的副本数量

安全设置

xpack.security.enabled

true

是否启用 X-Pack 安全特性

xpack.security.transport.ssl.enabled

true

是否启用传输层的 SSL 加密

xpack.security.http.ssl.enabled

true

是否启用 HTTP 层的 SSL 加密

日志设置

logger.org.elasticsearch

INFO

日志级别,例INFO、DEBUG、TRACE 等

其他设置

bootstrap.system_call_filter

true

是否允许执行潜在危险的系统调用(已被移除)

http.cors.enabled 

true

是否启用跨域资源共享(CORS)

http.cors.allow-origin

"*"

允许跨域请求的来源

cluster.routing.allocation

"all"

控制分片的分配策略

cluster.routing.allocation.disk.watermark

85%

磁盘空间使用阈值

cluster.routing.allocation.balance

"0.45f"

分片在不同节点之间的平衡策略

4.1.4、jvm堆大小配置

内存最小值(Xms)与最大值(Xmx)的大小相同,防止程序在运行时改变堆内存的大小。

堆内存大小不要超过系统内存的50%

[root@ES ~]# vim /etc/elasticsearch/jvm.options
## -Xms4g
## -Xmx4g
4.1.5、系统优化

(重新登录/重启才生效)

[root@ES ~]# vim /etc/security/limits.conf 

#每个用户打开的最大文件描述符数量为 65536,超出则警告

* soft nofile 65536

#每个用户打开的最大文件描述符数量为 131072,超出则操作失败

* hard nofile 131072

#每个用户创建的最大进程数量为 2048,超出则警告

* soft nproc 2048

#每个用户创建的最大进程数量为 4096,超出则操作失败

* hard nproc 4096
4.1.6、启动ES
设置文件权限

 chown -R elasticsearch:elasticsearch /etc/elasticsearch

chown -R elasticsearch:elasticsearch /var/lib/elasticsearch

chown -R elasticsearch:elasticsearch /var/log/elasticsearch

为前面创建的普通用户添加访问权限

[root@ES ~]# usermod -aG elasticsearch useres

[root@ES ~]# id useres 

uid=1001(useres) gid=1001(useres) groups=1001(useres),979(elasticsearch)​​​​​​​

切换为普通用户

[root@ES ~]# su - useres 

[useres@ES ~]$ systemctl start elasticsearch.service 

==== AUTHENTICATING FOR org.freedesktop.systemd1.manage-units ====

Authentication is required to start 'elasticsearch.service'.

Authenticating as: admin

Password: 

==== AUTHENTICATION COMPLETE ====

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

android 自定义SwitchCompat,Radiobutton,SeekBar样式

纯代码的笔记记录。 自定义SwitchCompat按钮的样式 先自定义中间的圆球switch_thumb_bg.xml <?xml version"1.0" encoding"utf-8"?> <shape xmlns:android"http://schemas.android.com/apk/res/android"android:shape"oval&q…

【学习路线】Python自动化运维 详细知识点学习路径(附学习资源)

学习本路线内容之前&#xff0c;请先学习Python的基础知识 其他路线&#xff1a; Python基础 >> Python进阶 >> Python爬虫 >> Python数据分析&#xff08;数据科学&#xff09; >> Python 算法&#xff08;人工智能&#xff09; >> Pyth…

【URDF和SDF区别】

URDF&#xff08;Unified Robot Description Format&#xff0c;统一机器人描述格式&#xff09;和SDF&#xff08;Simulation Description Format&#xff0c;仿真描述格式&#xff09;是两种常用的机器人和仿真环境建模格式。虽然它们在许多方面有相似之处&#xff0c;但也存…

【翻译】2025年华数杯国际赛数学建模题目+翻译pdf自取

保存至本地网盘 链接&#xff1a;https://pan.quark.cn/s/f82a1fa7ed87 提取码&#xff1a;6UUw 2025年“华数杯”国际大学生数学建模竞赛比赛时间于2025年1月11日&#xff08;周六&#xff09;06:00开始&#xff0c;至1月15日&#xff08;周三&#xff09;09:00结束&#xff…

springboot vue uniapp 仿小红书 1:1 还原 (含源码演示)

线上预览: 移动端 http://8.146.211.120:8081/ 管理端 http://8.146.211.120:8088/ 小红书凭借优秀的产品体验 和超高人气 目前成为笔记类产品佼佼者 此项目将详细介绍如何使用Vue.js和Spring Boot 集合uniapp 开发一个仿小红书应用&#xff0c;凭借uniapp 可以在h5 小程序 app…

VS2015 + OpenCV + OnnxRuntime-Cpp + YOLOv8 部署

近期有个工作需求是进行 YOLOv8 模型的 C 部署&#xff0c;部署环境如下 系统&#xff1a;WindowsIDE&#xff1a;VS2015语言&#xff1a;COpenCV 4.5.0OnnxRuntime 1.15.1 0. 预训练模型保存为 .onnx 格式 假设已经有使用 ultralytics 库训练并保存为 .pt 格式的 YOLOv8 模型…

css盒子水平垂直居中

目录 1采用flex弹性布局&#xff1a; 2子绝父相margin&#xff1a;负值&#xff1a; 3.子绝父相margin:auto&#xff1a; 4子绝父相transform&#xff1a; 5通过伪元素 6table布局 7grid弹性布局 文字 水平垂直居中链接&#xff1a;文字水平垂直居中-CSDN博客 以下为盒子…

qt QPainter setViewport setWindow viewport window

使用qt版本5.15.2 引入viewport和window目的是用于实现QPainter画出来的内容随着窗体伸缩与不伸缩两种情况&#xff0c;以及让QPainter在widget上指定的区域(viewport)进行绘制/渲染&#xff08;分别对应下方demo1&#xff0c;demo2&#xff0c;demo3&#xff09;。 setViewpo…

深度学习-算法优化与宇宙能量梯度分布

在当今迅速发展的科技世界中&#xff0c;算法优化和能量分布问题已成为研究的热点&#xff0c;尤其是在人工智能、机器学习和物理科学领域。算法优化通常涉及提高计算效率和降低资源消耗&#xff0c;而宇宙能量梯度分布则涉及宇宙中能量的分布和流动方式。两者看似是完全不同的…

Linux驱动学习之第三个驱动程序(两个按键的驱动程序-读取按键值)

程序框架说明(和之前的LED驱动进行对比) 这个程序的框架与之前学习的第二个驱动程序(控制LED)的框架基本一致&#xff0c;第二个驱动程序的链接如下&#xff1a; https://blog.csdn.net/wenhao_ir/article/details/144973219 所以如果前两这个LED驱动程序的框架掌握得很清楚了…

KMP前缀表 ≈ find() 函数——28.找出字符串中第一个匹配项的下标【力扣】

class Solution { public: //得到前缀表void getNext(int *next,string needle){int j0;for(int i1;i<needle.size();i){while(j>0 && needle[j]!needle[i]) jnext[j-1];//**j>0**>j0是出口if(needle[i]needle[j]) j;next[i]j;//若写入if中&#xff0c;则该…

vulnhub靶场【IA系列】之Tornado

前言 靶机&#xff1a;IA-Tornado&#xff0c;IP地址为192.168.10.11 攻击&#xff1a;kali&#xff0c;IP地址为192.168.10.2 都采用虚拟机&#xff0c;网卡为桥接模式 本文所用靶场、kali镜像以及相关工具&#xff0c;我放置在网盘中&#xff0c;可以复制后面链接查看 htt…

【优选算法篇】:模拟算法的力量--解决复杂问题的新视角

✨感谢您阅读本篇文章&#xff0c;文章内容是个人学习笔记的整理&#xff0c;如果哪里有误的话还请您指正噢✨ ✨ 个人主页&#xff1a;余辉zmh–CSDN博客 ✨ 文章所属专栏&#xff1a;优选算法篇–CSDN博客 文章目录 一.模拟算法二.例题1.替换所有的问号2.提莫攻击3.外观数列4…

云集电商:数据库的分布式升级实践|OceanBase案例

电商行业对数据库有哪些需求 云集电商作为一家传统电商企业&#xff0c;业务涵盖了美妆个护、服饰、水果生鲜、健康保健等多个领域&#xff0c;在创立四年后在纳斯达克上市&#xff08;股票代码&#xff1a;YJ&#xff09;。与京东、淘宝、拼多多等电商平台不同&#xff0c;云…

Kibana操作ES基础

废话少说&#xff0c;开干&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;截图更清晰&#xff0c;复制在下面 #库操作#创建索引【相当于数据库的库】 PUT /first_index#获…

AI大模型赋能!移远通信打造具有“超能力”的AI智能玩具解决方案

随着无线通信、先进算法以及AI大模型等前沿技术的蓬勃发展&#xff0c;许多玩具已经从简单的互动设备进化为集教育、陪伴和娱乐功能于一身的AI智能玩具&#xff0c;在儿童群体中日渐风靡。不仅如此&#xff0c;因其能提供满满的情绪价值&#xff0c;在成年人和老年人市场中也展…

从 SQL 语句到数据库操作

1. SQL 语句分类 数据定义语言 DDL &#xff1a; 用于定义或修改数据库中的结构&#xff0c;如&#xff1a;创建、修改、删除数据库对象。create、drop alter 数据操作语言 DML &#xff1a; 用于添加、删除、更新数据库中的数据。select、insert alter、drop 数据控制语言 D…

解锁 JMeter 的 ForEach Controller 高效测试秘籍

各位小伙伴们&#xff0c;今天咱就来唠唠 JMeter 里超厉害的 “宝藏工具”——ForEach Controller&#xff0c;它可是能帮咱们在性能测试的江湖里 “大杀四方” 哦&#xff01; 一、ForEach Controller 是啥 “神器” 想象一下&#xff0c;你手头有一串神秘钥匙&#xff0c;每…

【已解决】【记录】2AI大模型web UI使用tips 本地

docker desktop使用 互动 如果需要发送网页链接&#xff0c;就在链接上加上【#】号 如果要上传文件就点击这个➕号 中文回复 命令它只用中文回复&#xff0c;在右上角打开【对话高级设置】 输入提示词&#xff08;提示词使用英文会更好&#xff09; Must reply to the us…

MySQL批量修改数据表编码及字符集为utf8mb4

​​​​​​MySQL批量修改数据表编码及字符集为utf8mb4 utf8mb4编码是utf8编码的超集&#xff0c;兼容utf8&#xff0c;并且能存储4字节的表情字符。 采用utf8mb4编码的好处是&#xff1a;存储与获取数据的时候&#xff0c;不用再考虑表情字符的编码与解码问题。 更改数据库…