prometheus自定义监控(pushgateway和blackbox)和远端存储VictoriaMetrics

1 pushgateway采集

1.1 自定义采集键值

如果自定义采集需求时,就可以通过写脚本 + 定时任务定期发送数据到 pushgateway 达到自定义监控

1.部署 pushgateway,以 10.0.0.42 节点为例

1.下载组件
wget https://github.com/prometheus/pushgateway/releases/download/v1.9.0/pushgateway-1.9.0.linux-amd64.tar.gz2.解压软件包 
tar xf pushgateway-1.9.0.linux-amd64.tar.gz  -C /zhiyong18/softwares/3.启动pushgateway组件,默认监听9091端口
cd /zhiyong18/softwares/pushgateway-1.9.0.linux-amd64/
./pushgateway 4.访问pushgateway的WebUI
http://10.0.0.41:9091/#

2.prometheus 增加新任务

[root@prometheus-server31 ~]# vim /zhiyong18/softwares/prometheus-2.53.2.linux-amd64/prometheus.yml 
...- job_name: zhiyong18-zhiyong-pushgateway# 若不指定则默认值为false。# 当设置为true时,若采集的指标包含中和内置的标签冲突时(比如job,instance)会覆盖。# 当设置为false时,则不会覆盖,而是在标签前面加一个"exported_*"字段。honor_labels: truestatic_configs:- targets:- 10.0.0.41:9091

3.访问测试:http://10.0.0.31:9090/targets ,可以看到新的 targets
在这里插入图片描述

4.发送测试数据到 pushgateway,注意:传递的数据是键值对,KEY一般是字符串类型,而value必须是一个数字类型。

echo "wzy_age 18" | curl --data-binary @-  \
http://10.0.0.41:9091/metrics/job/zhiyong18_student/instance/10.0.0.31

5.访问prometheus,查看接收到的数据

在这里插入图片描述

1.2 监控TCP状态案例

1.编写脚本,定期发送本机的TCP状态指标到 pushgateway 10.0.0.41

cat /usr/local/bin/tcp_status.sh
#!/bin/bash
# 定义TCP的12种状态
ESTABLISHED_COUNT=0
SYN_SENT_COUNT=0
SYN_RECV_COUNT=0
FIN_WAIT1_COUNT=0
FIN_WAIT2_COUNT=0
TIME_WAIT_COUNT=0
CLOSE_COUNT=0
CLOSE_WAIT_COUNT=0
LAST_ACK_COUNT=0
LISTEN_COUNT=0
CLOSING_COUNT=0
UNKNOWN_COUNT=0# 定义任务名称
JOB_NAME=tcp_status
# 定义实例名称
INSTANCE_NAME=harbor250
# 定义pushgateway主机
HOST=10.0.0.41
# 定义pushgateway端口
PORT=9091# TCP的12种状态
ALL_STATUS=(ESTABLISHED SYN_SENT SYN_RECV FIN_WAIT1 FIN_WAIT2 TIME_WAIT CLOSE CLOSE_WAIT LAST_ACK LISTEN CLOSING UNKNOWN)# 声明一个关联数组,类似于py的dict,go的map
declare -A tcp_status# 统计TCP的11种状态
for i in ${ALL_STATUS[@]}
dotemp=`netstat -untalp | grep $i  | wc -l`tcp_status[${i}]=$temp
done# 将统计后的结果发送到pushgateway
for i in ${!tcp_status[@]}
do data="$i ${tcp_status[$i]}"# TODO: shell如果想要设计成相同key不同标签的方式存在问题,只会有最后一种状态被发送# 目前我怀疑是pushgateway组件不支持同一个metrics中key所对应的value不同的情况。#data="zhiyong18_tcp_all_status{status=\"$i\"} ${tcp_status[$i]}"#echo $dataecho $data | curl --data-binary @-  http://${HOST}:${PORT}/metrics/job/${JOB_NAME}/instance/${INSTANCE_NAME}# sleep 1
done
运行:`bash /usr/local/bin/tcp_status.sh`

2.访问

在这里插入图片描述

prometheus查看并搜索结果:

在这里插入图片描述

2 黑/白盒监控

2.1 黑白监控介绍

黑盒监控:黑盒监控是面向现象的,关注的是系统当前的状态,而不是预测未来会发生的问题。比如,当系统出现故障时,黑盒监控会发出警报

**白盒监控:**白盒监控则更深入,依赖于对系统内部信息的检测,如系统日志、HTTP节点等。它不仅能检测到当前的问题,还能预测到即将发生的问题,甚至那些被重试掩盖的问题

Prometheus基于blackbox进行黑盒监控

blackbox_exporter概述

  • blackbox exporter支持基于HTTP, HTTPS, DNS, TCP, ICMP, gRPC协议来对目标节点进行监控

  • 比如基于http协议我们可以探测一个网站的返回状态码为200判读服务是否正常

  • 比如基于TCP协议我们可以探测一个主机端口是否监听

  • 比如基于ICMP协议来ping一个主机的连通性

  • 比如基于gRPC协议来调用接口并验证服务是否正常工作

  • 比如基于DNS协议可以来检测域名解析

2.2 blackbox监控网站状态案例

01 安装blackbox_exporter

在任意节点都能安装,并不是agent效果

1 下载软件
wget https://github.com/prometheus/blackbox_exporter/releases/download/v0.25.0/blackbox_exporter-0.25.0.linux-amd64.tar.gz2 解压软件包
tar xvf blackbox_exporter-0.25.0.linux-amd64.tar.gz -C  /zhiyong18/softwares/3 启动服务
cd /zhiyong18/softwares/blackbox_exporter-0.25.0.linux-amd64/
./blackbox_exporter 4 访问blackbox的WebUI
http://10.0.0.32:9115/

在这里插入图片描述

02 添加blackbox数据

1.修改Prometheus配置文件,对blackbox创建采集 job

[root@prs31~]# cat /zhiyong18/softwares/prometheus-2.53.2.linux-amd64/prometheus.yml
...
- job_name: 'zhiyong18-blackbox-exporter-http'# 修改访问路径,若不修改,默认值为"/metrics"metrics_path: /probe# 配置URL的相关参数params:# 此处表示使用的是blackbox的http模块,从而判断相应的返回状态码是否为200module: [http_2xx] # 下面这两个标签是我自定义的,便于大家理解names: ["zhiyong18"]name: ["zhiyong"]# 静态配置,需要手动指定监控目标static_configs:# 需要监控的目标- targets:# 支持https协议- https://www.jd.com/# 支持http协议,以grafna为例- http://10.0.0.31:3000# 支持http协议和自定义端口,以prometheus的web为例- http://10.0.0.31:9090# 对目标节点进行重新打标签配置relabel_configs:# 指定源标签,此处的"__address__"表示内置的标签,存储的是被监控目标的IP地址- source_labels: [__address__]# 指定目标标签,其实就是在"Endpoint"中加了一个target字段(用于指定监控目标),target_label: __param_target# 指定需要执行的动作,默认值为"replace",常用的动作有: replace, keep, and drop。# 但官方支持十几种动作: https://prometheus.io/docs/prometheus/2.53/configuration/configuration/#relabel_action# 将"__address__"传递给target字段。action: replace- source_labels: [__param_target]target_label: instance#target_label: instance2024# 上面的2个配置段也可以改写成如下的配置哟~# - source_labels: [__address__]#   target_label: instance#   action: replace# - source_labels: [instance]#   target_label: __param_target#   action: replace- target_label: __address__# 指定要替换的值,此处我指定为blackbox exporter的主机地址replacement: 10.0.0.32:9115

无注释版的配置:(以这个为最终测试)

  - job_name: 'zhiyong18-blackbox-exporter-http'metrics_path: '/probe'params:module: [http_2xx] names: ["zhiyong18"]name: ["zhiyong"]static_configs:- targets:- https://www.jd.com/- http://10.0.0.31:3000# 重写标签relabel_configs:- source_labels: [__address__]target_label: __param_targetaction: replace- source_labels: [__param_target]target_label: instance# 向目标发起数据探测- target_label: __address__replacement: 10.0.0.32:9115

03 访问测试

1.访问prometheus的WebUI:http://10.0.0.31:9090/targets

在这里插入图片描述

2.访问blackbox exporter的WebUI:http://10.0.0.32:9115/

在这里插入图片描述

3.grafana展示数据,这2个模版ID可以参考

7587
13659

在这里插入图片描述

监控到了网站的指标,ssl证书过期时间,流量,状态码…

2.3 基于ICMP监控主机存活

1.修改Prometheus配置文件增加ICMP采集任务

  - job_name: 'zhiyong18-blackbox-exporter-icmp'metrics_path: /probeparams:# 如果不指定模块,则默认类型为"http_2xx"module: [icmp]static_configs:- targets:- 10.0.0.41- 10.0.0.42- 10.0.0.66relabel_configs:- source_labels: [__address__]target_label: __param_target- source_labels: [__param_target]# 如果instance不修改,则instance和"__address__"的值相同target_label: instance- target_label: __address__replacement: 10.0.0.32:9115

2.查看 prometheus 的targets

在这里插入图片描述

3.访问 blackbox 的页面

在这里插入图片描述

4.dashboard查看

要使用13659模版,基于"zhiyong18-blackbox-exporter-icmp"标签进行过滤。

在这里插入图片描述

2.4 监控TCP端口存活

1.修改配置

	1 修改Prometheus配置文件
[root@prometheus-server31 ~]# vim /zhiyong18/softwares/prometheus-2.53.2.linux-amd64/prometheus.yml ...
scrape_configs:...- job_name: 'zhiyong18-blackox-exporter-tcp'metrics_path: /probeparams:module: [tcp_connect]static_configs:- targets:- 10.0.0.41:80- 10.0.0.42:22- 10.0.0.31:9090relabel_configs:- source_labels: [__address__]target_label: __param_target- source_labels: [__param_target]target_label: instance- target_label: __address__replacement: 10.0.0.32:9115

2.访问prometheus

在这里插入图片描述

3.使用grafana查看数据
基于"zhiyong18-blackbox-exporter-tcp"标签进行过滤。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

3 prometheus扩展

3.1 远端存储VictoriaMetrics

VictoriaMetrics是一个快速、经济高效且可扩展的监控解决方案和时间序列数据库。如果数据全部存储在prometheus一个节点上有单点的风险,有必要使用一个分布式的高可用的外置存储。

官网:https://victoriametrics.com/

官方文档:https://docs.victoriametrics.com/

GitHub地址:https://github.com/VictoriaMetrics/VictoriaMetrics

部署文档:https://docs.victoriametrics.com/quick-start/

集群部署参考 (非官方)

01 安装VictoriaMetrics

prometheus-server 10.0.0.32 进行单点安装为例

1 下载软件
wget https://github.com/VictoriaMetrics/VictoriaMetrics/releases/download/v1.93.16/victoria-metrics-linux-amd64-v1.93.16.tar.gz2 解压软件包 
tar xf victoria-metrics-linux-amd64-v1.93.16.tar.gz -C /usr/local/bin/3 编写启动脚本
cat > /etc/systemd/system/victoria-metrics.service <<'EOF'
[Unit]
Description=zhiyong18 Linux VictoriaMetrics Server
Documentation=https://docs.victoriametrics.com/
After=network.target[Service]
ExecStart=/usr/local/bin/victoria-metrics-prod  \-httpListenAddr=0.0.0.0:8428 \-storageDataPath=/zhiyong18/data/victoria-metrics \-retentionPeriod=6[Install]
WantedBy=multi-user.target
EOF4 重启服务
systemctl daemon-reload
systemctl enable --now victoria-metrics.service
systemctl status victoria-metrics5 检查端口是否存活ss -ntl | grep 8428
LISTEN 0      4096         0.0.0.0:8428      0.0.0.0:*          6 查看webUI
http://10.0.0.32:8428/

在这里插入图片描述

02 使用VictoriaMetrics

1.修改prometheus-server 31 的配置文件:vim /zhiyong18/softwares/prometheus-2.53.2.linux-amd64/prometheus.yml

...
# 在顶级字段中配置VictoriaMetrics地址,注意不要放到通用字段下
remote_write:
- url: http://10.0.0.32:8428/api/v1/write

2.重新加载prometheus的配置

systemctl stop prometheus-server/zhiyong18/softwares/prometheus-2.53.2.linux-amd64/prometheus \
--config.file=/zhiyong18/softwares/prometheus-2.53.2.linux-amd64/prometheus.yml

03 配置grafana新数据源

1.由于数据源发生了存储到了 VictoriaMetrics ,所以grafana要添加新的数据源,否则查不到

在这里插入图片描述

2.导入仪表盘(1860)的时候要指定新的数据源

在这里插入图片描述

3.2 自定义exporter(python案例)

01 使用python自定义exporter

1.在prometheus-server31节点安装 pip3

apt update
apt install -y python3-pip# 创建一个虚拟用户,但是有家目录
useradd -m -s /bin/bash python

2.切换用户为python做如下操作:

3 修改配置文件(可选)
su - python
vim .bashrc 
...
# 取消下面一行的注释,添加颜色显示
force_color_prompt=yes4 pip配置加速
mkdir ~/.pip; vim ~/.pip/pip.conf
# 注释掉以前的,添加阿里源
# [global]
# index-url=https://pypi.tuna.tsinghua.edu.cn/simple
# [install]
# trusted-host=pypi.douban.com
[global]
index-url=https://mirrors.aliyun.com/pypi/simple
[install]
trusted-host=mirrors.aliyun.com5 安装实际环境中相关模块库
pip3 install flask prometheus_client
pip3 list6 创建代码目录
mkdir code7 编写python代码
cd code
cat > flask_metric.py <<'EOF'
#!/usr/bin/python3from prometheus_client import start_http_server,Counter, Summary
from flask import Flask, jsonify
from wsgiref.simple_server import make_server
import timeapp = Flask(__name__)# Create a metric to track time spent and requests made
REQUEST_TIME = Summary('request_processing_seconds', 'Time spent processing request')
COUNTER_TIME  = Counter("request_count", "Total request count of the host")@app.route("/apps")
@REQUEST_TIME.time()
def requests_count():COUNTER_TIME.inc()return jsonify({"office": "wenzy18@qq.com"},{"auther":"Wen Zhiyong"})if __name__ == "__main__":start_http_server(8000)httpd = make_server( '0.0.0.0', 8001, app )httpd.serve_forever()
EOF8 启动python程序
python3 flask_metric.py # 因为没有客户端访问,所以没有任何输出

3.客户端测试,使用任意一个节点均可

cat > zhiyong18_curl_metrics.sh <<'EOF'
#!/bin/bashURL=http://10.0.0.31:8001/appswhile true;docurl_num=$(( $RANDOM%50+1 ))sleep_num=$(( $RANDOM%5+1 ))for c_num in `seq $curl_num`;docurl -s $URL &> /dev/nulldonesleep $sleep_num
done
EOF# 回到之前的python执行窗口,可以看到以下输出
10.0.0.31 - - [14/Dec/2024 22:33:28] "GET /apps HTTP/1.1" 200 55
10.0.0.31 - - [14/Dec/2024 22:33:28] "GET /apps HTTP/1.1" 200 55
10.0.0.31 - - [14/Dec/2024 22:33:28] "GET /apps HTTP/1.1" 200 55
10.0.0.31 - - [14/Dec/2024 22:33:28] "GET /apps HTTP/1.1" 200 55
10.0.0.31 - - [14/Dec/2024 22:33:28] "GET /apps HTTP/1.1" 200 55
10.0.0.31 - - [14/Dec/2024 22:33:28] "GET /apps HTTP/1.1" 200 55
10.0.0.31 - - [14/Dec/2024 22:33:28] "GET /apps HTTP/1.1" 200 55
10.0.0.31 - - [14/Dec/2024 22:33:28] "GET /apps HTTP/1.1" 200 55

4.python脚本 flask_metric.py 是一个简单的web服务器,所以可以访问,并且能打开

在这里插入图片描述

02 采集exporter数据

1.修改prometheus配置 vim /zhiyong18/softwares/prometheus-2.53.2.linux-amd64/prometheus.yml ,添加任务

  - job_name: "wzy python 自定义exporter"static_configs:- targets:- 10.0.0.31:8000

2.在 http://10.0.0.31:9090/targets 可以看到这条指标

在这里插入图片描述

3.执行搜索,http://10.0.0.31:9090/

request_count_total

4.该指标可以自定义画图 grafana ,和 PQL 查询一样

# apps请求总数
request_count_total# 每分钟请求数量曲线QPS
increase(request_count_total{job="wzy python 自定义exporter"}[1m])#每分钟请求量变化率曲线 
irate(request_count_total{job="wzy python 自定义exporter"}[1m])# 每分钟请求处理平均耗时
request_processing_seconds_sum{job="wzy python 自定义exporter"} / request_processing_seconds_count{job=""}
me: "wzy python 自定义exporter"static_configs:- targets:- 10.0.0.31:8000

2.在 http://10.0.0.31:9090/targets 可以看到这条指标

[外链图片转存中…(img-Z4jtR4iO-1742134880458)]

3.执行搜索,http://10.0.0.31:9090/

request_count_total

4.该指标可以自定义画图 grafana ,和 PQL 查询一样

# apps请求总数
request_count_total# 每分钟请求数量曲线QPS
increase(request_count_total{job="wzy python 自定义exporter"}[1m])#每分钟请求量变化率曲线 
irate(request_count_total{job="wzy python 自定义exporter"}[1m])# 每分钟请求处理平均耗时
request_processing_seconds_sum{job="wzy python 自定义exporter"} / request_processing_seconds_count{job=""}

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

feign配置重试次数不生效

一、问题产生 自定义重试次数&#xff0c;实现如下 ConditionalOnProperty(prefix "feign.client", name "enable", havingValue "true") Configuration public class FeignConfig {Beanpublic FeignInterceptor feignInterceptor() {retur…

Dify使用部署与应用实践

最近在研究AI Agent&#xff0c;发现大家都在用Dify&#xff0c;但Dify部署起来总是面临各种问题&#xff0c;而且我在部署和应用测试过程中也都遇到了&#xff0c;因此记录如下&#xff0c;供大家参考。Dify总体来说比较灵活&#xff0c;扩展性比较强&#xff0c;适合基于它做…

二叉树的统一迭代法 标记法

我们以中序遍历为例&#xff0c;在二叉树&#xff1a;听说递归能做的&#xff0c;栈也能做&#xff01; (opens new window)中提到说使用栈的话&#xff0c;无法同时解决访问节点&#xff08;遍历节点&#xff09;和处理节点&#xff08;将元素放进结果集&#xff09;不一致的情…

BaseActivity 和 BaseFragment 的现代化架构:ViewBinding 与 ViewModel 的深度整合

BaseActivity 和 BaseFragment 实现&#xff0c;集成了 View Binding&#xff0c;并增加了对 Lifecycle 和 ViewModel 的支持&#xff0c;同时进一步简化了代码结构&#xff0c;使其更易用、更灵活。 启用 View Binding 确保在 build.gradle 中启用了 View Binding&#xff1a…

从零开始学习机器人---如何高效学习机械原理

如何高效学习机械原理 1. 理解课程的核心概念2. 结合图形和模型学习3. 掌握公式和计算方法4. 理论与实践相结合5. 总结和复习6. 保持好奇心和探索精神 总结 机械原理是一门理论性和实践性都很强的课程&#xff0c;涉及到机械系统的运动、动力传递、机构设计等内容。快速学习机械…

剖析sentinel的限流和熔断

sentinel的限流和熔断 前言源码分析滑动窗口源码限流源码熔断源码 完结撒花&#xff0c;sentinel源码还是挺简单的&#xff0c;如有需要收藏的看官&#xff0c;顺便也用发财的小手点点赞哈&#xff0c;如有错漏&#xff0c;也欢迎各位在评论区评论&#xff01; 前言 平时发起一…

硬盘分区误删后的数据救赎

一、硬盘分区误删的概述 硬盘分区误删&#xff0c;是许多电脑用户在使用过程中可能遭遇的棘手问题。分区&#xff0c;作为硬盘上存储数据的逻辑单元&#xff0c;一旦被误删除&#xff0c;不仅会导致该分区内的所有数据瞬间消失&#xff0c;还可能影响到整个硬盘的存储结构和数…

代码随想录算法训练营第三十五天(20250303) |01背包问题 二维,01背包问题 一维,416. 分割等和子集 -[补卡20250316]

01背包问题 二维 链接 遍历物品没有大小顺序要求重点是模拟&#xff0c;推导出递推公式 #include <iostream> #include <vector>int main(){int m, n;std::cin>>m>>n;std::vector<int> weight(m,0),value(m,0);for(int i{0}; i<m; i){std:…

老牌软件,方便处理图片,量大管饱。

今天介绍的图片查看器名字是&#xff1a;FastStone Image Viewer&#xff0c;是一款可查看、编辑、批量重命名、批量转换的图片查看软件。文末有分享链接。 软件以资源管理器的方式管理你电脑里的图片&#xff0c;点击左侧可选择文件夹&#xff0c;右边可预览图片。 软妹用得最…

【数据库相关】mysql数据库巡检

mysql数据库巡检 巡检步骤**一、基础状态检查****二、服务器资源监控****CPU使用****内存使用****磁盘I/O****网络流量** **三、数据库内部健康度****全局状态****慢查询监控****锁与并发** **四、存储引擎健康****InnoDB引擎****MyISAM引擎** **五、日志与备份****六、安全与权…

Python进阶编程总结

&#x1f9d1; 博主简介&#xff1a;CSDN博客专家&#xff0c;历代文学网&#xff08;PC端可以访问&#xff1a;https://literature.sinhy.com/#/literature?__c1000&#xff0c;移动端可微信小程序搜索“历代文学”&#xff09;总架构师&#xff0c;15年工作经验&#xff0c;…

Redis复制(replica)主从模式

Redis主从复制 Redis 的复制&#xff08;replication&#xff09;功能允许用户根据一个 Redis 服务器来创建任意多个该服务器的复制品&#xff0c;其中被复制的服务器为主服务器&#xff08;master&#xff09;&#xff0c;而通过复制创建出来的服务器复制品则为从服务器&#…

Adobe Premiere Pro2023配置要求

Windows 系统 最低配置 处理器&#xff1a;Intel 第六代或更新版本的 CPU&#xff0c;或 AMD Ryzen™ 1000 系列或更新版本的 CPU&#xff0c;需要支持 Advanced Vector Extensions 2&#xff08;AVX2&#xff09;。操作系统&#xff1a;Windows 10&#xff08;64 位&#xff…

【Kubernets】Deployment 和 StatefulSet 有什么区别?什么时候用 StatefulSet?

Deployment 和 StatefulSet 的区别 在 Kubernetes 中&#xff0c;Deployment 和 StatefulSet 都用于管理 Pod&#xff0c;但它们适用于不同的场景。 1. Deployment&#xff1a;管理无状态应用 特点&#xff1a; 无状态&#xff1a;Pod 之间相互独立&#xff0c;不需要保持顺…

R语言零基础系列教程-03-RStudio界面介绍与关键设置

代码、讲义、软件回复【R语言03】获取。 设置位置: 菜单栏 - Tools - Blobal Options 设置 通用设置 设置面板左侧General选项 版本选择: 一般只用一个版本即可 默认工作目录设置: 你希望RStudio打开时是基于哪个目录进行工作可以不设置, 因为脚本一般都是放置在特定项目路…

车载以太网测试-9【网络层】-子网划分的子网掩码VLAN

目录 1 摘要2 子网划分2.1 子网掩码2.2 VLAN&#xff08;虚拟局域网&#xff09;2.2.1 IEEE 802.1Q VLAN标签2.2.1.1 VLAN标签的结构2.2.1.2 VLAN标签的插入2.2.1.3 VLAN标签的处理2.1.2.4 PVID&#xff08;Port VLAN Identifier&#xff09; 和 VID&#xff08;VLAN Identifie…

微信小程序刷题逻辑实现:技术揭秘与实践分享

页面展示&#xff1a; 概述 在当今数字化学习的浪潮中&#xff0c;微信小程序以其便捷性和实用性&#xff0c;成为了众多学习者刷题备考的得力工具。今天&#xff0c;我们就来深入剖析一个微信小程序刷题功能的实现逻辑&#xff0c;从代码层面揭开其神秘面纱。 小程序界面布局…

JVM--垃圾回收

垃圾回收的概念 垃圾回收主要针对的是堆中的对象&#xff0c;堆是一个共享的区域&#xff0c;创建的对象和数组都放在这个位置。但是我们不能一直的创建对象&#xff0c;也不是所有的对象能一直存放&#xff0c;如果不进行垃圾回收&#xff0c;内存迟早会耗尽&#xff0c;及时…

【教程】继承中的访问控制 C++

目录 简介public&#xff0c;protected 和 private继承中的 public&#xff0c;protected 和 private示例 简介 在 C 中派生类可以通过 public&#xff0c;protected 和 private 三种修饰符决定基类成员在派生类中的访问级别 public&#xff0c;protected 和 private 公有成…

【2025】基于python+django的驾校招生培训管理系统(源码、万字文档、图文修改、调试答疑)

课题功能结构图如下&#xff1a; 驾校招生培训管理系统设计 一、课题背景 随着机动车保有量的不断增加&#xff0c;人们对驾驶技能的需求也日益增长。驾校作为驾驶培训的主要机构&#xff0c;面临着激烈的市场竞争和学员需求多样化等挑战。传统的驾校管理模式往往依赖于人工操作…