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

Prometheus-v2.45.0+Grafana+邮件告警

目录

普罗米修斯监控架构介绍 

Prometheus 监控架构

1. 数据抓取(Scraping)

2. 时序数据库(TSDB)

3. 数据模型

4. PromQL 查询语言

5. 告警(Alerting)

6. Alertmanager

7. 可视化(Visualization)

典型的 Prometheus 监控架构

工作流程

优点

部署安装

配置管理脚本 

使用说明:

启动alertmanager

启动node_exporter

PromQL简单了解

1. 查询所有时间序列的当前值

2. 查询某个指标的最新值

3. 查询某个指标的某个时间范围的平均值

4. 查询某个指标的某个时间范围的最大值

5. 查询 CPU 使用率

6. 使用 count 聚合函数计算数量

安装grafana工具

监控告警 

扩展

续下篇:Prometheus-v2.45.0 + 钉钉告警-CSDN博客


普罗米修斯监控架构介绍 

普罗米修斯(Prometheus)是一款开源的系统监控和报警工具,最初由SoundCloud开发,现在是CNCF(云原生计算基金会)的一部分。它主要用于收集和存储时序数据,通过查询语言PromQL进行查询和分析,并能与多种告警和可视化工具集成。

官方网站: https://prometheus.io/download/

中文文档网站:序言 · Prometheus 中文文档 

https://prometheus.fuckcloudnative.io/

Introduction · Prometheus中文技术文档

Prometheus 监控架构

1. 数据抓取(Scraping)

Prometheus 定期从配置的目标(targets)中抓取指标数据。每个目标是一个HTTP端点,提供实时的监控数据。这些数据通常是以键值对的形式返回的。

2. 时序数据库(TSDB)

抓取的数据被存储在本地的时序数据库中。Prometheus 的存储系统是专门为高效写入和查询时间序列数据而设计的。数据按时间顺序存储,并且支持高效的压缩和检索。

3. 数据模型

Prometheus 使用多维数据模型(dimensional data model),每条时间序列数据(metric)由一个度量名(metric name)和一组标签(labels)唯一标识。标签是键值对,可以用来区分相同度量名下的不同实例。

4. PromQL 查询语言

Prometheus 提供了一种功能强大的查询语言PromQL,用于实时查询时序数据。PromQL 支持丰富的查询操作,包括聚合、过滤和数学运算等。

5. 告警(Alerting)

Prometheus 允许用户定义告警规则,这些规则会在指定条件满足时触发。告警规则是用PromQL定义的,可以基于实时数据生成告警。告警触发后会被发送到Alertmanager进行处理。

6. Alertmanager

Alertmanager 是 Prometheus 的告警管理组件,负责接收、去重、分组和路由告警通知。它还可以将告警发送到各种通知渠道,如电子邮件、Slack、PagerDuty等。

7. 可视化(Visualization)

Prometheus 自带一个简单的网页UI,用于查看和查询数据。然而,更强大和广泛使用的可视化工具是Grafana。Grafana 可以连接Prometheus,提供丰富的图表和仪表盘,用于展示监控数据。

典型的 Prometheus 监控架构

  1. Prometheus Server

    • 负责抓取和存储时序数据。
    • 处理查询请求,并执行PromQL查询。
  2. Exporter

    • 各种服务或应用程序的监控数据导出工具(如Node Exporter、MySQL Exporter等)。
    • 提供HTTP端点,供Prometheus抓取数据。
  3. Pushgateway

    • 用于临时性批量任务的监控数据推送。
    • 允许短期任务主动将数据推送到Prometheus。
  4. Alertmanager

    • 管理和处理告警。
    • 支持告警去重、分组和路由,集成多种通知渠道。
  5. Grafana

    • 可视化工具,用于展示Prometheus数据。
    • 支持丰富的图表类型和自定义仪表盘。

工作流程

  1. 数据抓取:Prometheus 定期从配置的目标(通常是Exporter提供的HTTP端点)中抓取监控数据。
  2. 数据存储:抓取的数据被存储在Prometheus的本地时序数据库中。
  3. 数据查询:用户可以通过Prometheus的网页UI或Grafana使用PromQL查询数据。
  4. 告警触发:Prometheus根据定义的告警规则评估数据,当条件满足时触发告警。
  5. 告警处理:告警被发送到Alertmanager进行处理,并通知相关人员或系统。
  6. 数据可视化:通过Grafana等工具,用户可以将数据展示在仪表盘上,实现实时监控和分析。

优点

  • 高效的数据存储和查询:专为时序数据设计的存储系统,支持高效的压缩和检索。
  • 强大的查询语言:PromQL 提供了强大的查询和分析能力。
  • 灵活的告警系统:支持复杂的告警规则和多种通知方式。
  • 易于扩展和集成:支持多种Exporter和可视化工具,易于集成到现有系统中。

部署安装

https://prometheus.io/docs/instrumenting/exporters/

本文软件包链接:https://pan.baidu.com/s/1b3AzJBNtIt1PfjNi1eE7fg?pwd=jcj8 
提取码:jcj8 

上传如下四个工具压缩包到/opt/目录中

[root@localhost ~]# cd /opt && ll
total 247532
-rw-r--r-- 1 root root  29717412 Apr 24 00:04 alertmanager-0.26.0.linux-amd64.tar.gz
-rw-r--r-- 1 root root 122184924 Jul 19 04:56 grafana-enterprise-11.1.0-1.x86_64.rpm
-rw-r--r-- 1 root root  10368103 Apr 24 00:04 node_exporter-1.6.1.linux-amd64.tar.gz
-rw-r--r-- 1 root root  91189594 Apr 24 00:04 prometheus-2.45.0.linux-amd64.tar.gz

解压 Prometheus 安装包

[root@localhost opt]# tar -xf prometheus-2.45.0.linux-amd64.tar.gz

解压后改个给目录改个短点的名字方便,并进入 prometheus 目录

[root@localhost prometheus]# ll
total 227312
-rw-r--r-- 1 1001 docker     11357 Jun 23  2023 LICENSE
-rw-r--r-- 1 1001 docker      3773 Jun 23  2023 NOTICE
drwxr-xr-x 2 1001 docker        38 Jun 23  2023 console_libraries
drwxr-xr-x 2 1001 docker       173 Jun 23  2023 consoles
-rwxr-xr-x 1 1001 docker 119846310 Jun 23  2023 prometheus
-rw-r--r-- 1 1001 docker       934 Jun 23  2023 prometheus.yml
-rwxr-xr-x 1 1001 docker 112896008 Jun 23  2023 promtool解释:
LICENSE:包含 Prometheus 项目的开源许可证信息。通常是 Apache License 2.0 或类似的许可证。
NOTICE:包含与 Prometheus 相关的法律通知和版权声明。
console_libraries:这个目录包含一些 JavaScript 库,用于支持 Prometheus 控制台模板的功能。
consoles:这个目录包含多个 HTML 模板文件,这些模板用于生成 Prometheus 的控制台视图。控制台视图可以在 Prometheus 的 Web UI 中用于展示各种监控数据。
prometheus:Prometheus 的主可执行文件。运行这个文件会启动 Prometheus 服务器,开始抓取和存储监控数据。
prometheus.yml:Prometheus 的主要配置文件。定义了抓取配置(scrape configuration)、告警规则(alerting rules)、告警管理配置(alertmanager configuration)等。是 Prometheus 运作的核心文件。
promtool:Prometheus 提供的一个命令行工具,用于检查配置文件的语法、执行查询、检查告警规则等。对于调试和管理 Prometheus 非常有用。

注意:

prometheus端口默认是9090,如果在你的rocky_linux9.4系统上,9090端口已经被占用,需将其关闭,如果是系统自带的会启动9090端口,在rocky中一般是其web管理页面的服务端口,执行下述命令,将其关掉

# 禁用并立即停止 Cockpit 服务和相关的 socket
systemctl disable --now cockpit cockpit.socket

启动 Prometheus 服务

[root@localhost prometheus]# ./prometheus# 使用nohup ./prometheus & 命令可后端运行,并会在当前目录生成nohup.out存储日志,而原本prometheus是没有日志的。

访问ip+端口,例如我这里访问:http://192.168.226.29:9090/

http://192.168.226.29:9090/metrics

这个路径会显示 Prometheus 自身的监控指标(metrics)。这些指标包含了 Prometheus 自身的性能和健康状况信息,并且以文本格式展示。

配置管理脚本 

[root@localhost prometheus]# vim /usr/local/bin/prometheus.sh
#!/bin/bash
# **********************************************************
# * File Name     : prometheus.sh
# * Author        : zzdict
# * Email         : zzdict@gmail.com / elk_deer@foxmail.com
# * Create time   : 2024-08-01 15:12
# * Description   : prometheus管理脚本
# **********************************************************
# Prometheus 的安装路径
PROMETHEUS_PATH="/opt/prometheus"
PROMETHEUS_BINARY="$PROMETHEUS_PATH/prometheus"
PROMETHEUS_CONFIG="$PROMETHEUS_PATH/prometheus.yml"
PROMETHEUS_PID_FILE="$PROMETHEUS_PATH/prometheus.pid"start() {if [ -f "$PROMETHEUS_PID_FILE" ]; thenecho "Prometheus 已经在运行。"returnfiecho "启动 Prometheus..."nohup "$PROMETHEUS_BINARY" --config.file="$PROMETHEUS_CONFIG" > "$PROMETHEUS_PATH/prometheus.log" 2>&1 &echo $! > "$PROMETHEUS_PID_FILE"echo "Prometheus 启动成功。"
}stop() {if [ ! -f "$PROMETHEUS_PID_FILE" ]; thenecho "Prometheus 没有运行。"returnfiecho "停止 Prometheus..."PID=$(cat "$PROMETHEUS_PID_FILE")kill "$PID"rm -f "$PROMETHEUS_PID_FILE"echo "Prometheus 停止成功。"
}restart() {echo "重启 Prometheus..."stopstart
}status() {if [ -f "$PROMETHEUS_PID_FILE" ]; thenecho "Prometheus 正在运行。"elseecho "Prometheus 没有运行。"fi
}case "$1" instart)start;;stop)stop;;restart)restart;;status)status;;*)echo "用法: $0 {start|stop|restart|status}"exit 1;;
esac

加上执行权限 

[root@localhost prometheus]# chmod +x /usr/local/bin/prometheus.sh

创建符号链接

[root@localhost prometheus]# ln -s /usr/local/bin/prometheus.sh /usr/local/bin/prometheus

使用说明:

  • prometheus start:启动 Prometheus,如果已经运行则输出提示信息。
  • prometheus stop:停止 Prometheus,如果没有运行则输出提示信息。
  • prometheus restart:重启 Prometheus,先停止再启动。
  • prometheus status:检查 Prometheus 的运行状态。

本文配置systemd管理方式示例见:自定义的 systemd 服务启动方式-CSDN博客

启动alertmanager

[root@localhost opt]# cd /opt
[root@localhost opt]# tar -xf alertmanager-0.26.0.linux-amd64.tar.gz
[root@localhost opt]# mv alertmanager-0.26.0.linux-amd64 alertmanager

[root@localhost alertmanager]# ll
total 62504
-rw-r--r-- 1 3434 3434    11357 Aug 24  2023 LICENSE
-rw-r--r-- 1 3434 3434      457 Aug 24  2023 NOTICE
-rwxr-xr-x 1 3434 3434 35410965 Aug 24  2023 alertmanager
-rw-r--r-- 1 3434 3434      356 Aug 24  2023 alertmanager.yml
-rwxr-xr-x 1 3434 3434 28566971 Aug 24  2023 amtool解释:
LICENSE:许可证文件,包含软件的许可证信息和条款,通常用来说明使用和分发软件的法律条款。NOTICE:通知文件,通常包含有关软件的额外版权信息、贡献者声明、以及其他法律声明。alertmanager:主执行文件,Alertmanager 的可执行程序。用于启动 Alertmanager 服务,该服务负责处理来自 Prometheus 的警报并执行相应的通知和静默操作。alertmanager.yml:配置文件,用于配置 Alertmanager 的行为,包括警报路由、接收器和静默规则。你需要根据你的环境配置这个文件,以确保 Alertmanager 能够正确处理和通知警报。amtool:工具程序,提供了一个命令行工具用于与 Alertmanager 进行交互,例如检查和管理警报。这个工具可以用来验证 Alertmanager 的配置和状态。

启动alertmanager

[root@localhost alertmanager]# ./alertmanager# 后端运行的命令 nohup ./alertmanager &

 alertmanager会使用9093和9094端口,可新开一个终端查看

[root@localhost alertmanager]# ss -tnlp
State          Recv-Q         Send-Q                 Local Address:Port                 Peer Address:Port        Process                                        
LISTEN         0              128                          0.0.0.0:22                        0.0.0.0:*            users:(("sshd",pid=819,fd=3))                 
LISTEN         0              128                             [::]:22                           [::]:*            users:(("sshd",pid=819,fd=4))                 
LISTEN         0              4096                               *:9093                            *:*            users:(("alertmanager",pid=6146,fd=8))        
LISTEN         0              4096                               *:9094                            *:*            users:(("alertmanager",pid=6146,fd=3))        
LISTEN         0              4096                               *:9090                            *:*            users:(("prometheus",pid=6110,fd=7)) 

配置prometheus中prometheus.yml文件连接alertmanager通信

重启prometheus

[root@localhost alertmanager]# prometheus restart

注: 如果起不了服务,注意配置格式与参数,打不开网页建议清理缓存后重新访问或者换个浏览器打开 

启动node_exporter

[root@localhost alertmanager]# cd /opt
[root@localhost opt]# tar -xf node_exporter-1.6.1.linux-amd64.tar.gz 
[root@localhost opt]# mv node_exporter-1.6.1.linux-amd64 node_exporter[root@localhost opt]# cd node_exporter
# 后台启动
[root@localhost node_exporter]# nohup ./node_exporter &

同理,将 node_exporter-1.6.1.linux-amd64 给另一台虚拟机192.168.226.28拷贝过去并依照上述运行node_exporter 这个主机运行node_exporter后就暂时不用操作了。

配置prometheus中prometheus.yml文件采集两台虚拟机的node_exporter数据

现在是在prometheus的主机中配置

[root@localhost node_exporter]# vim /opt/prometheus/prometheus.yml- job_name: 'node_exporter'static_configs:- targets: ["192.168.226.29:9100","192.168.226.28:9100"]

重启prometheus

[root@localhost node_exporter]# prometheus restart

 

PromQL简单了解

查询页面在prometheus的web页面的Graph中

Prometheus 查询语言(PromQL)用于从 Prometheus 中检索和处理时间序列数据。以下是一些常见的 PromQL 查询示例:

1. 查询所有时间序列的当前值

up

说明:这个查询会显示所有被 Prometheus 监控的目标的状态(1 表示正常,0 表示异常)。

2. 查询某个指标的最新值

node_cpu_seconds_total

说明:这会显示 node_cpu_seconds_total 指标的所有时间序列的最新值。

3. 查询某个指标的某个时间范围的平均值

avg_over_time(node_cpu_seconds_total[5m])

说明:计算过去 5 分钟内 node_cpu_seconds_total 指标的平均值。

4. 查询某个指标的某个时间范围的最大值

max_over_time(node_cpu_seconds_total[1h])

说明:计算过去 1 小时内 node_cpu_seconds_total 指标的最大值。

5. 查询 CPU 使用率

100 - (avg(irate(node_cpu_seconds_total{mode="idle"}[5m])) * 100)

说明:计算 CPU 使用率,假设 node_cpu_seconds_total 指标中 mode 标签为 "idle" 的时间序列表示 CPU 空闲时间。

6. 使用 count 聚合函数计算数量

count(node_filesystem_free_bytes) by (instance)

说明:计算每个 instancenode_filesystem_free_bytes 指标的时间序列数量。

安装grafana工具

Grafana 起源于 2014 年,由 Torkel Ödegaard 创建。他最初开发 Grafana 是为了填补当时可用的可视化工具中的一些空白,特别是在对时序数据的可视化方面。Grafana 起初是作为对 Graphite(一种流行的时序数据库)数据的可视化工具开发的,但很快它的功能和支持的后端数据源扩展到了包括 PrometheusInfluxDBElasticsearchMySQL 等在内的多种数据源。

Grafana 的主要目的是提供一个强大且灵活的仪表盘和可视化平台,用于监控和分析来自不同数据源的数据。它的用户界面允许用户创建复杂的图表、表格和警报,使得对实时和历史数据的分析更加直观和易于操作。

Grafana 是用 Go 语言(也称为 Golang)编写的。Grafana 是一个开源的数据可视化和监控平台,用于创建交互式仪表板,支持多种数据源(如 Prometheus、InfluxDB、Elasticsearch 等)的数据查询和展示。

[root@localhost node_exporter]# cd /opt
[root@localhost opt]# yum localinstall -y grafana-enterprise-11.1.0-1.x86_64.rpm

 启动grafana

[root@localhost opt]# systemctl enable --now grafana-server

默认用户名:admin 密码密码:admin      登录后需要修改密码

设置中文

添加prometheus数据源

设置数据源链接地址,填入后,下滑底部点击保存。

 

来到官方网站:https://grafana.com/grafana/dashboards/ 

选择一款 prometheus 模板

拷贝这个仪表板ID使用,如果担心后期该模板下架,可以下在该仪表板json文件 

导入仪表板

 起名并选择数据源,然后导入即可。

导入后仪表板展示如下:

监控告警 

[root@localhost ~]# cd /opt/alertmanager
[root@localhost alertmanager]# vim alertmanager.yml
# 定义邮件通知模板的路径,可以是模板文件的目录,支持通配符 *.tmpl
global:resolve_timeout: 5msmtp_from: '2578515263@qq.com' # 发件⼈,显示在邮件页面,显示是谁发的smtp_smarthost: 'smtp.qq.com:465' # 邮箱服务器的POP3/SMTP 主机配置 smtp.163.com 或 smtp_auth_username: '2578515263@qq.com' # ⽤⼾名,真实发件人smtp_auth_password: 'ktqayhvipnklojhq' # 授权码smtp_require_tls: falsetemplates:                - /opt/alertmanager/tmpl/*.tmpl   #定义邮件模板的路径# 设置路由规则,指定如何分组和发送警报
route:group_by: ['alertname']      # 根据警报名称进行分组,确保同一类型的警报被归为一组group_wait: 30s             # 当一个警报组内的警报发生后,等待 30 秒,以便将它们一起发送group_interval: 5m          # 每 5 分钟发送一次警报组repeat_interval: 1h         # 如果警报仍然处于活动状态,每小时重复发送一次receiver: 'email-notifications'  # 默认使用 'email-notifications' 接收者来发送警报通知# 定义接收者配置,包括电子邮件通知设置
receivers:
# 优先使用这里的配置规则,如果没有则去global里的设置- name: 'email-notifications'  # 接收者名称,用于路由规则中的指定email_configs:- to: 'zzdict@gmail.com'   # 收件人的电子邮件地址from: '2578515263@qq.com' # 发件人的电子邮件地址smarthost: 'smtp.qq.com:25'  # SMTP 服务器地址和端口auth_username: '2578515263@qq.com'  # SMTP 服务器的用户名auth_password: 'ktqayhvipnklojhq'    # SMTP 服务器的密码html: '{{ template "email.html" . }}'  # 使用指定的邮件模板# 定义抑制规则,用于控制警报的触发和抑制
inhibit_rules:- source_match:severity: 'critical'  # 匹配来自严重性为 'critical' 的警报target_match:severity: 'warning'  # 匹配目标严重性为 'warning' 的警报equal: ['alertname', 'dev', 'instance']  # 仅当警报名称、标签 'dev' 和 'instance' 均匹配时抑制

创建邮件模板的目录存放

[root@localhost alertmanager]# mkdir ./tmpl/
[root@localhost alertmanager]# vim ./tmpl/email.tmpl
{{ define "email.html" }}
<!DOCTYPE html>
<html>
<head><style>table {border-collapse: collapse;width: 80%;margin: 20px auto;}th, td {border: 1px solid #ddd;padding: 8px;text-align: left;}th {background-color: #f2f2f2;}h1 {text-align: center;}.alert-details {margin-top: 20px;}.alert-item {border: 1px solid #ddd;padding: 10px;margin-bottom: 10px;background-color: #f9f9f9;}</style>
</head>
<body><h1>监控报警通知</h1><table><tr><th>告警状态</th><th>告警级别</th><th>告警类型</th><th>告警应用</th><th>告警主机</th><th>告警详情</th><th>触发阀值</th><th>告警时间</th></tr>{{ range $i, $alert := .Alerts }}<tr><td>{{ .Status }}</td><td>{{ $alert.Labels.severity }}</td><td>{{ $alert.Labels.alertname }}</td><td>{{ $alert.Annotations.summary }}</td><td>{{ $alert.Labels.instance }}</td><td>{{ $alert.Annotations.description }}</td><td>{{ $alert.Annotations.value }}</td><td>{{ $alert.StartsAt.Format "2006-01-02 15:04:05" }}</td></tr>{{ end }}</table>
</body>
</html>
{{ end }}

重启alertmanager

[root@localhost alertmanager]# pkill alertmanager
[root@localhost alertmanager]# nohup ./alertmanager &

设置监控项

[root@localhost alertmanager]# cd /opt/prometheus
# 创建规则文件存放目录
[root@localhost prometheus]# mkdir ./rules/[root@localhost prometheus]# vim prometheus.yml 
rule_files:- "/opt/prometheus/rules/disk.yml"

改动位置见图

告警规则配置 

[root@localhost prometheus]# vim ./rules/disk.yml
groups:- name: 'disk-usage-alerts'# 这是告警组的名称rules:- alert: DiskSpaceUsageHigh# 这是告警规则的名称expr: 100 - (node_filesystem_avail_bytes / node_filesystem_size_bytes * 100) > 50# 告警表达式检查磁盘使用率是否超过50%for: 5m# 如果条件持续5分钟,则触发告警labels:severity: 'warning'# 为告警添加标签,指定严重性为“警告”annotations:summary: '磁盘使用率过高 {{ $labels.instance }}'# 摘要注释,描述告警的内容,包括实例名称

重启prometheus

[root@localhost prometheus]# prometheus restart

这里已经捕获到一个满足告警条件的指标,在等待配置的规则,在规则中定义了持续五分钟就会触发告警。

等待规则中定义的五分钟后,即收到邮件告警,刷新看监控web网页

扩展

遇到下图报错,需要把服务器的时间同步一下,刷新网页即可。

systemctl restart chronyd

相关文章:

Prometheus-v2.45.0+Grafana+邮件告警

目录 普罗米修斯监控架构介绍 Prometheus 监控架构 1. 数据抓取&#xff08;Scraping&#xff09; 2. 时序数据库&#xff08;TSDB&#xff09; 3. 数据模型 4. PromQL 查询语言 5. 告警&#xff08;Alerting&#xff09; 6. Alertmanager 7. 可视化&#xff08;Visu…...

LeetCode——572. 另一颗树的子树

通过万岁&#xff01;&#xff01;&#xff01; 题目&#xff1a;给你两棵树&#xff0c;然后问subRoot是不是root的子树。也就是root某个节点的所有孩子节点在值和结构上完全与subRoot相同。思路&#xff1a;我的思路比较简单&#xff0c;就是遍历root&#xff0c;遇到root中…...

Spring Boot整合MyBatis-Flex

说明&#xff1a;MyBatis-Flex&#xff08;官网地址&#xff1a;https://mybatis-flex.com/&#xff09;&#xff0c;是一款数据访问层框架&#xff0c;可实现项目中对数据库的访问&#xff0c;类比MyBatis-Plus。本文介绍&#xff0c;在Spring Boot项目整合MyBatis-Flex。 创…...

重塑未来体验:边缘计算与云原生的完美邂逅

&#x1f407;明明跟你说过&#xff1a;个人主页 &#x1f3c5;个人专栏&#xff1a;《未来已来&#xff1a;云原生之旅》&#x1f3c5; &#x1f516;行路有良友&#xff0c;便是天堂&#x1f516; 目录 一、引言 1、云原生的兴起 2、边缘计算的兴起 二、边缘计算基础 …...

浅谈基础数论(c++)

目录 一些常见的符号表示阶乘定理 快速幂模板题代码扩展&#xff1a;矩阵快速幂主要作用 欧拉函数扩展积性函数 欧拉函数求法筛选法求欧拉函数&#xff08;积性函数&#xff09; 扩展欧几里得裴蜀定理问题分析代码 问题分析 同余与逆元如何求解逆元扩展欧几里得 例题讲解X-Magi…...

jdk 17新特性 sealed 关键字

通俗理解 sealed 关键字就是给对象继承加了权限控制一样&#xff0c;你必须在我的规则范围内才可以继承我的类 使用 permits 关键字控制允许哪些子类继承 子类必须加以下三个关键字&#xff1a; final 最终继承类&#xff08;继承到这个类就不允许再往下继承了&#xff09;n…...

在仪器计量校准中,无尘车间洁净室检测有哪些方法和流程?

仪器计量校准行业内&#xff0c;无尘车间洁净室检测可以说是较为热门的业务&#xff0c;因为其预算高&#xff0c;且检测流程不是太繁琐&#xff0c;很多仪器计量校准机构也是设立相关实验室&#xff0c;专门处理相关仪器的检测。不过虽然许多机构想要涉足该领域&#xff0c;但…...

【跨时代】第四次工业革命彻底来袭!什么是AI+

你有没有一种很割裂的感觉&#xff0c;就是在短视频里&#xff0c;AI已经要改变全世界了 但自己一用&#xff0c;却发现只能和AI聊聊天 画几张图 难道是姿势不对&#xff1f;但具体是哪里不对呢。 作为一个老牌程序员&#xff0c;我前面分享了很多计算机相关内容&#xff0c;总…...

前端性能优化-纲领篇

前端性能优化 本模块将梳理前端性能优化的相关知识点 从浏览器输入 URL 到页面展示发生了什么 完整版请查看[Browser_网络_安全]的部分&#xff0c;这里只是简单的梳理一下 DNS 解析TCP 连接浏览器发出 HTTP 请求服务器处理请求并返回 HTTP 报文浏览器解析渲染页面 性能优…...

深度学习-----------数值稳定性

目录 神经网络的梯度数值稳定性的常见两个问题例子&#xff1a;MLP 梯度爆炸梯度爆炸的问题 梯度消失梯度消失的问题 总结模型初始化和激活函数让训练更加稳定让每层的方差是一个常数 权重初始化正向均值和方差正向均值正向方差 反向均值和方差Xavier初始正向和反向的均值和方差…...

SpringBoot项目接口可以承受的调用次数

一个Spring Boot接口能够承受的调用次数主要取决于几个因素&#xff0c;包括但不限于&#xff1a; 服务器硬件&#xff1a;CPU、内存、硬盘I/O速度以及网络带宽都会直接影响接口的处理能力和并发量。操作系统和JVM配置&#xff1a;操作系统调度策略、JVM的内存分配、垃圾回收机…...

抽象代数精解【8】

文章目录 希尔密码矩阵矩阵基本概念行列式基本概念特殊矩阵关于乘法运算构成群 加解密原理密钥加密函数解密函数 Z 26 上的运算&#xff08; Z 256 与此类似&#xff09; Z_{26}上的运算&#xff08;Z_{256}与此类似&#xff09; Z26​上的运算&#xff08;Z256​与此类似&…...

数据结构与算法 - 二叉树

1. 概述 二叉树是这么一种树状结构&#xff1a;每个节点最多有两个孩子&#xff0c;左孩子和右孩子 完全二叉树&#xff1a;是一种二叉树结构&#xff0c;除了最后一层以外&#xff0c;每一层都必须填满&#xff0c;填充时要遵循从左到右 平衡二叉树&#xff1a;是一种二叉树…...

Spring Cloud Gateway如何给一个请求加请求头

在Spring Cloud Gateway中&#xff0c;可以通过编写一个GlobalFilter来给所有请求加请求头&#xff0c;或者通过编写一个SpecificFilter来给特定路径的请求加请求头。 全局过滤器&#xff08;GlobalFilter&#xff09;的实现方式如下&#xff1a; Configuration public class…...

chromedriver版本下载地址汇总chromedriver所有版本下载地址汇总国内源下载

谷歌浏览器版本经常会升级&#xff0c;chromedriver 也得下载匹配的版本 chromedriver 114以前版本下载地址https://registry.npmmirror.com/binary.html?pathchromedriver/ windows版本请访问链接&#xff1a;https://blog.csdn.net/FL1768317420/article/details/139712108 …...

Go语言与Windows系统

1.获取屏幕尺寸 源自&#xff1a;Golang通过使用GetSystemMetrics获取系统的分辨率 - 完美代码 (perfcode.com) package mainimport ("syscall""fmt" )const (SM_CXSCREEN uintptr(0) // X Size of screenSM_CYSCREEN uintptr(1) // Y Size of screen …...

JAVA—面向对象编程高级

学习了一定基础后&#xff0c;开始更加深入的学习面向对象&#xff0c;包含static,final两个关键字&#xff0c;面向对象编程三大特征之继承和多态。以及对于抽象类&#xff0c;内部类&#xff0c;接口&#xff0c;枚举&#xff0c;泛型的学习。 目录 1.static &#xff08;…...

[BJDCTF2020]Mark loves cat1

打开题目 发现这么多链接&#xff0c;以为要一点点去找功能上的漏洞。当你源代码&#xff0c;dirsearch&#xff0c;抓包等等操作之后&#xff0c;发现什么都没有。所以这题又是一道源码泄露题&#xff0c;上GItHack。扫描结果如下 http://63f29a80-e08b-43ae-a6d0-8e70fb02ea…...

微信答题小程序产品研发-用户操作流程设计

在答题小程序中&#xff0c;用户流程是指用户从进入小程序开始&#xff0c;到完成答题、查看结果、进行练习等一系列操作的步骤。 这里我画了一张用户流程图&#xff0c;展示用户在小程序中的主要操作流程。以及对每个步骤的详细说明。这里分两种角色&#xff0c;用户和管理员…...

目标检测——YOLOv10: Real-Time End-to-End Object Detection

YOLOv10是在YOLOv8的基础上&#xff0c;借鉴了RT-DETR的一些创新点改进出来的 标题&#xff1a;YOLOv10: Real-Time End-to-End Object Detection论文&#xff1a;https://arxiv.org/pdf/2405.14458源码&#xff1a;https://github.com/THU-MIG/yolov10 1. 论文介绍 在过去的几…...

堡垒机简单介绍

堡垒机&#xff08;Bastion Host&#xff09;&#xff0c;也被称为跳板机、跳板服务器或堡垒服务器&#xff0c;是一种在网络安全中扮演重要角色的设备或服务。以下是关于堡垒机的详细介绍&#xff1a; 一、定义与功能 堡垒机是一种用于控制和管理网络安全的重要工具&#xf…...

【星闪开发连载】WS63E 星闪开发板和hi3861开发板的对比

此次星闪开发者体验官活动使用的开发板都是NearLink_DK_WS63E开发板&#xff0c;它和NearLink_DK_WS63开发板的区别在于具有雷达感知功能。从开发板的照片也可以看到WS63E有一个雷达天线接口。 我们把WS63E开发板和hi3861开发板的功能做了简单的对比&#xff0c;见下表。 参数…...

Python接口自动化测试框架(实战篇)-- Jenkins持续集成

文章目录 一、前言二、[Jenkins](https://www.jenkins.io/)2.1、环境搭建2.2、插件准备2.3、创建job2.4、小结2.5、构建策略2.6、报告展示2.7、扩展三、总结一、前言 温馨提示:在框架需要集成jenkins的时候,一定要注意环境切换问题,如果jenkins和开发环境是同样的系统且都有…...

【leetcode】根据二叉树创建字符串、二叉树的前中后遍历(非递归链表实现二叉树)

Hi~&#xff01;这里是奋斗的明志&#xff0c;很荣幸您能阅读我的文章&#xff0c;诚请评论指点&#xff0c;欢迎欢迎 ~~ &#x1f331;&#x1f331;个人主页&#xff1a;奋斗的明志 &#x1f331;&#x1f331;所属专栏&#xff1a;数据结构、LeetCode专栏 &#x1f4da;本系…...

【RabbitMQ】RabbitMQ交换机概述

一、交换机的类型 RabbitMQ提供了以下四种主要类型的交换机&#xff1a; 直连交换机&#xff08;Direct Exchange&#xff09; 特点&#xff1a;直连交换机是最基本的交换机类型&#xff0c;它根据完全匹配的路由键&#xff08;Routing Key&#xff09;将消息路由到绑定的队列…...

ROS2从入门到精通4-6:路径平滑插件开发案例(以B样条曲线平滑为例)

目录 0 专栏介绍1 ROS2路径平滑器介绍2 平滑器插件编写模板2.1 构造平滑器插件类2.2 注册并导出插件2.3 编译与使用插件 3 基于B样条曲线的路径平滑 0 专栏介绍 本专栏旨在通过对ROS2的系统学习&#xff0c;掌握ROS2底层基本分布式原理&#xff0c;并具有机器人建模和应用ROS2…...

Tensorflow训练视觉模型(CPU)

目录 零、模型下载 一、清理C盘 二、 配置环境 三、运行项目前提操作 &#xff08;1&#xff09;根据自己的项目设置路径。每次激活虚拟环境&#xff08;tensorflow115&#xff09;都得重设一次 &#xff08;2&#xff09;执行setup 这个项目的路径移动了位置也需要重设一…...

从根儿上学习spring 十 之run方法启动第四段(4)

我们接着上一节已经准备开始分析AbstractAutowireCapableBeanFactory#doCreateBean方法&#xff0c;该方法是spring真正开始创建bean实例并初始化bean的入口方法&#xff0c;属于核心逻辑&#xff0c;所以我们新开一节开始分析。 图12 图12-530到536行 这几行的主要就是创建b…...

如果我的发明有修改,需要如何处理?

如果我的发明有修改&#xff0c;需要如何处理&#xff1f;...

java:File与MultipartFile互转

1 概述 当我们在处理文件上传的功能时&#xff0c;通常会使用MultipartFile对象来表示上传的文件数据。然而&#xff0c;有时候我们可能已经有了一个File对象&#xff0c;而不是MultipartFile对象&#xff0c;需要将File对象转换为MultipartFile对象进行进一步处理。 在Java中…...