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 Stack(ELK)由ElasticSearch、Logstash和Kibana三个开源工具组成
ELK工作原理展示图
Logstash收集Appserver产生的log,并存放到ElasticSearch集群中,而Kibana则从ES集群中查询数据生成图标再返回给Browser
一、ElasticSearch介绍(数据搜索和分析)
ElasticSearch是一个基于Lucene的开源分布式搜索服务。用于处理大规模数据的快速检索和分析,并具有高可扩展性、高性能和强大的全文搜索能力。
1.1、特点
分布式,零配置,自动发现,索引自动分片,索引副本机制等。它提供了一个分布式多用户能力的全文搜索引擎。Elasticsearch是用Java开发的,并作为Apache许可条款下的开放源码发布,是第二流行的企业搜索引擎。设计用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。 在elasticsearch中,所有节点的数据是均等的。
1.2、数据组织方式
索引(库)-->类型(表)-->文档(记录)
1.3、特点和优势
综合来说就是搜索很快,支持多类型数据可以监控可视化,并且有丰富插件,还有就是能够数据冗余高可用
1.3.1、分布式架构
- 可扩展性:Elasticsearch采用分布式架构,数据存储在多个节点上。可以通过添加新节点轻松扩展集群,处理PB级别的数据。
- 数据冗余与高可用性:支持数据分片和副本机制。当某个节点出现故障时,副本分片可以立即接管工作,确保数据的可用性和搜索服务的正常运行。
1.3.2、强大的搜索功能
- 全文搜索:基于Lucene构建,提供了非常强大的全文搜索能力。能够理解文本的语义,对文档中的文本内容进行深度分析。
- 实时搜索:能够实时索引新数据并立即用于搜索。
- 复杂查询支持:支持多种复杂的查询类型,如布尔查询、范围查询、模糊查询等。
1.3.3、数据处理与分析
- 聚合功能:提供强大的聚合功能,可以对数据进行分组、统计和分析。
- 数据关联与嵌套查询:支持处理具有复杂结构的数据,包括数据的嵌套和关联关系。
1.3.4、多数据类型支持
- 通用数据类型支持:可以处理各种类型的数据,包括文本、数字、日期、地理位置等。
- 非结构化数据处理:尤其擅长处理非结构化数据,如日志文件、文档内容等。
1.3.5、易用性与生态系统
- 简单的API与RESTful接口:提供了简单易用的API,通过RESTful接口与外部应用进行交互。
- 丰富的插件与集成:拥有丰富的插件生态系统,可以与其他工具和技术进行集成。
1.3.6、高性能
- 快速搜索:Elasticsearch 优化了搜索速度,能够快速返回搜索结果,即使是在大规模数据集上。
- 高效索引:Elasticsearch 优化了数据索引过程,可以高效地处理大量数据的索引。
1.3.7、灵活的数据模型
- 无模式(Schema-less):Elasticsearch 是无模式的,这意味着你可以存储结构化、半结构化或非结构化的数据,无需预先定义数据结构。
- 动态映射:Elasticsearch 可以自动检测并映射新的字段,使得数据索引和搜索更加灵活。
1.3.8、可视化和监控
- Kibana:Elasticsearch 的可视化工具 Kibana 可以轻松创建图表和仪表板,帮助用户直观地理解数据。
- Elasticsearch 监控:提供了监控工具,可以监控集群状态、性能指标等。
1.4、Elasticsearch核心概念
- Cluster:集群,包含多个节点,每个节点属于哪个集群是通过一个配置来决定的,对于中小型企业刚开始集群就一个节点很正常
- Node:节点,集群中的一个节点,节点也要一个名称(默认是随机分配的),节点的名称很重要(在执行运维管理的时候方便故障排查),默认的节点会加入一个名称为“elasticsearch”的集群,如果直接启动一堆节点,那么它们会自动组成一个“elasticsearch”的集群,当然一个节点也可以组成一个集群。
- Document:文档,ES中最小的数据单元,一个document可以是一条客户数据,一条商品分类数据,一条订单数据,通常用JSON数据结构表示,每个index下的type中都可以存储多个document
- Index:索引,包含一堆相似结构的文档数据,比如可以有一个客户索引,商品分类索引,订单索引,索引有一个名称。
- Type:类型,每个索引里面都可以有一个或多个type,type是index的一个逻辑数据分类,一个type下的document有相同的filed。比如博客系统,有一个索引,一个用户数据type,博客数据type,评论数据type。
- shard:单机服务器无法存储大量数据,ES可以将一个索引中的数据分割为多个shard,分布在多台机器上存储,有了shard就可以横向扩展,存储更多的数据,让搜索和分析操作分布到多台机器上执行,提高吞吐量和性能。
- 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/elasticsearchchown -R elasticsearch:elasticsearch /var/lib/elasticsearchchown -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: adminPassword: ==== AUTHENTICATION COMPLETE ====
相关文章:
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、高性…...
【学习笔记】理解深度学习和机器学习的数学基础:数值计算
深度学习作为人工智能领域的一个重要分支,其算法的实现和优化离不开数值计算。数值计算在深度学习中扮演着至关重要的角色,它涉及到如何在计算机上高效、准确地解决数学问题。本文将介绍深度学习中数值计算的一些关键概念和挑战,以及如何应对…...
【Java回顾】Day5 并发基础|并发关键字|JUC全局观|JUC原子类
JUC全称java.util.concurrent 处理并发的工具包(线程管理、同步、协调) 一.并发基础 多线程要解决什么问题?本质是什么? CPU、内存、I/O的速度是有极大差异的,为了合理利用CPU的高性能,平衡三者的速度差异,解决办法…...
VSCODE使用Echarts组件库(不是vue)
第一步打开Echarts官网 Examples - Apache ECharts 第二步随便点击一个图形点击我圈的按钮 第三步...
DNS解析域名简记
域名通常是由: 权威域名.顶级域名.根域名组成的。 从左往右,级别依次升高,这和外国人从小范围到大范围的说话习惯相关。(我们自己是更习惯先说大范围再说小范围,如XX省XX市XX区XX路) DNS解析域名时,会先查…...
选择器css
1.a标签选择 // 选中所具有herf 的元素 [herf] {color: skyblue; } // 选中所具有herfhttps://fanyi.youdao.com/ 的元素 [herf$"youdao.com"] {color:pink; } // 按此顺序书写 link visited hover active // 未访问状态 a:link {color:orange } // 访问状态 a…...
9.4 visualStudio 2022 配置 cuda 和 torch (c++)
一、配置torch 1.Libtorch下载 该内容看了【Libtorch 一】libtorchwin10环境配置_vsixtorch-CSDN博客的博客,作为笔记用。我自己搭建后可以正常运行。 下载地址为windows系统下各种LibTorch下载地址_libtorch 百度云-CSDN博客 下载解压后的目录为: 2.vs…...
ASP.NET Core 实现微服务 -- Polly 服务降级熔断
在我们实施微服务之后,服务间的调用变的异常频繁。多个服务之间可能是互相依赖的关系。某个服务出现故障或者是服务间的网络出现故障都会造成服务调用的失败,进而影响到某个业务服务处理失败。某一个服务调用失败轻则造成当前相关业务无法处理࿱…...
2_CSS3 背景 --[CSS3 进阶之路]
CSS3 中的背景属性提供了许多强大的功能来增强网页设计,包括但不限于多背景图像、渐变、背景大小控制等。以下是一些关键的 CSS3 背景属性及其用法示例。 1. 多重背景图像 CSS3 允许你为一个元素设置多个背景图像。这些图像按照它们在 background-image 属性中定义…...
于交错的路径间:分支结构与逻辑判断的思维协奏
大家好啊,我是小象٩(๑ω๑)۶ 我的博客:Xiao Xiangζั͡ޓއއ 很高兴见到大家,希望能够和大家一起交流学习,共同进步。* 这一节内容很多,文章字数达到了史无前例的一万一,我们要来学习分支与循环结构中…...
升级 CentOS 7.x 系统内核到 4.4 版本
问题描述 在 CentOS 7.x 系统中,默认内核版本是 3.10.x,这个版本可能会带来一些与 Docker 和 Kubernetes 兼容性的问题,导致系统性能不稳定或功能异常。为了提高系统的稳定性和兼容性,建议升级到更高版本的内核,例如 …...
MySQL数据导出导入
一、数据导出 1.导出全库备份到本地的目录 mysqldump -u$USER -p$PASSWD -h127.0.0.1 -P3306 --routines--default-character-setutf8 --lock-all-tables --add-drop-database -A >db.all.sql 2.导出指定库到本地的目录(例如mysql库) mysqldump -u$USER -p$PASSWD -h127.…...
【机器学习:八、逻辑回归】
逻辑回归(Logistic Regression) 1. 逻辑回归的引出 在现实世界中,许多问题都涉及到分类任务。例如: 判断一封邮件是否为垃圾邮件;预测某人是否会患某种疾病;确定图片中是否包含某种特定物体。 这些问题…...
uniapp使用sm4加密
安装:npm install sm-crypto --save 1、在utils下新建crypto.js文件 // sm4 加密 export function encryption(params) {const SM4 require("sm-crypto").sm4const key 0123456789abcdeffedcba9876543212; // 提供的密钥const iv fedcba9876543210012…...
【STM32-学习笔记-1-】GPIO
文章目录 GPIOⅠ、GPIO函数Ⅱ、GPIO_InitTypeDef结构体参数①、GPIO_Mode②、GPIO_Pin③、GPIO_Speed GPIO Ⅰ、GPIO函数 // 将指定的GPIO端口寄存器重置为默认值 void GPIO_DeInit(GPIO_TypeDef* GPIOx);// 将GPIO的备用功能寄存器重置为默认值 void GPIO_AFIODeInit(void);…...
C#中的运算符和类--06
目录 一.运算符 1.赋值运算符 2.算数运算符 3.关系运算符 4.逻辑运算符 5.位运算符 6.三元运算符 7.空合并运算符 8.其他运算符 二.类 1.普通类 2.静态类 3.抽象类 4.密封类 5.部分类 6.泛型类 7.嵌套类 8.记录类 9.接口 一.运算符 1.赋值运算符 定义:赋值…...
【微服务】面试 2、服务雪崩
服务雪崩概念 主要内容:在微服务项目中,微服务间存在远程调用。若某一服务(如服务 d)出现故障,调用它的服务(如服务 a)会失败。若调用方持续向故障服务发起请求,由于服务连接数有限且…...
“深入浅出”系列之QT:(6)如何在一个项目中调用另一个项目
在Qt中,如果想在一个项目中调用另一个项目,这通常意味着想要在一个CMake构建的项目中集成或依赖另一个CMake构建的项目。 1.子模块或子目录方式: 如果另一个项目可以作为一个子模块或子目录包含在当前项目中,可以使用add_sub…...
计算机网络—地址与子网(IPv4)相关知识总结
前言 为了更加清楚的了解该相关知识,下面是发现的一些宝藏博主的博客。 彻底搞懂网络地址、广播地址、主机地址、网关、子网掩码、网络号、主机号 - lipga - 博客园 IP地址(分类)、子网掩码、网络号、主机号、子网号_网络号,主机号,子网号…...
计算机网络 (36)TCP可靠传输的实现
前言 TCP(传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议。TCP通过多种机制实现可靠传输,这些机制主要包括连接管理、序列号和确认应答机制、重传机制、流量控制、拥塞控制等。 一、连接管理 TCP使用三次握手࿰…...
SQL从入门到实战-2
高级语句 窗口函数 排序窗口函数 例题二十九 select yr,party,votes, rank() over (PARTITION BY yr ORDER BY votes desc) as pson from ge where constituency S14000021 order by party,yr 偏移分析函数 例题三十 select name,date_format(whn,%Y-%m-%d) data, confi…...
基于python的网页表格数据下载--转excel
基于 Python 的网页表格数据爬取与下载:以维基百科为例 目录 基于 Python 的网页表格数据爬取与下载:以维基百科为例1. 背景介绍2. 工具与环境3. 操作步骤1. 获取网页内容2. 定位表格元素3. 表格变身 Pandas DataFrame4. 检查数据,收工!5. 进阶玩法与优化6. 完整代码4. 结果…...
用户界面的UML建模13
􀂄 Concrete Presentation Model 包中所包含的是,在Environment 包中与表示层框架模式中的《apm》类相对应的那些类。 8 结论 本文使用了一个图书馆系统的案例,来论述了关于用户界面的建模。通过使用统一建模语言来对应用系统进行建模&…...
[Python学习日记-75] 计算机基础与网络
[Python学习日记-75] 计算机基础与网络 简介 计算机基础 什么是网络编程 计算机网络 简介 本篇主要介绍的计算机基础是浓缩的,这是因为我们主要学习的是 Python,而 Python 主要是为了开发应用程序的,并不会用它来开发操作系统和嵌入式程序…...
【机器学习:六、特征工程】
1. 特征工程背景意义 在机器学习中,特征工程是模型成功的关键之一。无论算法多么先进,其性能都很大程度上依赖于输入数据的质量。特征工程是指对原始数据进行处理,以创建更适合算法的特征的过程。这一过程在以下方面具有重要意义:…...
webpack打包要义
webpack基本 Webpack 是一个现代 JavaScript 应用程序的静态模块打包工具。它的工作原理可以概括为以下几个核心步骤: 1. 入口起点(Entry) Webpack 从配置文件中指定的入口文件(Entry Point)开始,分析应用…...
Mybatis——Mybatis开发经验总结
摘要 本文主要介绍了MyBatis框架的设计与通用性,阐述了其作为Java持久化框架的亮点,包括精良的架构设计、丰富的扩展点以及易用性和可靠性。同时,对比了常见持久层框架,分析了MyBatis在关系型数据库交互中的优势。此外࿰…...
013:深度学习之神经网络
本文为合集收录,欢迎查看合集/专栏链接进行全部合集的系统学习。 合集完整版请参考这里。 深度学习是机器学习中重要的一个学科分支,它的特点就在于需要构建多层且“深度”的神经网络。 人们在探索人工智能初期,就曾设想构建一个用数学方式…...
Java 模板变量替换——字符串替换器(思路Mybatis的GenericTokenParser)
Java 模板变量替换——字符串替换器(思路Mybatis的GenericTokenParser) 思路字符串替换器 思路 模板变量替换无非是寻找出字符串(模板)中的特殊标记,用对应的变量进行字符串替换。 提到变量替换,大家第一能…...
蓝桥杯备考:数据结构之栈 和 stack
目录 栈的概念以及栈的实现 STL 的stack 栈和stack的算法题 栈的模板题 栈的算法题之有效的括号 验证栈序列 后缀表达式 括号匹配 栈的概念以及栈的实现 栈是一种只允许在一端进行插入和删除的线性表 空栈:没有任何元素 入栈:插入元素消息 出…...
Lambda离线实时分治架构深度解析与实战
一、引言 在大数据技术日新月异的今天,Lambda架构作为一种经典的数据处理模型,在应对大规模数据应用方面展现出了强大的能力。它整合了离线批处理和实时流处理,为需要同时处理批量和实时数据的应用场景提供了成熟的解决方案。本文将对Lambda…...
Vue.js组件开发,AI时代的前端新玩法
AI可不只是写写小说、聊聊天,现在它的触角已经伸到了程序员的代码世界里。特别是前端开发,很多人都在尝试用ChatGPT或者类似的AI工具来写代码,甚至直接生成Vue.js组件。有些人感叹,"写代码的时代是不是要结束了?&…...
标定 3
标定场景与对应的方式 标定板标定主要应用场景: (1)无法获取到执行机构物理坐标值,比如相机固定,执行机构为传送带等 (2)相机存在畸变等非线性标定情况,需要进行畸变校正 (3)标定单像素精度 (4)获取两个相机之间的坐标系关系 标定板操作步骤: (1)确定好拍…...
电商项目-基于ElasticSearch实现商品搜索功能(三)
本系列文章主要介绍基于 Spring Data Elasticsearch 实现商品搜索的后端代码,介绍代码逻辑和代码实现。 主要实现功能:根据搜索关键字查询、条件筛选、规格过滤、价格区间搜索、搜索查询分页、搜索查询排序、高亮查询。 主要应用技术:canal,…...
【51单片机】03 蜂鸣器-播放音乐
蜂鸣器-播放音乐 一、原理介绍1.硬件电路 二、练习1.让蜂鸣器发声2.尝试演奏小星星 一、原理介绍 蜂鸣器分为有源蜂鸣器、无源蜂鸣器两种。 有源蜂鸣器:施加合适的电压之后就会发出特定频率的声音 无源蜂鸣器:需要提供特定频率的声音信号,才能…...
MySQL 架构
MySQL架构 MySQL8.0服务器是由连接池、服务管理⼯具和公共组件、NoSQL接⼝、SQL接⼝、解析器、优化 器、缓存、存储引擎、⽂件系统组成。MySQL还为各种编程语⾔提供了⼀套⽤于外部程序访问服务器的连接器。整体架构图如下所⽰: MySQL Connectors:为使⽤…...
XML 解析器:深入解析与高效应用
XML 解析器:深入解析与高效应用 引言 XML(可扩展标记语言)作为一种重要的数据交换格式,被广泛应用于各种系统和平台中。为了有效地处理和解析XML数据,XML解析器发挥着至关重要的作用。本文将深入探讨XML解析器的原理…...
LabVIEW设计 IIR 滤波器
这是一个设计 IIR 滤波器的 LabVIEW 程序框图,其功能主要是用于设计滤波器并计算其频率响应,但它并不直接对输入的波形进行实时滤波,而是提供一个滤波器的频率响应分析工具。 以下是框图中各部分的详细解释: 1. 主要模块功能说明 …...
基于改进粒子群优化的无人机最优能耗路径规划
目录 1. Introduction2. Preliminaries2.1. Particle Swarm Optimization Algorithm2.2. Deep Deterministic Policy Gradient2.3. Calculation of the Total Output Power of the Quadcopter Battery 3.OptimalEnergyConsumptionPathPlanningBasedonPSO-DDPG3.1.ProblemModell…...
AI刷题-数列推进计算任务、数组中的幸运数问题
目录 一、数列推进计算任务 问题描述 测试样例 解题思路: 问题理解 数据结构选择 算法步骤 优化思路 最终代码: 运行结果: 二、数组中的幸运数问题 问题描述 测试样例 解题思路: 问题理解 数据结构选择 算法步…...
微服务的配置共享
1.什么是微服务的配置共享 微服务架构中,配置共享是一个重要环节,它有助于提升服务间的协同效率和数据一致性。以下是对微服务配置共享的详细阐述: 1.1.配置共享的概念 配置共享是指在微服务架构中,将某些通用或全局的配置信息…...
【计算机网络】窥探计网全貌:说说计算机网络体系结构?
标签难度考察频率综合题⭐⭐⭐60% 这个问题在计算机网络知识体系中是一个比较重要的问题,只有完整地了解计算机网络的体系结构才能清晰地认识网络的运行原理。 在回答这个问题时,笔者认为有几个比较重要的点: 首先一定要分清楚前置条件&am…...
【MySQL】DATEDIFF()函数使用
DATEDIFF 函数用于计算两个日期之间的差值,以天为单位 DATEDIFF 函数返回一个整数,表示 date1 和 date2 之间的天数。如果 date1 在 date2 之前,结果为负数;如果在 date2 之后,结果为正数;如果相等…...
计算机网络学习笔记
第1课 绪论、传输介质 【知识点回顾】 两种导线可以减小电磁干扰: 双绞线(分为非屏蔽双绞线、屏蔽双绞线)(RJ-45用)同轴电缆(短距离使用)网络通信的基本单位:位(bit&…...
Spring Boot性能提升的核武器,速度提升500%!
虚拟线程是 Java 21 引入的一个新特性,用于简化并发编程。它与传统的操作系统线程相比,具有显著的优势: 轻量级:虚拟线程由 JVM 管理,而非操作系统,因此它们的内存占用和创建成本远低于传统线程。理论上&am…...
zig 安装,Hello World 示例
1. 安装 Zig 首先,你需要在你的计算机上安装 Zig 编译器。你可以从 Zig 官方网站 下载适合你操作系统的版本。 安装完成后,你可以在终端中运行以下命令来检查 Zig 是否安装成功: zig version如果一切正常,它会显示 Zig 的版本信…...
【数据库系统概论】第5章 数据库完整性【!触发器】
目录 5.1数据库完整性概述 5.2 实体完整性 5.3 参照完整性 5.4 用户定义的完整性 属性上的约束 1. 列值非空(NOT NULL) 2. 列值唯一(UNIQUE) 3. 检查列值是否满足条件(CHECK) 元组上的约束 5.5 完…...
Linux中通过frp实现内网穿透
1、准备工作 准备一台公网服务器(云服务器),推荐阿里云或者腾讯云都可以 需要下载好frp安装包Linux端的和Windows端的安装包 网址:Releases fatedier/frp (github.com)https://github.com/fatedier/frp/releases 2、下载frp_0…...
Vscode辅助编码AI神器continue插件
案例效果 1、安装或者更新vscode 有些版本的vscode不支持continue,最好更新到最新版,也可以直接官网下载 https://code.visualstudio.com/Download 2、安装continue插件 搜索continue,还未安装的,右下脚有个Install,点击安装即可 <...
上海亚商投顾:沪指探底回升微涨 机器人概念股午后爆发
上海亚商投顾前言:无惧大盘涨跌,解密龙虎榜资金,跟踪一线游资和机构资金动向,识别短期热点和强势个股。 一.市场情绪 市场全天探底回升,沪指盘中跌超1.6%,创业板指一度跌逾3%,午后集体拉升翻红…...