Prometheus 服务监控

news2024/11/24 19:59:36

官网:https://prometheus.io

Prometheus 是什么

Prometheus 是一个开源的系统监控和报警工具,专注于记录和存储时间序列数据(time-series data)。它最初由 SoundCloud 开发,并已成为 CNCF(云原生计算基金会) 的一个顶级项目。Prometheus 被广泛用于监控各种服务、应用程序和基础设施的性能和健康状况。

Prometheus 的特点

  • 时间序列数据存储

    • Prometheus 以时间序列的形式存储所有数据,即数据点根据时间顺序记录。每个时间序列由一组唯一标识的标签(labels)标识,可以帮助灵活地查询和筛选数据。
  • 多维度数据模型

    • 使用标签来区分不同的数据点,提供多维度的数据模型。这使得用户可以基于不同的维度(例如主机名、服务名称、请求路径等)来聚合和分析数据。
  • 拉取模式(Pull)

    • Prometheus 通过 HTTP 定期拉取(scrape)监控目标所暴露的指标数据。这种方式与传统的推送模式不同,有助于 Prometheus 控制对监控目标的访问和数据采集。
  • PromQL 查询语言

    • Prometheus 提供了强大的查询语言 PromQL,用于实时查询和分析时间序列数据。PromQL 支持聚合、过滤、计算和可视化数据,是 Prometheus 的核心组件之一。
  • 易于集成

    • Prometheus 提供了许多现成的Exporter,用于集成和监控常见的应用程序、数据库、操作系统等(如 MySQL、Redis、Node Exporter 等)。
    • 你还可以编写自定义的 Exporter 或直接在应用程序中集成 Prometheus 客户端库,暴露自定义的应用程序指标。
  • Alertmanager 报警管理

    • Prometheus 配备了一个独立的组件 Alertmanager,用于处理报警。它支持配置报警规则,当监控的数据满足特定条件时,自动触发报警,并可以通过邮件、Slack、PagerDuty、钉钉机器人、企业微信机器人 等渠道发送通知。
  • 自包含的存储

    • Prometheus 使用自己的本地存储来保存采集到的监控数据,并为这些数据提供高效的压缩和存储机制。虽然它也支持通过远程存储系统进行数据的持久化。
  • 云原生和容器支持

    • Prometheus 与容器化环境和微服务架构非常契合,特别是在 Kubernetes 生态系统中,Prometheus 已成为首选的监控解决方案之一。

Prometheus 的组件

1. Prometheus Server

  • 核心组件,负责数据采集、存储和查询。
  • 主要任务是定期从被监控的目标中拉取(scrape)指标数据,并将这些数据存储为时间序列。
  • 支持 PromQL 查询语言,用户可以使用 PromQL 进行复杂的数据查询和分析。

2. Exporters

  • Exporters 是 Prometheus 生态中用于暴露指标数据的组件。
  • 各种 Exporter 将系统、服务或应用的内部状态转换为 Prometheus 格式的指标数据,供 Prometheus server 拉取。
  • 常见的 Exporters:
    • Node Exporter:监控操作系统级别的指标(CPU、内存、磁盘、网络等)。
    • MySQL Exporter:用于暴露 MySQL 数据库的性能指标。
    • Redis Exporter:暴露 Redis 的运行状况。
    • Blackbox Exporter:用于监控服务的可达性,通过 HTTP、DNS 等协议进行探测。
  • 如果没有现成的 Exporter,开发者可以通过客户端库来编写自定义 Exporter。

3. Pushgateway

  • Pushgateway 是 Prometheus 的辅助组件,用于那些无法被 Prometheus 定期拉取的短生命周期任务(如批处理任务、临时作业)上传指标数据。
  • 这些任务将指标数据推送到 Pushgateway,Prometheus 再从 Pushgateway 拉取这些数据。

4. Alertmanager

  • Alertmanager 是 Prometheus 的报警管理组件,负责处理 Prometheus 服务器生成的报警。
  • 它可以根据报警规则处理报警事件,并将报警通知通过邮件、Slack、PagerDuty、Webhook、钉钉机器人、企业微信机器人 等发送给相关人员或系统。
  • 支持报警的分组、抑制和去重,以减少不必要的报警。

5. Prometheus Client Libraries

  • Prometheus 提供多种语言的客户端库,用于帮助开发者将自定义应用程序的内部状态暴露为指标数据。
  • 主要的客户端库支持以下语言:
    • Goprometheus/client_golang
    • Java / Scalaprometheus/client_java
    • Pythonprometheus/client_python
    • Rubyprometheus/client_ruby
  • 这些库帮助开发者定义、注册和暴露应用程序的自定义指标。

6. Service Discovery

  • Prometheus 提供了服务发现机制,用于自动发现和监控动态环境中的目标(如 Kubernetes 集群中的容器、服务、Pods 等)。
  • 支持多种服务发现机制,如静态配置、Kubernetes、Consul、EC2、GCE、DNS 等,自动更新监控目标列表,无需手动配置。

7. PromQL (Prometheus Query Language)

  • PromQL 是 Prometheus 用来查询和分析时间序列数据的语言。
  • 支持过滤、聚合、计算和转换时间序列数据,用于生成复杂的查询结果和报警规则。
  • PromQL 是 Prometheus 核心的查询工具,用户可以根据不同维度灵活地分析指标数据。

8. Storage(存储)

  • Prometheus 提供内置的时间序列数据库,用于高效存储监控数据。
  • 本地存储主要用于短期存储,但 Prometheus 也支持远程存储接口,可以将数据发送到外部存储系统(如 Thanos、Cortex 或其他分布式存储)进行长期保存。

9. Grafana(可视化工具,非 Prometheus 的内置组件,但常与 Prometheus 搭配使用)

  • 虽然 Grafana 不是 Prometheus 的核心组件,但它通常与 Prometheus 集成,用于可视化监控数据。
  • Grafana 支持通过 PromQL 从 Prometheus 中查询数据并以丰富的图表和仪表盘形式展示出来。

10. Remote Storage Integrations

  • Prometheus 支持将数据通过远程存储接口发送到其他存储后端,以便进行长期存储高可用性管理。
  • 常见的远程存储系统包括 ThanosCortex,它们允许对 Prometheus 数据进行扩展、持久化和查询。

11. Prometheus Rule Files(报警和记录规则)

  • Prometheus 支持通过规则文件定义报警和记录规则。
  • 报警规则允许用户基于 PromQL 进行指标分析,并生成报警条件。
  • 记录规则则可以预先计算某些复杂的查询,以减少每次查询的计算量,提升性能。

Prometheus 的指标

什么是 Prometheus 指标

指标(Metric) 是用来记录和表示监控数据的基本单位。它们是 Prometheus 数据模型的核心组成部分,用于存储和检索有关系统和应用程序性能的信息。每个指标通常由一组数据点组成,这些数据点按照时间序列进行存储和管理。

指标的组成

名称(Name)

  • 每个指标都有一个唯一的名称,用于标识和引用。例如:http_requests_total、cpu_usage_seconds_total。

类型(Type)

  • 指标有不同的类型,每种类型用于记录不同类型的数据。主要类型包括 Counter、Gauge、Histogram、Summary 和 Untyped。

标签(Labels)

  • 标签是附加到指标上的键值对,用于提供额外的上下文信息。标签允许对同一指标的不同实例进行分类和过滤。例如:method="GET"、status="200"。标签可以用来区分和聚合不同的度量数据。

值(Value)

  • 指标的实际数据值。例如:一个计数器的值可能是 1500,表示从启动到当前时间,已处理的 HTTP 请求总数。

时间戳(Timestamp)

  • 每个数据点都有一个时间戳,用于记录该数据点的生成时间。在 Prometheus 中,时间戳是由 Prometheus 服务器在抓取数据时自动添加的。

指标的类型

Counter(计数器)

  • 定义:表示累积的、单调递增的值。计数器只能增加,不能减少。
  • 用途:用于跟踪事件发生的总次数,如 HTTP 请求的总数、处理的任务数量、错误发生的次数。

Gauge(仪表)

  • 定义:表示一个随时间变化的值,可以增加或减少。适合表示瞬时的状态。
  • 用途:用于跟踪瞬时值,如当前温度、内存使用量、当前队列长度等。

Histogram(直方图/柱状图)

  • 定义:用于记录一组值的分布。它可以将数据划分为多个桶(buckets),每个桶记录符合该范围的事件数量。
  • 用途:用于跟踪数据的分布情况和计算聚合统计量,如请求响应时间、请求大小等。

Summary(摘要)

  • 定义:用于记录一组值的分布,同时提供总计数和总和。它类似于直方图,但直接提供了数据的总和和平均值(百分比提供)。
  • 用途:用于跟踪数据分布,并计算聚合统计量,如请求响应时间的平均值、总时间等。

Untyped(无类型)

  • 定义:表示没有特定类型的指标。通常用于在没有明确类型的情况下暴露数据。
  • 用途:通常用于特定场景下的临时指标,或用于与 Prometheus 无直接关联的系统。

指标示例

# HELP http_requests_total The total number of HTTP requests.
# TYPE http_requests_total counter
http_requests_total{method="GET", status="200"} 1500 1825690710
http_requests_total{method="POST", status="404"} 200 1824472505
  • # HELP 指标的一般注释信息,帮助用户理解该指标的用途
  • # TYPE 指标的类型注释信息,告诉 Prometheus 如何处理该指标
  • 样本

说明:

  • 在这个1825690710时间戳到达时,共有 1500 次 GET 请求返回了状态码 200
  • 在这个1824472505时间戳到达时,共有 200 次 POST 请求返回了状态码 404

Prometheus 的使用场景

  • 应用程序监控:监控应用程序的性能指标,如请求量、错误率、响应时间等。
  • 基础设施监控:监控服务器的 CPU、内存、磁盘和网络等资源使用情况。
  • 容器和编排系统监控:监控 Docker 容器和 Kubernetes 集群的运行状况。
  • 数据库监控:跟踪数据库的性能,如慢查询、连接数等。

Prometheus 的安装

前置安装 Golang环境,安装教程:https://blog.csdn.net/a1053765496/article/details/129362520

下载 Prometheus,https://prometheus.io/download/

把下载的 prometheus-2.54.1.linux-amd64.tar.gz 安装包上传到 linux 服务器的 /usr/local 目录下

# 解压
tar -zxvf prometheus-2.54.1.linux-amd64.tar.gz

# 解压后的文件夹重命名
mv prometheus-2.54.1.linux-amd64 prometheus

启动 Prometheus

cd /usr/local/prometheus
./prometheus --config.file=prometheus.yml

# 守护进程启动
nohup ./prometheus --config.file=prometheus.yml > prometheus.log 2>&1 &

如果服务正常运行,可以通过浏览器访问 Prometheus 的 Web UI,默认在端口 9090。在浏览器中访问:http://localhost:9090         // 记得防火墙放开 9090 端口

停止 Prometheus

ps aux | grep prometheus
# 或
pgrep prometheus

kill -9 <PID>

Prometheus 的 Web UI 面板介绍


Prometheus 目录结构介绍

  • console_libraries:录用于存储 Prometheus 的控制台模板使用的库文件
  • consoles:目录是 Prometheus 中存放控制台页面模板的目录,用于通过 Web 界面展示监控数据。
  • data:用于存储Prometheus的磁盘持久化数据。
  • LICENSE:Prometheus的许可证文件。
  • NOTICE:版权声明文件。
  • prometheus:Prometheus 主程序的二进制文件,负责抓取指标、存储时间序列数据、提供查询接口等核心功能。
  • promtool:Prometheus 的工具程序,主要用于验证配置文件和规则文件是否正确。
  • prometheus.yml:配置文件,定义抓取目标(scrape_configs)、告警规则(alerting)以及全局设置(global 等)。这个文件是 Prometheus 的核心配置,所有的监控目标、数据拉取频率、告警规则都在这里定义。

Prometheus 配置信息介绍

prometheus.yml 文件配置的介绍

# 全局配置
global:
  scrape_interval: 15s  	# 抓取间隔(默认是1分钟),每 scrape_interval 从 targets 抓取一次指标
  scrape_timeout: 10s   	# 抓取超时时间,默认为 scrape_interval 的值,scrape_timeout的值要比scrape_interval小
  evaluation_interval: 15s 	# 规则评估的频率(如告警规则、记录规则),默认是1分钟
  external_labels:			# 为所有时间序列数据附加的标签,通常用于多集群或高可用架构。
    region: 'us-east'
    prometheus: 'prometheus-main'
  
# 告警配置
alerting:
  alertmanagers:
  - follow_redirects: true   # 是否 HTTP 重定向
    enable_http2: true		 # 是否启用 HTTP/2 协议以提高通信性能。
    scheme: http			 # 定义与 Alertmanager 通信时使用的协议,这里是 http,也可以是 https。
    timeout: 10s			 # 定义 Prometheus 连接到 Alertmanager 的超时时间,10 秒表示 Prometheus 在 10 秒内无法连接时超时。
    api_version: v2			 # 设置使用的 Alertmanager API 版本,v2 是最新的稳定版本。
    static_configs:			 # 定义 Alertmanager 实例的静态目标
      - targets: ['localhost:9093']  # Alertmanager 的地址(IP 和端口)。
		
# 规则配置,并根据全局的evaluation_interval定期对它们进行评估。
rule_files:
  - "rules.yml"  # 定义 Prometheus 规则文件的路径
  
# Prometheus 最重要的配置,用于定义 Prometheus 从哪些地方抓取指标以及如何抓取。
scrape_configs:
  - job_name: 'example'		 # 抓取任务的名称。一个 job 可以包含多个抓取目标。可以随意命名
    honor_timestamps: true   # 是否启用尊重目标提供的时间戳。如果为 true,Prometheus 将使用目标提供的时间戳,而不是抓取时间的时间戳。
    track_timestamps_staleness: false  # 如果设置为 true,Prometheus 将为没有更新的时间序列创建“陈旧”标记。这里设置为 false,表示不会主动跟踪陈旧时间序列
    scrape_interval: 10s     # 此抓取目标的抓取间隔,覆盖全局设置
    scrape_timeout: 5s       # 此目标的抓取超时时间,覆盖全局设置
    metrics_path: '/actuator/prometheus'  # 指定指标路径
    scheme: http			 # 指定抓取数据使用的协议,这里是 http,如果目标使用 https,需要配置为 https
    enable_compression: true # 启用数据抓取的压缩,以减少网络传输的数据量
    follow_redirects: true	 # 允许 Prometheus 在抓取过程中跟随 HTTP 重定向
    enable_http2: true		 # 启用 HTTP/2 协议,这通常可以提高抓取性能
    static_configs:			 # 静态抓取目标配置,手动定义要抓取的目标(IP 或主机名及端口)
      - targets: ['localhost:9090']  # 要抓取的目标列表(静态配置)
        labels:		# 为该抓取目标添加的额外标签,这些标签将附加到抓取的数据中。
          group: 'production'
		  
  - job_name: 'kubernetes'	 # k8s 服务发现
    kubernetes_sd_configs:	 # 自动发现 Kubernetes 的服务或 pod
      - role: pod			 # 定义要发现的资源类型,例如 pod 或 service
	  
# 将数据远程写入其他存储系统
remote_write:
  - url: "http://remote-prometheus:9090/api/v1/write"
  
# 从其他存储系统中读取数据。
remote_read:
  - url: "http://remote-prometheus:9090/api/v1/read"
  
# 抓取目标数据时,对标签进行动态修改的过程。可以用于过滤、修改、删除或添加标签。
relabel_configs:
  - source_labels: [__address__]	# 从哪些标签中提取值进行 relabel。
    regex: '(.*):9090'				# 正则表达式,用于匹配和提取标签值。
    target_label: 'instance'		# 重命名或修改后的标签名。
    replacement: '$1'				# 匹配后用来替换的内容。
	
# 和 relabel_configs 类似,但它应用于抓取数据后的时间序列上,而非抓取目标本身
metric_relabel_configs:
  - source_labels: [__name__]
    regex: 'http_requests_total'
    action: drop					# 定义如何处理匹配的指标。drop 表示删除匹配的指标,keep 表示保留。
	
# 数据存储配置
storage.tsdb:
  path: "/prometheus"          # 本地存储路径
  retention_time: 15d          # 数据保留时间
  wal_compression: true        # 启用 WAL(Write-Ahead Log)压缩,减小存储占用

# HTTP 服务配置,包含 Web 界面和 API。
web:
  listen_address: ":9090"      # Prometheus Web 服务监听的地址和端口
  external_url: "http://my-prometheus.com/"  # 对外提供访问的 URL

# 允许你配置 Prometheus 的运行时行为,控制内存管理和其他与性能相关的参数
runtime:
  gogc: 75 # 设置 GO语言的垃圾收集器(gc)触发频率,75 表示内存使用量达到75%时执行垃圾回收。


Prometheus 监控 Linux 服务器

监控系统级指标,包括 CPU 使用率、内存使用情况、磁盘使用情况、网络流量等。

需要监控哪台服务器?就把 node_exporter 在那台服务器上安装并运行。

下载 node_exporter,https://prometheus.io/download/

把下载的 node_exporter-1.8.2.linux-amd64.tar.gz 安装包上传到 linux 服务器的 /usr/local 目录下

# 解压
tar -zxvf node_exporter-1.8.2.linux-amd64.tar.gz 

# 解压后的文件夹重命名
mv node_exporter-1.8.2.linux-amd64 node_exporter

启动 node_exporter

node_exporter 的默认端口是 9100

cd /usr/local/node_exporter
./node_exporter

# 守护进程启动
nohup ./node_exporter > node_exporter.log 2>&1 &

访问: http://localhost:9100/metrics     可以查看 node_exporter 的指标


配置 Prometheus 抓取 node_exporter 的数据

prometheus.yml 配置文件中添加 node_exporter 作为抓取目标:

scrape_configs:
  - job_name: 'node_exporter'
    static_configs:
      - targets: ['localhost:9100']    # node_exporter服务所在的路径

重启 prometheus 服务

可以在 Targets 和 Service Discovery 目录下看到对 node_exporter 的监听


Prometheus 监控 MySQL 数据库

监听并暴露 MySQL 数据库的各种性能指标,如查询量、慢查询、连接数、表状态等。

mysqld_exporter 安装运行在哪台服务器上都行,只要确保能连接上需要监控的mysql服务就行。

下载 mysqld_exporter ,https://prometheus.io/download/

把下载的 mysqld_exporter-0.15.1.linux-amd64.tar.gz 安装包上传到 linux 服务器的 /usr/local 目录下

# 解压
tar -zxvf mysqld_exporter-0.15.1.linux-amd64.tar.gz

# 解压后重命名
mv mysqld_exporter-0.15.1.linux-amd64 mysqld_exporter

配置 mysql

mysqld_exporter 需要一个 MySQL 用户来访问数据库,并获取相关的性能指标。您需要创建一个具有适当权限的 MySQL 用户。

登录mysql:

mysql -u root -p

创建一个新的用户(如 mysqld_exporter)并授予权限:

# 账号:mysqld_exporter
# 密码:123456
# '%':表示用户可以从任何主机连接mysql服务,如果只希望该用户从特定的 IP 地址连接(例如 192.168.1.100),请将 '%' 替换为特定的 IP 地址(例如 'mysqld_exporter'@'192.168.1.100')
CREATE USER 'mysqld_exporter'@'%' IDENTIFIED BY '123456';

# 授予权限
GRANT PROCESS, REPLICATION CLIENT, SELECT ON *.* TO 'mysqld_exporter'@'%';

# 刷新权限
FLUSH PRIVILEGES;

配置 .my.cnf,在 mysqld_exporter 执行文件所在目录下新建 .my.cnf 文件,内容如下:

[client]
user=mysqld_exporter
password=123456

启动 mysqld_exporter

cd /usr/local/mysqld_exporter
./mysqld_exporter

# 守护进程启动
nohup ./mysqld_exporter > mysqld_exporter.log 2>&1 &

访问: http://localhost:9104/metrics     可以查看 mysqld_exporter 的指标


配置 Prometheus 抓取 mysqld_exporter 的数据

prometheus.yml 配置文件中添加 mysqld_exporter 作为抓取目标:

scrape_configs:
  - job_name: 'mysqld_exporter'
    static_configs:
      - targets: ['localhost:9104']    # mysqld_exporter服务所在的路径

重启 prometheus 服务

可以在 Targets 和 Service Discovery 目录下看到对 mysqld_exporter 的监听


Prometheus 监控 Redis 数据库

监控 Redis 数据库的性能和状态指标,包括内存使用、连接数、命令执行速率、缓存命中率等,帮助用户了解 Redis 实例的运行状况。

启动 redis_exporter

redis_exporter 由于不是官方提供的,使用命令行的方式启动一堆问题,这里使用 docker 的方式启动 redis_exporter。

拉取 redis_exporter 的 docker 镜像

docker pull oliver006/redis_exporter

docker 运行 redis_exporter

redis_exporter 的默认端口是 9121

# redis在本地主机
docker run -d --name redis_exporter --network="host" oliver006/redis_exporter --redis.addr=redis://localhost:6379 --redis.password=yourpassword

# redis在远程服务器
docker run -d --name redis_exporter -p 9121:9121 oliver006/redis_exporter --redis.addr=redis://192.168.1.100:6379 --redis.password=yourpassword

访问: http://localhost:9121/metrics     可以查看 redis_exporter 的指标


配置 Prometheus 抓取 redis_exporter 的数据

prometheus.yml 配置文件中添加 redis_exporter 作为抓取目标:

scrape_configs:
  - job_name: 'redis_exporter'
    static_configs:
      - targets: ['localhost:9121']    # redis_exporter 服务所在的路径

重启 prometheus 服务

可以在 Targets 和 Service Discovery 目录下看到对 redis_exporter 的监听,报红的表示停止的exporter服务


Prometheus 监控 SpringBoot 项目

SpringBoot 配置 Prometheus

在 pom.xml 中添加 Micrometer Prometheus 和 Spring Boot Actuator 的依赖

<dependency>
	<groupId>io.micrometer</groupId>
	<artifactId>micrometer-registry-prometheus</artifactId>
</dependency>
<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>

application.yml 中启用 Actuator 端点,暴露 /actuator/prometheus 指标。这样 SpringBoot 服务会在 127.0.0.1:8080/actuator/prometheus 暴露 Prometheus 格式的监控指标。

# 用于指定哪些管理端点可以通过 HTTP 公开。
management:
  endpoints:
    web:
      exposure:
        # prometheus 端点对外暴露
        include: prometheus
  endpoint:
    prometheus:
      # prometheus 端点启用
      enabled: true

启动 SpringBoot 项目

访问: http://localhost:8080/actuator 

访问:http://localhost:8080/actuator/prometheus        可以查看 SpringBoo 的指标


配置 Prometheus 抓取 SpringBoot 的指标

prometheus.yml 配置文件中添加 SpringBoot 作为抓取目标:

scrape_configs:
  - job_name: 'springboot-app'
    metrics_path: '/actuator/prometheus'  # 指标的路径
    static_configs:
      - targets: ['localhost:8080']  # SpringBoot 服务地址(ip:端口)

重启 prometheus 服务

可以在 Targets 和 Service Discovery 目录下看到对 SpringBoot 服务的监听,报红的表示停止的exporter服务

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

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

相关文章

基于EPS32C3电脑远程开机模块设计

基于EPS32C3电脑远程开机模块设计 前言 缘起&#xff0c;手头资料太多了&#xff0c;所以想组一台NAS放在家里存储数据。在咸鱼淘了一套J3160主板加机箱&#xff0c;加上几块硬盘组建NAS。 对于NAS&#xff0c;我的需求是不用的时候关机(节省功耗)&#xff0c;要用的时候开机…

每日OJ_牛客_骆驼命名法(递归深搜)

目录 牛客_骆驼命名法&#xff08;简单模拟&#xff09; 解析代码 牛客_骆驼命名法&#xff08;简单模拟&#xff09; 骆驼命名法__牛客网 解析代码 首先一个字符一个字符的读取内容&#xff1a; 遇到 _ 就直接跳过。如果上一个字符是 _ 则下一个字符转大写字母。 #inclu…

【MRI基础】TR 和 TE 时间概念

重复时间 (TR) 磁共振成像 (MRI) 中的 TR&#xff08;重复时间&#xff0c;repetition time&#xff09;是施加于同一切片的连续脉冲序列之间的时间间隔。具体而言&#xff0c;TR 是施加一个 RF&#xff08;射频&#xff09;脉冲与施加下一个 RF 脉冲之间的持续时间。TR 以毫秒…

LEAN 类型理论之注解(Annotations of LEAN Type Theory)-- 小结(Summary)

在证明LEAN类型理论的属性前&#xff0c;先对LEAN类型理论所定义的所有推演规则做一个小结&#xff0c;以便后面推导LEAN类型理论的属性。各部分的注解请查看对应文章。 注&#xff1a;这些都是在《LEAN类型理论》中截取出来的&#xff0c;具体内容&#xff0c;读者可参考该论…

ApacheKafka中的设计

文章目录 1、介绍1_Kafka&MQ场景2_Kafka 架构剖析3_分区&日志4_生产者&消费者组5_核心概念总结6_顺写&mmap7_Kafka的数据存储形式 2、Kafka的数据同步机制1_高水位&#xff08;High Watermark&#xff09;2_LEO3_高水位更新机制4_副本同步机制解析5_消息丢失问…

Redis典型应用 - 分布式锁

文章目录 目录 文章目录 1. 什么是分布式锁 2. 分布式锁的基本实现 3. 引入过期时间 4. 引入校验Id 5. 引入 watch dog(看门狗) 6. 引入redlock算法 工作原理 Redlock的优点&#xff1a; 总结 1. 什么是分布式锁 在一个分布式系统中,也可能会出现多个节点访问一个共…

QT 编译报错:C3861: ‘tr‘ identifier not found

问题&#xff1a; QT 编译报错&#xff1a;C3861&#xff1a; ‘tr’ identifier not found 原因 使用tr的地方所在的类没有继承自 QObject 类 或者在不在某一类中&#xff0c; 解决方案 就直接用类名引用 &#xff1a;QObject::tr( )

关于易优cms自定义字段不显示的问题

今天在该易优cms自定义字段&#xff0c;折腾了大半天没显示出来&#xff0c;原来是改错对方了。 主要引用的时候 要放在list标签内&#xff0c;不要看文档&#xff0c;把addfields 放在list标签上 例如 {eyou:list loop8} <li><a href"{$field.arcurl}">…

基于yolov8的电动车佩戴头盔检测系统python源码+onnx模型+评估指标曲线+精美GUI界面

【算法介绍】 基于YOLOv8的电动车佩戴头盔检测系统利用了YOLOv8这一先进的目标检测模型&#xff0c;旨在提高电动车骑行者的安全意识&#xff0c;减少因未佩戴头盔而导致的交通事故风险。YOLOv8作为YOLO系列的最新版本&#xff0c;在检测速度和精度上均进行了优化&#xff0c;…

✨机器学习笔记(一)—— 监督学习和无监督学习

1️⃣ 监督学习&#xff08;supervised learning&#xff09; ✨ 两种主要类型的监督学习问题&#xff1a; 回归&#xff08;regression&#xff09;&#xff1a;predict a number in infinitely many possible outputs. 分类&#xff08;classification&#xff09;&#xff1…

C#串口助手初级入门

1.创建项目 修改项目名称与位置&#xff0c;点击创建 2.进入界面 在视图中打开工具箱&#xff0c;鼠标拖动&#xff0c;便可以在窗口添加控件&#xff0c;右边可以查看与修改属性 3.解决方案资源管理器 发布之前&#xff0c;需要修改相关的信息&#xff0c;比如版本号&#x…

Lombok jar包引入和用法

大家好&#xff0c;今天分享一个在编写代码时的快捷方法。 当我们在封装实体类时&#xff0c;会使用set、get等一些方法。如下图&#xff0c;不但费事还影响代码的美观。 那么如何才能减少代码的冗余呢&#xff0c;首先lib中导入lombok的jar包并添加库。 此处我已导入&#xf…

插件:清理maven错误缓存.bat

插件&#xff1a;https://pan.baidu.com/s/1nHIxHoo1C4MvFlW7QbZe5Q?pwd7zenhttps://pan.baidu.com/s/1nHIxHoo1C4MvFlW7QbZe5Q?pwd7zen没错误缓存时&#xff1a; 有错误缓存时&#xff1a;

真实案例分享:零售企业如何避免销售数据的无效分析?

在零售业务的数据分析中&#xff0c;无效分析不仅浪费时间和资源&#xff0c;还可能导致错误的决策。为了避免这种情况&#xff0c;企业必须采取策略来确保他们的数据分析工作能够产生实际的商业价值。本文将通过行业内真实的案例&#xff0c;探讨零售企业如何通过精心设计的数…

springboot数据库连接由localhost改成IP以后访问报错500(2024/9/7

步骤很详细&#xff0c;直接上教程 情景复现 一.没改为IP之前正常 二.改完之后报错 问题分析 SQL没开启远程连接权限 解决方法 命令行登入数据库 mysql -u root -p切换到对应数据库 use mysql;设置root用户的连接权限允许其他IP连接数据库 update user set host % whe…

jmeter执行python脚本,python脚本的Faker库

jmeter安装 jython的插件jar包 通过如下地址下载jython-standalone-XXX.jar包并放到jmeter的XXX\lib\ext目录下面 Downloads | JythonThe Python runtime on the JVMhttps://www.jython.org/download.html 重启jmeter在JSR223中找到jython可以编写python代码执行 python造数据…

一种快速生成CSV的方法

事情是这个样子的 在QQ群在聊把如何100万数据导出成CSV文件&#xff1f;会不会很慢&#xff1f; 俺回了一句“现在的机器性能好&#xff0c;没啥问题”。 然后大家开始谈论机器的配置了。哎&#xff0c;俺的机器配置有点差。 然后俺就进行了一个测试。 测试数据 数据定义…

【C++二分查找】2439. 最小化数组中的最大值

本文涉及的基础知识点 C二分查找 LeetCode2439. 最小化数组中的最大值 给你一个下标从 0 开始的数组 nums &#xff0c;它含有 n 个非负整数。 每一步操作中&#xff0c;你需要&#xff1a; 选择一个满足 1 < i < n 的整数 i &#xff0c;且 nums[i] > 0 。 将 num…

C++ | Leetcode C++题解之第392题判断子序列

题目&#xff1a; 题解&#xff1a; class Solution { public:bool isSubsequence(string s, string t) {int n s.size(), m t.size();vector<vector<int> > f(m 1, vector<int>(26, 0));for (int i 0; i < 26; i) {f[m][i] m;}for (int i m - 1; …

.Net6/.Net8(.Net Core) IIS中部署 使用 IFormFile 上传大文件报错解决方案

描述 最近使用.Net6 WebAPI IFormFile对象接收上传文件时大于30MB(兆)的文件就会报错 原因分析 IIS上传文件有大小默认限制大约28.6MB 解决办法 .无论是Net6还是.Net8写法都一样 方法一&#xff1a;IIS可视化操作 1.打开Internet Information Services (llS)管理器&…