云原生系列之使用prometheus监控nginx
前言
大家好,又见面了,我是沐风晓月,本文主要讲解云原生系列之使用prometheus监控nginx
文章收录到 csdn 我是沐风晓月的博客【prometheus监控系列】专栏,此专栏是沐风晓月对云原生prometheus的的总结,希望能够加深自己的印象,以及帮助到其他的小伙伴😉😉。
如果文章有什么需要改进的地方还请大佬不吝赐教👏👏。
🏠个人主页:我是沐风晓月
🧑个人简介:大家好,我是沐风晓月,双一流院校计算机专业,阿里云社区专家博主😉😉
💕 座右铭: 先努力成长自己,再帮助更多的人 ,一起加油进步🍺🍺🍺
💕欢迎大家:这里是CSDN,我总结知识的地方,喜欢的话请三连,有问题请私信😘
文章目录
- 前言
- 一. 实验环境
- 二. nginx-vts-exporter简介
- 2.1 如何获取nginx exporter
- 2.2 nginx-vts-exporter简介
- 2.3 nginx-module-vts简介
- 三. 安装nginx1.22
- 3.1 下载nginx源码
- 3.2 下载nginx-module-vts模块
- 3.3 解压所有源码
- 3.4 安装编译nginx需要的依赖
- 3.5 编译安装nginx
- 3.6 修改nginx配置文件
- 3.7 检查nginx配置文件语法
- 3.8 启动nginx
- 3.9 查看nginx启动情况
- 3.10 登录网页验证模块
- 3.10.1 使用“nginx-module-vts”默认模式查看nginx状态
- 3.10.2 使用“nginx-module-vts”其他模式查看nginx状态
- 四. 安装nginx-vts-exporter
- 4.1 下载nginx_vts_exporter
- 4.2 解压nginx_vts_exporter
- 4.3 查看帮助文档
- 4.4 启动nginx-vts-exporter
- 4.5 查看nginx-vts-exporter启动状态
- 4.6 查看nginx-vts-exporter采集的数据
- 五. 配置prometheus拉取数据
- 5.1 修改prometheus的配置文件
- 5.2 让prometheus重新读取配置文件
- 六.查看prometheus的监控数据
- 6.1 到网页端查看prometheus监控目标
- 6.2 在prometheus网页查询结果
- 七、grafana导入模板
- 7.1 导入模板
- 7.2 查看模板效果
- 八、Nginx常见监控指标
- 8.1 基本活跃指标
- 8.2 nginx的QPS
- 8.3 nginx错误率
- 九、总结
一. 实验环境
本次实验环境见下表:
| 操作系统 | 服务器IP | hostname |
|---|---|---|
| centos7.9 | 10.0.0.7 | mufengrow7 |
- 查看操作系统
[root@mufengrow ~]# cat /etc/redhat-release
CentOS Linux release 7.9.2009 (Core)
- 查看hostname
# 修改hostname
[root@mufengrow ~]# hostname mufengrow7
[root@mufengrow ~]# bash# 查看hostname
[root@mufengrow7 ~]# hostname
mufengrow7
- 查看ip
[root@mufengrow7 ~]# ifconfig |grep inet |awk 'NR==1{print $2}'
10.0.0.7
本文中的prometheus监控软件已经安装好了,如果你还没安装,可以参考上一篇文章:prometheus安装及使用入门
更多内容关注csdn 【我是沐风晓月】
二. nginx-vts-exporter简介
2.1 如何获取nginx exporter
我们可以从prometheus官方的下载页面上看到,prometheus官方并没有提供官方对nginx的监控exporter。
那我们要怎么通过prometheus监控nginx呢?
在prometheus官方的下载页面,里面有提供一些比较好的第三方开源的exporter供我们使用。
prometheus官方下载页面:https://prometheus.io/download/


2.2 nginx-vts-exporter简介
我们都知道,nginx可以通过“ngx_http_stub_status_module”模块来显示自身的状态信息。但是状态页面显示的出来的结果又比较的简单,而且不符合prometheus采集数据的规范。所以就有人针对nginx开源了一款prometheus监控nginx的exproter——“nginx-vts-exporter”。
nginx-vts-exporter的github地址:https://github.com/hnlq715/nginx-vts-exporter
通过查看github介绍可以知道该exproter不像官方提供的exporter一样简单的安装上了就可以采集数据。它需要nginx在编译安装的时候加上一个第三方的模块“nginx-module-vts”。通过这个第三方模块,将nginx更加详细的数据展示出来,然后通过“nginx-vts-exporter”进行采集展示,最后由prometheus进行采集汇总。
第三方模块的github地址:https://github.com/vozlt/nginx-module-vts
2.3 nginx-module-vts简介
“nginx-module-vts”是一个第三方的nginx模块,提供了对nginx状态信息的访问。
“nginx-module-vts”模块提供了几种方式展示自己的状态,这个之后会说明。
但是“nginx-module-vts”模块对nginx的版本的支持是有要求的,在nginx1.4.x之前的版本都不支持。使用的时候需要注意。
三. 安装nginx1.22
3.1 下载nginx源码
下载nginx-1.22的源码
[root@mufengrow7 ~]# cd /usr/local/src/
[root@mufengrow7 ~]# wget http://nginx.org/download/nginx-1.22.1.tar.gz
3.2 下载nginx-module-vts模块
下载nginx-module-vts用于之后的nginx编译安装
[root@mufengrow7 src]# wget https://github.com/vozlt/nginx-module-vts/archive/refs/tags/v0.2.1.tar.gz
3.3 解压所有源码
解压nginx1.22的源码和解压nginx-module-vts模块的源码
#解压nginx1.22源码
[root@mufengrow7 src]# tar zxf nginx-1.22.1.tar.gz
#解压nginx-module-vts模块源码
[root@mufengrow7 src]# tar zxf v0.2.1.tar.gz
代码注释:
z:指定解压的文件有gzip属性
x:从归档文件中解压出文件。
f:使用指定使用哪个归档文件。
3.4 安装编译nginx需要的依赖
编译安装nginx需要解决openssl和pcre的依赖,所以要提前将这两个包安装上
[root@mufengrow7 src]# yum install -y openssl-devel pcre-devel
3.5 编译安装nginx
编译安装nginx1.22,但是要注意的是我们需要在编译的参数里加上添加模块的参数“–add-module”,然后指向“nginx-module-vts”模块的源码路径
#进入nginx源码目录
[root@mufengrow7 src]# cd nginx-1.22.1/
#指定编译安装的参数,并进行检查,生成Makefile文件
[root@mufengrow7 nginx-1.22.1]# ./configure --prefix=/apps/nginx \
> --with-http_ssl_module \
> --with-http_v2_module \
> --with-http_realip_module \
> --with-http_stub_status_module \
> --with-http_gzip_static_module \
> --with-pcre \
> --with-file-aio \
> --with-stream \
> --with-stream_ssl_module \
> --with-stream_realip_module \
> --add-module=/usr/local/src/nginx-module-vts-0.2.1/ #指向“nginx-module-vts”模块源码的目录
#编译安装nginx
[root@mufengrow7 nginx-1.22.1]# make && make install
#查看nginx安装信息
[root@mufengrow7 nginx-1.22.1]# /apps/nginx/sbin/nginx -V
nginx version: nginx/1.22.1
built by gcc 4.8.5 20150623 (Red Hat 4.8.5-44) (GCC)
built with OpenSSL 1.0.2k-fips 26 Jan 2017
TLS SNI support enabled
configure arguments: --prefix=/apps/nginx --with-http_ssl_module --with-http_v2_module --with-http_realip_module --with-http_stub_status_module --with-http_gzip_static_module --with-pcre --with-file-aio --with-stream --with-stream_ssl_module --with-stream_realip_module --add-module=/usr/local/src/nginx-module-vts-0.2.1/ #可以看到“nginx-module-vts”模块已经安装到nginx里了
代码注释:
-V:显示nginx版本和安装的配置
3.6 修改nginx配置文件
有人在想,如何修改nginx的配置文件才能让nginx的状态显示出来?
“nginx-module-vts”的github网页已经给出配置了
根据“nginx-module-vts”官方给除的配置修改nginx的配置文件,让nginx能展示出自己的状态。
#进入nginx的安装目录
[root@mufengrow7 nginx]# cd /apps/nginx/
#修改nginx的配置
[root@mufengrow7 nginx]# vim conf/nginx.conf
......
http {......;vhost_traffic_status_zone;......;server{......;location /status {vhost_traffic_status_display;vhost_traffic_status_display_format html;}}
}
3.7 检查nginx配置文件语法
修改配置文件后,需要检查nginx配置文件语法,查看是否出现语法上的错误
[root@mufengrow7 nginx]# ./sbin/nginx -t
nginx: the configuration file /apps/nginx/conf/nginx.conf syntax is ok #这里显示ok就证明语法没问题,可以启动nginx
nginx: configuration file /apps/nginx/conf/nginx.conf test is successful
代码注释:
-t:检查配置文件。
3.8 启动nginx
启动nginx
[root@mufengrow7 nginx]# ./sbin/nginx
3.9 查看nginx启动情况
[root@mufengrow7 nginx]# ps -ef | grep nginx | grep -v grep
root 5358 1 0 12:00 ? 00:00:00 nginx: master process ./sbin/nginx
nobody 5359 5358 0 12:00 ? 00:00:00 nginx: worker process
代码注释:
-
-ef:在-ef里可以分出两个选项-e和-f -
-e:显示所有执行程序的进程(除会话领导者与终端关联的进程) -
-f:显示UID,PPIP,C与STIME栏位 -
-v:选择不匹配的行
3.10 登录网页验证模块
3.10.1 使用“nginx-module-vts”默认模式查看nginx状态
浏览器访问:
10.0.0.7/status
进入网页后,我们能看到模块给我们现实的结果

3.10.2 使用“nginx-module-vts”其他模式查看nginx状态
“nginx-module-vts”内置了4种查看nginx状态的格式,我们上一点已经展示过使用html格式来展示nginx的状态,接下来我们会用“json”、“jsonp”、“prometheus”来展示nginx的状态。
- “json”格式
浏览器访问:http://10.0.0.7/status/format/json


四. 安装nginx-vts-exporter
4.1 下载nginx_vts_exporter
下载nginx_vts_exporter二进制包
#进入安装目录
[root@mufengrow7 nginx]# cd /apps
#下载nginx_vts_exporter二进制包
[root@mufengrow7 apps]# wget https://github.com/hnlq715/nginx-vts-exporter/releases/download/v0.10.3/nginx-vts-exporter-0.10.3.linux-amd64.tar.gz
4.2 解压nginx_vts_exporter
对nginx_vts_exporter二进制包进行解压
[root@mufengrow7 apps]# tar xf nginx-vts-exporter-0.10.3.linux-amd64.tar.gz
[root@mufengrow7 apps]# cd nginx-vts-exporter-0.10.3.linux-amd64/
解压后可以看到里面之后一个可执行文件
[root@mufengrow7 nginx-vts-exporter-0.10.3.linux-amd64]# ls
LICENSE nginx-vts-exporter
4.3 查看帮助文档
[root@mufengrow7 nginx-vts-exporter-0.10.3.linux-amd64]# ./nginx-vts-exporter --help
Usage of ./nginx-vts-exporter:-insecureIgnore server certificate if using https (default true)-metrics.namespace stringPrometheus metrics namespace. (default "nginx")-nginx.scrape_timeout intThe number of seconds to wait for an HTTP response from the nginx.scrape_uri (default 2)-nginx.scrape_uri stringURI to nginx stub status page (default "http://localhost/status")-telemetry.address stringAddress on which to expose metrics. (default ":9913")-telemetry.endpoint stringPath under which to expose metrics. (default "/metrics")-versionPrint version information.
为了更直观一些,我们把参数用表格来展示:
| 参数 | 描述 |
|---|---|
| -insecure | 如果使用https,忽略服务器证书(默认为true) |
| -metrics.namespace | prometheus的metrics的命名空间(默认是nginx) |
| -nginx.scrape_timeout | 等待来自nginx的HTTP相应的秒数(默认是2秒) |
| -nginx.scrape_uri | 指定nginx状态页面的URI(默认是"http://localhost/status") |
| -telemetry.address | exporter暴露的端口(默认是9913) |
| -telemetry.endpoint | 公开的metrics路径(默认是“/metrics”) |
| -version | 显示版本信息 |
4.4 启动nginx-vts-exporter
这里添加选项,让nginx-vts-exporter从nginx-module-vts的json格式下采集数据
[root@mufengrow7 nginx-vts-exporter-0.10.3.linux-amd64]# nohup /apps/nginx-vts-exporter-0.10.3.linux-amd64/nginx-vts-exporter -nginx.scrape_uri http://localhost/status/format/json &
[1] 5440
[root@mufengrow7 nginx-vts-exporter-0.10.3.linux-amd64]# nohup: ignoring input and appending output to ‘nohup.out’ #出现日志文件路径信息,继续按回车
[root@mufengrow7 nginx-vts-exporter-0.10.3.linux-amd64]# #回到标准输入的状态
4.5 查看nginx-vts-exporter启动状态
我们可以通过查看pid、端口和查看日志的方式确实“nginx-vts-exporter”的启动状态,通过下面的结果,我们可以看出“nginx-vts-exporter”已经在正常运行。
#查看pid
[root@mufengrow7 nginx-vts-exporter-0.10.3.linux-amd64]# ps -ef | grep nginx-vts-exporter | grep -v grep
root 5440 1680 0 12:36 pts/0 00:00:00 /apps/nginx-vts-exporter-0.10.3.linux-amd64/nginx-vts-exporter
#查看端口
[root@mufengrow7 nginx-vts-exporter-0.10.3.linux-amd64]# ss -tnl | grep 9913 | grep -v grep
LISTEN 0 128 [::]:9913 [::]:*
#查看日志
[root@mufengrow7 nginx-vts-exporter-0.10.3.linux-amd64]# tail -f nohup.out
2023/03/07 12:36:37 Starting nginx_vts_exporter (version=0.10.3, branch=HEAD, revision=8aa2881c7050d9b28f2312d7ce99d93458611d04)
2023/03/07 12:36:37 Build context (go=go1.10, user=root@56ca8763ee48, date=20180328-05:47:47)
2023/03/07 12:36:37 Starting Server at : :9913
2023/03/07 12:36:37 Metrics endpoint: /metrics
2023/03/07 12:36:37 Metrics namespace: nginx
2023/03/07 12:36:37 Scraping information from : http://localhost/status
4.6 查看nginx-vts-exporter采集的数据
浏览器访问
10.0.0.7:9913/metrics

五. 配置prometheus拉取数据
5.1 修改prometheus的配置文件
修改的方式如图:
其中job_name、prometheus读取配置文件的方式、目标的ip和端口都可以根据需求自行修改。

5.2 让prometheus重新读取配置文件
- 检查prometheus配置文件语法:
#进入prometheus安装目录
[root@mufengrow7 nginx-vts-exporter-0.10.3.linux-amd64]# cd /apps/prometheus
#执行命令检查语法
[root@mufengrow7 prometheus]# ./promtool check config prometheus.yml
Checking prometheus.ymlSUCCESS: prometheus.yml is valid prometheus config file syntax
- 重启prometheus
通过重启,让prometheus重新读取配置文件
[root@mufengrow7 prometheus]# systemctl restart prometheus
六.查看prometheus的监控数据
6.1 到网页端查看prometheus监控目标
我们到prometheus的网页端,查看prometheus采集数据的目标是否有有nginx,通过下图,我们知道prometheus已经有采集nginx的数据了。
6.2 在prometheus网页查询结果
接下来我们到prometheus的查询面板查看prometheus有没有采集到nginx的数据
- 查询nginx版本

- 查看nginx出现“4XX”的次数

- 查看nginx的requests的次数

- 计算nginx在一分钟内的QPS
如果通过prometheus内置函数计算QPS,可以参考文章:prometheus常用的内置函数

通过以上的查询,我们也知道了prometheus有采集到nginx-vts-exproter的数据
七、grafana导入模板
本文中的grafana已经安装好了,如果你还未安装,可以参考文章:promehtheus整合grafana实现可视化监控实战
7.1 导入模板
grafana模板推荐编号:2949
导入模板:
-
输入模板编号,点击Load

-
点击import

- 修改数据源,点击Import

7.2 查看模板效果
思考:
既然“nginx-module-vts”有专门给prometheus采集的格式,那么是否可以直接通过prometheus采集“nginx-module-vts”的数据,而不必添加一个“nginx-vts-module”的中间件呢?
答案:prometheus可以直接采集“nginx-module-vts”的数据
- 修改配置文件,如下图:

- Prometheus重启后,查看target

- 查询数据nginx的连接数
注意:对应的查询语句也要跟着改变,如果不知道查询语句的可以到“http://10.0.0.7/status/format/prometheus”进行查询

八、Nginx常见监控指标
8.1 基本活跃指标
nginx的基本活跃指标是可以通过“ngx_http_stub_status_module”模块来获取的。
| 名称 | 描述 |
|---|---|
| Accepts(接受) | nginx接受客户端的连接数 |
| Handled(已处理) | 成功处理客户端连接数 |
| Active(活跃) | 当前活跃的客户端连接数 |
| Requests(请求数) | 客户端请求书 |
| Waiting(等待) | 正在等待的连接数 |
| Reading(读) | 正在读操作的连接数 |
| Writing(写) | 正在写操作的连接书 |
8.2 nginx的QPS
我们可以使用Prometheus的PromQL的内置函数进行计算。
通过nginx计算的QPS,我们可以看出nginx服务的请求情况,通过QPS监控,可以了解是否有恶意攻击和对nginx的可行性进行判断。
8.3 nginx错误率
通过对错误代码的监控,可以知道客户端收到的结果是否正确。如果某段时间内错误结果不断飙升,证明网站可能出现物体
错误代码为:4XX(表示客户端错误代码) 5XX(表示服务端错误代码)
九、总结
Prometheus监控nginx的步骤为:
- 安装Prometheus
- 编译安装nginx,注意nginx需要安装“nginx-moudle-vts”模块
- 安装“nginx-vts-exporter”,在设置对应的参数后启动
- 修改Prometheus的配置文件,添加监控ngxin的实例,并重新读取配置文件
- 进入Prometheus的WEB页面进行查看
我是沐风晓月,文章首发于csdn,你的支持就是我的动力。
💕💕💕 好啦,这就是今天要分享给大家的全部内容了,我们下期再见!✨ ✨ ✨
🍻🍻🍻如果你喜欢的话,就不要吝惜你的一键三连了~
相关文章:
云原生系列之使用prometheus监控nginx
前言 大家好,又见面了,我是沐风晓月,本文主要讲解云原生系列之使用prometheus监控nginx 文章收录到 csdn 我是沐风晓月的博客【prometheus监控系列】专栏,此专栏是沐风晓月对云原生prometheus的的总结,希望能够加深自…...
第六届省赛——8移动距离(总结规律)
题目:X星球居民小区的楼房全是一样的,并且按矩阵样式排列。其楼房的编号为1,2,3...当排满一行时,从下一行相邻的楼往反方向排号。比如:当小区排号宽度为6时,开始情形如下:1 2 3 4 5 612 11 10 9 8 713 14 1…...
C++vector 简单实现
一。概述 vector是我们经常用的一个容器,其本质是一个线性数组。通过对动态内存的管理,增删改查数据,达到方便使用的目的。 作为一个线性表,控制元素个数,容量,开始位置的指针分别是: start …...
通用缓存存储设计实践
目录介绍 01.整体概述说明 1.1 项目背景介绍1.2 遇到问题记录1.3 基础概念介绍1.4 设计目标1.5 产生收益分析 02.市面存储方案 2.1 缓存存储有哪些2.2 缓存策略有哪些2.3 常见存储方案2.4 市面存储方案说明2.5 存储方案的不足 03.存储方案原理 3.1 Sp存储原理分析3.2 MMKV存储…...
sheng的学习笔记Eureka Ribbon
Eureka-注册中心Eureka简介官方网址:https://spring.io/projects/spring-cloud-netflixEureka介绍Spring Cloud 封装了 Netflix 公司开发的 Eureka 模块来实现服务注册和发现(请对比Zookeeper)。Zooleeper nacos.Eureka 采用了 C-S 的设计架构。Eureka Server 作为服…...
零代码工具我推荐Oracle APEX
云原生时代零代码工具我推荐Oracle APEX 国内的低码开发平台我也看了很多,感觉还是不太适合我这个被WEB抛弃的老炮。自从看了Oracle APEX就不打算看其它的了。太强大了,WEB服务器都省了,直接数据库到WEB页面。功能很强大,震撼到我…...
InstructGPT方法简读
InstructGPT方法简读 引言 仅仅通过增大模型规模和数据规模来训练更大的模型并不能使得大模型更好地理解用户意图。由于数据的噪声极大,并且现在的大多数大型语言模型均为基于深度学习的“黑箱模型”,几乎不具有可解释性和可控性,因此&…...
SpringCloud-5_模块集群化
避免一台Server挂掉,影响整个服务,搭建server集群创建e-commerce-eureka-server-9002微服务模块【作为注册中心】创建步骤参考e-commerce-eureka-server-9001修改pom.xml,加入依赖同9001创建resources/application.yml9002的ymlserver: # 修改端口号por…...
AQS底层源码深度剖析-BlockingQueue
目录 AQS底层源码深度剖析-BlockingQueue BlockingQueue定义 队列类型 队列数据结构 ArrayBlockingQueue LinkedBlockingQueue DelayQueue BlockingQueue API 添加元素 检索(取出)元素 BlockingQueue应用队列总览图 AQS底层源码深度剖析-BlockingQueue【重点中的重…...
Kotlin协程:Flow的异常处理
示例代码如下:launch(Dispatchers.Main) {// 第一部分flow {emit(1)throw NullPointerException("e")}.catch {Log.d("liduo", "onCreate1: $it")}.collect {Log.d("liudo", "onCreate2: $it")}// 第二部分flow …...
qt下ffmpeg录制mp4经验分享,支持音视频(h264、h265,AAC,G711 aLaw, G711muLaw)
前言 MP4,是最常见的国际通用格式,在常见的播放软件中都可以使用和播放,磁盘空间占地小,画质一般清晰,它本身是支持h264、AAC的编码格式,对于其他编码的话,需要进行额外处理。本文提供了ffmpeg录…...
C#读取Excel解析入门-1仅围绕三个主要的为阵地,进行重点解析,就是最理性的应对上法所在
业务中也是同样的功能点实现。只是多扩展了很多代码,构成了项目的其他部分,枝干所在。但是有用的枝干,仅仅不超过三个主要的!所以您仅仅围绕三个主要的为阵地,进行重点解析,就是最理性的应对上法所在了 str…...
一起Talk Android吧(第五百一十八回:在Android中使用MQTT通信五)
文章目录 知识回顾问题描述解决过程经验分享各位看官们大家好,这一回中咱们说的例子是" 在Android中使用MQTT通信五",本章回内容与前后章节内容无关联。闲话休提,言归正转,让我们一起Talk Android吧! 知识回顾 我们在前面章回中介绍了如何使用MQTT通信,包含它…...
100种思维模型之混沌与秩序思维模型-027
人类崇尚秩序与连续性,我们习惯于我们的日常世界,它以线性方式运作,没有不连续或突跳。 为此,我们学会了期望各种过程以连续方式运行,我们的内心为了让我们更有安全感,把很多事物的结果归于秩序,…...
Java开发 - Redis初体验
前言 es我们已经在前文中有所了解,和es有相似功能的是Redis,他们都不是纯粹的数据库。两者使用场景也是存在一定的差异的,本文目的并不重点说明他们之间的差异,但会简要说明,重点还是在对Redis的了解和学习上。学完本…...
Python - 使用 pymysql 操作 MySQL 详解
目录创建连接 pymsql.connect() 方法的可传参数连接对象 conn pymsql.connect() 方法游标对象 cursor() 方法使用示例创建数据库表插入数据操作数据查询操作数据更新操作数据删除操作SQL中使用变量封装使用简单使用: import pymysqldb pymysql.connect(host,user…...
机器学习-卷积神经网络CNN中的单通道和多通道图片差异
背景 最近在使用CNN的场景中,既有单通道的图片输入需求,也有多通道的图片输入需求,因此又整理回顾了一下单通道或者多通道卷积的差别,这里记录一下探索过程。 结论 直接给出结论,单通道图片和多通道图片在经历了第一…...
考研复试——计算机组成原理
文章目录计算机组成原理1. 计算机系统由哪两部分组成?计算机系统性能取决于什么?2. 冯诺依曼机的主要特点?3. 主存储器由什么组成,各部分有什么作用?4. 什么是存储单元、存储字、存储字长、存储体?5. 计算机…...
硬件设计 之摄像头分类(IR摄像头、mono摄像头、RGB摄像头、RGB-D摄像头、鱼眼摄像头)
总结一下在机器人上常用的几种摄像头,最近在组装机器人时,傻傻分不清摄像头的种类。由于本人知识有限,以下资料都是在网上搜索而来,按照摄像头的分类整理一下,供大家参考: 1.IR摄像头: IRinfr…...
PTA:C课程设计(2)
山东大学(威海)2022级大一下C习题集(2)2-5-1 字符定位函数(程序填空题)2-5-2 判断回文(程序填空题)2-6-1 数字金字塔(函数)2-6-2 使用函数求最大公约数(函数)2-6-3 使用函数求余弦函…...
利用ngx_stream_return_module构建简易 TCP/UDP 响应网关
一、模块概述 ngx_stream_return_module 提供了一个极简的指令: return <value>;在收到客户端连接后,立即将 <value> 写回并关闭连接。<value> 支持内嵌文本和内置变量(如 $time_iso8601、$remote_addr 等)&a…...
深入理解JavaScript设计模式之单例模式
目录 什么是单例模式为什么需要单例模式常见应用场景包括 单例模式实现透明单例模式实现不透明单例模式用代理实现单例模式javaScript中的单例模式使用命名空间使用闭包封装私有变量 惰性单例通用的惰性单例 结语 什么是单例模式 单例模式(Singleton Pattern&#…...
【Go】3、Go语言进阶与依赖管理
前言 本系列文章参考自稀土掘金上的 【字节内部课】公开课,做自我学习总结整理。 Go语言并发编程 Go语言原生支持并发编程,它的核心机制是 Goroutine 协程、Channel 通道,并基于CSP(Communicating Sequential Processes࿰…...
ardupilot 开发环境eclipse 中import 缺少C++
目录 文章目录 目录摘要1.修复过程摘要 本节主要解决ardupilot 开发环境eclipse 中import 缺少C++,无法导入ardupilot代码,会引起查看不方便的问题。如下图所示 1.修复过程 0.安装ubuntu 软件中自带的eclipse 1.打开eclipse—Help—install new software 2.在 Work with中…...
Web 架构之 CDN 加速原理与落地实践
文章目录 一、思维导图二、正文内容(一)CDN 基础概念1. 定义2. 组成部分 (二)CDN 加速原理1. 请求路由2. 内容缓存3. 内容更新 (三)CDN 落地实践1. 选择 CDN 服务商2. 配置 CDN3. 集成到 Web 架构 …...
html css js网页制作成品——HTML+CSS榴莲商城网页设计(4页)附源码
目录 一、👨🎓网站题目 二、✍️网站描述 三、📚网站介绍 四、🌐网站效果 五、🪓 代码实现 🧱HTML 六、🥇 如何让学习不再盲目 七、🎁更多干货 一、👨…...
HashMap中的put方法执行流程(流程图)
1 put操作整体流程 HashMap 的 put 操作是其最核心的功能之一。在 JDK 1.8 及以后版本中,其主要逻辑封装在 putVal 这个内部方法中。整个过程大致如下: 初始判断与哈希计算: 首先,putVal 方法会检查当前的 table(也就…...
如何应对敏捷转型中的团队阻力
应对敏捷转型中的团队阻力需要明确沟通敏捷转型目的、提升团队参与感、提供充分的培训与支持、逐步推进敏捷实践、建立清晰的奖励和反馈机制。其中,明确沟通敏捷转型目的尤为关键,团队成员只有清晰理解转型背后的原因和利益,才能降低对变化的…...
[USACO23FEB] Bakery S
题目描述 Bessie 开了一家面包店! 在她的面包店里,Bessie 有一个烤箱,可以在 t C t_C tC 的时间内生产一块饼干或在 t M t_M tM 单位时间内生产一块松糕。 ( 1 ≤ t C , t M ≤ 10 9 ) (1 \le t_C,t_M \le 10^9) (1≤tC,tM≤109)。由于空间…...
在RK3588上搭建ROS1环境:创建节点与数据可视化实战指南
在RK3588上搭建ROS1环境:创建节点与数据可视化实战指南 背景介绍完整操作步骤1. 创建Docker容器环境2. 验证GUI显示功能3. 安装ROS Noetic4. 配置环境变量5. 创建ROS节点(小球运动模拟)6. 配置RVIZ默认视图7. 创建启动脚本8. 运行可视化系统效果展示与交互技术解析ROS节点通…...
