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

Prometheus之终极指南(The Ultimate Guide to Prometheus)

Prometheus之终极指南

Prometheus 彻底改变了我们在现代 DevOps 生态系统中监控基础设施、应用程序和服务的方式。它不仅仅是一个工具;它是一个由指标收集、告警和实时监控组成的生态系统,受到 Uber、Google 和 SoundCloud 等组织的信任。在本文中,我们将探讨 Prometheus,包括其架构、高级用例和实际应用。通过本文,您不仅将了解 Prometheus 的工作原理,还将学会如何在项目中有效实施它。让我们开始吧!

什么是 Prometheus?

Prometheus 是一个开源的系统和服务的监控系统,最初由 SoundCloud 于 2012 年构建。自诞生以来,它已成为 云原生计算基金会 (CNCF) 的基石,与其他关键工具如 Kubernetes、Fluentd 和 Helm 并列。Prometheus 的受欢迎程度源于其在监控基础设施和应用程序指标方面的简单性、灵活性和可扩展性。它提供了强大的功能,包括:

  • 收集和存储 时间序列指标,

  • 实时查询数据,

  • 告警和通知,

  • 可视化(使用 Grafana 等工具)。

为什么选择 Prometheus?

Prometheus 是一个用于监控和可观测性的系统,提供了一个创新、强大且灵活的框架,专为复杂的云原生环境设计。随着现代基础设施的规模呈指数级增长,传统的监控工具往往在动态工作负载和分布式系统的压力下表现不佳。然而,Prometheus 重新定义了时间序列数据的收集、存储、查询和可视化方式,与 DevOps 理念无缝契合。

Prometheus 的关键特性和优势

  • 基于拉取的监控:与传统的推送数据监控工具不同,Prometheus 使用拉取模型,使其更高效和可扩展。Prometheus 坚持 拉取模型,与推送导向的监控系统有所不同。Prometheus 服务器主动从目标系统暴露的指定端点定期抓取指标。

  • **强大的查询语言 (PromQL)**:Prometheus 查询语言 (PromQL) 使工程师和操作员能够从原始时间序列数据中提取有意义的见解。其表达式语法支持实时查询、数学计算和跨多维指标的动态告警。它允许您对指标进行切片和切块,以获得深入的洞察,并支持复杂的查询用于告警和仪表板。

  • 可扩展性:可扩展性是 Prometheus 设计理念的核心,解决了监控大量 时间序列数据 的基本需求,既高效又精确。时间序列数据本质上是时间相关的,记录了系统的状态,如 CPU 利用率、磁盘 I/O 或网络延迟,并定期进行记录。随着数据集的增长,传统的监控系统可能会不堪重负,但 Prometheus 的架构决策确保了企业级工作负载的无缝扩展。

Prometheus 架构组件

Prometheus 的架构由多个组件协同工作,以收集、存储、处理和可视化指标。以下是关键组件的详细介绍:

Prometheus 架构的关键组件

1. Prometheus 服务器

Prometheus 服务器是 Prometheus 生态系统的核心。它执行三个主要任务:

  • 数据收集:Prometheus 通过 HTTP 定期从目标端点或导出器抓取指标。

  • 数据存储:它将收集到的指标存储在其本地的 时间序列数据库 (TSDB) 中,该数据库针对快速读写进行了优化。

  • 查询处理:Prometheus 使用 PromQL(Prometheus 查询语言)处理查询,以提取和分析存储的数据。

Prometheus 服务器使用 拉取模型 来检索指标,定期抓取暴露指标的目标端点(例如 /metrics)。

2. 数据模型

Prometheus 使用 多维数据模型 来高效存储和组织指标。

  • 时间序列:指标作为时间序列数据存储,每个数据点都有一个 时间戳 和一个 值。

  • 指标名称和标签:每个时间序列由一个 指标名称 和一组 键值对(标签) 标识。

指标示例:
http_requests_total{method="GET", status="200"}
  • 指标名称:http_requests_total(表示 HTTP 请求总数)

  • 标签:method="GET", status="200"

  • 值:表示特定时间戳的指标的数值。

标签使 Prometheus 能够区分指标的不同维度,使数据模型高度灵活且可查询。

3. 时间序列数据库 (TSDB)

Prometheus 使用其本地的 时间序列数据库 来存储收集到的指标。TSDB 在追加新数据和快速查询现有数据方面非常高效。

  • 存储机制:数据以块的形式存储,以实现高效的内存和磁盘使用。

  • 内存索引:将指标名称和标签映射到相应的时间序列。

  • 保留期:Prometheus 允许配置数据保留期。对于长期存储,可以使用 Thanos 或 Cortex 等工具扩展 Prometheus 的存储能力。

TSDB 的设计确保了大规模系统中读写的高性能。

4. 导出器

并非所有系统都原生暴露 Prometheus 格式的指标。导出器 通过将指标转换为 Prometheus 兼容的数据来填补这一空白。导出器是轻量级进程,将各种系统或应用程序的指标暴露为 Prometheus 可以抓取的格式。导出器通过 HTTP 端点暴露指标,Prometheus 可以抓取这些端点。

常见导出器:

  • Node Exporter:暴露系统级指标(CPU、内存、磁盘使用情况)。

  • Blackbox Exporter:测试外部端点的正常运行时间和延迟。

  • MySQL Exporter:从 MySQL 数据库收集指标。

  • 应用程序特定导出器:适用于数据库、Web 服务器或自定义应用程序。

5. 服务发现

Prometheus 使用 服务发现 动态定位和监控目标,而无需手动配置。这在动态环境(如 Kubernetes、Consul 或静态配置)中特别有用。

服务发现方法:
  • 静态配置:目标在配置文件中手动指定。

动态服务发现:

  • Kubernetes:发现 Pod、服务和端点。

  • 云提供商:AWS、Azure 和 GCP 服务发现。

服务发现使 Prometheus 能够适应不断变化的环境,并确保目标始终是最新的。

6. 指标抓取

Prometheus 采用 拉取模型 来收集指标:

  • 它以配置的间隔从目标端点抓取指标。

  • 目标在 HTTP 端点上暴露指标,通常是 /metrics

指标端点示例:
# HELP http_requests_total Total number of HTTP requests.
# TYPE http_requests_total counter
http_requests_total{method="GET", status="200"} 12345
  • Prometheus 获取上述数据并将其作为时间序列存储在 TSDB 中。

拉取模型确保更好地控制数据收集间隔,并使调试更加简单。

7. PromQL(Prometheus 查询语言)

用于无法直接抓取的短期作业或批处理过程的组件。Prometheus 提供了 PromQL,一种专门为时间序列数据分析设计的查询语言。PromQL 允许用户提取、过滤和聚合指标。

PromQL 功能:
  • 时间序列选择:使用标签检索特定指标。

  • 聚合:应用 sum()avg()count() 等函数。

  • 速率计算:使用 rate() 等函数进行基于时间的更改。

  • 过滤:基于特定标签值进行查询。

示例查询:

1. 基本查询:

http_requests_total

2. 返回指标的所有时间序列:

http_requests_total

3. 速率计算:

rate(http_requests_total[5m])

4. 按标签聚合:

sum(rate(http_requests_total[5m])) by (method)

8. Alertmanager

Prometheus 与 Alertmanager 集成,以处理和路由告警。Alertmanager 处理由 Prometheus 告警规则触发的告警。

global:resolve_timeout: 5m
route:receiver: 'team-X-mails'group_by: ['alertname']group_wait: 30sgroup_interval: 5mrepeat_interval: 3h
receivers:- name: 'team-X-mails'email_configs:- to: 'team-X+alerts@example.org'from: 'alertmanager@example.org'smarthost: 'smtp.example.org:587'auth_username: 'alertmanager@example.org'auth_identity: 'alertmanager@example.org'auth_password: 'password'
Alertmanager 功能:
  1. 去重:防止重复告警使系统过载。

  2. 分组:将相似的告警分组以便于管理。

  3. 路由:将通知告警发送到指定的接收者(例如电子邮件、Slack、PagerDuty)。

  4. 静音:暂时静音告警。

工作流程:
  1. Prometheus 评估告警规则。

  2. 如果满足条件,则生成告警并发送至 Alertmanager。

  3. Alertmanager 将告警路由到配置的通知渠道。

9. 可视化

Prometheus 支持基本的 表达式浏览器 用于查询指标。对于更高级的可视化,它与 Grafana 无缝集成。

  • Grafana:广泛使用的 Prometheus 数据可视化工具。

  • Prometheus 作为数据源添加到 Grafana 中。

  • 仪表板可以使用 PromQL 查询显示实时指标和趋势。

Grafana 提供了灵活且视觉上吸引人的仪表板,用于分析指标和系统性能。

10. Pushgateway(可选)

虽然 Prometheus 主要使用 拉取模型,但 Pushgateway 用于无法持续暴露指标的系统(例如批处理作业)。

  • 系统将其指标推送到 Pushgateway。

  • Prometheus 抓取 Pushgateway 以收集指标。

Pushgateway 对于 短期作业 和拉取模型不可行的环境非常有用。

Prometheus 的工作原理

1. 数据收集(抓取)
  • Prometheus 定期从配置的目标(例如导出器、应用程序)通过 HTTP 抓取指标。

  • 目标以特定格式(通常是纯文本或 OpenMetrics 格式)暴露指标。

2. 数据存储
  • 抓取的指标存储在 Prometheus 的时间序列数据库中。

  • 每个指标作为时间序列存储,由唯一的指标名称和可选的键值对(标签)标识。

3. 查询和分析
  • 用户使用 PromQL 查询存储的指标。

  • PromQL 允许进行复杂的查询,如聚合、过滤和数学操作,以分析数据。

4. 告警
  • Prometheus 定期评估告警规则。

  • 如果满足规则条件,则触发告警并发送至 Alertmanager。

  • Alertmanager 处理告警并将其发送到配置的渠道。

5. 可视化
  • 可以使用 Grafana 等工具可视化指标,Grafana 将 Prometheus 作为数据源连接。

  • 仪表板提供了对系统性能、趋势和异常的洞察。

设置 Prometheus

安装

要开始使用,您可以从 官方网站[1] 下载最新的 Prometheus 版本。解压 tarball 并运行 Prometheus 服务器:

tar xvfz prometheus-*.tar.gz
cd prometheus-*
./prometheus --config.file=prometheus.yml

配置

prometheus.yml 文件是 Prometheus 配置的核心。以下是一个基本示例:

global:scrape_interval: 15s
scrape_configs:- job_name: 'prometheus'static_configs:- targets: ['localhost:9090']

服务发现

Prometheus 支持多种服务发现机制,如 Kubernetes、Consul 等。以下是 Kubernetes 服务发现的示例:

scrape_configs:- job_name: 'kubernetes-pods'kubernetes_sd_configs:- role: pod

Prometheus 的高级功能

导出器:扩展指标收集

导出器对于将第三方系统与 Prometheus 集成至关重要。例如,node_exporter 收集由 *NIX 内核暴露的硬件和操作系统指标。

wget https://github.com/prometheus/node_exporter/releases/download/v*/node_exporter-*.linux-amd64.tar.gz
tar xvfz node_exporter-*.linux-amd64.tar.gz
cd node_exporter-*
./node_exporter

将 node_exporter 添加到您的 Prometheus 配置中:

scrape_configs:- job_name: 'node_exporter'static_configs:- targets: ['localhost:9100']

监控 Kubernetes 集群

Kubernetes 是一个流行的编排平台,Prometheus 常用于监控其健康和性能。kube-prometheus 项目提供了一组全面的清单,用于监控 Kubernetes 集群。

1. 安装 kube-prometheus:
kubectl apply -f https://github.com/prometheus-operator/kube-prometheus/releases/download/v0.*/manifests-*.yaml
2. 访问 Prometheus:
kubectl --namespace monitoring port-forward svc/prometheus-k8s 9090

监控微服务

在微服务架构中,监控单个服务及其交互至关重要。Prometheus 可以与各种微服务框架(如 Spring Boot、Django 等)集成。

1. Spring Boot 集成:

将 micrometer-registry-prometheus 依赖项添加到您的 pom.xml 中:

<dependency><groupId>io.micrometer</groupId><artifactId>micrometer-registry-prometheus</artifactId>
</dependency>
2. 暴露指标:
@SpringBootApplication
public class Application {public static void main(String[] args) {SpringApplication.run(Application.class, args);}
@BeanMeterRegistryCustomizer<MeterRegistry> metricsCommonTags() {return registry -> registry.config().commonTags("application", "my-app");}
}

Prometheus 中的指标

在 Prometheus 中,指标是收集和存储的基本数据点。它们代表了关于您的服务、硬件和应用程序的各种类型的测量。Prometheus 指标有助于监控和分析系统的性能和健康状况。

Prometheus 中的指标类型

Prometheus 支持四种指标类型:

  1. 计数器:计数器是一种随时间递增的指标。它表示一个累积值,永远不会减少(例如,Web 服务器处理的请求数量或发生的错误数量)。

  2. 仪表:仪表是一种可以随时间上下波动的指标。它表示一个可以增加或减少的值(例如,当前内存使用量、温度或活动连接数)。

  3. 直方图:直方图对观察值(通常是持续时间或大小)进行分桶,并提供每个桶中的观察计数以及所有观察值的总和。这允许计算平均值、百分位数和其他统计指标。

  4. 摘要:摘要类似于直方图,因为它跟踪观察值并可以提供统计信息,例如分位数(例如,请求持续时间的第 95 百分位)。与直方图不同,摘要预先计算分位数(例如 0.5、0.9 和 0.99),这在某些用例中更高效。

在实践中,计数器 和 仪表 最常用于跟踪一般指标,而 直方图 和 摘要 更专业,用于处理分布或统计数据。根据用例,您可能会选择一种以获得最佳性能和分析便利性。

结论:

Prometheus 已成为现代分布式系统中可观测性的基石,提供了无与伦比的可扩展性、可靠性和分析能力。其拉取架构、PromQL 查询语言、Alertmanager、导出器以及与 Kubernetes 和 Grafana 的无缝集成,使其成为云原生监控策略的关键组件。

对于 DevOps 从业者来说,Prometheus 不仅仅是一个监控工具;它是系统弹性、性能优化和主动异常检测的推动者。随着软件架构变得越来越动态,Prometheus 已准备好应对未来基础设施的挑战。

准备好通过 Prometheus 增强您的可观测性了吗? 下载 Prometheus 并开始监控您的基础设施。将其与 Grafana 配对以创建仪表板,并与 Alertmanager 配对以进行主动告警。

相关文章:

Prometheus之终极指南(The Ultimate Guide to Prometheus)

Prometheus之终极指南 Prometheus 彻底改变了我们在现代 DevOps 生态系统中监控基础设施、应用程序和服务的方式。它不仅仅是一个工具&#xff1b;它是一个由指标收集、告警和实时监控组成的生态系统&#xff0c;受到 Uber、Google 和 SoundCloud 等组织的信任。在本文中&…...

如何使用Python调用淘宝api接口获取商品详情信息?

使用 Python 调用淘宝 API 接口获取商品详情信息&#xff0c;可按照以下步骤进行&#xff1a; 注册并获取 API 密钥 访问淘宝api文档&#xff0c;点击 “立即测试” 按钮&#xff0c;按照提示完成注册流程。注册成功后&#xff0c;登录测试平台&#xff0c;进入 “控制台” 页面…...

ubuntu 22下解决Unment dependencies问题

问题现象 在使用apt安装包的时候&#xff0c;出现如下错误&#xff1a; 解决方案 第一步 sudo apt-get -f install sudo apt-get update sudo apt-get upgrade第二步 sudo apt-get update sudo apt-get clean sudo apt-get autoremove第三步 sudo apt --fix-broken inst…...

leetcode 热题100(155. 最小栈)multiset c++

链接&#xff1a;155. 最小栈 - 力扣&#xff08;LeetCode&#xff09; 设计一个支持 push &#xff0c;pop &#xff0c;top 操作&#xff0c;并能在常数时间内检索到最小元素的栈。 实现 MinStack 类: MinStack() 初始化堆栈对象。void push(int val) 将元素val推入堆栈。…...

某小程序sign签名参数逆向分析

文章目录 1. 写在前面2. 接口分析3. 分析还原 【&#x1f3e0;作者主页】&#xff1a;吴秋霖 【&#x1f4bc;作者介绍】&#xff1a;擅长爬虫与JS加密逆向分析&#xff01;Python领域优质创作者、CSDN博客专家、阿里云博客专家、华为云享专家。一路走来长期坚守并致力于Python…...

阿里云redis内存优化——PCP数据清理

在阿里云安装了一个redis节点&#xff0c;今天使用时忽然想着点击了一下分析内存。好家伙&#xff0c;居然崩出了一个30多M的块出来。问题是我本地安装的redis没有这个啊&#xff0c;怎么奇怪冒出这个来了。 本着把系统用干榨尽的态度&#xff0c;研究了下这个问题的来源。网上…...

YOLOv10-1.1部分代码阅读笔记-head.py

head.py ultralytics\nn\modules\head.py 目录 head.py 1.所需的库和模块 2.class Detect(nn.Module): 3.class Segment(Detect): 4.class OBB(Detect): 5.class Pose(Detect): 6.class Classify(nn.Module): 7.class WorldDetect(Detect): 8.class RTDETRDec…...

java开发中注解汇总​​

注解作用位置注意mybatis Data Getter Setter ToString EqualsAndHashCode AllArgsConstructor NoArgsConstructor Data 代替&#xff1a;无参构造&#xff0c;get&#xff0c;set&#xff0c;toString&#xff0c;hashCode&#xff0c;equals Getter Setter 可放在类和方法上&…...

Java开发 PDF文件生成方案

业务需求背景 业务端需要能够将考试答卷内容按指定格式呈现并导出为pdf格式进行存档&#xff0c;作为紧急需求插入。导出内容存在样式复杂性&#xff0c;包括特定的字体&#xff08;中文&#xff09;、字号、颜色&#xff0c;页面得有页眉、页码&#xff0c;数据需要进行表格聚…...

Python机器学习笔记(十七、分箱、离散化、线性模型与树)

数据表示的最佳方法&#xff1a;取决于数据的语义&#xff0c;所使用的模型种类。 线性模型与基于树的模型&#xff08;决策树、梯度提升树和随机森林&#xff09;是两种成员很多同时又非常常用的模 型&#xff0c;它们在处理不同的特征表示时就具有非常不同的性质。我们使用w…...

[极客大挑战 2019]Http 1

进入环境&#xff1a; 检查源码发现有一个链接&#xff0c;但是这里没有绑定&#xff0c;需要手动跳转&#xff0c;打开后&#xff0c;发现提示&#xff1a; 这里就是需要我们从https://Sycsecret.buuoj.cn来访问它 因此我们抓包&#xff0c;使用referer&#xff1a;服务器伪造…...

最近学习shader的一些总结

旨在总结最近学习shader过程中一些关键要素&#xff0c;强化下记忆&#xff0c;如果有错误也烦请指出。 1.Properties 可调节变量,用于定义从外部传入到内部的变量, 以及外部通过访问这些变量名, 可以获取这些变量的值 其中定义时指定的类型, 在后文中类型不一定相同(基本不…...

庐山派K230学习日记1 从点灯到吃灰

1 简介​ 庐山派以K230为主控芯片&#xff0c;支持三路摄像头同时输入&#xff0c;典型网络下的推理能力可达K210的13.7倍&#xff08;算力约为6TOPS&#xff09;。支持CanMV&#xff0c;可作为AI与边缘计算平台 K230简介 K230芯片集成了两颗RISC-V处理器核心&#xff0c;双核…...

在Swagger(现称为OpenAPI)中各类@api之间的区别

在Swagger&#xff08;现称为OpenAPI&#xff09;中&#xff0c;ApiOperation 是用来描述单个API操作的注解。除此之外&#xff0c;Swagger还提供了其他一些类似的注解&#xff0c;它们用于不同层次或目的来增强API文档的详细程度和可读性。以下是这些注解及其之间的区别&#…...

【网络协议】开放式最短路径优先协议OSPF详解(二)

前言 第一部分&#xff1a;【网络协议】开放式最短路径优先协议OSPF详解&#xff08;一&#xff09; 在第一部分中&#xff0c;我们了解了链路状态路由协议并讨论了 OSPF 的工作原理&#xff0c;同时学习了如何配置 OSPF。在本章的第二部分中&#xff0c;我们将进一步探讨 OS…...

windows文件夹自定义右键调用powershell完成7zip加密打包

准备powershell脚本 2. regedit的路径是&#xff1a;计算机\HKEY_CLASSES_ROOT\Directory\shell\&#xff0c;在此项目下新增子项目diy_command\command&#xff0c;command的数据值为powershell D:\windowsProjects\directory_diy.ps1 %1 效果&#xff0c;点击后进入和power…...

MySQL 入门教程

MySQL是最流行的关系型数据库管理系统&#xff0c;在WEB应用方面MySQL是最好的RDBMS(Relational Database Management System&#xff1a;关系数据库管理系统)应用软件之一。 在本教程中&#xff0c;会让大家快速掌握MySQL的基本知识&#xff0c;并轻松使用MySQL数据库。 什么…...

BOOST 库在机器视觉中的应用及示例代码分析

一、引言 机器视觉是一门让计算机模拟人类视觉功能&#xff0c;对图像或视频数据进行理解、分析和决策的学科领域。在机器视觉的开发过程中&#xff0c;常常需要高效处理各种数据结构、进行数值计算、实现多线程并行处理以及运用优秀的算法框架等。BOOST 库作为一个功能强大、…...

第二十六天 自然语言处理(NLP)词嵌入(Word2Vec、GloVe)

自然语言处理&#xff08;NLP&#xff09;中的词嵌入&#xff08;Word2Vec、GloVe&#xff09;技术&#xff0c;是NLP领域的重要组成部分&#xff0c;它们为词汇提供了高维空间到低维向量的映射&#xff0c;使得语义相似的词汇在向量空间中的距离更近。以下是对这些技术的详细解…...

Log4j2 详解(异步日志打印及CSV格式日志输出)

Log4j2 详解 Apache Log4j2 是一个功能强大的 Java 日志记录框架&#xff0c;提供高性能和灵活的配置。本文档涵盖了 Log4j2 的核心功能及其详细使用方式&#xff0c;包括基础配置、异步日志、CSV 格式日志的输出以及使用注意事项。 一 Log4j2 基础概念与配置 1.1 Log4j2 介绍…...

[网络安全] DVWA之Content Security Policy (CSP) Bypass 攻击姿势及解题详析合集

CSP概念 CSP 是 Content Security Policy&#xff08;内容安全策略&#xff09;的缩写&#xff0c;是一种用于增强 Web 应用程序安全性的安全机制。它通过允许网站管理员控制页面中加载内容的来源来减少跨站脚本攻击&#xff08;XSS&#xff09;等常见的安全风险。 CSP 的工作…...

linux shell脚本 【分支结构case...in 、循环结构、函数】内附练习

1.思维导图 2.练习 1.定义一个find函数&#xff0c;查找ubuntu和root的gid 2.定义一个数组&#xff0c;写一个函数完成对数组的冒泡排序 bubble() {n${#arr[*]}for((i0;i<n-1;i));dofor((j0;j<n-1-i;j));doif ((arr[j]>arr[j1]));thentemp${arr[j]}arr[j]${arr[j1]}a…...

C# 设计模式(结构型模式):桥接模式

C# 设计模式&#xff08;结构型模式&#xff09;&#xff1a;桥接模式 在软件设计中&#xff0c;我们经常会遇到系统的变化频繁&#xff0c;或者需要灵活扩展功能的场景。这时&#xff0c;桥接模式&#xff08;Bridge Pattern&#xff09;便显得尤为重要。桥接模式是一个结构型…...

RC充电电路仿真与分析

RC充电原理 下图是一个常见的RC充电电路&#xff1a;&#xff08;假设R10K&#xff0c;C100nF&#xff09; SW断开时&#xff0c;这个电路处于断路状态&#xff0c;C既没有充电也没有放电&#xff1b;SW闭合时&#xff0c;直流电源5V为电容C充电&#xff1b; 充电时电容两端…...

在 SQL 中获取第m个开始的n条记录方法汇总

在 SQL 中&#xff0c;要获取第m个开始的n条记录&#xff0c;主要取决于你使用的数据库系统和支持的功能。以要获取第10个开始的20条记录为例说明几种常见的方法&#xff1a; 1. 使用 LIMIT 和 OFFSET 适用于 MySQL、PostgreSQL 等支持 LIMIT 的数据库。 SELECT * FROM table…...

Linux 35.6 + JetPack v5.1.4之编译 pytorch

Linux 35.6 JetPack v5.1.4之编译 pytorch 1. 源由2. 折腾3. 构建步骤3.1 下载代码3.2 编译选项3.3 CUDA选项3.4 CUDA路径3.5 版本控制3.6 编译whl 4. 总结5. 参考资料 1. 源由 目前&#xff0c;有很多科研性质的自动导航的开源代码&#xff0c;例如&#xff1a; Linux 35.5…...

docker 部署nginx

1、拉取阿里的nginx镜像&#xff1a; docker pull crpi-k5k93ldwfc7o75ip.cn-hangzhou.personal.cr.aliyuncs.com/list_su/nginx:stable-perl 2、官方nginx镜像&#xff1a; docker pull nginx:stable-perl 3、创建挂载文件目录 mkdir nginx && cd nginx mkdir c…...

深入刨析数据结构之排序(上)

目录 1.内部排序 1.1概述 1.2插入排序 1.2.1其他插入排序 1.2.1.1 折半插入排序 1.2.1.2 2-路插入排序 1.3希尔排序 1.4快速排序 1.4.1起泡排序 1.4.2快速排序 1.4.2.1hoare版本 1.4.2.2挖坑版本 1.4.2.3前后指针版本 1.4.2.4优化版本 1.4.2.4.1小区间插入排序优…...

Java - 日志体系_Apache Commons Logging(JCL)日志接口库_桥接Logback 及 源码分析

文章目录 PreApache CommonsApache Commons ProperLogging &#xff08;Apache Commons Logging &#xff09; JCL 集成logbackPOM依赖配置文件 logback.xml使用 源码分析jcl-over-slf4j 的工作原理1. LogFactory 的实现2. SLF4JLogFactory 和 Log 的实例化过程3. SLF4JLog 和 …...

力扣刷题:栈和队列OJ篇(下)

大家好&#xff0c;这里是小编的博客频道 小编的博客&#xff1a;就爱学编程 很高兴在CSDN这个大家庭与大家相识&#xff0c;希望能在这里与大家共同进步&#xff0c;共同收获更好的自己&#xff01;&#xff01;&#xff01; 目录 1.括号匹配问题&#xff08;1&#xff09;题目…...

QT:控件属性及常用控件(1)------核心控件及属性

一个图形化界面上的内容&#xff0c;不需要我们直接从零去实现 QT中已经提供了很多的内置控件&#xff1a; 按钮&#xff0c;文本框&#xff0c;单选按钮&#xff0c;复选按钮&#xff0c;下拉框等等。。。。。 文章目录 1.常用控件属性1.1 enabled1.2 geometry1.2.1 geometry…...

【juc】Lock锁和AQS的继承关系

目录 1. 说明2. Lock接口与AQS的关系2.1 Lock接口2.2 AQS&#xff08;AbstractQueuedSynchronizer&#xff09; 3. ReentrantLock与AQS的具体联系3.1 ReentrantLock的实现3.2 AQS在ReentrantLock中的作用 1. 说明 1.Lock锁和AQS&#xff08;AbstractQueuedSynchronizer&#x…...

自学记录鸿蒙API 13:实现多目标识别Object Detection

起步&#xff1a;什么叫多目标识别&#xff1f; 无论是生活中的动物识别、智能相册中的场景分类&#xff0c;还是工业领域的检测任务&#xff0c;都能看到多目标识别的身影。这次&#xff0c;我决定通过学习HarmonyOS最新的Object Detection API&#xff08;API 13&#xff09…...

BOC调制信号matlab性能仿真分析,对比功率谱,自相关性以及抗干扰性

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 5.算法完整程序工程 1.算法运行效果图预览 (完整程序运行后无水印) 2.算法运行软件版本 matlab2022a 3.部分核心程序 &#xff08;完整版代码包含详细中文注释和操作步骤视频&#xff09…...

C# 事件机制

C# 事件机制详解&#xff1a;从概念到实践 在 C# 中&#xff0c;事件机制是处理对象间通信的重要方式&#xff0c;尤其是在 GUI 应用程序&#xff08;如 WPF、WinForms&#xff09;中&#xff0c;事件用于响应用户交互&#xff08;如按钮点击、鼠标移动等&#xff09;。本文将…...

使用 Python 实现随机中点位移法生成逼真的裂隙面

使用 Python 实现随机中点位移法生成逼真的裂隙面 一、随机中点位移法简介 1. 什么是随机中点位移法&#xff1f;2. 应用领域 二、 Python 代码实现 1. 导入必要的库2. 函数定义&#xff1a;随机中点位移法核心逻辑3. 设置随机数种子4. 初始化二维裂隙面5. 初始化网格的四个顶点…...

GPT分区 使用parted标准分区划分,以及相邻分区扩容

parted 是一个功能强大的命令行工具&#xff0c;用于创建和管理磁盘分区表和分区。它支持多种分区表类型&#xff0c;如 MBR&#xff08;msdos&#xff09;、GPT&#xff08;GUID Partition Table&#xff09;等&#xff0c;并且可以处理大容量磁盘。parted 提供了一个交互式界…...

【Triton-ONNX】如何使用 ONNX 模型服务与 Triton 通信执行推理任务上-Triton快速开始

模型部署系列文章 前置-docker 理解:【 0 基础 Docker 极速入门】镜像、容器、常用命令总结前置-http/gRPC 的理解: 【HTTP和gRPC的区别】协议类型/传输效率 /性能等对比【保姆级教程附代码】Pytorch (.pth) 到 TensorRT (.plan) 模型转化全流程【保姆级教程附代码(二)】Pytor…...

问题记录:[FATAL] [1735822984.951119148]: Group ‘manipulator‘ was not found.

前言&#xff1a;最近仿照UR5手眼标定的例程&#xff0c;在新的机械臂上进行手眼标定&#xff0c;还准备用easy_hand手眼标定包。将机器人功能包导入到工作空间后进行编译运行&#xff0c;启动launch文件&#xff1a; roslaunch easy_handeye eye_to_hand_CR7_calibration.lau…...

SpringCloudAlibaba实战入门之Sentinel服务降级和服务熔断(十五)

一、Sentinel概述 1、Sentinel是什么 随着微服务的流行,服务和服务之间的稳定性变得越来越重要。Sentinel 以流量为切入点,从流量控制、熔断降级、系统负载保护等多个维度保护服务的稳定性。 一句话概括:sentinel即Hystrix的替代品,官网: https://sentinelguard.io/zh…...

Scrum中敏捷项目经理(Scrum Master)扮演什么角色?

敏捷开发模式已经逐渐被主流的软件研发团队所接受&#xff0c;其中Scrum是最具代表性的敏捷方法之一。Scrum框架中有三个核心角色&#xff1a;Product Owner&#xff08;PO&#xff09;、Scrum Master&#xff08;SM&#xff09;和Development Team&#xff08;DT&#xff09;。…...

SpringMVC(四)响应

目录 数据处理及跳转 1. 结果跳转方式 ①.ModelAndView ②.ServletAPI 1、通过HttpServletResponse进行输出 2、通过HttpServletResponse实现请求转发 3、通过HttpServletResponse实现重定向 ③.SpringMVC 1.直接输出 2.请求转发 3.重定向 2.ResponseBody响应json数…...

操作系统之文件系统

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

Android SPRD 工模测试修改

设备有两颗led灯&#xff0c;工模测试需全亮 vendor/sprd/proprietories-source/factorytest/testitem/led.cpp -13,6 13,10 typedef enum{#define LED_BLUE "/sys/class/leds/blue/brightness"#define LED_RED …...

C语言与操作系统

学习C语言有助于理解计算机底层原理和操作系统的工作方式 C语言自诞生以来&#xff0c;就与计算机底层操作紧密相连。作为一门高级编程语言&#xff0c;C语言提供了对硬件直接控制的能力&#xff0c;同时保留了结构化编程的特性&#xff0c;这使得它成为编写操作系统、编译器和…...

信息安全管理:网络安全

1 网络的定义和特征 1.1 网络的定义 &#xff08;根本懒得说。。你们自己wiki吧&#xff09; 网络的用处 What is a network…Devices in a network…LAN, WAN and InternetworksWhat do networks do for you… Sharing resourcesUse/share applications 1.2 网络的特征 Ch…...

python-leetcode-轮转数组

189. 轮转数组 - 力扣&#xff08;LeetCode&#xff09; class Solution:def rotate(self, nums: List[int], k: int) -> None:"""Do not return anything, modify nums in-place instead."""n len(nums)k % n # 如果 k 大于 n&#xff0c;…...

Windows上安装Go并配置环境变量(图文步骤)

前言 1. 本文主要讲解的是在windows上安装Go语言的环境和配置环境变量&#xff1b; Go语言版本&#xff1a;1.23.2 Windows版本&#xff1a;win11&#xff08;win10通用&#xff09; 下载Go环境 下载go环境&#xff1a;Go下载官网链接(https://golang.google.cn/dl/) 等待…...

【JS】期约的Promise.all()和 Promise.race()区别

概述 Promise.all() 和 Promise.race() 都是 JavaScript 中处理多个异步操作的 Promise 方法&#xff0c;但它们的行为和返回结果有所不同。 Promise.all()和Promise.race() 1. Promise.all() Promise.all() 接受一个由多个 Promise 实例组成的可迭代对象&#xff08;例如数…...

【Linux】信号处理

一、Linux系统信号 1、常见的系统信号 常见的Linux系统信号 信号值描述1SIGHUP挂起&#xff08;hang up&#xff09;进程2SIGINT中断进&#xff08;interrupt&#xff09;程3SIGQUIT停止&#xff08;stop&#xff09;进程9SIGKILL无条件终止&#xff08;terminate&#xff09;…...