当前位置: 首页 > news >正文

【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 > 80for: 1mlabels:severity: warningannotations: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 > 80for: 2mlabels:severity: criticalannotations: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 > 80for: 2mlabels:severity: warningannotations:summary: "主机内存使用率较高, 实例:{{ $labels.instance }}, 任务:{{ $labels.job }}"description: "该实例的内存使用率持续2分钟高于80%,当前利用率:{{ $value}}%"- alert: 内存饱和度高expr: (node_memory_SwapTotal_bytes - node_memory_SwapFree_bytes) / node_memory_SwapTotal_bytes * 100 > 10for: 2mlabels:severity: warningannotations: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 -ydd 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 > 70for: 1mlabels:severity: criticalannotations: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 > 70for: 1mlabels:severity: criticalannotations: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) > 60for: 1mlabels:severity: criticalannotations: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) > 60for: 1mlabels:severity: criticalannotations: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) > 60for: 1mlabels:severity: criticalannotations: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 ) > 60for: 1mlabels:severity: criticalannotations: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 >= 80for: 1mlabels:severity: criticalannotations: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 >= 80for: 1mlabels:severity: criticalannotations: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 > 80for: 1mlabels:severity: criticalannotations: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的没法用,我们先去掉
在这里插入图片描述

相关文章:

【Prometheus】PromQL进阶用法

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,…...

BOBO小火炬全套源码XE修复版2025(火炬天花板二次开发版)

《小火炬全套源码 传奇游戏源码讲解》 小火炬全套源码是一种用于开发经典传奇类游戏的源码包。传奇游戏作为一款经典的多人在线角色扮演游戏(MMORPG),有着庞大的用户基础和强大的游戏生态。小火炬全套源码主要提供了从基础架构到核心功能的完…...

【基于无线电的数据通信链】Link 11 仿真测试

〇、废话 Link 11 仿真测试 涉及多个方面,包括信号仿真、协议模拟、数据链路层的仿真以及网络性能评估等。Link 11 是一种基于 HF(高频) 或 UHF(超高频) 波段的无线通信协议,主要用于军事通信系统中。为了…...

WPF实战案例 | C# WPF实现计算器源码

WPF实战案例 | C# WPF实现计算器源码 一、设计来源计算器应用程序讲解1.1 主界面1.2 计算界面 二、效果和源码2.1 界面设计(XAML)2.2 代码逻辑(C#)2.3 实现步骤总结 源码下载更多优质源码分享 作者:xcLeigh 文章地址&a…...

WebSocket 和 Socket 的区别

一、协议层次和工作方式 1.1 )Socket 1.1.1)Socket位于传输层,通常使用TCP或UDP协议 1.1.2)提供了一个通用的网络编程接口,允许应用程序通过它发送和接收数据 1.1.3)一般需要手动管理连接,错…...

Matlab自学笔记四十五:日期时间型和字符、字符串以及double型的相互转换方法

1.说明 在Matlab中,大多数函数都有这样的功能:创建函数本身具有转换的功能,例如double函数,可以创建双精度浮点数,也可以把输入参数转换成双精度浮点数,再例如string,可以创建字符串&#xff0…...

Python基础学习(六)unittest 框架

1.介绍 是 Python自带的单元测试框架 - 自带的, 可以直接使用, 不需要单外安装 - 测试人员,用来做自动化测试, 作为自动化测试的执行框架,即管理和执行用例的 核心要素: TestCase 测试用例, 这个测试用例是 unittest 的组成部分,作用是用来书写真正的…...

Python数据可视化(够用版):懂基础 + 专业的图表抛给Tableau等专业绘图工具

我先说说文章标题中的“够用版”啥意思,为什么这么写。 按照我个人观点,在使用Python进行数据分析时,我们有时候肯定要结合到图表去进行分析,去直观展现数据的规律和特定,那么我们肯定要做一些简单的可视化&#xff0…...

麒麟操作系统服务架构保姆级教程(十三)tomcat环境安装以及LNMT架构

如果你想拥有你从未拥有过的东西,那么你必须去做你从未做过的事情 之前咱们学习了LNMP架构,但是PHP对于技术来说确实是老掉牙了,PHP的市场占有量越来越少了,我认识一个10年的PHP开发工程师,十年工资从15k到今天的6k&am…...

Docker集成onlyoffice实现预览功能

1.拉取镜像 docker pull onlyoffice/documentserver 2. 数据卷挂载 mkdir -p app/onlyoffice/DocumentServer/logs mkdir -p app/onlyoffice/DocumentServer/data mkdir -p app/onlyoffice/DocumentServer/lib mkdir -p app/onlyoffice/DocumentServer/db 3.运行容器 docker ru…...

Flowable 管理各业务流程:流程设计器 (获取流程模型 XML)、流程部署、启动流程、流程审批、流程挂起和激活、任务分配

文章目录 引言I 表结构主要表前缀及其用途核心表II 流程设计器(Flowable BPMN模型编辑器插件)Flowable-UIvue插件III 流程部署部署步骤例子:根据流程模型ID部署IV 启动流程启动步骤ACT_RE_PROCDEF:流程定义相关信息例子:根据流程 ID 启动流程V 流程审批审批步骤Flowable 审…...

BladeDISC++:Dynamic Shape AI 编译器下的显存优化技术

近年来,随着深度学习技术的迅猛发展,越来越多的模型展现出动态特性,这引发了对动态形状深度学习编译器(Dynamic Shape AI Compiler)的广泛关注。本文将介绍阿里云 PAI 团队近期发布的 BladeDISC项目,探讨在动态场景下如何优化深度…...

FFmpeg常用命令

文章目录 一、 FFmpeg 音视频的处理流程二、FFmpeg 常用命令2.1、查看本机支持的采集设备2.2、 录制视频2.2.1、原始视频2.2.2、编码的视频 2.3、录制音频:2.3.1、原始音频2.3.2、编码的音频 2.4、录制音视频:2.5、文件格式转换:2.6、提取音频…...

http请求开启长连接导致请求偶发失败

问题描述: http长连接的意思是服务器为了调用时减少TCP三次握手开销,会复用之前已经发起的请求,比较适合频繁交互(比如数据推送、流水线操作等)的场景,但是如果超过服务器配置的连接最大空闲时间&#xff0…...

JUnit单元测试

单元测试 就是针对最小的功能单元(方法),编写测试代码对其正确性进行测试 JUnit 最流行的java测试框架之一,方柏霓进行单元测试 入门程序 使用Junit,对UserService的方法进行单元测试 1.在pom.xml中,…...

智慧公安(实景三维公安基层基础平台)建设方案——第4章

4 建设内容 4.1 标准规范体系 在国家和地方公安基层信息化标准规范的基础上,结合项目实际情况,制定标准规范及管理制度,构建统一的标准规范体系,以便更好地实现公安基层基础信息的高度共享、平台运行的统一协调、业务流程最优化。主要包括以下内容: 1. 业务标准规范 (…...

LLMs(大型语言模型)的多智能体:Auto-GPT

LLMs(大型语言模型)的多智能体:Auto-GPT 是指在一个系统中集成多个具有不同能力、角色和任务的智能体,这些智能体能够相互协作、沟通和交互,以共同完成复杂的任务或解决复杂的问题。每个智能体都可以被视为一个独立的实体,具有自己的策略、目标和知识库,通过相互之间的…...

《Effective Java》学习笔记——第2部分 对象通用方法最佳实践

文章目录 第2部分 所有对象通用方法一、前言二、最佳实践内容1. equals()方法2. hashCode()方法3. toString() 方法4. clone() 方法5. finalize() 方法6. compareTo()方法(实现 Comparable 接口) 三、小结 第2部分 所有对象通用方法 一、前言 《Effect…...

2024年智慧消防一体化安全管控年度回顾与2025年预测

随着科技的飞速发展,智慧营区一体化安全管控在2024年取得了显著进展,同时也为2025年的发展奠定了坚实基础。 2024年年度回顾 政策支持力度持续加大:国家对消防安全的重视程度不断提高,出台了一系列涵盖技术创新、市场应用、人才培…...

艺术家迟首飞在特殊历史时刻展现中国艺术力量

艺术家迟首飞在特殊历史时刻展现中国艺术力量 艺术创作的边界正被不断拓展。中国艺术家迟首飞以其纪实视野,将传统与现代元素巧妙融合,展现全球艺坛力量,创作出一系列精彩作品。尤其是《平安兔》《福》与TikTok标志的结合的作品,…...

探索微服务架构:从单体应用到微服务的转变

引言 随着互联网业务的日益复杂和用户需求的快速增长,软件开发的架构模式也在不断演进。从最早的单体应用架构到后来的分层架构,再到如今备受关注的微服务架构,每一种架构模式都试图解决软件开发中的不同挑战。尤其是在现代互联网企业中&…...

MongoDB vs Redis:相似与区别

前言 在当今的数据库领域,MongoDB 和 Redis 都是备受关注的非关系型数据库(NoSQL),它们各自具有独特的优势和适用场景。本文将深入探讨 MongoDB 和 Redis 的特点,并详细对比它们之间的相似之处和区别,帮助…...

Jenkins-pipeline语法说明

一. 简述: Jenkins Pipeline 是一种持续集成和持续交付(CI/CD)工具,它允许用户通过代码定义构建、测试和部署流程。 二. 关于jenkinsfile: 1. Sections部分: Pipeline里的Sections通常包含一个或多个Direc…...

MySQL(3)运算符、排序与分页

运算符 一、算术运算符 加减乘除余 举例: SELECT 1001 FROM DUAL; 结果为101,与java中的连接字符串不同。 SELECT 100A FROM DUAL; 结果为100。 也可以理解为,遇到非数值类型时,先转换为数值类型(如2可以转换…...

Kafka面试题----Kafka消息是采用Pull模式,还是Push模式

Pull 模式为主 消费者主动拉取:Kafka 中的消费者是基于 Pull 模式来获取消息的。消费者通过向 Kafka 集群发送拉取请求,主动地从 Broker 中获取消息。这种方式使得消费者可以根据自身的消费能力和处理速度来灵活地控制消息的拉取频率和数量,…...

BLE透传方案,IoT短距无线通信的“中坚力量”

在物联网(IoT)短距无线通信生态系统中,低功耗蓝牙(BLE)数据透传是一种无需任何网络或基础设施即可完成双向通信的技术。其主要通过简单操作串口的方式进行无线数据传输,最高能满足2Mbps的数据传输速率&…...

借助 .pth 文件完成多个 Python 解释器的合并

相关搜索 conda 虚拟环境如何使用 ROS 的 Python 模块conda 虚拟环境找不到 catkin_pkg 问题描述 如果你在 Ubuntu 20.04 中装了 conda,那么你的 Ubuntu 会有这些 Python 解释器: /usr/bin/python3:系统的解释器 (版本为 3.8.10&#xff0…...

今天也是记录小程序进展的一天(破晓时8)

嗨嗨嗨朋友们,今天又来记录一下小程序的进展啦!真是太激动了,项目又迈出了重要的一步,231啦!感觉每一步的努力都在积累,功能逐渐完善,离最终上线的目标越来越近了。大家一直支持着这个项目&…...

python高级加密算法AES对信息进行加密和解密

AES(高级加密标准)是一种广泛使用的对称加密算法,它以字节为单位处理数据,将明文分组加密成密文。AES算法的核心在于一个轮函数,该函数会对数据执行多次变换,包括字节代换、行移位、列混合和轮密钥加。这些…...

# [Unity]【游戏开发】 脚本生命周期与常见事件方法

在Unity中,脚本的生命周期是指脚本从创建到销毁的整个过程,以及在此过程中触发的各类事件。掌握脚本生命周期对优化游戏开发过程和避免性能问题至关重要。本文将详细探讨脚本生命周期的关键事件、常见的事件方法,并通过实例说明如何在合适的时机执行脚本逻辑,以确保游戏的流…...

《探秘鸿蒙Next:非结构化数据处理与模型轻量化的完美适配》

在鸿蒙Next的人工智能应用场景中,处理非结构化数据并使其适配模型轻量化需求是一项关键且具有挑战性的任务。以下是一些有效的方法和策略。 数据预处理 数据清洗:非结构化数据中往往存在噪声、重复和错误数据。对于文本数据,要去除乱码、特殊…...

Spring Boot框架下的上海特产销售商城网站开发之旅

摘要 本项目基于Spring Boot框架开发,旨在创建一个网络上海特产销售商城网站。在黄菊华老师的指导下,该项目不仅涵盖了核心代码讲解和答辩指导,还提供了详尽的开发文档、开题报告、任务书及PPT等毕业设计辅导材料。黄老师是《Vue.js入门与商城…...

HTML 基础入门:核心标签全解析

在网页开发的世界里,HTML(超文本标记语言)是基石般的存在。它负责构建网页的基本结构,为用户呈现出丰富多样的内容。今天,就让我们一起深入了解 HTML 中几个极为关键的基础标签,开启网页创作的第一步。 一…...

Docker基础安装与使用

Docker 简介 Docker 是一个开源的容器化平台,用于开发、部署和运行应用程序。它通过将应用程序及其依赖项打包到一个轻量级的、可移植的容器中,实现了应用程序的快速部署和跨环境一致性。 Docker 的核心概念 容器(Container)&a…...

基于Docker的Spark分布式集群

目录 1. 说明 2. 服务器规划 3. 步骤 3.1 要点 3.2 配置文件 3.2 访问Spark Master 4. 使用测试 5. 参考 1. 说明 以docker容器方式实现apache spark计算集群,能灵活的增减配置与worker数目。 2. 服务器规划 服务器 (1master, 3workers) ip开放端口备注ce…...

物业管理软件引领智能社区高效服务与管理创新

内容概要 物业管理软件是在智能社区建设中不可或缺的重要工具。随着城市化进程的加速,社区管理的复杂性也在不断上升,如何提高服务效率和管理水平,已经成为物业公司面临的主要挑战。在这样的背景下,物业管理软件以其强大的功能和…...

NoETL | 数据虚拟化如何在数据不移动的情况下实现媲美物理移动的实时交付?

在我们之前的文章中,我们回顾了Denodo在逻辑数据仓库和逻辑数据湖场景中所使用的主要优化技术(具体内容请参阅之前的文章)。 数据架构 | 逻辑数据仓库与物理数据仓库性能对比_物理数仓、逻辑数仓-CSDN博客文章浏览阅读1.5k次,点赞…...

ovs实现lb负载均衡

负载均衡定义 负载均衡器的实现原理是通过硬件或软件设备将客户端访问流量根据转发策略分发到多个服务器或设备上,以确保系统的负载均衡。常见的实现方式包括: 二层负载均衡‌:使用虚拟MAC地址方式,根据OSI模型的二层进行负载均…...

2025 OWASP十大智能合约漏洞

随着去中心化金融(DeFi)和区块链技术的不断发展,智能合约安全的重要性愈发凸显。在此背景下,开放网络应用安全项目(OWASP)发布了备受期待的《2025年智能合约十大漏洞》报告。 这份最新报告反映了不断演变的…...

在亚马逊云科技上用AI提示词优化功能写出漂亮提示词(下)

提示工程(Prompt Engineering)对各位小伙伴们来说是再熟悉不过了,提示词工程技术是通过编写指令词,指导开发者们调用AI基础模型(FMs)获得期望的响应。但是经常写提示词的朋友们会知道,为了获取理…...

智能鞋利用机器学习和深度学习技术进行患者监测和步态分析的演变与挑战

概述 近年来,创新型 "智能鞋 "层出不穷,将物联网(IoT)和可穿戴设备技术融入 "鞋 "中,成为我们日常生活中不可或缺的一部分。智能鞋可以通过鞋中嵌入的电子元件、传感器、微处理器和其他技术&…...

Unity编辑拓展显示自定义类型

配合自定义特性或着header可以添加注解 using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEditor; using System.Reflection; using System; using Unity.VisualScripting;#if UNITY_EDITORpublic class EditorRender {public sta…...

Unity预制体未即时刷新

有时候在用代码修改预制体某个组件中的属性时,可能原本预制体未及时刷新: 可以使用PrefabUtility.SavePrefabAsset(gameobject)等函数,使得使用代码修改之后马上刷新生效。 一、AssetDatabase.Refresh() 功能: AssetDatabase.Re…...

SSO VS OAuth2区别

目录 理解认证与授权 Single Sign On(SSO) ​编辑 OAuth2 OAuth2协议理解 Access Token的秘密 SSO与OAuth2的关系 理解认证与授权 Single Sign On(SSO) 示例图 1、用户通过浏览器访问系统 Protected APP(Goto app) 2、Protected APP 发现没有登录…...

12_PlayerPrefs存储登录窗口逻辑_回调函数优化Lamd表达式

创建 登录窗口LoginWnd.cs 绑定 登录窗口LoginWnd.cs 编写 登录窗口LoginWnd.cs using UnityEngine; using UnityEngine.UI; //输入文本 命名空间 //功能 : 登录注册窗口 public class LoginWnd : MonoBehaviour{public InputField iptAcct;public InputField iptPass;public …...

蒙操作系统(HarmonyOS)

鸿蒙操作系统(HarmonyOS)是由华为技术有限公司开发的面向未来、面向全场景的分布式操作系统。它旨在为各种不同类型的设备提供统一的操作系统和无缝的智能体验,从智能手机到可穿戴设备,再到智能家居产品等。在鸿蒙的应用生态中&am…...

PHP同城配送小程序

🚀 同城极速达——您生活中的极速配送大师 📱 一款专为现代都市快节奏生活量身打造的同城配送小程序,同城极速达,集高效、便捷、智能于一身,依托ThinkPHPGatewayWorkerUniapp的强大架构,巧妙融合用户端、骑…...

C#语言的学习路线

C#语言的学习路线 C#作为一种现代编程语言,凭借其简洁的语法、强大的功能和广泛的应用,得到了越来越多开发者的青睐。无论是开发桌面应用、Web应用、游戏,还是云服务,C#都有着广泛的应用场景。本文将为有志于学习C#的读者提供一条…...

js手写-实现Promise的then方法

简单引入then 代码 const PROMISE_STATUS_PENDING "pending";const PROMISE_STATUS_FULFILLED "fulfilled";const PROMISE_STATUS_REJECTED "rejected";class MyPromise {constructor(executor) {//status -- 存储promise的状态this.status…...

分布式系统通信解决方案:Netty Marshalling 全面解析

分布式系统通信解决方案:Netty Marshalling 全面解析 一、引言 在现代网络编程中,Netty 作为一款高性能、异步事件驱动的网络应用框架,因其强大的功能和灵活的扩展性,备受开发者青睐。Netty 广泛应用于分布式系统、RPC 框架以及…...