首页 > 其他分享 >2、Grafana-Prometheus学习笔记

2、Grafana-Prometheus学习笔记

时间:2025-01-14 23:10:06浏览次数:1  
标签:存储 数据 笔记 Grafana 指标 Prometheus 告警 data

一、时序数据库:

时序数据库(Time Series Database, TSDB)是专门为处理和存储时序数据而设计的数据库。时序数据是带有时间戳的数据,通常用于表示随时间变化的测量值。时序数据库在许多应用领域中具有关键作用,包括物联网(IoT)、应用性能监控(APM)、金融市场分析、环境监测、工业自动化等。

当前主流的时序数据库:https://db-engines.com

二、InfluxDB、Prometheus与Graphite:

 

InfluxDB

Prometheus

Graphite

官方文档

InfluxDB官方文档

Prometheus官方文档

Graphite官方文档

简介

一个开源的时序数据库,专门用于存储和查询时序数据(metrics)。

一个开源的系统监控和报警工具,专注于时序数据收集、存储和查询。

一个开源的监控系统和图表展示工具,专注于时序数据存储和可视化

主要特点

- 高效存储时序数据

- 支持复杂的查询和聚合

- 提供内置的存储引擎(TSI, TSI2)

- 支持标签查询和数据索引

- 内置图形化仪表盘工具(Chronograf)

- 自动发现和抓取目标

- 支持多维度数据模型(标签)

- 高效的拉取式数据收集模型

- 提供丰富的报警机制

- 强大的查询语言PromQL

- 采用推送模式来收集数据

- 数据存储使用时间序列数据库

- 基于Cassandra或其他数据库存储

- 主要使用 Graphite-web 展示数据

性能特点

高写入吞吐量、低延迟查询,支持高效的数据压缩

高效的时间序列数据存储,适合高频率数据收集

存储性能较为有限,适合小规模和低频率的数据存储

查询语言

InfluxQL(类似SQL)或Flux

PromQL(Prometheus Query Language)

使用简单的查询语言(通过Graphite-web展示)

数据存储

时序数据专用存储引擎,支持压缩和高效查询

存储为 TSDB 格式,支持自定义存储后端

使用基于 Whisper 的文件系统存储(或者 Cassandra)

数据收集方式

推送或拉取,支持客户端库以及HTTP API

主要为拉取方式,支持自定义的抓取方式

推送模式,使用Carbon收集数据

数据模型

时序数据(时间戳、测量、标签、字段、值)

时序数据(时间戳、指标、标签)

时序数据(时间戳、指标、值)

扩展性

支持集群扩展(Enterprise版本),单实例有一定限制

支持水平扩展和分布式架构,适合大规模数据存储和查询

扩展性有限,基于单一节点或分布式的配置方式

报警与告警

内置告警机制(Kapacitor),支持定义复杂的告警规则

强大的告警功能,支持多种告警接收方式

通过第三方工具(如 Nagios、Alertmanager)实现告警功能

社区与支持

活跃的开源社区,有付费版本的支持

强大的开源社区,有丰富的文档和支持

较为成熟的社区,使用历史较长,但社区活跃度相对较低

应用场景

- IoT 数据监控

- 企业级时序数据分析

- 日志分析与度量收集

- 容器和微服务监控

- 集群和系统资源监控

- 高频数据收集和报警

- 基础设施监控

- 网络性能监控

- 存储和服务器状态监控

优点

- 高效存储与查询

- 丰富的查询语言(InfluxQL 和 Flux)

- 内置的可视化和报警支持

- 强大的自动发现与抓取机制

- 强大的查询语言 PromQL

- 与 Grafana 深度集成

- 简单易用,安装配置容易

- 适用于较小规模的监控项目

缺点

- 大规模集群和高可用性配置相对复杂

- 依赖企业版本的某些高级功能

- 存储层无内建高可用特性,主要依赖于外部存储

- 缺少内建的可视化工具,Prometheus Web UI,仅适用基础的查询和展示

- 可扩展性差,不适合大规模部署

- 存储性能不足,不能处理非常高频的数据

1、InfluxDB 是一个高效的时序数据库,适合于存储大规模时序数据,提供了强大的查询语言和内置的可视化工具。

2、Prometheus 适合于动态环境和微服务架构,提供强大的数据抓取和报警能力,常与 Grafana 配合使用来进行可视化展示。

3、Graphite 是一个较为成熟的监控工具,适合小规模的时序数据存储和展示,通常与 Grafana 配合使用来进行数据可视化。

三、Prometheus相关架构:

Prometheus 通过 Pushgateway 或 Job/exporters 的方式,定期从被监控的服务中拉取指标数据。这些服务通常通过 HTTP 暴露一个 /metrics 端点,Prometheus 通过该端点收集指标数据并存储在本地磁盘中。用户可以通过 PromQL 查询存储在 Prometheus 中的时序数据。Prometheus 还可以根据设定的告警规则,自动检查采集的数据,生成告警并触发相应操作。如果某个指标超出阈值或不符合特定条件,Prometheus 会发送告警到 Alertmanager,进行处理和转发。

1、Prometheus Server:

Prometheus Server 是 Prometheus 的核心组件,负责从被监控的目标(targets)收集(scrape)数据、存储数据、并提供查询和告警功能。

2、Pushgateway:

Pushgateway 是 Prometheus 的一个组件,用于接收从临时任务(如批处理任务)推送过来的指标数据。与 Prometheus 通常的拉取模式不同,Pushgateway 采用推送(push)方式将数据发送给 Prometheus。

由于Prometheus的拉取(pull)模式要求目标服务必须始终在线并持续暴露指标接口。然而,一些服务可能只存在一段很短的时间(例如批处理作业、定时任务或一次性任务),在它们执行完后,服务就会终止并且不再提供 HTTP 服务。这时候,Prometheus就无法拉取到数据。因此,当网络情况无法直接满足时,可以使用 pushgateway 来进行中转,将此类数据主动push到pushgateway里面去,而 prometheus 采用pull方式拉取 pushgateway 中数据。

3、Job/Exporters:

Job,即标签,通常是用来定义一组被监控目标的名称和配置。Job是 Prometheus配置文件(prometheus.yml)中的一个重要概念,每个 Job对应一个或多个监控目标(Exporter),这些目标会定期暴露其性能指标,Prometheus通过拉取这些指标来进行监控。

Exporter是一个暴露 Prometheus可抓取的指标数据的程序或服务。Exporter 通常负责从应用程序或系统收集性能指标,并将这些数据以HTTP服务的形式暴露给 Prometheus。

Exporter

备注

Node_Exporter

用于暴露系统级别的指标数据(如 CPU、内存、磁盘使用情况)

MySQL_Exporter

用于暴露数据库指标

4、Metrics:

Metrics,即指标,是 Prometheus 用来描述和衡量系统状态或性能的数字数据载体,通常以时间序列的形式存储。每个指标表示系统的某个度量值,比如请求数、内存使用量、响应时间等。

Metrics类型

定义

Counter

计数器类型的指标,值只能递增,用于记录事件发生的次数

Gauge

可以增加也可以减少的指标,通常用来记录当前值(如内存使用、温度等)

Histogram

记录观察值的分布情况,通过将观察值划分为不同的桶进行计数

Summary

与 Histogram 类似,但可以预计算一些分位数,如 50%、95% 等

Untyped

没有明确类型的指标,适用于用户自定义的特殊指标

5、PromQL:

PromQL 是 Prometheus 的查询语言,用于从 Prometheus 中存储的时序数据中查询、分析和操作数据。通过PromQL可以根据需求对 Metrics数据进行过滤、聚合、转换等操作。

6、Alertmanager:

Alertmanager 是 Prometheus 的组件之一,负责管理、分发告警。它接收 Prometheus 生成的告警信息,并根据配置将告警通知发送到用户指定的通知渠道(如邮件、Slack、Webhook 等)。

四、Docker-Prometheus安装:

1、Node Exporter:

用于从主机收集硬件和系统级别的指标

# 拉取Node_Exporter镜像:

docker pull prom/node-exporter

# 启动容器:

docker run -d --name node-exporter \

-p 9100:9100 \

-v /proc:/host/proc:ro \

-v /sys:/host/sys:ro \

-v /:/rootfs:ro \

prom/node-exporter

# 备注:

1、-p 9100:9100

将宿主机的 9100 端口映射到容器的 9100(node-exporter 默认)端口。node-exporter默认会在该端口上暴露监控指标。

2、-v /proc:/host/proc:ro

挂载宿主机的 /proc 目录到容器中的 /host/proc。/proc 目录包含了操作系统内核和进程的信息,node-exporter 需要访问这些信息来收集系统级别的性能指标。挂载时使用了 ro(只读)权限,确保容器无法修改宿主机的文件。

3、-v /sys:/host/sys:ro

类似地,挂载宿主机的 /sys 目录到容器中的 /host/sys。/sys 目录包含了与系统硬件相关的信息,node-exporter 也需要这些信息来收集指标。

4、-v /:/rootfs:ro

挂载宿主机的根文件系统到容器中的 /rootfs。node-exporter 需要访问宿主机的文件系统以收集一些额外的指标(如磁盘、文件系统的相关信息)。同样使用了只读权限。

# Metrics数据访问:

http://localhost:9100/metrics

2、Pushgateway:

允许短期任务将其指标推送到 Prometheus

# 拉取Pushgateway镜像:

docker pull prom/pushgateway

# 自定义数据存储文件夹:

/opt/install/data/pushgateway-data

# 修改文件夹权限:

chmod 777 -R /opt/install/data/pushgateway-data

# 启动容器:

docker run -d --name=pushgateway   \

-p 9091:9091   \

-v /opt/install/data/pushgateway-data:/pushgateway_data  \

prom/pushgateway

# Pushgateway管理访问:

http://localhost:9091/

# PUSH推送自定义测试Metric指标数据(不指定,默认untyped 类型):

echo "# TYPE <指标> <Metric类型>\n<指标{标签}> <值>" | curl --data-binary @- http://<ip:port>/metrics/job/<Job名>

# 案例一

echo "example_metric 1" | curl --data-binary @- http://localhost:9091/metrics/job/test_job

# 案例二

echo "example_metric{status=\"success\"} 1" | curl --data-binary @- http://localhost:9091/metrics/job/test2_job

# 案例三

echo -e "# TYPE test_metric counter\ntest_metric 2" | curl --data-binary @- http://localhost:9091/metrics/job/test3_job

# 清理指定Job数据:

curl -X DELETE http://ip:port/metrics/job/<Job名>

curl -X DELETE http://localhost:9091/metrics/job/test_job

3、Alertmanager:

处理并路由 Prometheus 发出的告警通知

# 拉取Alertmanager镜像:

docker pull prom/alertmanager

# 自定义数据存储文件夹:

/opt/install/data/alertmanager-data/config

/opt/install/data/alertmanager-data/template

# 修改文件夹权限:

chmod 777 -R /opt/install/data/alertmanager-data/config

chmod 777 -R /opt/install/data/alertmanager-data/template

# 编辑告警配置文件alertmanager.yml:

cat > /opt/install/data/alertmanager-data/config/alertmanager.yml << \EOF

# 全局配置

global:

  # 设置报警解决超时时间,单位:分钟

  resolve_timeout: 5m

  # 发件人邮箱配置

  smtp_from: 'xx@xx.com'

  # 邮箱服务器的主机配置,smtp.qq.com,端口为 465 或 587

  smtp_smarthost: 'smtp.qq.com:465'

  # 邮箱账户名

  smtp_auth_username: 'xx'

  # 邮箱授权码(不是密码)

  smtp_auth_password: '授权码'

  # 是否启用 TLS(此处不启用)

  smtp_require_tls: false

  # SMTP 主机的 HELO 域名

  smtp_hello: 'qq.com'

 

# 告警模板配置

templates:

  - '/opt/install/data/alertmanager-data/template/email.tmpl'

 

# 抑制规则配置

# 当存在 severity 为 critical 的告警时,抑制 severity 为 warning 的告警

# 源告警和目标告警必须在 alertname、dev 和 instance 标签上相等

inhibit_rules:

  - source_match:

      severity: 'critical'

    target_match:

      severity: 'warning'

    equal: ['alertname', 'dev', 'instance']

 

# 路由配置

route:

  # 根据告警名称分组

  group_by: ['alertname']

  # 等待时间,用于等待同一组内的其他告警

  group_wait: 5s

  # 分组后发送告警的时间间隔

  group_interval: 5m

  # 发送告警间隔时间 s/m/h,如果指定时间内没有修复,则重新发送告警

  repeat_interval: 1h

  # 默认接收器,自定义接收器名default-receiver,用于处理没有匹配到其他路由规则的告警

  receiver: 'default-receiver'

  routes:

    # 使用正则表达式匹配 alarmClassify 标签为 critical 的告警

    - match_re:

        alarmClassify: '^critical$'

      # 自定义critical-alerts 接收器名,接收 critical 的告警

      receiver: 'critical-alerts'

    # 使用正则表达式匹配 alarmClassify 标签为 warning 的告警

    - match_re:

        alarmClassify: '^warning$'

      # 自定义warning-alerts 接收器名,接收 warning 的告警

      receiver: 'warning-alerts'

 

# 接收器配置

receivers:

  # 默认接收器

  - name: 'default-receiver'

    email_configs:

      # 默认接收器的收件人,多个人就以 ',' 做分割

      - to: 'default-receiver@example.com'

        # 发送已解决的告警通知

        send_resolved: true

        # 接收邮件的标题

        headers: {Subject: "alertmanager默认告警邮件"}

    # 严重告警接收器

  - name: 'critical-alerts'         

    email_configs:

      - to: 'critical-alerts@example.com'

        send_resolved: true

        # 接收邮件的标题

        headers: {Subject: "alertmanager严重告警邮件"}  

    # 警告告警接收器

  - name: 'warning-alerts'                

    email_configs:

      - to: 'warning-alerts@example.com'

        send_resolved: true

        # 接收邮件的标题

        headers: {Subject: "alertmanager警告告警邮件"}

EOF

# 编辑告警模板配置文件email.tmpl:

cat > /opt/install/data/alertmanager-data/template/email.tmpl << \EOF

{{ define "email.html" }}

<table border="1">

    <tr>

        <td>报警项</td>

        <td>实例</td>

        <td>报警阀值</td>

        <td>开始时间</td>

        <td>告警信息</td>

    </tr>

    {{ range $i, $alert := .Alerts }}

    <tr>

         <td>{{ index $alert.Labels "alertname" }}</td>

         <td>{{ index $alert.Labels "instance" }}</td>

         <td>{{ index $alert.Annotations "value" }}</td>

         <td>{{ $alert.StartsAt }}</td>

         <td>{{ index $alert.Annotations "description" }}</td>

     </tr>

   {{ end }}

</table>

{{ end }}   

EOF

# 启动容器:

docker run -d --name=alertmanager   \

-p 9093:9093    \

-v /etc/localtime:/etc/localtime:ro \

-v /opt/install/data/alertmanager-data/config/alertmanager.yml:/etc/alertmanager/alertmanager.yml  \

-v /opt/install/data/alertmanager-data/template:/etc/alertmanager/template    \

prom/alertmanager

# Alertmanager管理访问:

http://localhost:9093/

 

4、Prometheus Server:

核心组件,负责采集、存储指标数据,并生成告警

# 拉取Prometheus镜像:

docker pull prom/prometheus

# 自定义数据存储文件夹:

/opt/install/data/prometheus-data

# 修改文件夹权限:

chmod 777 -R /opt/install/data/prometheus-data

# 编辑prometheus.yml配置信息:

cat > /opt/install/data/prometheus-data/prometheus.yml << \EOF

# prometheus.yml

global:

  # 设置抓取目标间隔为 60 秒

  scrape_interval: 60s  

  # 设置评估规则(如报警规则等)间隔为 60 秒    

  evaluation_interval: 60s

 

# job_name: 自定义抓取目标的名称

scrape_configs:

  # 配置 Prometheus 作为数据源

  - job_name: 'prometheus'

    static_configs:

      # Prometheus 本身

      - targets: ['localhost:9090']

 

  # 配置 Node Exporter

  - job_name: 'node_exporter'

    static_configs:

      # 指定 Node Exporter 的目标(可以是多个节点),修改localhost

      - targets: ['localhost:9100']

 

  # 配置 Pushgateway

  - job_name: 'pushgateway'

    static_configs:

      # Pushgateway 的目标,修改localhost

      - targets: ['localhost:9091']

 

  # 配置 Alertmanager

  - job_name: 'alertmanager'

    static_configs:

      # Alertmanager 的目标,修改localhost

      - targets: ['localhost:9093']

EOF

# 启动容器:

docker run  -d --name prometheus   \

-p 9090:9090    \

-v /opt/install/data/prometheus-data/prometheus.yml:/etc/prometheus/prometheus.yml    \

prom/prometheus

# Prometheus管理访问:

http://localhost:9090/

查看启动信息:

查询监控指标数据:

Metric指标{标签}

五、Grafana-Prometheus可视化配置:

1、Prometheus数据源导入:

2、添加新的仪表板:

六、PromQL数据查询:

Prometheus 通过指标名称(metrics name)以及对应的一组标签(labelset)唯一定义一条时间序列。指标名称反映了监控样本的基本标识,而 label 则在这个基本特征上为采集到的数据提供了多种特征维度。用户可以基于这些特征维度过滤,聚合,统计从而产生新的计算后的一条时间序列。

PromQL是 Prometheus内置的数据查询语言,用于从Prometheus中存储的时序数据中查询、分析和操作数据。通过PromQL可以根据需求对 Metrics指标数据进行过滤、聚合、转换等操作。

1、匹配方式:

功能

示例

说明

完全匹配模式

label=value

根据标签匹配满足表达式的时间序列

label!=value

根据标签匹配排除时间序列

正则匹配模式

label=~value1|value2

根据标签匹配满足value1或value2的时间序列

label!~value1|value2

根据标签匹配排除满足value1或value2的时间序列

2、基础查询:

功能

示例

说明

查询单个指标

up

表示实例是否在正常运行(1表示正常,0表示异常)

查询指定实例的指标值

up{instance="localhost:9090"}

表示指定实例是否在正常运行(1表示正常,0表示异常)

获取时间序列

指标名

获取指定指标的所有时间序列数据

使用标签筛选

指标{标签=”值”}

获取带有指定标签值的时间序列数据

3、聚合操作:

功能

示例

说明

求和

sum(指标)

对指定指标进行求和

计算平均值

avg(指标)

对指定指标计算平均值

计算最大值

max(指标)

获取指定指标的最大值

计算最小值

min(指标)

获取指定指标的最小值

计数

count(指标)

计算指定指标的时间序列数目

按标签聚合

sum(指标) by (标签code)

按照指定code标签进行聚合,计算每个job 的总请求数。

排除某些标签

sum(指标) without (标签code)

对指标按标签聚合,但排除指定code标签。

4、时间范围操作:

功能

示例

说明

最近值

指标[5m]

获取过去 5 分钟内的时间序列数据

过去平均值

avg_over_time(指标[1h])

计算过去 1 小时的平均值

过去最大值

max_over_time(指标[1d])

计算过去 1 天的最大值

过去最小值

min_over_time(指标[1d])

计算过去 1 天的最小值

5、数学和函数操作:

功能

示例

说明

加法

指标 + 10

对指定指标加上一个常数

乘法

指标 * 2

对指定指标乘以一个常数

取对数

log2(指标)

对指定指标取对数

6、变化率计算:

功能

示例

说明

增量计算

rate(指标[5m])

计算过去 5 分钟内指标的增量

速率计算

irate(指标[5m])

计算每秒的增量速率

变化率

increase(指标[1h])

计算过去 1 小时内的指标总变化量

7、条件判断:

功能

示例

说明

判断条件

指标 > 100

过滤出指标值大于 100 的时间序列数据

和条件结合

指标{标签="值"} > 100

过滤出指定指标且值大于 100 的时间序列数据

8、排序与限制:

功能

示例

说明

排序

topk(5, 指标)

获取值前 5 名的时间序列

排序

bottomk(5, 指标)

获取值后 5 名的时间序列

七、SpringBoot-Prometheus监控埋点:

Micrometer 是 Spring Boot 的度量系统,它用于收集应用程序运行时的各种指标数据,并将这些数据发送到外部监控系统(例如 Prometheus、Graphite、Datadog 等)。它为Spring应用提供了统一的API来定义、收集和发送这些指标。

Spring Boot 中的 spring-boot-starter-actuator 依赖已经集成了对 Micrometer 的支持,通过暴露 Prometheus 监控端点(如 /actuator/prometheus),使得Spring Boot应用作为 Prometheus 的客户端,允许 Prometheus(作为服务端)定期抓取该端点提供的 Micrometer 指标数据,并将其存储在时间序列数据库中,最终通过 Grafana 从 Prometheus 获取数据并进行可视化展示。

1、添加依赖:

<!--SpringBoot监控系统-->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<!--用于导出prometheus系统类型的指标数据-->
<dependency>
    <groupId>io.micrometer</groupId>
    <artifactId>micrometer-registry-prometheus</artifactId>
</dependency>

2、YML配置:

# actuator服务监控端点配置
management:
  endpoints.web.exposure.include: "*"   # actuator 服务监控 应包含的端点ID或所有的“*”, 默认只开放了info、health
  endpoint:
    health.show-details: ALWAYS         # 健康信息显示详情.
    shutdown.enabled: false             # 允许应用以优雅的方式关闭(默认情况下不启用)
  # Actuator端点将通过 http://localhost:18081/actuator/prometheus 访问Metrics信息
  server:
    port: 18081

3、指标配置管理:

import io.prometheus.client.CollectorRegistry;
import io.prometheus.client.Counter;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.stereotype.Component;

/**
 * @description: 普罗米修斯监控配置
 */
@Component
public class PromConfig {

    /**
     * CollectorRegistry容器:负责收集和管理所有注册到其中的指标
     */
    @Autowired
    private CollectorRegistry collectorRegistry;

    /**
     * Metrics类型: Counter
     * 设置指标名称: http_requests_total
     * 设置添加两个标签:functionName、status
     * 设置指标描述性帮助信息:Counter测试监控
     * @return
     */
    @Bean(name = "prometheusMetricsCounter")
    public Counter prometheusMetricsCounter(){
        return Counter.build()
                .name("http_requests_total")
                .labelNames("functionName","status")
                .help("Counter测试监控")
                .register(collectorRegistry);
    }

}

4、监控埋点:

    @Resource(name = "prometheusMetricsCounter")
    private Counter prometheusMetricsCounter;

    @PostMapping(value = "/demo")
    public String monitorPointTest() {
        String status = "success";
        if("success".equals(status)) {
            //监控埋点:inc()方法增加 Counter 指标的值
            prometheusMetricsCounter.labels("monitorPointTest", status).inc();
        }
        return status;
    }

5、Prometheus-Grafana管理:

(1)、查看Actuator端点的Metrics信息:

http://localhost:18081/actuator/prometheus

(2)、配置Prometheus抓取Spring Boot应用的指标:

Prometheus.yml配置文件声明:

scrape_configs:

  # 配置 SpringBoot监控埋点

  - job_name: 'springboot_actuator_to_prometheus_demo'

    metrics_path: '/actuator/prometheus'

    static_configs:

      # springboot监控的目标

      - targets: ['localhost:18081']

(3)、Prometheus查看http_requests_total指标信息:

(4)、Grafana可视化管理:

 

标签:存储,数据,笔记,Grafana,指标,Prometheus,告警,data
From: https://www.cnblogs.com/Iven-L/p/18671881

相关文章

  • MYSQL学习笔记(一):准备数据和数据库的最基本命令
    前言:学习和使用数据库可以说是程序员必须具备能力,这里将更新关于MYSQL的使用讲解,大概应该会更新30篇+,涵盖入门、进阶、高级(一些原理分析);这一篇是入门准备数据和一些关于数据库的操作命令;虽然MYSQL命令很多,但是自己去多敲一点,到后面忘记了,查一下就可以回忆起来使用了;这......
  • 【研发笔记20251114】技术自信 &
    技术自信我们要拥有技术自信!我们许多同学,是缺乏技术自信的。我们习惯了代码有改动,就提测给测试组的同学来进行测试验证。虽说有测试组,但有些开发改动,我们开发者,凭借我们的专业能力(技术能力),可以自己确信没有问题,可以不用一律提测。例如:重命名一个底层工具类的publicstatic方......
  • 《CPython Internals》阅读笔记:p151-p151
    《CPythonInternals》学习第9天,p151-p1510总结,总计1页。一、技术总结无。二、英语总结(生词:1)1.marshal(1)marshalingMarshallingormarshaling(USspelling)istheprocessoftransformingthememoryrepresentationofanobjectintoadataformsuitablefo......
  • 1、Grafana学习笔记
    Grafana是一个开源的数据可视化和分析平台,是网络架构和应用分析中最流行的时序数据展示工具,专门用于帮助用户实时监控和分析各种数据源(如时序数据、日志数据等)。Grafana被广泛应用于系统监控、性能分析、业务指标追踪等场景,特别是在DevOps、IT运维和数据分析领域中。一、Grafa......
  • 【学习笔记】函数复合:[PKUSC 2024] 排队
    函数复合是这样的一类问题:有一个函数序列\(f_1,f_2,f_3,...,f_n\)。离线询问,给定参数\(x\),\(f_r(f_{r-1}(...f_l(x)))\)的值。有点抽象对吧。看道题就懂了。[PKUSC2024]排队QOJ题目链接:#8672.排队。(反正我在其他OJ上没找到)前置知识:平衡树题面上有简化题意,但......
  • WebScoket学习笔记
    WebScoket学习笔记1.消息推送常用方式介绍轮询浏览器以指定的时间间隔向服务器发出HTTP请求,服务器实时返回数据给浏览器。长轮询浏览器发出ajax请求,服务器端接收到请求后,会阻塞请求直到有数据或者超时才返回。SSEserver-sent-event:服务器发送事件SSE是在服务器和客户......
  • 江科大STM32入门——读写备份寄存器(BKP)&实时时钟(RTC)笔记整理
    wx:嵌入式工程师成长日记https://mp.weixin.qq.com/s/hDk7QaXP8yfYIj1gUhtMrw?token=1051786482&lang=zh_CNhttps://mp.weixin.qq.com/s/hDk7QaXP8yfYIj1gUhtMrw?token=1051786482&lang=zh_CNRTC是一个独立的定时器,BKP并不能完全掉电不丢失,其可以完成一些主电源掉电时,保存少......
  • EPLAN P8 学习笔记 配图 20250114
    组织结构、细节会生疏。Pageproperties-Fullpagename、Pagetype、PagedescriptionFullpagename-StructureidentifiersMainProjecttree-IdentifierStructurePageTypeNameDescriptionPagesObject元素structure结构identifier.excalidrawProjectData-S......
  • 2024秋季学期 理论力学期末复习笔记
    参考资料[1]秦敢,向守平.力学与理论力学(下册)[M].科学出版社,2017.8.[2]曹利明.理论力学课程讲义[Z].中国科学技术大学,2024.拉格朗日力学哈密顿力学刚体部分......
  • 《构建之法》阅读笔记二
    深入探索团队协作与软件项目管理再次研读《构建之法》,团队协作与软件项目管理的内容让我感触颇深。软件开发中,团队协作至关重要,直接影响项目成败。书中指出,团队成员间的沟通与协作是项目推进的关键。不同角色成员,如开发人员、测试人员、产品经理等,只有紧密配合,才能保证项目顺利......