Prometheus 服务监控
官网: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 提供多种语言的客户端库,用于帮助开发者将自定义应用程序的内部状态暴露为指标数据。
- 主要的客户端库支持以下语言:
- Go:
prometheus/client_golang
- Java / Scala:
prometheus/client_java
- Python:
prometheus/client_python
- Ruby:
prometheus/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 支持将数据通过远程存储接口发送到其他存储后端,以便进行长期存储和高可用性管理。
- 常见的远程存储系统包括 Thanos 和 Cortex,它们允许对 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 prometheuskill -9 <PID>
方式二:Docker 方式安装
拉取 Prometheus 的官方 Docker 镜像:
docker pull prom/prometheus
创建一个目录用于存储 Prometheus 数据
# 创建目录
mkdir -p /opt/prometheus/data# 更改目录的用户和组
chown -R 65534:65534 /opt/prometheus/data/
创建 Prometheus 的配置文件 prometheus.yml,文件内容如下:
vim /opt/prometheus/prometheus.yml
# 全局配置
global:scrape_interval: 15sevaluation_interval: 15s# 监控节点配置
scrape_configs:- job_name: "prometheus"static_configs:- targets: ["localhost:9090"]
启动 Prometheus 容器
docker run -d \--name prometheus \-p 9090:9090 \-v /opt/prometheus/data:/prometheus \-v /opt/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml \--user 65534:65534 \prom/prometheus \--config.file=/etc/prometheus/prometheus.yml \--storage.tsdb.path=/prometheus
查看 Docker 启动容器日志
docker logs prometheus
开放防火墙端口 (和云服务安全组端口)
firewall-cmd --zone=public --add-port=9090/tcp --permanent
firewall-cmd --reload
firewall-cmd --zone=public --list-ports
如果服务正常运行,可以通过浏览器访问 Prometheus 的 Web UI。在浏览器中访问:http://localhost:9090
如果页面不能正常访问,请重启下防火墙
systemctl restart firewalld
停止 Prometheus 容器
docker stop prometheus
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,需要配置为 httpsenable_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 的监听
方式二:Docker 方式安装
拉取 node_exporter 的官方 Docker 镜像:
docker pull prom/node-exporter
启动 node_exporter 容器
docker run -d \--name node_exporter \-p 9100:9100 \--pid="host" \-v "/:/host:ro,rslave" \prom/node-exporter \--path.rootfs=/host
查看 Docker 启动容器日志
docker logs node_exporter
开放防火墙端口 (和云服务安全组端口)
firewall-cmd --zone=public --add-port=9100/tcp --permanent
firewall-cmd --reload
firewall-cmd --zone=public --list-ports
如果服务正常运行,可以通过浏览器访问 Prometheus 的 Web UI。在浏览器中访问:http://localhost:9100/metrics
停止 node_exporter 容器
docker stop node_exporter
配置 Prometheus 抓取 node_exporter 的数据
(如果 node_exporter 和 Prometheus 使用同一台机器的 docker 部署的,那么这里需要查看 node_exporter 容器的 ip。如果不是在同一台机器,就直接使用另一台机器的物理ip地址即可。)
查看 Docker 运行使用的网络列表
docker network ls
查看 Docker 网络中运行的容器和ip地址(容器默认在bridge网络中运行)
docker network inspect bridge
在 prometheus.yml
配置文件中添加 node_exporter
作为抓取目标:
scrape_configs:- job_name: 'node_exporter'static_configs:- targets: ['172.17.0.4:9100'] # 同一台Docker部署的话就是容器ip地址(使用docker network inspect bridge查询)。否则就是物理机器ip地址。
重启 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: prometheusendpoint: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服务
相关文章:

Prometheus 服务监控
官网:https://prometheus.io Prometheus 是什么 Prometheus 是一个开源的系统监控和报警工具,专注于记录和存储时间序列数据(time-series data)。它最初由 SoundCloud 开发,并已成为 CNCF(云原生计算基金会…...

建模杂谈系列252 规则的串行改并行
说明 提到规则,还是需要看一眼RETE算法: Rete算法是一种用于高效处理基于规则的系统中的模式匹配问题的算法,广泛应用于专家系统、推理引擎和生产系统。它的设计目的是在大量规则和数据的组合中快速找到满足特定规则条件的模式。 Rete算法…...
0.ffmpeg面向对象oopc
因为查rtsp相关问题,接触了下ffmpeg源码,发现它和linux内核一样,虽然都是c写的,但是都是面向对象的思想,c的面向对象称之为oopc。 这让我想起来一件好玩的事,有些搞linux内核驱动的只会c的开发人员不知道l…...
KDD2024参会笔记-Day1
知乎想法:链接 听的第一场汇报:RAG Meeting LLMs 综述论文:https://arxiv.org/pdf/2405.06211 PPT:https://advanced-recommender-systems.github.io/RAG-Meets-LLMs/2024-KDD-RAG-Meets-LLM-tutorial-Part1.pdf 检索࿱…...

Java操作Elasticsearch的实用指南
Java操作Elasticsearch的实用指南 一、创建索引二、增删改查 一、创建索引 在ElasticSearch中索引相当于mysql中的表,mapping相当于表结构,所以第一步我们要先创建索引。 假设我们有一张文章表的数据需要同步到ElasticSearch,首先需要根据数据库表创建…...
数据库系统 第42节 数据库索引简介
数据库索引是数据库表中一个或多个列的数据结构,用于加快数据检索速度。除了基础的B-Tree索引,其他类型的索引针对特定的数据类型和查询模式提供了优化。以下是几种不同类型的索引及其使用场景的详细说明和示例代码。 1. 位图索引 (Bitmap Index) 位图…...

C++11 --- 智能指针
序言 在使用 C / C 进行编程时,许多场景都需要我们在堆上申请空间,堆内存的申请和释放都需要我们自己进行手动管理。这就存在容易造成堆内存泄露(忘记释放),二次释放,程序发生异常时内存泄露等问题…...

C#顺序万年历自写的求余函数与周位移算法
static int 返回月的天数(int 年, int 月){return (月 2 ?(((年 % 4 0 && 年 % 100 > 0) || 年 % 400 0) ? 29 : 28) :(((月 < 7 && 月 % 2 > 0) || (月 > 7 && 月 % 2 0)) ? 31 : 30));}static int 返回年总天数(int 年, int 标 …...

【Java并发编程一】八千字详解多线程
目录 多线程基础 1.线程和进程 线程是什么? 为啥要有线程? 进程和线程的区别? Java 的线程 和 操作系统线程 的关系 使用jconsole观察线程 2.创建线程的多种方式 3.Thread类及其常见方法 Thread类的常见构造方法 Thread类的常见属性…...
CentOS 8FTP服务器
FTP(文件传输协议)是一种客户端-服务器网络协议,允许用户在远程计算机之间传输文件。这里有很多可用于Linux的开源FTP服务软件,最流行最常用的FTP服务软件有 PureFTPd, ProFTPD, 和 vsftpd。在本教程中,我们将在CentOS…...

C++ | Leetcode C++题解之第385题迷你语法分析器
题目: 题解: class Solution { public:NestedInteger deserialize(string s) {if (s[0] ! [) {return NestedInteger(stoi(s));}stack<NestedInteger> st;int num 0;bool negative false;for (int i 0; i < s.size(); i) {char c s[i];if …...

【软件设计师真题】第一大题---数据流图设计
解答数据流图的题目关键在于细心。 考试时一定要仔细阅读题目说明和给出的流程图。另外,解题时要懂得将说明和流程图进行对照,将父图和子图进行对照,切忌按照常识来猜测。同时应按照一定顺序考虑问题,以防遗漏,比如可以…...
系统架构的发展历程之模块化与组件化
模块化开发方法 模块化开发方法是指把一个待开发的软件分解成若干个小的而且简单的部分,采用对复杂事物分而治之的经典原则。模块化开发方法涉及的主要问题是模块设计的规则,即系统如何分解成模块。而每一模块都可独立开发与测试,最后再组装…...

基因组学中的深度学习
----/ START /---- 基因组学其实是一门将数据驱动作为主要研究手段的学科,机器学习方法和统计学方法在基因组学中的应用一直都比较广泛。 不过现在多组学数据进一步激增——这个从目前逐渐增多的各类大规模人群基因组项目上可以看出来,这其实带来了新的挑…...

解决老师询问最高分数问题的编程方案
解决老师询问最高分数问题的编程方案 问题分析数据结构选择:线段树线段树的基本操作伪代码伪代码:构建线段树伪代码:更新操作伪代码:查询操作C语言实现代码详细解释在日常教学中,老师经常需要查询某一群学生中的最高分数,并有时会更新某位同学的成绩。为了实现这一功能,…...
com.baomidou.mybatisplus.annotation.DbType 无法引入
com.baomidou.mybatisplus.annotation.DbType 无法引入爆红 解决 解决 ❤️ 3.4.1 是mybatis-plus版本,根据实际的配置→版本一致 <dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-annotation</artifactId>&…...

从零开始学习JVM(七)- StringTable字符串常量池
1 概述 String应该是Java使用最多的类吧,很少有Java程序没有使用到String的。在Java中创建对象是一件挺耗费性能的事,而且我们又经常使用相同的String对象,那么创建这些相同的对象不是白白浪费性能吗。所以就有了StringTable这一特殊的存在&…...
数据库课程设计mysql
进行 MySQL 数据库课程设计通常包括以下几个步骤,从需求分析到数据库设计和实现。以下是一个常见的流程及要点: 1. 需求分析 首先,明确系统的功能需求。这包括用户需求、业务流程、功能模块等。你需要与相关人员(比如老师、同学…...
AI学习指南深度学习篇-带动量的随机梯度下降法的基本原理
AI学习指南深度学习篇——带动量的随机梯度下降法的基本原理 引言 在深度学习中,优化算法被广泛应用于训练神经网络模型。随机梯度下降法(SGD)是最常用的优化算法之一,但单独使用SGD在收敛速度和稳定性方面存在一些问题。为了应…...

点餐小程序实战教程03创建应用
目录 1 创建应用2 第一部分侧边栏3 第二部分页面功能区4 第三部分大纲树5 第四部分代码区6 第五部分模式切换7 第六部分编辑区域8 第七部分组件区域9 第八部分,发布区域10 第九部分开发调试和高阶配置总结 上一篇我们介绍了如何实现后端API,介绍了登录验…...

【CSS position 属性】static、relative、fixed、absolute 、sticky详细介绍,多层嵌套定位示例
文章目录 ★ position 的五种类型及基本用法 ★ 一、position 属性概述 二、position 的五种类型详解(初学者版) 1. static(默认值) 2. relative(相对定位) 3. absolute(绝对定位) 4. fixed(固定定位) 5. sticky(粘性定位) 三、定位元素的层级关系(z-i…...

令牌桶 滑动窗口->限流 分布式信号量->限并发的原理 lua脚本分析介绍
文章目录 前言限流限制并发的实际理解限流令牌桶代码实现结果分析令牌桶lua的模拟实现原理总结: 滑动窗口代码实现结果分析lua脚本原理解析 限并发分布式信号量代码实现结果分析lua脚本实现原理 双注解去实现限流 并发结果分析: 实际业务去理解体会统一注…...

多模态大语言模型arxiv论文略读(108)
CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文标题:CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文作者:Sayna Ebrahimi, Sercan O. Arik, Tejas Nama, Tomas Pfister ➡️ 研究机构: Google Cloud AI Re…...
全面解析各类VPN技术:GRE、IPsec、L2TP、SSL与MPLS VPN对比
目录 引言 VPN技术概述 GRE VPN 3.1 GRE封装结构 3.2 GRE的应用场景 GRE over IPsec 4.1 GRE over IPsec封装结构 4.2 为什么使用GRE over IPsec? IPsec VPN 5.1 IPsec传输模式(Transport Mode) 5.2 IPsec隧道模式(Tunne…...

使用Spring AI和MCP协议构建图片搜索服务
目录 使用Spring AI和MCP协议构建图片搜索服务 引言 技术栈概览 项目架构设计 架构图 服务端开发 1. 创建Spring Boot项目 2. 实现图片搜索工具 3. 配置传输模式 Stdio模式(本地调用) SSE模式(远程调用) 4. 注册工具提…...
BLEU评分:机器翻译质量评估的黄金标准
BLEU评分:机器翻译质量评估的黄金标准 1. 引言 在自然语言处理(NLP)领域,衡量一个机器翻译模型的性能至关重要。BLEU (Bilingual Evaluation Understudy) 作为一种自动化评估指标,自2002年由IBM的Kishore Papineni等人提出以来,…...
基于鸿蒙(HarmonyOS5)的打车小程序
1. 开发环境准备 安装DevEco Studio (鸿蒙官方IDE)配置HarmonyOS SDK申请开发者账号和必要的API密钥 2. 项目结构设计 ├── entry │ ├── src │ │ ├── main │ │ │ ├── ets │ │ │ │ ├── pages │ │ │ │ │ ├── H…...

CSS3相关知识点
CSS3相关知识点 CSS3私有前缀私有前缀私有前缀存在的意义常见浏览器的私有前缀 CSS3基本语法CSS3 新增长度单位CSS3 新增颜色设置方式CSS3 新增选择器CSS3 新增盒模型相关属性box-sizing 怪异盒模型resize调整盒子大小box-shadow 盒子阴影opacity 不透明度 CSS3 新增背景属性ba…...
node.js的初步学习
那什么是node.js呢? 和JavaScript又是什么关系呢? node.js 提供了 JavaScript的运行环境。当JavaScript作为后端开发语言来说, 需要在node.js的环境上进行当JavaScript作为前端开发语言来说,需要在浏览器的环境上进行 Node.js 可…...

动态规划-1035.不相交的线-力扣(LeetCode)
一、题目解析 光看题目要求和例图,感觉这题好麻烦,直线不能相交啊,每个数字只属于一条连线啊等等,但我们结合题目所给的信息和例图的内容,这不就是最长公共子序列吗?,我们把最长公共子序列连线起…...