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

【云原生】Prometheus整合Alertmanager告警规则使用详解

目录

一、前言

二、Altermanager概述

2.1 什么是Altermanager

2.2 Altermanager使用场景

三、Altermanager架构与原理

3.1 Altermanager使用步骤

3.2 Altermanager工作机制

3.3 Altermanager在Prometheus中的位置

四、Altermanager部署与接入Prometheus

4.1 Altermanager部署过程

4.1.1 获取安装包

4.1.2 安装包解压

4.1.3 启动alertmanager服务

4.1.4 访问Altermanager

4.1.5 Altermanager核心配置文件介绍

4.2 Altermanager接入Prometheus

4.2.1 配置alert target

4.2.2 配置Altermanager监控指标

4.2.3 访问Prometheus

4.3 监控node_exporter

4.3.1 创建rule(规则)目录和规则文件

4.3.2 修改prometheus.yml

4.3.3 重启Prometheus

4.3.4 测试告警规则

五、Alertmanager配置告警推送

5.1 Alertmanager配置邮箱告警通知

5.1.1 注册QQ邮箱

5.1.2 开启SMTP服务

5.1.3 配置alertmanager.yml

5.1.4 重载配置文件

5.1.5 效果验证

5.2 Alertmanager配置钉钉告警通知

5.2.1 配置钉钉机器人

5.2.2 获取钉钉webhook插件包

5.2.3 修改配置文件信息并启动服务

5.2.4 使用docker的方式安装

5.2.5 修改altermanager的配置

5.2.6 重启altermanager服务

5.2.7 补充说明

六、写在文末


一、前言

在之前的文章中我们介绍了Prometheus的搭建与使用,以及如何配置监控常用的中间件,并基于Grafana对监控的服务指标信息进行可视化展现,接下来问题来了,人们不可能24小时都盯着展示的大屏看数据,是否有某种机制,或者某种方式,比如可以配置某项指标的阈值,一旦当这个指标达到阈值时,能通过一些通知方式将告警信息主动推送给相应的人员呢?这就是本文要分享的关于AlterManager的使用。

二、Altermanager概述

2.1 什么是Altermanager

Alertmanager是Prometheus监控系统的一个重要组成部分,主要用于处理由Prometheus服务器生成的警报。虽然Prometheus本身能够检测到指标阈值的违反情况并触发警报,但它并不直接负责警报的后续处理和通知。这就是Alertmanager介入的地方。具体来说,其主要功能特性如下:

  • 警报接收与处理:Alertmanager接收来自Prometheus的警报,并对其进行进一步的处理,包括去重、分组、抑制和静默等;

  • 去重:同一警报可能会因为网络问题或Prometheus的重试机制而被重复发送,Alertmanager会确保每个警报只被处理一次;

  • 分组:Alertmanager可以将类似的警报合并在一起,减少警报的总数量,避免在大量警报出现时造成通知过载;

  • 抑制与静默:Alertmanager支持设置抑制规则,在一定时间内不发送重复的警报,以及静默规则,用于在特定时间或条件下暂停警报的发送,例如在预定的维护窗口期间;

  • 路由:警报可以按照定义好的路由规则被发送到不同的接收者,这使得可以针对不同的警报类型或严重级别选择合适的响应团队;

  • 通知:Alertmanager支持多种通知渠道,包括电子邮件、短信、Slack、Telegram、Webhooks等,以确保警报可以快速准确地送达相关人员;

2.2 Altermanager使用场景

Alertmanager 在多种场景下都能发挥关键作用,特别是在企业级应用和云原生环境中。以下是 Alertmanager 的一些典型使用场景:

  • 生产环境监控

    • Alertmanager 可与 Prometheus 或其他监控系统集成,用于实时监控生产环境中的各项指标,如服务器负载、应用程序性能、数据库状态等。当检测到异常或指标超过预设阈值时,Alertmanager 能及时发送预警通知,帮助运维人员迅速定位和解决问题,确保业务连续性和系统稳定性。

  • 自动化运维

    • 通过 Alertmanager,运维团队可以建立自动化工作流,比如,在检测到某个服务故障后自动重启服务,或者在资源利用率过高时自动扩展资源。这种自动化响应可以减少人工干预的需求,提升系统自愈能力。

  • 事件响应和管理

    • 当系统发生故障时,Alertmanager 可以将警报按严重程度和类型分发给相应的团队成员,确保每个人收到与其职责相关的信息。这样可以加快事件响应速度,减少平均修复时间(MTTR),并有助于事件的高效管理。

  • 合规性和审计

    • 在金融、医疗等对数据安全有严格要求的行业,Alertmanager 可以用于监控合规性指标,如数据泄露风险、访问控制违规等。一旦发现潜在的合规问题,立即通知合规团队采取行动。

  • 用户体验监控

    • 对于面向用户的在线服务,Alertmanager 可以监控用户请求的延迟、错误率等指标,确保良好的用户体验。一旦检测到可能影响用户体验的问题,可以立即通知前端或后端开发团队进行优化。

  • 容量规划

    • Alertmanager 可以帮助监控资源使用趋势,预测未来需求。如果发现资源接近耗尽,可以提前发出警告,以便进行容量规划和资源分配调整。

  • 节假日和非工作时间的警报管理

    • Alertmanager 支持设置警报抑制规则,可以根据时间表自动开启或关闭警报,避免在非工作时间产生不必要的警报,同时确保紧急警报仍然能够得到处理。

  • 第三方服务集成

    • Alertmanager 可以通过 Webhooks 或其他接口与第三方服务(如 PagerDuty、OpsGenie、钉钉、企业微信等)集成,将警报信息发送到团队常用的消息平台,提高警报的可见性和响应速度。

 通过以上场景,可以看到 Alertmanager 是一个非常灵活且强大的工具,它能够适应不同规模和类型的组织的监控需求,有效提升系统的监控效率和运维管理水平。

三、Altermanager架构与原理

3.1 Altermanager使用步骤

Altermanager在生产使用时,主要分为下面几步:

  • 部署Alertmanager;

  • 配置告警接收人;

  • 配置Prometheus与Alertmanager通信;

  • 在Prometheus中创建告警规则;

  • 配置生效并触发告警规则;

3.2 Altermanager工作机制

如下是Alertmanager的工作原理图:

Prometheus发出告警时主要分两步:

  • Prometheus服务器按告警规则(rule_files配置块),将报警信息发送至Alertmanager(即告警规则是在Prometheus上定义的);

  • Alertmanager 接收并管理这些报警,包括去重(Deduplicating)、分组(Grouping)、沉默(silencing),抑制(inhibition),聚合(aggregation),最终通过电子邮件发出通知,对呼叫通知系统,以及即时通讯平台,将告警通知路由(route)给对应联系人。

事实上,在Alertmanager 的内部处理过程中远比这两步要复杂,为了深入了解原理,下面是更详细的处理过程:

  • 警报接收

    • Alertmanager 从 Prometheus server 接收警报。当 Prometheus 中定义的警报规则被触发时,Prometheus 会生成警报并发送给 Alertmanager。

  • 警报去重

    • Alertmanager 会对接收到的警报进行去重处理,避免同一警报被多次处理或通知,这是通过检查警报的标签组合来实现的。

  • 警报分组

    • Alertmanager 能够将具有相似标签的警报进行分组,这样可以减少警报数量,避免重复信息,并且使得警报更加易于管理。

  • 警报抑制

    • 根据配置,Alertmanager 可以抑制某些警报,防止在特定情况下警报的过度通知。例如,在大规模故障时,可能会抑制较低优先级的警报。

  • 警报静默

    • 用户可以设置静默规则,用来临时忽略特定警报,通常在计划的维护窗口期间使用。

  • 警报状态跟踪

    • Alertmanager 会跟踪警报的状态,包括警报是否已被解决。当 Prometheus 发现警报条件不再满足时,它会发送一个状态为“resolved”的警报给 Alertmanager。

  • 警报路由

    • Alertmanager 使用路由规则来决定警报应该发送给哪些接收者。这些规则可以根据警报的标签和状态来确定警报的接收者。

  • 警报通知

    • 根据路由规则,Alertmanager 会将警报发送给指定的接收者。接收者可以是电子邮件、短信、Slack、PagerDuty、钉钉、企业微信等。

  • 警报恢复确认

    • Alertmanager 在一段时间内未接收到 Prometheus 的警报更新,会自动将警报状态设为“恢复”(resolved),这个时间间隔可以在配置文件中设置。

  • 用户交互

    • Alertmanager 提供了一个用户界面和 API,允许管理员查看警报状态、管理静默规则、查询警报历史记录等。

通过上面的步骤不难看出,Alertmanager 整个工作流程的设计目的是为了提高警报的可靠性、减少警报噪声、确保警报的及时通知以及提供有效的警报管理手段。通过上述流程,Alertmanager 成为了 Prometheus 监控体系中不可或缺的一部分,帮助用户更好地理解和应对监控系统的警报。

3.3 Altermanager在Prometheus中的位置

如下是关于Prometheus的整体架构图,Altermanager位于右上侧,简单来说,与Prometheus集成之后,一旦Prometheus收集到来自监控主机的指标信息满足告警规则,就会将其push到Altermanager。

具体来说如下所示:

告警能力在Prometheus架构中被划分为两个部分,在上图中有所展示,通过在Prometheus配置文件中定义AlertRule(告警规则),Prometheus会周期性的进行告警规则计算,如果满足告警规则触发条件,就会向Altermanager发送告警信息。

Altermanager作为一个独立组件,负责接收处理来自Prometheus Server(也可以是其他客户端程序)的告警信息。接收到之后,Altermanager可以对这些告警信息进一步的处理,比如收到大量的重复告警信息时能够消除重复告警,同时对告警信息进行分组并且路由到正确的通知方。

同时,Prometheus内置了对邮件,Slack等多种通知方式的支持,还支持与Webhook的集成,从而支持更多的定制化场景,比如目前还支持钉钉,这样用户就可以通过Webhook与钉钉机器人进行集成,从而通过钉钉接收告警通知信息,同时,Altermanager还提供了静默告警和告警抑制功能对钉钉的告警行为进行优化。

四、Altermanager部署与接入Prometheus

通过上面的介绍初步了解了Altermanager的基本理论,接下来通过实际操作演示如何部署Altermanager服务,以及如何接入Prometheus进行使用。

4.1 Altermanager部署过程

参考下面的操作步骤

4.1.1 获取安装包

安装包下载地址:https://prometheus.io/download/

可以直接在服务器上,使用下面的命令下载:

wget https://github.com/prometheus/alertmanager/releases/download/v0.27.0/alertmanager-0.27.0.linux-amd64.tar.gz

4.1.2 安装包解压

使用下面的命令解压安装包

tar -zxvf alertmanager-0.27.0.linux-amd64.tar.gz

4.1.3 启动alertmanager服务

进入安装包目录,使用下面的命令后台启动

cd cd alertmanager-0.27.0.linux-amd64/# 前台启动
./alertmanager --config.file=alertmanager.yml# 后台启动alertmanager,并且重定向输入日志到当前目录的alertmanager.out
nohup ./alertmanager --config.file=alertmanager.yml >> nohup.out 2>&1 &

4.1.4 访问Altermanager

访问:http://IP:9093/,默认端口为 9093,效果如下

同时,也提供了metrics的指标监控端点,如果访问 IP:9093/metrics,可以看到下面的指标信息,通过这个指标监控的端点,可以在后续接入Prometheus进行指标监控时使用

4.1.5 Altermanager核心配置文件介绍

Altermanager主要负责对Prometheus产生的告警进行统一处理,因此在Altermanager的配置中一般包含下面几个主要部分:

核心参数说明:

  • 全局配置(global):

    • 用于定义一些全局的公共参数,例如全局SMTP配置,Slack配置等内容;

  • 模板(templates):

    • 用于定义通知告警时的模板,例如HTML模板,邮件模板等;

  • 告警路由(route):

    • 根据标签匹配,确定当前告警应该如何处理;

  • 接收人(receivers):

    • 接收人是一个抽象概念,它可以是一个邮箱,也可以是微信、Slack或Webhook等,接收人一般配合告警路由使用;

  • 抑制规则(inhibit_rules):

    • 合理设置抑制规则,可以减少垃圾告警的产生;

4.2 Altermanager接入Prometheus

4.2.1 配置alert target

Altermanager与Prometheus集成也很简单,只需要在Prometheus的配置文件中稍改一下配置即可,找到Prometheus的yml文件,如下,只需要放开注释即可,默认是本机的Altermanager,如果是远程部署的Altermanager,更改为相应的IP即可,这一步是为了后续通过Prometheus将告警规则push到Altermanager;

4.2.2 配置Altermanager监控指标

像之前配置node_exporter那样,再在Prometheus的yml中添加一个Altermanager的job的配置,如下:

注意:以上配置完成后需要重启Prometheus

4.2.3 访问Prometheus

访问Prometheus控制台,可以看到Altermanager就纳入Prometheus进行指标监控了

4.3 监控node_exporter

在之前的文章中我们介绍了node_exporter以及集成到Prometheus监控本机内存等指标信息,现在假如说使用node_exporter检测到机器的某些指标达到了阈值,需要进行告警,在这种情况下就可以利用Altermanager的告警功能进行集成和配置,参考下面的步骤进行操作;

4.3.1 创建rule(规则)目录和规则文件

prometheus.yml同目录下新建node.yml(文件名称和可以自行修改)

node.yml配置文内容参考如下:

groups:
- name: node_exporter_alert_rulerules:- alert: PrometheusTargetMissingexpr: up == 0for: 1mlabels:severity: criticalannotations:summary: 服务器宕机 (instance {{ $labels.instance }})description: "服务器宕机,或者node exporter未启动\n  VALUE = {{ $value }}\n  LABELS = {{ $labels }}"- alert: HostOutOfDiskSpaceexpr: (node_filesystem_avail_bytes * 100) / node_filesystem_size_bytes < 5 and ON (instance, device, mountpoint) node_filesystem_readonly == 0for: 10slabels:severity: warningannotations:summary: 主机磁盘空间不足 (instance {{ $labels.instance }})description: "主机磁盘空间不足 (剩余 < 10% )\n  VALUE = {{ $value }}\n  LABELS = {{ $labels }}"- alert: HostHighCpuLoadexpr: 100 - (avg by(instance) (rate(node_cpu_seconds_total{mode="idle"}[2m])) * 100) > 80for: 0mlabels:severity: warningannotations:summary: CPU使用率过高! (instance {{ $labels.instance }})description: "CPU使用率超过 > 80%\n  VALUE = {{ $value }}\n  LABELS = {{ $labels }}"- alert: HostOutOfMemoryexpr: node_memory_MemAvailable_bytes / node_memory_MemTotal_bytes * 100 < 10for: 2mlabels:severity: warningannotations:summary: 内存使用率过高 (instance {{ $labels.instance }})description: "内存使用率过高 (剩余< 10% )\n  VALUE = {{ $value }}\n  LABELS = {{ $labels }}"

以上是列举了常用的几个关于主机相关的监控规则,比如内存使用率过高,主机磁盘空间等,更多的规则可以参阅相关的资料在这里进行配置即可;

在告警规则文件中,我们可以将一组相关的规则配置定义在一个group下,在每一个group中可以定义多个告警规则,对于一条具体的告警规则来说,主要由下面几部分组成:

  • alert:指定告警规则名称;

  • expr:基于PromQL表达式的告警触发条件,用于计算是否时间序列满足该条件;

  • for:评估等待时间,可选参数,用于表示只有当触发条件持续一段时间后才发告警。而在等待期间,新产生告警的状态为pending;

  • labels:自定义标签,允许用户指定要附加到告警上的一组附加标签;

  • annotations:用于指定一组附加信息,比如用于描述告警详细信息的文字,annotations的内容在告警产生时会一同作为参数发送到Altermanager;

4.3.2 修改prometheus.yml

在Prometheus配置文件中添加下面信息,将上述的规则文件进行加载(当然,也可以通过通配符的方式进行配置):

rule_files:- "node.yml"#- "second_rules.yml"

为了能让Prometheus启用自定义的告警规则,需要在Prometheus的全局配置文件中通过rule_files指定一组告警规则文件的访问路径,Prometheus启动的时候就会自动扫描这些规则路径下规则文件中定义的内容,并且根据这些规则计算是否向外发送通知;

4.3.3 重启Prometheus

重启Prometheus服务,然后再次进入到Prometheus的控制台,在Alert菜单下,就能看到上面的配置那几个规则信息了

展开其中的某一项,可以看到规则的详细信息,和配置文件中的是一致的

补充说明:

在上述的界面展示中,出现了3个状态,INACTIVE,Pending,Firing ,这三个状态在下面的实际操作中会得到体现,表示被监控的服务指标满足了告警规则时的不同状态的切换。

4.3.4 测试告警规则

如何验证上述配置的告警规则是否生效呢?做第一个实验,手动关闭node_exporter服务:

ps -ef|grep node_exporter
kill -9 28634

Prometheus首次检测到满足触发的条件后,由于告警规则中设置了1分钟(for:1m)的等待时间,告警状态从INACTIVE,变为Pending,如下图所示:

kill之前

一分钟之后,如果告警条件持续满足,告警状态将从Pending变为Firing,并且会将告警信息推送给Alertmanager,如下图所示:

此时再次进入到Alertmanager的控制台界面上,可以看到界面上展示出了正在告警的信息

再次启动node-exporter服务,状态过一会儿就又切换回去了

五、Alertmanager配置告警推送

通过上面的操作,可以通过Alertmanager结合Prometheus对监控的指标信息进行规则的预警,事实上,在实际应用中,运维人员希望达到的目的是,当告警规则被触发的时候,能够及时以某种方式通知到相应的人员,才能第一时间对事件现场进行响应和处理,接下来演示下如何配置告警的消息推送。

5.1 Alertmanager配置邮箱告警通知

以QQ邮箱为例进行说明

5.1.1 注册QQ邮箱

如果没有的话可以提前注册一个,略

5.1.2 开启SMTP服务

通过qq邮箱的设置,开启SMTP服务,并获取下图中的授权码,下文配置中会用到

5.1.3 配置alertmanager.yml

在该配置文件中配置如下信息

global:# 在3分钟内未收到新的相同告警,则认为告警已解决resolve_timeout: 3m # QQ邮箱SMTP服务器地址和端口,通常使用465端口,SMTPSsmtp_smarthost: 'smtp.qq.com:465'  # 从这个邮箱发送告警smtp_from: '你的QQ@qq.com'# 发送告警的邮箱账号smtp_auth_username: '你的QQ@qq.com'# 邮箱的第三方授权码,而不是普通密码smtp_auth_password: 'vuqmvptmxowwzdbbec'#根据你的SMTP服务器设置决定是否需要TLS加密smtp_require_tls: false   route:group_by: ['alertname']group_wait: 30sgroup_interval: 5mrepeat_interval: 1h#receiver: 'web.hook'receiver: 'email'receivers:- name: 'email'email_configs:- to: '你的QQ@qq.com'send_resolved: true#抑制规则
inhibit_rules:- source_match:severity: 'critical'target_match:severity: 'warning'equal: ['alertname', 'dev', 'instance']

5.1.4 重载配置文件

重启Alertmanager服务,重启完成后,再次进入Alertmanager页面,通过status菜单可以看到,上述配置得邮箱信息就展示出来了

5.1.5 效果验证

仍然以上面配置的node-exporter为例,我们关闭该服务,理论上在1分钟之后Prometheus会检测到服务的宕机信息从而满足触发告警规则条件,从而向Alertmanager推送告警信息,上面配置了邮箱之后,Alertmanager就能将信息发送至接收的邮箱中;

将node-exporter服务kill掉之后,等待1分钟,可以看到node_exporter配置的告警规则被触发,状态也变成了Pending;

同时alertmanager控制台也输出了相应的信息

此时进入个人的QQ邮箱,可以看到一封告警通知邮件

关于邮件的告警推送,也可以采用自定义邮件模板进行配置,网上关于这块的资料也比较多,基于上面的配置简单做下调增即可

5.2 Alertmanager配置钉钉告警通知

接下来演示如何将告警通知通过钉钉进行消息推送

5.2.1 配置钉钉机器人

创建钉钉群,找到群设置中的机器人

点击添加机器人

选择自定义webhook

配置如下信息

  • 注意拷贝上面的Webhook地址和下面的加签信息,后面配置中会用到;

点击完成然后就可以看到,机器人已经创建完成

5.2.2 获取钉钉webhook插件包

alertmanger必须通过webhoo插件才能将告警发送到钉钉/微信/飞书,因此,需要先安装webhook插件,安装方式有二进制、docker和源码,这里直接运行二进制文件

webhook插件官方地址:GitHub - timonwong/prometheus-webhook-dingtalk: DingTalk integration for Prometheus Alertmanager

下载插件

wget https://github.com/timonwong/prometheus-webhook-dingtalk/releases/download/v2.1.0/prometheus-webhook-dingtalk-2.1.0.linux-arm64.tar.gz

解压插件安装包

tar xf prometheus-webhook-dingtalk-2.1.0.linux-arm64.tar.gz 

修改目录名称

mv prometheus-webhook-dingtalk-2.1.0.linux-arm64 prometheus-webhook-dingtalk 

5.2.3 修改配置文件信息并启动服务

进入上述webhook的目录,修改yml配置文件,配置信息如下,这里可以暂时先配置一个webhoo即可,其他的可以暂时注释掉

最后使用下面的命令进行启动

./prometheus-webhook-dingtalk --config.file=./config.yml --web.enable-ui &

5.2.4 使用docker的方式安装

如果仍然觉得使用上面插件包的方式弄起来麻烦,可以使用下面的docker-compose的方式做;

创建一个config.yml配置文件

配置如下内容,webhook的信息改为你自己的即可

targets:webhook1:url: https://oapi.dingtalk.com/robot/send?access_token=aa06a9c58dfa03080c46cd243f3e81560e43d66da434d0a84ecbe2954bc58csecret: SEC85684de209427ba29a4d20541e86b62520068ffb3fef2dfca91af2485627c3

创建docker-compose.yml文件

配置如下内容

version: '3.3'
services:webhook: image: timonwong/prometheus-webhook-dingtalk:v2.1.0container_name: prometheus-webhook-dingtalkports: - 8060:8060command: - '--config.file=/etc/prometheus-webhook-dingtalk/config.yml'volumes: - /usr/local/soft/pro/prometheus-webhook-dingtalk/config.yml:/etc/prometheus-webhook-dingtalk/config.yml  - /etc/localtime:/etc/localtime:ro

启动docker服务

使用docker-compose命令启动

docker-compose up -d

使用docker命令检查下容器是否启动

访问8060端点,访问地址:IP:8060,浏览器看到下面的效果说明钉钉的webhook插件服务已经可以使用

5.2.5 修改altermanager的配置

进入altermanager安装目录,找到alertmanager.yml,配置钉钉的webhook信息,如下:

5.2.6 重启altermanager服务

重启之后,模拟5.1中的操作,我们将node_exporter服务进行手动kill,在Prometheus上面可以看到如下信息

等待一分钟之后,由于满足了告警规则的触发条件,此时将告警信息推送到了钉钉的webhook地址,然后再在钉钉群中就能收到通知信息了,如下:

5.2.7 补充说明

上面总结来说做了两个示例演示,一个是通过node_exporter的服务启动和宕机模拟,验证是否能够正常触发告警规则,然后,再通过将告警规则中配置的信息,以邮件或钉消息的方式进行推送,基于此,如果在实际项目中进行应用,只需要参照类似的模式,先定义待监控的指标告警规则,然后配置告警规则被触发之后推送到指定的通知服务,或者webhook地址即可。

六、写在文末

本文通过实际案例详细介绍了Alertnamager的使用,并结合Prometheus配置告警触发规则,将告警信息推送到特定的通知服务,在实际项目中具有一定的实用和参考价值,希望对看到的同学有用,本篇到此结束,感谢观看。

相关文章:

【云原生】Prometheus整合Alertmanager告警规则使用详解

目录 一、前言 二、Altermanager概述 2.1 什么是Altermanager 2.2 Altermanager使用场景 三、Altermanager架构与原理 3.1 Altermanager使用步骤 3.2 Altermanager工作机制 3.3 Altermanager在Prometheus中的位置 四、Altermanager部署与接入Prometheus 4.1 Altermana…...

C++ :友元类

友元类的概念和使用 (1)将类A声明为B中的friend class后&#xff0c;则A中所有成员函数都成为类B的友元函数了 (2)代码实战&#xff1a;友元类的定义和使用友元类是单向的 (3)友元类是单向的&#xff0c;代码实战验证 互为友元类 (1)2个类可以互为友元类&#xff0c;代码实战…...

【整理了一些关于使用swoole使用的解决方案】

目录 如何监控和分析 Swoole 服务器的性能瓶颈&#xff1f; 在进行 Swoole 服务器性能优化时&#xff0c;有哪些常见的错误和陷阱需要避免&#xff1f; 除了 Swoole&#xff0c;还有哪些 PHP 框架或技术可以用于构建高并发的 Web 应用&#xff1f; Swoole 同步请求在高并发…...

python selenium4 EdgeDriver动态页面爬取

截止至2024.7.16 chrome浏览器最新版本为126.0.6478.127 但对应的chromeDriver版本都低于此版本&#xff0c;因此&#xff0c;转用Edge浏览器 说明&#xff1a;仅记录自己使用过程中用到的一些代码和感受&#xff0c;看具体情况不定期更新。 selenium官方文档 1、安装selen…...

【一次记一句:SQL】从 information_schema.TABLES中查询数据库表中记录数据量

有时候&#xff0c;一张千万数据量的表&#xff0c;使用 count(*) 统计记录数&#xff0c;查不动。可以使用下述SQL来试试&#xff1a; SELECT CONCAT(table_schema, ., table_name) AS "Table Name", table_rows AS "Number of Rows", CONCAT(ROUND(data…...

NXP i.MX8系列平台开发讲解 - 3.19 Linux TTY子系统(二)

专栏文章目录传送门&#xff1a;返回专栏目录 Hi, 我是你们的老朋友&#xff0c;主要专注于嵌入式软件开发&#xff0c;有兴趣不要忘记点击关注【码思途远】 目录 1. Linux 串口驱动 1.1 Uart 驱动注册流程 1.2 uart 操作函数 1.3 line discipline 2. Linux tty应用层使用…...

FPGA资源容量

Kintex™ 7 https://www.amd.com/zh-tw/products/adaptive-socs-and-fpgas/fpga/kintex-7.html#product-table AMD Zynq™ 7000 SoC https://www.amd.com/en/products/adaptive-socs-and-fpgas/soc/zynq-7000.html#product-table AMD Zynq™ UltraScale™ RFSoC 第一代 AMD Z…...

Zabbix介绍和架构

目录 一.Zabbix简介 1.为什么需要监控 2.需要监控什么 3.常见的监控工具 4.Zabbix使用场景及系统概述 5.Zabbix 架构 6.Zabbix工作流程 7.Zabbix 术语 二. 部署安装zabbix 三.zabbix 配置文件 一.Zabbix简介 1.为什么需要监控 运维行业有句话:“无监控、不运维”&am…...

打造智慧图书馆:AI视频技术助力图书馆安全与秩序管理

一、背景需求 随着信息技术的飞速发展&#xff0c;图书馆作为重要的知识传播场所&#xff0c;其安全管理也面临着新的挑战。为了确保图书馆内书籍的安全、维护读者的阅读环境以及应对突发事件&#xff0c;TSINGSEE青犀旭帆科技基于EasyCVR视频监控汇聚平台技术与AI视频智能分析…...

Go的数据结构与实现【LinkedList】

介绍 所谓链表&#xff08;Linked List&#xff09;&#xff0c;就是按线性次序排列的一组数据节点。每个节点都是一个对象&#xff0c;它通过一个引用指向对应的数据元素&#xff0c;同时还通过一个引用next指向下一节点。 实现 逻辑方法 我们定义链表的结构体&#xff1a…...

Ubuntu22.04安装CUDA+CUDNN+Conda+PyTorch

步骤&#xff1a; 1、安装显卡驱动&#xff1b; 2、安装CUDA&#xff1b; 3、安装CUDNN&#xff1b; 4、安装Conda&#xff1b; 5、安装Pytorch。 一、系统和硬件信息 1、Ubuntu 22.04 2、显卡&#xff1a;4060Ti 二、安装显卡驱动 &#xff08;已经安装的可以跳过&a…...

当“广撒网”遇上“精准定点”的鱼叉式网络钓鱼

批量网络钓鱼电子邮件活动倾向于针对大量受众&#xff0c;它们通常使用笼统的措辞和简单的格式&#xff0c;其中不乏各种拼写错误。而有针对性的攻击往往需要付出更大的努力&#xff0c;攻击者会伪装成雇主或客户向目标发送包含个人详细信息的个性化消息。在更大范围内采用这种…...

svn ldap认证临时切换到本地认证

当前的svn是在CentOS 7 下 SVN、 Apache 对接 LDAP 服务实现用户账号管理和权限认证&#xff0c;本文模拟ldap数据丢失如何恢复svn&#xff0c;方法是临时将认证切换到本地认证 编辑subversion.conf文件 vi /etc/httpd/conf.d/subversion.conf 注释ldap-status #<Locati…...

极狐GitLab如何配置使用独立数据库?

GitLab 是一个全球知名的一体化 DevOps 平台&#xff0c;很多人都通过私有化部署 GitLab 来进行源代码托管。极狐GitLab &#xff1a;https://gitlab.cn/install?channelcontent&utm_sourcecsdn 是 GitLab 在中国的发行版&#xff0c;专门为中国程序员服务。可以一键式部署…...

TCP状态转换详解

1.什么是TCP的状态转换 TCP&#xff08;Transmission Control Protocol&#xff0c;传输控制协议&#xff09;是一种面向连接的、可靠的、基于字节流的传输层协议。在 TCP 连接的生命周期中&#xff0c;连接的状态会随着不同阶段的通信而发生变化&#xff0c;这些变化被称为状…...

SimMIM:一个类BERT的计算机视觉的预训练框架

1、前言 呃…好久没有写博客了&#xff0c;主要是最近时间比较少。今天来做一期视频博客的内容。本文主要讲SimMIM&#xff0c;它是一个将计算机视觉&#xff08;图像&#xff09;进行自监督训练的框架。 原论文&#xff1a;SimMIM&#xff1a;用于掩码图像建模的简单框架 (a…...

数据精度丢失

js数据精度丢失 最近看面试题想到了之前在开发钟遇到过的问题&#xff0c;现总结一下 在开发过程中&#xff0c;发现从后台返回的数据结构中的id字段在前端显示为不正确的值。经过排查&#xff0c;怀疑是JavaScript中Number类型精度丢失的问题。通过将id字段的类型从Number改为…...

Element UI DatePicker选择日期范围区间默认显示前一个月和本月

要求&#xff1a;点击el-date-picker选择时间范围时&#xff0c;默认展开当月和上个月。 但是Element UI的组件默认展开的是本月和下一个月&#xff0c;如下图所示&#xff1a; 改为 <span click"changeInitCalendarRange"><el-date-picker v-model"r…...

C++:聚合类、嵌套类、局部类、union类详细介绍与分析

聚合类 (1)What&#xff08;什么是聚合类&#xff09; 本质是一个自定义类型的数据结构&#xff08;结构体或类&#xff09;&#xff0c;但聚合类有以下特性&#xff1a; 所有的成员都是public没有任何构造函数没有基类类内部没有初始值 (2)Why&#xff08;聚合类的作用&…...

MKS流量计软件MFC通讯驱动使用于C和P系列MFC控制USB接口W10系统

MKS流量计软件MFC通讯驱动使用于C和P系列MFC控制USB接口W10系统...

C++:左值/右值引用、移动语义/std::move、万能引用/完美转发std::forward 详解

你能学到 左值 与 右值左值引用 与 右值引用 基本用法与作用拷贝构造函数 与 移动构造函数移动语义 与 std::move万能引用 与 引用折叠完美转发&#xff1a;std::forward 前言 本文代码片段中变量命名规则如下&#xff1a; 小写字母&#xff1a;一般类型的变量&#xff08;非…...

蜂窝物联云平台:一站式服务,智能生活从此开始!

蜂窝云平台 一、PC端展示与管理 GIS地图整合 在GIS地图上精确展示地块&#xff0c;轻松点选查看详细设备信息、实时监控和控制功能&#xff0c;以及基地的全方位介绍。 个性化定制界面 界面布局与功能展示均可按需求定制&#xff0c;打造独一无二的用户体验。 数据集中看板 将…...

【中项】系统集成项目管理工程师-第3章 信息技术服务-3.3服务生命周期

前言&#xff1a;系统集成项目管理工程师专业&#xff0c;现分享一些教材知识点。觉得文章还不错的喜欢点赞收藏的同时帮忙点点关注。 软考同样是国家人社部和工信部组织的国家级考试&#xff0c;全称为“全国计算机与软件专业技术资格&#xff08;水平&#xff09;考试”&…...

【iOS】——消息传递底层实现

消息传递是什么 Objective-C是一种动态类型语言&#xff0c;这意味着在编译时并不确定对象的具体类型&#xff0c;而是在运行时决定。消息传递机制允许程序在运行时向对象发送消息&#xff0c;对象再决定如何响应这些消息。 当你通过对象调用方法时&#xff0c;例如像这样[ob…...

PostgreSQL数据库从入门到精通系列之十:表空间、索引表空间、创建表空间、创建索引空间、创建分区表、创建分区表的分区、创建指定表空间、索引表空间的分区表

PostgreSQL数据库从入门到精通系列之十:表空间、索引表空间、创建表空间、创建索引空间、创建分区表、创建分区表的分区、创建指定表空间、索引表空间的分区表 一、数据库表空间和数据库之间的关系二、索引表空间和数据库之间的关系三、创建角色四、创建表空间目录五、创建表空…...

恶补,先验分布,后验分布 ,似然估计

恶补&#xff0c;打一遍增加印象 先验分布后验分布&#xff0c;似然估计 声明&#xff1a;仅记录个人学习&#xff0c;并无其他用途。 先验分布 后验分布&#xff0c; 似然估计 隔壁小哥的故事&#xff1a; 隔壁小哥要去15公里外的一个公园里玩&#xff0c;小哥可以选择步行…...

JS之数组中的reduce方法

文章目录 基本语法&#xff1a;callbackFn 的参数:例子1. 数组求和2. 数组求积3. 扁平化数组4. 数组元素计数5. 使用对象解构和展开运算符合并数组中的对象6. 求最大值和最小值 函数组合异步操作中的 reduce总结 reduce 是 JavaScript 中 Array 对象的一个方法&#xff0c;非常…...

在win10上通过WSL和docker安装Ubuntu子系统,并配置Ubuntu可成功使用宿主机GPU

本文主要记录win10系统上,通过WSL的Ubuntu系统以及Docker使用GPU的全部过程。 文章目录 1、 启用hyper-v2、 安装docker3、 安装WSL3.1 安装WSL23.1.1 检查是否安装了WSL23.1.1 安装和配置 WSL 23.2 安装Ubuntu 子系统3.3 检查并修改WSL版本4、docker配置ubuntu20.04 LTS5、下…...

python需要掌握那些语法

1-list数据类型 内置方法查看长度len&#xff08;list&#xff09; 2.array数据类型 查看形状 3.tuple 取出元组 t (1, 2, 3, 4, 5) # 取出第一个元素 2first_element t[0] 3print(first_element) # 输出&#xff1a;1 4 5# 取出第三个元素 6third_element t[2] 7pr…...

CentOS Mysql8 数据库安装

添加mysql yum仓库 这里安装的是8.0版本&#xff0c;如需其他版本在此查看mysql版本列表 wget https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm sudo rpm -Uvh mysql80-community-release-el7-3.noarch.rpm安装mysql sudo yum install mysql-server …...

wordpress跟换域名/关键词排名优化软件价格

名字查找 每当一个变量或者一个对象出现&#xff0c;编译器都会进行名字查找&#xff08;name lookup&#xff09;&#xff0c;以确认这个变量或对象的具体属性。一般情况下&#xff0c;程序会从变量出现的地方开始向上查找&#xff0c;由内向外查找各级作用域直到全局作用域&a…...

三亚疫情最新政策/关键词优化是怎么弄的

const iterator表示iterator是const的&#xff0c;即iterator本身不能改变或者说iterator指针不能改变&#xff0c;但是iterator所指向的内容可以改变。比如&#xff0c; const std::vector<int>::iterator iter vec.begin(); *iter 10;是对的&#xff0c;改变iter指…...

如果启动浏览器就能直接打开一个常用的网站主页_要怎么做?/网站如何进行seo

2019独角兽企业重金招聘Python工程师标准>>> 简评&#xff1a;别和 Chrome 和 Firefox 约行不&#xff0c;我 Edge 明明更美、屁股更翘、更性感。。。 微软正在测试 Windows 10 的一个更新&#xff1a;警告用户不要安装 Chrome 和 Firefox。是测试人员发现的这个新警…...

无锡新吴区建设局网站/百度公司名称

Qt 实现文件校验码生成器&#xff08;内附源码&#xff09; 该软件是基于 CertUtil 的一个文件文件校验码生成&#xff0c;旨在提高下载程序的一个安全系数&#xff0c;防止黑客攻击网站后&#xff0c;将携带病毒的程序放在下载链接上&#xff0c;当用户使用程序时&#xff0c…...

mysql 大型网站开发/成品影视app开发

通常,说到Hook键盘鼠标,总需要一大堆代码,涉及各种不明白的API.而在DSAPI中,可以说已经把勾子简化到不能再简化的地步.甚至不需要任何示例代码即会使用.那么如何实现呢? Private WithEvents HK As New DSAPI.键盘鼠标钩子注意上面带了WithEvent. 写完上面那句后,即可选择该HK,…...

网络游戏那个网站做的最好/免费站长工具

快捷方式 应该来说 很多人都做过&#xff0c;我们就来看一下基本的快捷方式 是怎么实现的&#xff0c;会有什么问题&#xff1f; 首先 肯定要获取权限&#xff1a; 1 <!-- 添加快捷方式 --> 2 <uses-permission android:name"com.android.launcher.permissi…...