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、高性…...

git 转移文件夹
打开终端或命令行界面:首先,确保你的电脑上安装了 Git,并打开终端或命令行界面。 导航到你的仓库目录:使用 cd 命令来切换到包含你想要移动文件夹的仓库的目录。 cd /path/to/your/repository使用 git mv 命令移动文件夹&#x…...

C#,图论与图算法,输出无向图“欧拉路径”的弗勒里(Fleury Algorithm)算法和源程序
1 欧拉路径 欧拉路径是图中每一条边只访问一次的路径。欧拉回路是在同一顶点上开始和结束的欧拉路径。 这里展示一种输出欧拉路径或回路的算法。 以下是Fleury用于打印欧拉轨迹或循环的算法(源)。 1、确保图形有0个或2个奇数顶点。2、如果有0个奇数顶…...

计算机网络之---OSI七层模型
为什么会有七层模型 OSI七层模型的出现源于计算机网络技术的发展需求,主要解决以下几个问题: 标准化与互操作性 随着计算机网络的快速发展,不同厂商、不同技术之间的设备和系统需要能够无缝通信。而不同厂商在网络硬件、软件、协议等方面存在…...

mysql的mvcc理解
人阅读 一、说到mvcc就少不了事务隔离级别(大白话解释) 序列化(SERIALIZABLE):事务之间完全隔离,当成一个序列,一个一个执行。 1 可重复读(REPEATABLE READ)ÿ…...

leetcode 面试经典 150 题:两数之和
链接两数之和题序号1题型数组解题方法1. 哈希表,2. 暴力法难度简单熟练度✅✅✅✅✅ 题目 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。 你可以假设每种输…...

nexus搭建maven私服
说到maven私服每个公司都有,比如我上一篇文章介绍的自定义日志starter,就可以上传到maven私服供大家使用,每次更新只需deploy一下就行,以下就是本人搭建私服的步骤 使用docker安装nexus #拉取镜像 docker pull sonatype/nexus3:…...

理解 Tomcat 架构
前言 Tomcat 是一个轻量级的 Web 容器,被广泛应用于 Java Web 开发中。通过它,我们可以轻松地部署和运行 Web 应用。在本文中,我们将深入分析 Tomcat 的核心架构,同时结合一段代码,手动实现一个简化的 Tomcat 服务&am…...

python3GUI--大屏可视化-传染病督导平台 By:PyQt5
文章目录 一.前言二.预览三.软件组成&开发心得1.样式&使用方法2.左侧表格实现3.设计4.学习5.体验效果 四.代码分享1.环形渐变进度组件2.自定义图片的背景组件 五.总结 大小:60.9 M,软件…...

如何选择适合的证件照制作软件,让您的照片制作更轻松
在当今数字化的时代,制作证件照不再需要专门前往照相馆。选择一款合适的证件照制作软件,您可以在家中轻松完成标准证件照的拍摄与制作。然而,面对市面上琳琅满目的软件,找到最适合您需求的软件并不简单。本文将为您详细介绍选择证…...

工作效率提升:使用Anaconda Prompt 创建虚拟环境总结
目录 完整顺序命令流程(直接照着改就行)详细步骤解析(想要详细解析的看过来)1. 创建一个用于存储 Conda 环境的目录(可选)2. 创建新的 Conda 虚拟环境并指定路径3. 激活新创建的环境4. 安装 Jupyter Notebo…...

Python自动化实战 —— 使用Selenium进行Web自动化
为了完成一项重复的任务,你需要在网站上进行大量的点击和操作,每次都要浪费大量的时间和精力。Python的Selenium库就可以自动化完成这些任务。 在本篇文章中,我们将会介绍如何使用Python的Selenium库进行Web自动化,以及如何将它应…...

【前端】【HTML】入门基础知识
参考视频:【狂神说Java】HTML5完整教学通俗易懂_哔哩哔哩_bilibili 一、基本结构 二、基本标签 <h1>:一级标题,通常用于页面的主标题,字体较大且醒目。 <h2>:二级标题,用于副标题或主要章节标…...

PHP获取局域网ip(192.168)
有时候,程序中,需要获取本机内网ip的情况,经过各种资料查找,最终确定一下代码: //获取内网ipfunction getLocalIP() {exec("ipconfig /all",$arr);$res mb_convert_encoding($arr, UTF-8, GBK);$ip ;fore…...

点击底部的 tabBar 属于 wx.switchTab 跳转方式,目标页面的 onLoad 不会触发(除非是第一次加载)
文章目录 1. tabBar 的跳转方式2. tabBar 跳转的特点3. 你的配置分析4. 生命周期触发情况5. 总结 很多人不明白什么是第一次加载,两种情况讨论,第一种情况假设我是开发者,第一次加载就是指点击微信开发者工具上边的编译按钮,每点击…...

基于PLC的酒店热水供应控制系统设计
摘 要 酒店的热水量需求比较大,热水加热消耗能源比较多,为了实现清洁能源加热实现热水供应,系统设计以太阳能作为主要能源来源,以电加热作为辅助能源来源进行系统的设计.通过集热器、储水箱、循环泵等设备组成酒店热水供水系统。通过控制温度传感器的信号,实现恒温…...

博客内所有项目均可在面包多平台进行购买
本人已入住面包多平台:我的 - 面包多 已有资料:...

《Mcal》--MCU模块
一、MCU模块的主要功能 控制系统时钟的产生。控制系统通用模块,该模块会涉及到Adc、Ftm等外设的配置。控制外设时钟。控制MCU运行的模式。初始化定义RAM Section。 比较重要的是时钟的配置。 二、系统时钟的配置 1、芯片时钟树 要想弄明白时钟配置,需…...

C语言:枚举类型
一、枚举类型的声明 枚举顾名思义就是一一列举。我们可以把可能的取值一一列举。比如我们现实生活中: 星期一到星期日是有限的7天,可以一一列举 ;性别有:男、女、保密,也可以一一列举 ;月份有12个月&#x…...

spring boot 多数据源集成mysql、postgresql、phoenix、doris等
如何搭建多数据源项目只要以下简单几步; 一. 创建核心在config.datasource文件夹里 二. 引入相对应的jar包 三. 创建数据库连接配置 四. 写逻辑代码进行验证 1.DataSource package com.irootech.config.datasource;import java.lang.annotation.*;Target({ElementType.MET…...

USB基础 -- USB 控制传输(Control Transfer)的重传机制
USB 控制传输(Control Transfer)的重传机制 1. 控制传输的事务结构 控制传输分为三个阶段,每个阶段都有自己的事务,并可能触发重传机制: 设置阶段(Setup Stage):主机发送 8 字节的…...

云计算基础,虚拟化原理
文章目录 一、虚拟化1.1 什么是虚拟化1.2 虚拟化类型 二 、存储虚拟化2.1 存储指标2.2 存储类型2.3 存储协议2.4 RAID 三、内存 i/O虚拟化3.1 内存虚拟化基本概念地址空间转换原理内存共享与隔离原理 3.2 I/O 虚拟化基本概念模拟(Emulation)方式半虚拟化…...

浮点数在C语言开发中为什么不精确?
在C语言开发中,浮点数的精度问题是一个常见的陷阱,尤其是对于刚接触编程的开发者来说,可能会对浮点数的行为感到困惑。为什么0.1 0.2不等于0.3?为什么浮点数计算会出现微小误差?本文将从计算机底层原理出发࿰…...

ChatGPT网络错误如何解决
在当今的信息化社会,网络技术已无处不在。无论是日常生活中的在线购物,还是工作中的远程会议,网络的稳定性和可靠性成为了我们无时无刻不在关注的重要问题。而在智能技术的快速发展中,像ChatGPT这样的人工智能模型,因其…...

Vue3初学之插槽(slot)使用
在 Vue 3 中,插槽(Slots)是一种强大的内容分发机制,允许你在组件中定义可替换的内容区域,从而使组件更加通用和灵活。以下是 Vue 3 中插槽的几种常见用法: 默认插槽 默认插槽是最基本的插槽类型࿰…...

使用PVE快速创建虚拟机集群并搭建docker环境
安装Linux系统 这里以安装龙蜥操作系统AnolisOS8.9为例加以说明。 通过PVE后台上传操作系统ISO镜像。 然后在PVE上【创建虚拟机】,选定上传的龙蜥操作系统镜像进行系统安装。 注意:在安装过程中,要设定语言、时区、超管用户root的密码、普…...

带格式 pdf 翻译
支持 openAI 接口,国内 deepseek 接口兼容 openAI 接口, deepseek api 又非常便宜 https://pdf2zh.com/ https://github.com/Byaidu/PDFMathTranslate...

【C++】C++11(一)
目录 一、C11简介二、统一的列表初始化2.1 {}初始化2.2 std::initializer_list 三、声明3.1 auto3.2 decltype3.3 nullptr 四、范围for五、智能指针六、STL中一些变化七、右值引用和移动语义7.1 左值引用和右值引用7.2 左值引用与右值引用比较7.3 右值引…...

初学stm32 --- ADC单通道采集
目录 ADC寄存器介绍(F1) ADC控制寄存器 1(ADC_CR1) ADC控制寄存器 2(ADC_CR2) ADC采样时间寄存器1(ADC_SMPR1) ADC采样时间寄存器2(ADC_SMPR2) ADC规则序列寄存器 1(ADC_SQR1) ADC规则序列寄存器 2(ADC_SQR2) ADC规则序列寄存器 3(ADC_SQR3) AD…...

【动态规划篇】欣赏概率论与镜像法融合下,别出心裁探索解答括号序列问题
本篇鸡汤:没有人能替你承受痛苦,也没有人能拿走你的坚强. 欢迎拜访:羑悻的小杀马特.-CSDN博客 本篇主题:带你解答洛谷的括号序列问题(绝对巧解) 制作日期:2025.01.10 隶属专栏:C/C题…...