【Prometheus】PromQL进阶用法

在这里插入图片描述

✨✨ 欢迎大家来到景天科技苑✨✨

🎈🎈 养成好习惯,先赞后看哦~🎈🎈

🏆 作者简介:景天科技苑
🏆《头衔》:大厂架构师,华为云开发者社区专家博主,阿里云开发者社区专家博主,CSDN全栈领域优质创作者,掘金优秀博主,51CTO博客专家等。
🏆《博客》:Python全栈,前后端开发,小程序开发,人工智能,js逆向,App逆向,网络系统安全,数据分析,Django,fastapi,flask等框架,云原生k8s,Prometheus监控,linux,shell脚本等实操经验,网站搭建,数据库等分享。

所属的专栏:Prometheus监控系统零基础到进阶
景天的主页:景天科技苑

在这里插入图片描述

文章目录

  • PromQL进阶用法
    • 1、PromQL资源监控案例
      • 1.1 监控系统资源方法论
      • 1.2 使用USE监控系统资源
    • 2、CPU监控案例实践
      • 2.1 CPU重点监控的维度
      • 2.2 计算CPU平均使用率
      • 2.3 计算CPU饱和度
      • 2.4 配置CPU告警规则
    • 3、内存监控案例实践
      • 3.1 内存重点监控的维度
      • 3.2 计算内存使用率
      • 3.3 计算内存饱和度
      • 3.4 配置内存告警规则
    • 4、磁盘监控案例实践
      • 4.1 磁盘重点监控的维度
      • 4.2 计算磁盘空间使用率
      • 4.3 计算磁盘IO吞吐量
      • 4.4 计算磁盘IOPS
      • 4.5 配置磁盘告警规则
    • 5、网络监控案例实践
      • 5.1 网络重点监控的维度
      • 5.2 计算网络传输速率
      • 5.3 计算网络连接数使用率
      • 5.4 配置网络告警规则

PromQL进阶用法

1、PromQL资源监控案例

资源监控无外乎CPU,内存,磁盘,网络等。
怎么监控呢?需要找到具体的指标,寻找指标又要用到方法论,如下:

1.1 监控系统资源方法论

1、Google 的四个黄金指标着眼点在“服务监控”,这四个指标分别是“延迟、
流量、错误、饱和度”
2、RED方法主要着眼点在“用户体验”,它基于Google的黄金指标,细化了
三个关键指标,“请求率、错误数、请求处理时间”
3、USE方法主要着眼点在“系统资源”,的使用情况,这三个指标分别是“使
用率、饱和度、错误”。因此USE方法是最适合系统资源监控的

1.2 使用USE监控系统资源

在监控CPU、内存、磁盘和⽹络等系统资源时,使⽤USE的⽅法论是最为合适
的,它要求我们针对每个资源(也就是CPU、内存 、⽹络等)分别检查三个关键
方面:使用率、饱和度和错误。
使用率:表示资源在占作时占用的平均时间,例如,CPU在过去的60秒内有
30秒被用来执行指令,那么我们可以说这个CPU的使用率是50%。
饱和度:指明资源已经到达或接近其处理能力极限的程度,表明无法再处理
更多的工作量。这通常通过队列长度等指标来衡量。
错误:记录了资源在运行过程中发生的错误事件的次数。网络监控用的比较多

2、CPU监控案例实践

2.1 CPU重点监控的维度

对于CPU资源的监控,采用USE方法论通常关注以下几点:
CPU使用率:衡量CPU在一段时间内处于活跃状态的百分比。高使用率可能表明系统正在密集执行任务。
CPU饱和度:反映了在某一时间点等待CPU时间的进程数量。高饱和度可能意味着有很多任务在争夺CPU资源。
错误:通常对CPU不太有影响;
案例1:监控CPU1分钟的平均使用率;
案例2:监控CPU的饱和度;

2.2 计算CPU平均使用率

计算CPU平均使用率的公式: (1 - CPU 空闲率) * 100 = CPU 使用率

第一步:获取每个CPU模式的变化率,使用irate函数灵敏度更高,反映更接近实际使用率。

rate(node_cpu_seconds_total[1m])

第二步:查询CPU的空闲时间比率,即CPU处于空闲状态的时间比例。

irate(node_cpu_seconds_total{mode="idle"}[1m])

第三步:系统可能会有多个CPU核心,因此我们需要通过avg聚合函数来计算CPU平均空闲率,最后按照实例进行分组统计。

avg(irate(node_cpu_seconds_total{mode="idle"}[1m])) by (instance)

第四步:使用1减去每个核心的平均空闲率,得到平均使用率,然后将此值乘以100,转换为百分比,最终得出CPU的整体平均使用率

(1 - avg(irate(node_cpu_seconds_total{mode="idle"}[1m])) by (instance) ) *100

2.3 计算CPU饱和度

评估主机的CPU饱和度,最常用的方法是跟踪系统的平均负载。通常情况下,如
果这个负载的值低于CPU核心的数量,可以认为系统运行正常。然而,当平均负
载持续高于CPU核心数量的两倍时,这通常是CPU已经非常饱和了。
计算CPU饱和度的公式:1分钟平均负载 / (CPU核⼼数*2) * 100 = CPU饱和度
的百分比,当大于80%则认为CPU已经接近处理能力的极限。

第一步:获取1分钟平均负载值,然后按照实例和job进行分组计算。

sum(node_load1) by (instance,job)

第二步:获取CPU的核心数,然后乘以2,按实例进行分组计算每个实例的核心数。 这个mode找空闲的还是其他的都可以,因为是要查找CPU核心数

(count(node_cpu_seconds_total{mode="idle"}) by (instance,job) * 2)

第三步:计算CPU饱和度百分比,如果这个百分比大于80%,我们认为CPU已经
非常饱和,并且已经达到了处理能力的极限。

sum(node_load1) by (instance,job) / (count(node_cpu_seconds_total{mode="idle"}) by (instance,job) * 2) * 100 > 80

在这里插入图片描述

2.4 配置CPU告警规则

1、定义CPU告警规则组,然后注入两条规则
cat /etc/prometheus/rules/node_rules.yml
以groups开头

groups:
- name: CPU告警规则
  rules:
  - alert: 节点CPU使用率超过80%
    expr: ( 1 - avg(irate(node_cpu_seconds_total{mode="idle"}[1m])) by (instance,job) ) * 100 > 80
    for: 1m
    labels:
      severity: warning
    annotations:
      summary: "主机CPU利用率过高,实例:{{ $labels.instance }}, 任务:{{ $labels.job }}"
      description: "该实例的CPU利用率高于80%,当前利用率:{{ $value }}%。请及时检查。"
  - alert: CPU饱和度过高
    expr: sum(node_load1) by (instance,job) / (count(node_cpu_seconds_total{mode="idle"}) by (instance,job) * 2) * 100 > 80
    for: 2m
    labels:
      severity: critical
    annotations:
      summary: "CPU饱和度过高,实例:{{ $labels.instance }}, 任务:{{ $labels.job }}"
      description: "该实例的1分钟平均CPU负载超过了核心数的两倍,已经持续2分钟,当前CPU饱和度:{{ $value }}%。需要立即检查系统负载情况。"

在这里插入图片描述

如果想要prometheus读取到我们配置的告警规则,需要让prometheus能够读取到该配置文件
我们先看下默认的prometheus.yml配置文件写法
需要指定告警规则的yml文件路径
在这里插入图片描述

如果告警规则比较多,我们可以指定某个路径下的所有yml文件
在这里插入图片描述

然后执行prometheus热加载

curl -X POST http://localhost:9090/-/reload

检查配置文件格式是否正确

./promtool check config prometheus.yml

在这里插入图片描述

然后在prometheus的alert界面,就可以看到我们配置的告警规则
在这里插入图片描述

3、内存监控案例实践

3.1 内存重点监控的维度

对于内存资源的监控,采用USE方法论通常关注以下几点:
1、内存使用率:衡量系统内存被使用的程度。
2、内存饱和度:表明系统内存的负载程度。内存饱和度,通常监控SWAP的使用率来评估。
3、内存错误:通常较少发生。
案例1:计算内存使用率;
案例2:计算内存饱和度;

3.2 计算内存使用率

计算内存使用率百分比公式: ( 总内存 - 可用内存)/ 总内存 * 100 = 内存使用率

(node_memory_MemTotal_bytes - node_memory_MemAvailable_bytes) / node_memory_MemTotal_bytes * 100

在这里插入图片描述

3.3 计算内存饱和度

计算内存饱和度百分比公式: (总SWAP - 未使用的SWAP) / 总SWAP * 100> 20

(node_memory_SwapTotal_bytes - node_memory_SwapFree_bytes) / node_memory_SwapTotal_bytes * 100

3.4 配置内存告警规则

1、定义内存告警规则组,然后注入两条规则
[root@prom-node01 ~]# cat /etc/prometheus/rules/node_rules.yml

groups:
- name: 内存告警规则
  rules:
  - alert: 主机内存不足
    expr: (node_memory_MemTotal_bytes - node_memory_MemAvailable_bytes) / node_memory_MemTotal_bytes * 100 > 80
    for: 2m
    labels:
      severity: warning
    annotations:
      summary: "主机内存使用率较高, 实例:{{ $labels.instance }}, 任务:{{ $labels.job }}"
      description: "该实例的内存使用率持续2分钟高于80%,当前利用率:{{ $value}}%"
  - alert: 内存饱和度高
    expr: (node_memory_SwapTotal_bytes - node_memory_SwapFree_bytes) / node_memory_SwapTotal_bytes * 100 > 10
    for: 2m
    labels:
      severity: warning
    annotations:
      summary: "主机内存内存饱和度高, 实例:{{ $labels.instance }}, 任务:{{ $labels.job }}"
      description: "SWAP内存使用率已连续2分钟超过10%,表明内存饱和度过高,当前SWAP使用率为:{{ $value }}%。"

我们可以去掉–name 和rules
在这里插入图片描述

这样,告警规则就在一个分组下
在这里插入图片描述

如果我们加上,就单独是一个分组
在这里插入图片描述
在这里插入图片描述

4、磁盘监控案例实践

4.1 磁盘重点监控的维度

对于磁盘,我们不光需要度量磁盘使用率,甚至还需要度量 磁盘IO读写吞吐量、以及磁盘IOPS
1、磁盘使用率:衡量磁盘空间使用率、Inode使用率;
2、磁盘延迟:有些磁盘明确标注了延迟,我们可以监控磁盘的读写延迟,而后进行判定;
3、磁盘饱和度:通过监控I/O吞吐量和IOPS,可以衡量磁盘在繁忙时段的饱和度情况。

案例1:计算磁盘空间使用率、磁盘Inode空间使用率;
案例2:计算磁盘的IO吞吐量的饱和度;
案例3:计算IOPS每秒读写次数的饱和度;

常规磁盘的每秒的IOPS能力和IO吞吐量,有标准后,就好基于标准进行触发器设定,例如当IOPS每秒读写次数的饱和度超过80%则需要关注了
在这里插入图片描述

4.2 计算磁盘空间使用率

计算磁盘空间使用率:(总的磁盘空间 - 可用的磁盘空间 = 已用的磁盘空间) / 总的磁盘空间 * 100
计算Inode空间使用率:( 总的Inode数 - 可用的inode数) / 总的inode数 * 100

1、计算不同分区的磁盘空间使用率(排除tmpfs的分区)

( node_filesystem_size_bytes{device!="tmpfs"} - node_filesystem_avail_bytes{device!="tmpfs"} ) / node_filesystem_size_bytes{device!="tmpfs"} * 100 

在这里插入图片描述

2、计算inode使用率(排除tmpfs的分区)

(node_filesystem_files{device!="tmpfs"} - node_filesystem_files_free{device!="tmpfs"} ) / node_filesystem_files{device!="tmpfs"} * 100 

在这里插入图片描述

4.3 计算磁盘IO吞吐量

I/O吞吐量:衡量在单位时间内磁盘能够读写多少数据量,通常以MB/s(兆字节每秒)为单位。
I/O吞吐量饱和度(%)=(当前IO吞吐量 / 磁盘的最大IO吞吐量能力)× 100
要根据不同的磁盘类型来确定磁盘的最大IO吞吐能力,如果使用云主机,厂商告诉你磁盘的最大吞吐能力为多大

磁盘吞吐量指标
在这里插入图片描述

1、模拟IO写入吞吐量,并限制写入IO最大20MB/s

yum install pv -y

dd if=/dev/zero bs=1M count=10000 | pv -L 20M > /tmp/bigdata

在这里插入图片描述

2、获取当前磁盘最近1分钟的,写入吞吐量最大的值,然后按实例进行分组计算,最后将结果转为MB

max(rate(node_disk_written_bytes_total[1m])) by (instance,job) / 1024 /1024

在这里插入图片描述

3、使用当前IO写入吞吐量 除以 磁盘最大写入I/O吞吐量30MB/s,而后乘以100,获取I/O吞吐的饱和度百分比

(max(rate(node_disk_written_bytes_total[1m])) by (instance,job) / 1024 /1024) / 30 * 100

在这里插入图片描述

# 告警(当IO写入吞吐大于80%则触发告警),round四舍五入取整数
round(max(rate(node_disk_written_bytes_total[1m])) by (instance,job) / 1024/1024 / 30 * 100) > 60

4、模拟IO读取吞吐量,并限制读取IO最大20MB/s

# yum install pv -y
pv -L 20M /tmp/bigdata > /dev/null

在这里插入图片描述

5、获取当前磁盘最近1分钟的,读取吞吐量最大的值,然后按实例进行分组计算,最后将结果转为MB

max(rate(node_disk_read_bytes_total[1m])) by (instance,job) / 1024 /1024

在这里插入图片描述

6、使用当前IO读取吞吐量 除以 磁盘最大读取I/O吞吐量30MB/s,而后乘以100,获取I/O吞吐的饱和度百分比

max(rate(node_disk_read_bytes_total[1m])) by (instance,job) / 1024 /1024 /30 * 100

在这里插入图片描述

# 告警(当IO读取吞吐大于60%则触发告警)
round(max(irate(node_disk_read_bytes_total[1m])) by (instance,job) / 1024 /1024 /30 * 100 ) > 60
 

4.4 计算磁盘IOPS

IOPS:衡量在单位时间内磁盘能够读写操作的次数。
IOPS饱和度(%)=(当前IOPS / 磁盘的最大IOPS能力)× 100

iops指标
在这里插入图片描述

1、模拟IO写入,也相当于有大量IOPS

dd if=/dev/zero bs=1M count=10000 | pv -L 100M > /tmp/bigdata

在这里插入图片描述

2、获取当前磁盘最近1分钟的,IOPS写入次数的最大的值,然后按实例进行分组计算

max(irate(node_disk_writes_completed_total[1m])) by (instance,job)

在这里插入图片描述

3、使用当前IOPS写入次数 除以 磁盘最大IOPS,这里是120,而后乘以100,获取IOPS写入的饱和度百分比

max(irate(node_disk_writes_completed_total[1m])) by (instance,job) / 120 *100

在这里插入图片描述

# 告警(当IOPS饱和度大于60%则触发告警)
round(max(irate(node_disk_writes_completed_total[1m])) by (instance,job) /120 * 100) > 60

4、模拟IO读取,也相当于有大量IOPS

yum install pv -y
pv -L 50M /tmp/bigdata > /dev/null

在这里插入图片描述

5、获取当前磁盘最近1分钟的,读取IOPS最大次数的值,然后按实例进行分组计算

max(irate(node_disk_reads_completed_total[1m])) by (instance,job)

在这里插入图片描述

6、使用当前IO读取吞吐量 除以 磁盘最大读取I/O吞吐量,而后乘以100,获取IOPS读取的饱和度百分比

max(irate(node_disk_reads_completed_total[1m])) by (instance,job) / 120 * 100

在这里插入图片描述

# 告警(当IOPS读取大于60%则触发告警)
round(max(irate(node_disk_reads_completed_total[1m])) by (instance,job) / 120 * 100) > 60

4.5 配置磁盘告警规则

1、编写磁盘告警规则文件

groups:
- name: 磁盘告警规则
  rules:
  - alert: 磁盘空间告急
    expr: ( node_filesystem_size_bytes{device!="tmpfs"} - node_filesystem_avail_bytes{device!="tmpfs"} ) / node_filesystem_size_bytes{device!="tmpfs"} * 100 > 70
    for: 1m
    labels:
      severity: critical
    annotations:
      summary: "实例 {{ $labels.instance }} 磁盘 {{ $labels.mountpoint }}分区空间不足"
      description: "实例 {{ $labels.instance }} 磁盘 {{ $labels.mountpoint}} 分区空间使用率已超过 70%,当前使用率为 {{ $value }}%,请及时处理。"
  - alert: 磁盘Inode空间告急
    expr: (node_filesystem_files{device!="tmpfs"} - node_filesystem_files_free{device!="tmpfs"} ) / node_filesystem_files{device!="tmpfs"} * 100 > 70
    for: 1m
    labels:
      severity: critical
    annotations:
      summary: "实例 {{ $labels.instance }} 磁盘 {{ $labels.mountpoint }}分区Inode空间不足"
      description: "实例 {{ $labels.instance }} 磁盘 {{ $labels.mountpoint}} 分区的Inode空间使用率已超过 70%,当前使用率为 {{ $value }}%,请及时处理。"
  - alert: 磁盘IOPS写入较高
    #expr: sum(rate(node_disk_writes_completed_total[1m])) by (instance,job) / 120 * 100 >60
    #round函数可以对值进行四舍五入
    expr: round(max(irate(node_disk_writes_completed_total[1m])) by (instance,job) / 120 * 100,0.01) > 60
    for: 1m
    labels:
      severity: critical
    annotations:
      summary: "实例 {{ $labels.instance }} IOPS每秒写入次数超过120次/s"
      description: 目前磁盘IOPS写入饱和度是 {{ $value }}%,目前磁盘IOPS每秒写入最大 {{ printf `max(rate(node_disk_writes_completed_total{instance="%s",job="%s"}[1m]))` $labels.instance $labels.job | query | first | value | printf "%.2f" }} 次/s
  - alert: 磁盘IOPS读取较高
    expr: round(max(irate(node_disk_reads_completed_total[1m])) by (instance,job) / 120 * 100) > 60
    for: 1m
    labels:
      severity: critical
    annotations:
      summary: "实例 {{ $labels.instance }} IOPS每秒读取次数超过120次/s"
      description: 目前磁盘IOPS读取饱和度是 {{ $value }}%,目前磁盘IOPS每秒读取最大{{ printf `max(rate(node_disk_reads_completed_total{instance="%s",job="%s"}[1m]))` $labels.instance $labels.job | query | first | value | printf "%.2f" }} 次/s
  - alert: 磁盘IO写入吞吐较高
    expr: round(max(rate(node_disk_written_bytes_total[1m])) by (instance,job) / 1024 /1024 / 30 * 100) > 60
    for: 1m
    labels:
      severity: critical
    annotations:
      summary: "实例 {{ $labels.instance }} 磁盘IO写入每秒超过最大30MB/s"
      description: 目前磁盘IO写⼊吞吐量的饱和度是 {{ $value }}%。目前磁盘IO写入吞吐量每秒最大是 {{ printf `max(rate(node_disk_written_bytes_total{instance="%s",job="%s"}[1m])) /1024/1024` $labels.instance $labels.job | query | first | value | printf "%.2f" }}MB/s
  - alert: 磁盘IO读取吞吐较高
    expr: round(max(rate(node_disk_read_bytes_total[1m])) by (instance,job) / 1024 /1024 /30 * 100 ) > 60
    for: 1m
    labels:
      severity: critical
    annotations:
      summary: "实例 {{ $labels.instance }} 磁盘IO读取每秒超过最大30MB/s"
      description: 目前磁盘IO读取吞吐量的饱和度是 {{ $value }}%。目前磁盘IO读取吞吐量每秒最大是 {{ printf `max(rate(node_disk_read_bytes_total{instance="%s",job="%s"}[1m])) /1024/1024` $labels.instance $labels.job | query | first | value | printf "%.2f" }}MB/s

在这里插入图片描述
在这里插入图片描述

5、网络监控案例实践

5.1 网络重点监控的维度

对于网络,通常使用USE方法监控如下几个维度:
1、网络传输速率:即当前网络每秒传输的带宽。
2、网络饱和度:对于网络饱和度,通常查看网络是否丢包严重,如果持续有丢包情况则认为目前网络比较饱和;
3、网络错误率:可以通过监控网络发送和接收的错误来获得;
案例1:计算网络每秒传输带宽;
案例2:计算网络饱和度,例如:当带宽速率达到100%,并且发送和接收的丢包率持续上升则告警 node_network_transmit_drop_total、node_network_receive_drop_total
案例3:计算网络TCP连接数使用率;

5.2 计算网络传输速率

网络传输速率 = irate(网络接口 “发送/接收” 的总数据量) * 8 /1024 /1024 =Mbps

1、模拟带宽

# 1、在两个测试的节点上安装:yum install iperf -y
# 2、服务端运行并指定端口:iperf -s -p 9999

在这里插入图片描述

3、客户端模拟带宽发送命令,-b指定发送大小,-t指定发送持续时间:iperf -c -p 9999 -b 300M -t 60
在这里插入图片描述

2、获取最大的下载带宽,也就是每秒能接收多少Mbps

max(irate(node_network_receive_bytes_total[1m]) * 8 / 1024 / 1024) by (instance,job,device)

在这里插入图片描述

3、获取最大的上传带宽,也就是每秒能上传多少Mbps

max(irate(node_network_transmit_bytes_total[1m]) * 8 / 1024 / 1024) by (instance,job,device)

在这里插入图片描述

4、假设公司带宽是500Mbps,我希望达到400Mbps时则触发告警,计算公式: 网络每秒传输带宽 / 网络最大带宽 * 100 >= 80
下载

max(irate(node_network_receive_bytes_total[1m]) * 8 / 1024 / 1024) by (instance,job,device) / 500 * 100 >= 80

在这里插入图片描述

上传

max(irate(node_network_transmit_bytes_total[1m]) * 8 / 1024 / 1024) by (instance,job,device) / 500 * 100 >= 80

在这里插入图片描述

5.3 计算网络连接数使用率

网络连接率 = 当前活跃TCP连接数 / 系统内核最大支持的TCP连接数 * 100

(node_nf_conntrack_entries / node_nf_conntrack_entries_limit) * 100
# 告警
(node_nf_conntrack_entries / node_nf_conntrack_entries_limit) * 100 > 80

在这里插入图片描述

5.4 配置网络告警规则

1、配置网络告警规则

- name: 网络告警规则
  rules:
  - alert: 网络下载带宽占用过高,超过80%
    expr: max(irate(node_network_receive_bytes_total[1m]) * 8 / 1024 / 1024) by (instance,job,device) / 50 * 100 >= 80
    for: 1m
    labels:
      severity: critical
    annotations:
      summary: "实例 {{ $labels.instance }} 的 {{ $labels.device }} 接口下载流量即将超过公司实际50Mbps"
      description: 目前下载带宽已经达到 {{ printf `(irate(node_network_receive_bytes_total{instance="%s",job="%s",device="%s"}[1m]) * 8 / 1024 / 1024)` $labels.instance $labels.job $labels.device | query | first | value | printf "%.2f"}} Mbps/s 目前下载带宽使用率在 {{ $value }}%
  - alert: 网络上传带宽占用过高,超过80%
    expr: max(irate(node_network_transmit_bytes_total[1m]) * 8 / 1024 / 1024) by (instance,job,device) / 50 * 100 >= 80
    for: 1m
    labels:
      severity: critical
    annotations:
      summary: "实例 {{ $labels.instance }} 的 {{ $labels.device }} 接口上传流量即将超过公司实际50Mbps"
      description: 目前上传带宽已经达到 {{ printf `(irate(node_network_transmit_bytes_total{instance="%s",job="%s",device="%s"}[1m]) * 8 / 1024 / 1024)` $labels.instance $labels.job $labels.device | query | first | value | printf "%.2f"}} Mbps/s 目前上传带宽使用率在 {{ $value }}%



  - alert: 网络TCP连接数过高,超过80%
    expr: node_nf_conntrack_entries / node_nf_conntrack_entries_limit * 100 > 80
    for: 1m
    labels:
      severity: critical
    annotations:
      summary: "实例 {{ $labels.instance }} 的 tcp连接数超过80%"
      description: 目前TCP连接数是 {{ printf `node_nf_conntrack_entries{instance="%s",job="%s"}` $labels.instance $labels.job | query | first | value" }} 目前TCP连接使用率是 {{ $value }}%

最后一个TCP的没法用,我们先去掉
在这里插入图片描述

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

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

相关文章

Fabric区块链网络搭建:保姆级图文详解

目录 前言1、项目环境部署1.1 基础开发环境1.2 网络部署 2、后台环境2.1、环境配置2.2、运行springboot项目 3、PC端3.1、安装依赖3.2、修改区块链网络连接地址3.3、启动项目 前言 亲爱的家人们,创作很不容易,若对您有帮助的话,请点赞收藏加…

【SpringCloud】黑马微服务学习笔记

目录 1. 关于微服务 ?1.1 微服务与单体架构的区别 ?1.2 SpringCloud 技术 2. 学习前准备 ?2.1 环境搭建 ?2.2 熟悉项目 3. 正式拆分 ?3.1 拆分商品功能模块 ?3.2 拆分购物车功能模块 4. 服务调用 ?4.1 介绍 ?4.2 RustTemplate?的使用 4.3 服务治理-注册中…

RabbitMQ1-消息队列

目录 MQ的相关概念 什么是MQ 为什么要用MQ MQ的分类 MQ的选择 RabbitMQ RabbitMQ的概念 四大核心概念 RabbitMQ的核心部分 各个名词介绍 MQ的相关概念 什么是MQ MQ(message queue),从字面意思上看,本质是个队列,FIFO 先入先出&am…

鸿蒙参考文档和问题记录

本文用于记录鸿蒙使用过程中的问题和相关参考文档 问题记录 1. 兼容性测试套件问题 ActsStartAbilityForResultNoTargetBundleListStageTest套件测试失败:模块FreeInstall 技术资料 1. HarmonyOS应用如何打包HAP并安装到真机 HarmonyOS应用如何打包HAP并安装到真…

虚幻基础-1:cpu挑选(14600kf)

能帮到你的话,就给个赞吧 😘 文章目录 ue非常吃cpu拉满主频打开项目编写蓝图运行原因 时间长 关于压力测试 本文以14600kf为例,双12购入,7月份产。 ue非常吃cpu 经本人测试,ue是非常吃cpu的。 拉满主频 无论任何时间…

css动画水球图

由于echarts水球图动画会导致ios卡顿&#xff0c;所以纯css模拟 展示效果 组件 <template><div class"water-box"><div class"water"><div class"progress" :style"{ --newProgress: newProgress % }"><…

基于 Spring Boot 和 Vue.js 的全栈购物平台开发实践

在现代 Web 开发中&#xff0c;前后端分离的架构已经成为主流。本文将分享如何使用 Spring Boot 和 Vue.js构建一个全栈购物平台&#xff0c;涵盖从后端 API 开发到前端页面实现的完整流程。 1. 技术栈介绍 后端技术栈 JDK 1.8&#xff1a;稳定且广泛使用的 Java 版本。 Spring…

nginx离线安装部署详解(附一键启动 环境变量)

学习nginx的过程中 看了许多帖子 但是都没有全套的部署 所以想自己写一篇帖子 正好也可以给后续想要学习nginx的人参考一下 当时在学习的时候总是在想 为什么要学习离线安装 这玩意不是一个dnf命令不就完事了吗 在后续的学习中才发现 原来在实际环境中许多机器都是离线…

论文笔记(六十三)Understanding Diffusion Models: A Unified Perspective(一)

Understanding Diffusion Models: A Unified Perspective&#xff08;一&#xff09; 文章概括引言&#xff1a;生成模型背景&#xff1a;ELBO、VAE 和分层 VAE证据下界&#xff08;Evidence Lower Bound&#xff09;变分自编码器 &#xff08;Variational Autoencoders&#x…

Biotin sulfo-N-hydroxysuccinimide ester ;生物素磺基-N-羟基琥珀酰亚胺酯;生物素衍生物;190598-55-1

一、生物素及其衍生物的概述 生物素衍生物是指在生物素&#xff08;Vitamin H或B7&#xff09;分子基础上进行化学修饰得到的衍生化合物。这些衍生化合物在生物医学研究、临床诊断和药物开发等领域有着广泛的应用。 生物素&#xff08;Biotin&#xff09;是一种水溶性维生素&a…

Freemarker模板引擎技术

【问题】当渲染文章数据时&#xff0c;由于文章的数据很多&#xff0c;直接去查询文章内容表的话&#xff0c;效率比较低。 【解决】使用freemarker将文章的内容通过模板技术生成静态的html文件存储到minio中&#xff0c;这样用户就只需要拿着minio的url去minio里获取静态页面即…

Python在多个Excel文件中找出缺失数据行数多的文件

本文介绍基于Python语言&#xff0c;针对一个文件夹下大量的Excel表格文件&#xff0c;基于其中每一个文件内、某一列数据的特征&#xff0c;对其加以筛选&#xff0c;并将符合要求与不符合要求的文件分别复制到另外两个新的文件夹中的方法。 首先&#xff0c;我们来明确一下本…

Linux 内核中的 InfiniBand 核心模块:drivers/infiniband/core/device.c 分析

InfiniBand 是一种高性能、低延迟的网络互连技术,广泛应用于高性能计算(HPC)、数据中心和云计算等领域。Linux 内核中的 InfiniBand 子系统提供了对 InfiniBand 设备的支持,而 drivers/infiniband/core/device.c 文件则是 InfiniBand 核心模块的重要组成部分。本文将对 dev…

leetcode-不同路径问题

一个机器人位于一个 m x n 网格的左上角 &#xff08;起始点在下图中标记为 “Start” &#xff09;。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角&#xff08;在下图中标记为 “Finish” &#xff09;。 问总共有多少条不同的路径&#xff1f; 看见题目…

【网络协议】【http】【https】RSA+AES-TLS1.2

【网络协议】【http】【https】RSAAES-TLS1.2 https并不是一个协议 而是在传输层之间添加了SSL/TLS协议 TLS 协议用于应用层协议&#xff08;如 HTTP&#xff09;和传输层&#xff08;如 TCP&#xff09;之间&#xff0c;增加了一层安全性来解决 HTTP 存在的问题&#xff0c;H…

【16届蓝桥杯寒假刷题营】第1期DAY5

5.依依的询问最小值 - 蓝桥云课 问题描述 依依有个长度为 n 的序列 a&#xff0c;下标从 1 开始。 她有 m 次查询操作&#xff0c;每次她会查询下标区间在 [li​,ri​] 的 a 中元素和。她想知道你可以重新排序序列 a&#xff0c;使得这 m 次查询的总和最小。 求你求出 m 次…

Ext2 文件系统:数字世界的基石,深度解码超时空存储魔法

本篇博主将带大家深入底层探秘系统是如何与磁盘进行相互交流的&#xff0c;配合精美配图&#xff0c;细节讲解来带大家深入探究&#xff08;注&#xff1a;本篇文章建议了解磁盘内部物理结果组成及设计再进行阅读&#xff09;。 羑悻的小杀马特.-CSDN博客羑悻的小杀马特.擅长C…

Java面试专题——面向对象

面向过程和面向对象的区别 面向过程&#xff1a;当事件比较简单的时候&#xff0c;利用面向过程&#xff0c;注重的是事件的具体的步骤/过程&#xff0c;注重的是过程中的具体的行为&#xff0c;以函数为最小单位&#xff0c;考虑怎么做。 面向对象&#xff1a;注重找“参与者…

GeekHour

Linux Linux的是类Unix系统&#xff0c;作者是Linus&#xff0c;也是git的作者。符合GPL&#xff08;General Public License&#xff09;就可以Linux的使用、修改、再发布。 Linux四部分&#xff1a; 内核&#xff1a;驱动、内存管理、进程管理、文件系统、网络协议栈…。作…

学习golang语言时遇到的难点语法

作者是java选手&#xff0c;实习需要转go&#xff0c;记录学习go中遇到的一些与java不同的语法。 defer defer特性 1. 关键字 defer 用于注册延迟调用。 2. 这些调用直到 return 前才被执。因此&#xff0c;可以用来做资源清理。 3. 多个defer语句&#xff0c;按先进…