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…...
Qt Widget类解析与代码注释
#include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this); }Widget::~Widget() {delete ui; }//解释这串代码,写上注释 当然可以!这段代码是 Qt …...

关于nvm与node.js
1 安装nvm 安装过程中手动修改 nvm的安装路径, 以及修改 通过nvm安装node后正在使用的node的存放目录【这句话可能难以理解,但接着往下看你就了然了】 2 修改nvm中settings.txt文件配置 nvm安装成功后,通常在该文件中会出现以下配置&…...
基于服务器使用 apt 安装、配置 Nginx
🧾 一、查看可安装的 Nginx 版本 首先,你可以运行以下命令查看可用版本: apt-cache madison nginx-core输出示例: nginx-core | 1.18.0-6ubuntu14.6 | http://archive.ubuntu.com/ubuntu focal-updates/main amd64 Packages ng…...

汽车生产虚拟实训中的技能提升与生产优化
在制造业蓬勃发展的大背景下,虚拟教学实训宛如一颗璀璨的新星,正发挥着不可或缺且日益凸显的关键作用,源源不断地为企业的稳健前行与创新发展注入磅礴强大的动力。就以汽车制造企业这一极具代表性的行业主体为例,汽车生产线上各类…...
Java入门学习详细版(一)
大家好,Java 学习是一个系统学习的过程,核心原则就是“理论 实践 坚持”,并且需循序渐进,不可过于着急,本篇文章推出的这份详细入门学习资料将带大家从零基础开始,逐步掌握 Java 的核心概念和编程技能。 …...

如何在网页里填写 PDF 表格?
有时候,你可能希望用户能在你的网站上填写 PDF 表单。然而,这件事并不简单,因为 PDF 并不是一种原生的网页格式。虽然浏览器可以显示 PDF 文件,但原生并不支持编辑或填写它们。更糟的是,如果你想收集表单数据ÿ…...
libfmt: 现代C++的格式化工具库介绍与酷炫功能
libfmt: 现代C的格式化工具库介绍与酷炫功能 libfmt 是一个开源的C格式化库,提供了高效、安全的文本格式化功能,是C20中引入的std::format的基础实现。它比传统的printf和iostream更安全、更灵活、性能更好。 基本介绍 主要特点 类型安全:…...

【深度学习新浪潮】什么是credit assignment problem?
Credit Assignment Problem(信用分配问题) 是机器学习,尤其是强化学习(RL)中的核心挑战之一,指的是如何将最终的奖励或惩罚准确地分配给导致该结果的各个中间动作或决策。在序列决策任务中,智能体执行一系列动作后获得一个最终奖励,但每个动作对最终结果的贡献程度往往…...

倒装芯片凸点成型工艺
UBM(Under Bump Metallization)与Bump(焊球)形成工艺流程。我们可以将整张流程图分为三大阶段来理解: 🔧 一、UBM(Under Bump Metallization)工艺流程(黄色区域ÿ…...
深入浅出WebGL:在浏览器中解锁3D世界的魔法钥匙
WebGL:在浏览器中解锁3D世界的魔法钥匙 引言:网页的边界正在消失 在数字化浪潮的推动下,网页早已不再是静态信息的展示窗口。如今,我们可以在浏览器中体验逼真的3D游戏、交互式数据可视化、虚拟实验室,甚至沉浸式的V…...