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

Prometheus技术文档-基本使用-配置文件全解!!!!!

简介: 

Prometheus是一个开源的系统监控和告警系统,由Google的BorgMon监控系统发展而来。它主要用于监控和度量各种时间序列数据,比如系统性能、网络延迟、应用程序错误等。Prometheus通过采集监控数据并存储在时间序列数据库中,然后使用PromQL查询语言进行数据分析和可视化。

以下是Prometheus基本使用的一些技术:

  1. 安装和配置:了解如何安装和配置Prometheus,包括Prometheus Server、Exporters和Pushgateway等组件。
  2. 数据采集:学习如何使用Prometheus采集各种监控数据,包括系统性能、网络延迟、应用程序错误等。
  3. 数据存储:了解Prometheus如何将采集的监控数据存储在时间序列数据库中,以及如何使用本地磁盘、远程存储等不同的存储后端。
  4. 数据查询和分析:学习如何使用PromQL查询语言对监控数据进行查询和分析,以及如何通过可视化工具进行数据展示。
  5. 告警规则:学习如何创建和管理告警规则,以及如何将告警发送给不同的接收器,比如电子邮件、Slack、PagerDuty等。
  6. 数据可视化:了解如何使用Prometheus提供的仪表盘界面展示监控数据和告警状态,以及如何通过拖放和自定义配置来创建自己的仪表盘。
  7. 服务发现:学习如何使用各种服务发现机制,比如Kubernetes、EC2、GCE等,以自动发现和监控服务的运行状态。
  8. 安全和权限控制:了解Prometheus如何提供安全和权限控制的机制,如身份验证、授权等,以确保数据的访问安全。

基本使用以及认识配置:

安装和配置:了解如何安装和配置Prometheus,包括Prometheus Server、Exporters和Pushgateway等组件。

Prometheus Server

        Prometheus Server是Prometheus组件中的核心部分,负责实现对监控数据的获取、存储以及查询。

        首先,Prometheus Server可以通过静态配置管理监控目标,也可以配合使用Service Discovery的方式动态管理监控目标,并从这些监控目标中获取数据。这意味着Prometheus Server可以根据预设的规则发现并监控各种服务和目标,无论是静态配置的目标还是动态发现的目标。

        其次,Prometheus Server需要对采集到的数据进行存储。Prometheus Server本身就是一个时序数据库,它将采集到的监控数据按照时间序列的方式存储在本地磁盘当中。这种存储方式使得Prometheus Server可以有效地保存大量的时间序列数据,并且可以在后续进行快速的数据查询和分析。

        最后,Prometheus Server提供了自定义的PromQL语言,用户可以使用PromQL实现对数据的查询以及分析。同时,Prometheus Server还提供了HTTP API,用户可以使用这些API通过编程方式查询数据。另外,Prometheus Server的联邦集群能力可以使其从其他的Prometheus Server实例中获取数据,从而实现监控数据的共享和统一管理。

        总之,Prometheus Server是Prometheus生态圈中的核心组件,它负责采集、存储和查询监控数据,为用户提供了一个全面和实时的监控解决方案

Exporters

        Exporters是Prometheus中的一个组件,负责将特定应用程序或服务的监控数据暴露给Prometheus。Exporters可以将应用程序的监控数据转换为Prometheus能够识别的格式,并通过HTTP或其他方式将数据发送给Prometheus。

        Exporters的主要作用是扩展Prometheus的监控能力,使其能够监控到更多类型的应用程序和服务。由于不同类型的应用程序和服务的监控数据格式可能不同,因此需要不同的Exporters来实现对它们的监控。

        Prometheus的生态系统提供了许多常见的Exporters,比如Node Exporter用于监控系统性能,Redis Exporter用于监控Redis数据库,MySQL Exporter用于监控MySQL数据库等。用户可以根据需要选择合适的Exporters来扩展Prometheus的监控能力。

        除了使用现有的Exporters,用户还可以根据需要自定义自己的Exporters。自定义的Exporters可以根据应用程序的特定需求来实现对监控数据的采集和转换。

        总之,Exporters是Prometheus中非常重要的组件,它们扩展了Prometheus的监控能力,使其能够监控更多类型的应用程序和服务。用户可以根据需要选择使用现有的Exporters,或者自定义自己的Exporters来实现对特定应用程序的监控。

        本专栏中会更新部署Exporters的方式方法。

Pushgateway

        Pushgateway是Prometheus的一种组件,用于接收来自短期作业的指标数据。

        由于Prometheus主要通过pull模式获取监控数据,但是某些短时作业可能不支持轮询,或者因为网络原因无法被Prometheus直接拉取数据,这时就可以使用Pushgateway。用户可以通过编写自定义的脚本将需要监控的数据发送给Pushgateway,然后Pushgateway再将数据推送给对应的Prometheus服务。

        Pushgateway可以单独运行在任何节点上,不需要运行在被监控的客户端。它可以将接收到的监控数据存储在本地磁盘中,并且支持自定义的时间序列存储方式。同时,Pushgateway还提供了HTTP API,用户可以使用这些API通过编程方式将数据推送到Pushgateway中。

        总之,Pushgateway是Prometheus中一个重要的组件,它主要用于接收来自短期作业的指标数据,解决了Prometheus无法直接获取这些数据的问题。

了解配置文件书写:

要根据我们现实的配置文件来进行定制化的书写

要注意的是在docker中使用这些配置的时候,最好还是挂载数据卷的形式来挂载出来。

Prometheus的配置文件通常包含以下几种类型:

  1. rule_files:规则文件,用于配置告警规则和数据聚合配置。
  2. scrape_configs:采集配置,用于指定要采集的目标列表和采集规则。
  3. static_configs:静态配置,用于指定要采集的目标列表。
  4. global:全局配置,包含全局默认配置,如抓取监控数据的间隔、抓取业务数据接口的超时时间、告警规则执行周期等。
  5. alerting:告警配置,用于配置告警发送到的Alertmanager的地址。
  6. remote_write 和 remote_read:远程写入和读取配置,用于将数据投递到远程地址或者从远程地址读取数据。

上述的配置文件都是在prometheus.yml中去进行书写的。

下面分别介绍一下这些配置文件的作用:

  1. rule_files:该配置文件用于指定告警规则文件的位置。告警规则文件包含用于触发告警的条件和操作。这些规则文件可以基于聚合的数据进行定义,以便进行更复杂的告警逻辑。
  2. scrape_configs:该配置文件用于指定要采集的目标列表和采集规则。它包含每个目标的服务地址、端口、请求超时等信息,以及如何从目标中抓取数据和数据处理规则等。
  3. static_configs:该配置文件是静态配置,用于手动指定要采集的目标列表。与scrape_configs不同,这里的配置不能动态添加或删除目标,因此适用于稳定的环境。
  4. global:该配置文件包含全局默认配置,如抓取监控数据的间隔、抓取业务数据接口的超时时间、告警规则执行周期等。这些配置会影响整个Prometheus系统的运行方式。
  5. alerting:该配置文件用于指定告警发送到的Alertmanager的地址。Alertmanager是一个独立的组件,用于处理和发送告警信息。通过配置该文件,Prometheus可以将告警信息发送给Alertmanager进行处理。
  6. remote_write 和 remote_read:这两个配置文件用于将数据投递到远程地址或者从远程地址读取数据。这使得Prometheus可以与其他系统进行集成,实现更强大的数据分析和处理能力。例如,可以将采集到的监控数据远程写入到其他的存储系统,或者从远程地址读取数据进行进一步的分析和处理。

需要注意的是,Prometheus的配置文件通常需要在使用前进行适当的修改和调整,以满足特定环境和需求的要求。

配置文件基本案例

rule_files:

rule_files用于指定告警规则文件的位置。这些规则文件包含用于触发告警的条件和操作。例如,可以基于聚合的数据进行定义,以便进行更复杂的告警逻辑。

rule_files:- "first_rules.yml"- "second_rules.yml"

上述配置指定了两个规则文件,分别是"first_rules.yml"和"second_rules.yml"。Prometheus会加载这些规则文件并应用其中的告警规则。

具体案例:

当提到 rule_files 时,是指在使用某个特定系统或应用程序时,用于定义告警规则的文件。这些文件通常使用特定的格式和语法,以便根据条件触发告警。

以下是一个示例 first_rules.yml 文件的内容,其中包含一个告警规则的示例:

# first_rules.ymlrules:- name: "Example Rule"conditions:- metric: "CPU Usage"operator: "<"threshold: 80actions:- email: "example@example.com"subject: "High CPU Usage Alert"message: "The CPU usage has exceeded the threshold of 80%."

在上述示例中,规则文件包含一个名为 "Example Rule" 的规则。该规则定义了一个条件,该条件监视 "CPU Usage" 指标,并使用 "<" 运算符检查是否小于阈值 80。如果条件满足,则执行相应的操作。在此示例中,操作包括发送电子邮件给指定的电子邮件地址,主题为 "High CPU Usage Alert",消息包含有关告警的详细信息。

请注意,具体的规则文件格式和语法可能因使用的系统或应用程序而有所不同。上述示例仅用于说明目的,并可能需要根据所使用的特定工具进行调整。

scrape_configs:

方式1使用配置书写配置文件的方式来发现服务等:

scrape_configs用于指定要采集的目标列表和采集规则。它包含每个目标的服务地址、端口、请求超时等信息,以及如何从目标中抓取数据和数据处理规则等。

scrape_configs:- job_name: 'example_app'scrape_interval: 5sstatic_configs:- targets: ['app1.example.com:8080', 'app2.example.com:8080']

上述配置定义了一个名为"example_app"的采集任务,使用静态配置指定了两个目标服务地址,分别为"app1.example.com:8080"和"app2.example.com:8080"。同时,设置了抓取间隔为5秒。

方式2使用额外的配置文件来发现服务:

scrape_configs:- job_name: "服务发现"file_sd_configs:- files:- /prometheus/ClientAll/*.json # 用json格式文件方式发现服务,下面的是用yaml格式文件方式,都可以refresh_interval: 10m- files:- /prometheus/ClientAll/*.yaml # 用yaml格式文件方式发现服务refresh_interval: 10m

 配置文件解读:

这个配置文件是一个Prometheus的配置文件片段,用于配置服务发现(Service Discovery)。服务发现是一种自动检测和跟踪系统中的服务及其关系的方法,这样Prometheus就可以自动发现并监控这些服务。

在配置文件中,scrape_configs是一个数组,其中包含一个或多个配置项。每个配置项都是一个字典,包含了一些键值对来定义一个特定的服务发现配置。

在这个例子中,有两个配置项:

  1. job_name: "服务发现" - 这个配置项定义了监控任务的名称为"服务发现"。
  2. file_sd_configs - 这个键对应的值是一个数组,其中包含两个字典,每个字典都定义了一种不同的服务发现方式。

a. 第一个字典:

* `files` - 这个键对应的值是一个列表,其中包含一个文件路径`/prometheus/ClientAll/*.json`。这表示Prometheus将从该路径下查找所有满足正则表达式`*.json`的JSON文件。这些文件通常包含了关于服务的元数据和配置信息。
* `refresh_interval` - 这个键对应的值是一个字符串`10m`,表示每隔10分钟刷新一次服务发现配置。
* 总的来说,这个配置告诉Prometheus从指定的路径下读取JSON文件,然后根据这些文件的内容来自动发现并监控服务,并且每隔10分钟刷新一次服务发现配置。

b. 第二个字典:

* `files` - 这个键对应的值是一个列表,其中包含一个文件路径`/prometheus/ClientAll/*.yaml`。这表示Prometheus将从该路径下查找所有满足正则表达式`*.yaml`的YAML文件。这些文件通常也包含了关于服务的元数据和配置信息。
* `refresh_interval` - 这个键对应的值也是`10m`,表示每隔10分钟刷新一次服务发现配置。
* 总的来说,这个配置告诉Prometheus从指定的路径下读取YAML文件,然后根据这些文件的内容来自动发现并监控服务,并且每隔10分钟刷新一次服务发现配置。

通过这样的配置,Prometheus可以根据不同的文件格式(JSON或YAML)和服务描述信息自动发现并监控服务。这对于动态环境或需要自动扩展的服务非常有用,因为当服务发生变化时,Prometheus可以自动更新其监控配置并开始监控新的服务

static_configs:

static_configs是静态配置,用于手动指定要采集的目标列表。与scrape_configs不同,这里的配置不能动态添加或删除目标,因此适用于稳定的环境。

static_configs:- targets: ['target1.example.com:8080']

上述配置手动指定了一个目标服务地址为"target1.example.com:8080",不能动态添加或删除目标。

global:

global包含全局默认配置,如抓取监控数据的间隔、抓取业务数据接口的超时时间、告警规则执行周期等。这些配置会影响整个Prometheus系统的运行方式。

global:scrape_interval: 10sevaluation_interval: 10s

上述配置设置了全局的抓取间隔为10秒,告警规则执行周期也为10秒。

alerting:

在使用这个的时候要提前准备好并安装好 alertmanager这个组件

假装有连接

alerting用于指定告警发送到的Alertmanager的地址。Alertmanager是一个独立的组件,用于处理和发送告警信息。通过配置该文件,Prometheus可以将告警信息发送给Alertmanager进行处理。

alerting:alertmanagers:- static_configs:- targets: ['alertmanager1.example.com:9093']

上述配置指定了告警发送到的Alertmanager地址为"alertmanager1.example.com:9093"。

看到这里有同志会出现疑惑了?

我使用的是Prometheus+Grafana那么到底我使用谁来给我发送告警呢?

我解读一下子

在这两个组合中的Grafana是一个可视化平台,是没有发送预警的能力的所以,发送告警的只能是Prometheus。

Alertmanager是一个独立的组件,用于处理和发送告警信息。在Prometheus中,Alertmanager被用于接收Prometheus发送的告警信息,然后对这些信息进行处理,例如将告警信息路由到不同的接收者、对告警进行静默或抑制等操作,最后将告警信息发送给接收者。

在配置文件中,alerting部分用于指定告警发送到的Alertmanager的地址。上述配置中的alerting: alertmanagers: - static_configs: - targets: ['alertmanager1.example.com:9093']指定了告警发送到的Alertmanager地址为"alertmanager1.example.com:9093"。

在这个配置中,alertmanagers是一个列表,其中每个元素都包含了一个static_configs部分。static_configs是一个字典,其中的targets键对应的值是一个列表,包含了Alertmanager的地址。在这个例子中,只有一个地址'alertmanager1.example.com:9093'

通过这样的配置,Prometheus可以将告警信息发送给指定的Alertmanager进行处理。

一个使用Alertmanager这个独立组件进行发送邮件和钉钉的告警案例

Alertmanager提供了一种方式来配置接收告警信息的通知接收器(receiver)。通知接收器定义了一组与告警相关的操作,例如发送电子邮件、发送短信、将告警信息存储到某个系统等。通过配置通知接收器,您可以指定在Prometheus触发告警时应该执行的操作。

以下是一个示例Alertmanager配置文件的一部分,用于配置一个发送电子邮件的通知接收器:

global:smtp_smarthost: 'smtp.example.com:587'smtp_from: 'alertmanager@example.com'smtp_auth_username: 'alertmanager'smtp_auth_password: 'password'smtp_require_tls: falsereceivers:
- name: 'email'email_configs:- to: 'alerts@example.com'from: 'alertmanager@example.com'subject: '[Alertmanager] Alerts for {{ .接收器的名字 }}'smtp_auth:username: 'alertmanager'password: 'password'smtp_smarthost: 'smtp.example.com:587'require_tls: false

在这个配置中,我们定义了一个名为"email"的通知接收器,并指定了一个发送电子邮件的配置。您可以根据您的需求修改这个配置,例如修改邮件的接收者、发件人、主题等。

然后,您需要在Alertmanager的配置文件中指定这个通知接收器。以下是一个示例Alertmanager配置文件的一部分:

route:receiver: 'email'

在这个配置中,我们指定了当Alertmanager接收到告警信息时,应该将它们发送到名为"email"的通知接收器。

最后,您需要将Alertmanager的配置文件部署到Alertmanager所在的服务器上,并确保Alertmanager可以读取和加载这个配置文件。然后,当Prometheus触发告警时,Alertmanager将根据配置发送相应的邮件通知。

Alertmanager和rule_files之间存在关联

Alertmanager是一个用于管理和发送告警信息的组件,而rule_files是配置告警规则的文件。

在Prometheus中,告警规则是基于Prometheus表达式语言的表达式进行定义的,用于检测特定情况并触发告警。这些规则被存储在rule_files中。Alertmanager通过读取rule_files中的规则,对Prometheus发送的告警信息进行匹配和后续处理。

Alertmanager的配置文件可以指定多个rule_files,每个文件包含一组告警规则。通过将这些规则文件与Alertmanager的配置文件进行关联,可以实现对告警信息的处理和通知。

以下是一个示例Alertmanager配置文件中的相关部分,用于指定rule_files的路径:

global:# rule_files字段指定了告警规则文件的路径rule_files:- 'rules/basic_rules.yml'- 'rules/complex_rules.yml'

在这个配置中,我们指定了两个规则文件:basic_rules.yml和complex_rules.yml。Alertmanager将读取这两个文件中的告警规则,并根据这些规则对接收到的告警信息进行匹配和后续处理。

通过配置rule_files,可以根据您的需求定义和管理告警规则,并将这些规则与Alertmanager的配置文件进行关联,以便在Prometheus触发告警时执行相应的操作。

在这些告警中怎么去指定我要使用哪一个 rule_files

在Alertmanager的配置文件中,可以通过指定rule_files字段来选择要使用的告警规则文件。rule_files字段接受一个字符串列表,每个字符串表示一个规则文件的路径。可以在配置文件中添加或修改rule_files字段来指定要使用的规则文件。

以下是一个示例Alertmanager配置文件的部分内容,展示了如何指定要使用的规则文件:

global:# rule_files字段指定了告警规则文件的路径rule_files:- 'path/to/rule_file_1.yml'- 'path/to/rule_file_2.yml'route:# route字段指定了告警处理和通知的路由规则receiver: 'ReceiverName'

在这个示例中,我们指定了两个规则文件:'path/to/rule_file_1.yml'和'path/to/rule_file_2.yml'。Alertmanager将按照在rule_files中定义的顺序读取这些规则文件。可以根据需要修改或添加更多的规则文件,只需将它们的路径添加到rule_files列表中即可。

请确保在修改Alertmanager的配置文件后,将其部署到Alertmanager所在的服务器上,并确保Alertmanager可以读取和加载这个配置文件。这样,当Prometheus触发告警时,Alertmanager将根据指定的规则文件进行匹配和处理。

告警的使用Alertmanager的案例

        当使用Alertmanager发送告警时,可以通过配置rule_files来实现针对特定情况的告警规则。下面是一个示例,展示了如何使用Alertmanager和rule_files来发送告警,包括将告警信息发送到钉钉和邮件中。

        首先,确保已经安装并配置了Alertmanager和Prometheus,并已经创建了用于发送钉钉和邮件的接收者。

创建规则文件:

创建一个名为rules/alerting_rules.yml的规则文件,其中包含以下内容:

groups:
- name: alerting_rulesinterval: 1mrules:- alert: AlertNameexpr: some_metric > 100for: 1mlabels:severity: highannotations:summary: High value detecteddescription: An alert has been triggered for the 'some_metric' metric exceeding 100.

在这个规则文件中,我们定义了一个名为AlertName的告警规则,使用了表达式some_metric > 100来检测超过100的值。告警会在指标超过100持续1分钟的情况下触发。我们为告警设置了标签severity: high和注释信息summarydescription

配置Alertmanager的接收者:

根据您的需求,配置Alertmanager的接收者以接收并处理告警信息。例如,如果您使用了钉钉作为接收者,请按照钉钉接收者的配置进行设置。如果您使用了电子邮件作为接收者,请按照电子邮件接收者的配置进行设置。确保接收者的配置正确并已启用。

以下是一个示例Alertmanager配置文件(alertmanager.yml)中的相关部分,用于指定钉钉接收者:

global:# 其他配置项...receivers:
- name: 'DingTalkReceiver'dingtalk_config:webhook_url: 'https://oapi.dingtalk.com/robot/send?access_token=your_access_token'send_resolved: trueroute:receiver: 'DingTalkReceiver'

在这个示例中,我们创建了一个名为DingTalkReceiver的接收者,并配置了钉钉的相关信息,包括webhook URL和发送已解决的告警。我们还将该接收者指定为默认的接收者(receiver: 'DingTalkReceiver')。

配置Prometheus的告警规则:

在Prometheus中,您需要将规则文件中的告警规则导入到Prometheus中。使用以下命令将规则文件导入到Prometheus:

kubectl apply -f rules/alerting_rules.yml
  1. 启动Alertmanager和Prometheus:

启动Alertmanager和Prometheus服务,确保它们正在运行。您可以使用以下命令启动Alertmanager:

kubectl apply -f alertmanager.yml
  1. 触发告警:

为了触发告警,您可以手动触发满足告警规则的条件。在Prometheus中,您可以使用pushgateway来模拟数据并触发告警规则。例如,使用以下命令将模拟数据推送到pushgateway

curl -X POST -H "Content-Type: application/json" --data '{"some_metric": 200}' http://<pushgateway_address>:<pushgateway_port>/metrics/job/alerting_rules/instance/prometheus-k8s-01/prometheus-k8s-01/default/alerting_rules/DingTalkReceiver/alertname/AlertName/severity/high/summary/High value detected/description/An alert has been triggered for the 'some_metric' metric exceeding 100. --header "Content-Type: application/json"
  1. 查看告警信息:

一旦满足告警规则的条件,P·1·1·1·1·1rometheus将发送告警信息给Alertmanager。Alertmanager将根据配置的接收者发送告警信息。在本例中,我们将通过钉钉接收告警信息。您可以在钉钉中查看收到的告警信息。

以上是一个简单的示例,展示了如何使用Alertmanager和rule_files发送告警信息到钉钉和邮件中。您可以根据实际需求进行相应的调整和配置。

本专栏中会专门出关于组件Alertmanager的讲解文章。

remote_write 和 remote_read:

remote_write和remote_read用于将数据投递到远程地址或者从远程地址读取数据。这使得Prometheus可以与其他系统进行集成,实现更强大的数据分析和处理能力。例如,可以将采集到的监控数据远程写入到其他的存储系统,或者从远程地址读取数据进行进一步的分析和处理。

remote_write:- url: "http://remote-write-url"write_relabel_configs:- source_labels: ['__address__']regex: '^localhost:(.*)$'target_label: '__address__'replacement: '${1}'- url: "https://another-remote-write-url"...
remote_read:- url: "http://remote-read-url"params: {'match[]': 'some_metric'}- url: "https://another-remote-read-url"...

上述配置使用remote_write将采集到的监控数据远程写入到两个不同的地址,使用write_relabel_configs对目标地址进行重写。同时,使用remote_read从两个不同的远程地址读取数据,并指定了匹配的指标名。

个人案例:

案例总结:

        在使用的时候需要指定配置文件的路径

global:scrape_interval: 15s # 设置抓取间隔为每15秒。evaluation_interval: 15s # 每隔15秒评估规则。rule_files:- /prometheus/rules/*.yml # 这里匹配指定目录下所有的.rules文件scrape_configs:- job_name: "阿丹服务器" #使用配置来发现服务static_configs:- targets: ['ip:9090']labels:instance: prometheus- job_name: "服务发现"file_sd_configs:- files:- /prometheus/ClientAll/*.json # 用json格式文件方式发现服务,下面的是用yaml格式文件方式,都可以refresh_interval: 10m- files:- /prometheus/ClientAll/*.yaml # 用yaml格式文件方式发现服务refresh_interval: 10m

相关文章:

Prometheus技术文档-基本使用-配置文件全解!!!!!

简介&#xff1a; Prometheus是一个开源的系统监控和告警系统&#xff0c;由Google的BorgMon监控系统发展而来。它主要用于监控和度量各种时间序列数据&#xff0c;比如系统性能、网络延迟、应用程序错误等。Prometheus通过采集监控数据并存储在时间序列数据库中&#xff0c;…...

宋浩高等数学笔记(十一)曲线积分与曲面积分

个人认为同济高数乃至数学一中最烧脑的一章。。。重点在于计算方式的掌握&#xff0c;如果理解不了可以暂时不强求&#xff0c;背熟积分公式即可。此外本贴暂时忽略两类曲面积分之间的联系&#xff0c;以及高斯公式的相关内容&#xff0c;日后会尽快更新&#xff0c;争取高效率…...

安卓如何快速定位native内存泄露。

步骤1&#xff09;cat /proc/pid/status,观察下面俩个指标 RssAnon: 5300 kB //一直增大说明匿名映射的内存增大&#xff0c;malloc本质就是调用匿名映射分 配内存 RssFile: 26884 kB //文件句柄泄露&#…...

redis学习笔记(二)

文章目录 redis数据类型string&#xff08;字符串&#xff09;1. 设置键值2. 设置键值的过期时间3. 关于设置保存数据的有效期4. 设置多个键值5. 字符串拼接值6. 根据键获取值7. 自增自减8. 获取字符串的长度9. 比特流操作 redis数据类型 redis可以理解成一个全局的大字典&…...

不侵入代码的rem适配,支持桌面缩放,vue2的适配方案,包含echarts适配

此方式不侵入代码&#xff0c;自动把px单位转换成rem单位 首先安装postcss-pxtorem5.1.1 yarn add postcss-pxtorem5.1.1 npm install postcss-pxtorem5.1.1 --save 项目根目录新建 postcss.config.js module.exports {plugins: {postcss-pxtorem: {rootValue: 14,propList…...

智能合约 -- 常规漏洞分析 + 实例

1.重入攻击 漏洞分析 攻击者利用合约漏洞&#xff0c;通过fallback()或者receive()函数进行函数递归进行无限取钱。 刚才试了一下可以递归10次&#xff0c;貌似就结束了。 直接看代码: 银行合约&#xff1a;有存钱、取钱、查看账户余额等函数。攻击合约: 攻击、以及合约接…...

JavaScript 操作历史记录api怎样使用 JavaScript

JavaScript 操作历史记录api怎样使用 JavaScript History 是 window 对象中的一个 JavaScript 对象&#xff0c;它包含了关于浏览器会话历史的详细信息。你所访问过的 URL 列表将被像堆栈一样存储起来。浏览器上的返回和前进按钮使用的就是 history 的信息。 History 对象包含…...

Spring 容器

提示&#xff1a;英语很重要&#xff0c;单词是读的&#xff0c;是拼出来的&#xff0c;和拼音一样 文章目录 前言前期准备1️⃣ DI 依赖注入1、xml 配置方式2、注解方式 annotation❗相关注解Spring中Bean的作用域❗Scope() 注解Qualifier("XXXServiceImpl") 指定哪…...

【腾讯云Cloud Studio实战训练营】使用React快速构建点餐H5

文章目录 前言一、Cloud Studio是什么二、Cloud Studio特点三、Cloud Studio使用1.访问官网2.账号注册3.模板选择4.模板初始化5.H5开发安装 antd-mobile安装 Less安装 normalize上传项目需要的素材替换App.js主文件项目启动、展示 6.发布仓库 总结 前言 随着云计算产业的发展&…...

Java培训课程哪个品牌好?快拿小本本记好

Java是一门广泛应用于企业级应用程序开发的高级编程语言&#xff0c;具有较高的学习和职业发展价值。但是&#xff0c;在选择Java培训课程时&#xff0c;很多人会遇到一个问题&#xff1a;Java培训课程哪个品牌好?小编经过多方分析和比较&#xff0c;从专业培训的角度&#xf…...

leetcode19. 删除链表的倒数第 N 个结点

题目&#xff1a;leetcode19. 删除链表的倒数第 N 个结点 描述&#xff1a; 给你一个链表&#xff0c;删除链表的倒数第 n 个结点&#xff0c;并且返回链表的头结点。 思路&#xff1a; 让前面的节点比后面的节点先走n1步&#xff0c;因为从链表的尾节点的下一个节点开始&…...

c51单片机串行通信示例代码(单片机--单片机通信)(附带proteus线路图)

//这个发送端代码 #include "reg51.h" #include "myheader.h" #define uchar unsigned char long int sleep_i0; long int main_i0; void main() {uchar sendx[6]{2,0,2,3,8,1};sleep(2000);TMOD0x20;TH10XF4;//根据波特率计算公式这里需要设置为这么多才能…...

UML之四种事物

目录 结构事物 行为事物 分组事物&#xff1a; 注释事物 结构事物 1.类(Class) -类是对一组具有相同属性、方法、关系和语义的对象的描述。一个类实现一个或多个接口 2.接口(interface) -接口描述 了一个类或构件的一个服务的操作集。接口仅仅是定义了一组操作的规范&…...

盒子模型和新盒子模型及区别

盒子模型是用于描述 HTML 元素在页面中占据的空间的概念。它将每个元素视为一个矩形框&#xff0c;由内容区域、内边距、边框和外边距组成。这个传统的盒子模型也被称为 "标准盒子模型"。 新盒子模型是指使用 CSS3 中的 box-sizing 属性设置为 border-box 后的一种盒…...

移动端Vue组件库-vant

Vant 是有赞前端团队开源的移动端vue组件库&#xff0c;适用于手机端h5页面。 鉴于百度搜索不到vant官方网址&#xff0c;分享一下vant组件库官网地址&#xff0c;方便新手使用 vant官网地址Vant 4 - A lightweight, customizable Vue UI library for mobile web apps. 通过 …...

Java课题笔记~ JSP内置对象

(1)九个内置对象 jsp的内置对象&#xff1a;JSP内置对象是不需要声明和创建就可以在JSP页面脚本中使用的成员变量。 九个内置对象&#xff1a; 1.out对象 在JSP页面中&#xff0c;经常需要向客户端发送文本内容&#xff0c;这时&#xff0c;可以使用out对象来实现。out对象…...

数据结构笔记--链表经典高频题

目录 前言 1--反转单向链表 2--反转单向链表-II 3--反转双向链表 4--打印两个有序链表的公共部分 5--回文链表 6--链表调整 7--复制含有随机指针结点的链表 8--两个单链表相交问题 前言 面经&#xff1a; 针对链表的题目&#xff0c;对于笔试可以不太在乎空间复杂度&a…...

Android Ble蓝牙App(三)特性和属性

Ble蓝牙App&#xff08;三&#xff09;特性使用 前言正文一、获取属性列表二、属性适配器三、获取特性名称四、特性适配器五、加载特性六、显示特性和属性七、源码 前言 在上一篇中我们完成了连接和发现服务两个动作&#xff0c;那么再发现服务之后要做什么呢&#xff1f;发现服…...

日常BUG——使用Long类型作id,后端返回给前段后精度丢失问题

&#x1f61c;作 者&#xff1a;是江迪呀✒️本文关键词&#xff1a;日常BUG、BUG、问题分析☀️每日 一言 &#xff1a;存在错误说明你在进步&#xff01; 一、问题描述 数据库long类型Id: 前端返回的Id实体类: Data ApiModel("xxx") public class …...

【C++初阶】string类的常见基本使用

&#x1f466;个人主页&#xff1a;Weraphael ✍&#x1f3fb;作者简介&#xff1a;目前学习C和算法 ✈️专栏&#xff1a;C航路 &#x1f40b; 希望大家多多支持&#xff0c;咱一起进步&#xff01;&#x1f601; 如果文章对你有帮助的话 欢迎 评论&#x1f4ac; 点赞&#x1…...

大数据学习栈记——Neo4j的安装与使用

本文介绍图数据库Neofj的安装与使用&#xff0c;操作系统&#xff1a;Ubuntu24.04&#xff0c;Neofj版本&#xff1a;2025.04.0。 Apt安装 Neofj可以进行官网安装&#xff1a;Neo4j Deployment Center - Graph Database & Analytics 我这里安装是添加软件源的方法 最新版…...

基于大模型的 UI 自动化系统

基于大模型的 UI 自动化系统 下面是一个完整的 Python 系统,利用大模型实现智能 UI 自动化,结合计算机视觉和自然语言处理技术,实现"看屏操作"的能力。 系统架构设计 #mermaid-svg-2gn2GRvh5WCP2ktF {font-family:"trebuchet ms",verdana,arial,sans-…...

江苏艾立泰跨国资源接力:废料变黄金的绿色供应链革命

在华东塑料包装行业面临限塑令深度调整的背景下&#xff0c;江苏艾立泰以一场跨国资源接力的创新实践&#xff0c;重新定义了绿色供应链的边界。 跨国回收网络&#xff1a;废料变黄金的全球棋局 艾立泰在欧洲、东南亚建立再生塑料回收点&#xff0c;将海外废弃包装箱通过标准…...

Qt Http Server模块功能及架构

Qt Http Server 是 Qt 6.0 中引入的一个新模块&#xff0c;它提供了一个轻量级的 HTTP 服务器实现&#xff0c;主要用于构建基于 HTTP 的应用程序和服务。 功能介绍&#xff1a; 主要功能 HTTP服务器功能&#xff1a; 支持 HTTP/1.1 协议 简单的请求/响应处理模型 支持 GET…...

【HTML-16】深入理解HTML中的块元素与行内元素

HTML元素根据其显示特性可以分为两大类&#xff1a;块元素(Block-level Elements)和行内元素(Inline Elements)。理解这两者的区别对于构建良好的网页布局至关重要。本文将全面解析这两种元素的特性、区别以及实际应用场景。 1. 块元素(Block-level Elements) 1.1 基本特性 …...

鱼香ros docker配置镜像报错:https://registry-1.docker.io/v2/

使用鱼香ros一件安装docker时的https://registry-1.docker.io/v2/问题 一键安装指令 wget http://fishros.com/install -O fishros && . fishros出现问题&#xff1a;docker pull 失败 网络不同&#xff0c;需要使用镜像源 按照如下步骤操作 sudo vi /etc/docker/dae…...

是否存在路径(FIFOBB算法)

题目描述 一个具有 n 个顶点e条边的无向图&#xff0c;该图顶点的编号依次为0到n-1且不存在顶点与自身相连的边。请使用FIFOBB算法编写程序&#xff0c;确定是否存在从顶点 source到顶点 destination的路径。 输入 第一行两个整数&#xff0c;分别表示n 和 e 的值&#xff08;1…...

Xen Server服务器释放磁盘空间

disk.sh #!/bin/bashcd /run/sr-mount/e54f0646-ae11-0457-b64f-eba4673b824c # 全部虚拟机物理磁盘文件存储 a$(ls -l | awk {print $NF} | cut -d. -f1) # 使用中的虚拟机物理磁盘文件 b$(xe vm-disk-list --multiple | grep uuid | awk {print $NF})printf "%s\n"…...

站群服务器的应用场景都有哪些?

站群服务器主要是为了多个网站的托管和管理所设计的&#xff0c;可以通过集中管理和高效资源的分配&#xff0c;来支持多个独立的网站同时运行&#xff0c;让每一个网站都可以分配到独立的IP地址&#xff0c;避免出现IP关联的风险&#xff0c;用户还可以通过控制面板进行管理功…...

破解路内监管盲区:免布线低位视频桩重塑停车管理新标准

城市路内停车管理常因行道树遮挡、高位设备盲区等问题&#xff0c;导致车牌识别率低、逃费率高&#xff0c;传统模式在复杂路段束手无策。免布线低位视频桩凭借超低视角部署与智能算法&#xff0c;正成为破局关键。该设备安装于车位侧方0.5-0.7米高度&#xff0c;直接规避树枝遮…...