Prometheus 的标签和度量如何使用?

随着云计算和大数据技术的飞速发展,监控已经成为企业保障系统稳定运行的重要手段。Prometheus 作为一款开源的监控解决方案,因其强大的功能、灵活的架构和易用的特性,在业界得到了广泛的应用。本文将详细介绍 Prometheus 的标签和度量如何使用,帮助您更好地理解和运用 Prometheus。

一、Prometheus 标签概述

Prometheus 中的标签(Labels)是一种元数据,用于描述监控目标(如服务、主机等)的特性。标签具有以下特点:

  • 唯一性:每个标签只能有一个值。
  • 可扩展性:可以定义任意数量的标签。
  • 动态性:标签的值可以在运行时动态更改。

二、Prometheus 度量概述

Prometheus 中的度量(Metrics)是监控目标提供的数据,用于描述系统的状态。度量分为以下几种类型:

  • 计数器(Counter):用于衡量事件发生的次数,如请求次数、错误次数等。
  • gauge(Gauge):用于衡量系统的实时状态,如内存使用率、CPU 使用率等。
  • 直方图(Histogram):用于衡量事件发生的时间分布,如请求响应时间等。
  • 摘要(Summary):用于衡量事件发生的次数和值,如请求成功次数、请求失败次数等。

三、Prometheus 标签和度量的使用方法

  1. 定义监控目标

首先,需要定义需要监控的目标,例如服务、主机等。可以使用 Prometheus 的配置文件(prometheus.yml)或 API 来定义。

scrape_configs:
- job_name: 'example'
static_configs:
- targets: ['localhost:9090']

  1. 添加标签

在监控目标中,可以添加标签来描述其特性。例如,以下配置为名为 example 的服务添加了 appenv 两个标签:

scrape_configs:
- job_name: 'example'
static_configs:
- targets: ['localhost:9090']
labels:
app: 'web'
env: 'production'

  1. 创建度量

在监控目标中,可以创建度量来描述其状态。以下示例展示了如何创建一个计数器度量 requests_total

scrape_configs:
- job_name: 'example'
static_configs:
- targets: ['localhost:9090']
labels:
app: 'web'
env: 'production'
metrics_path: '/metrics'
relabel_configs:
- source_labels: ['app', 'env']
action: keep
regex: '^(web|production)$'
metrics:
- name: 'requests_total'
help: 'Total number of requests.'
type: counter
labels:
method: '{job.name}'
code: '{code}'

  1. 查询度量

可以使用 Prometheus 的查询语言 PromQL 来查询度量。以下示例展示了如何查询 requests_total 度量的值:

sum(rate(requests_total[5m])) by (app, env)

四、案例分析

假设我们有一个名为 web 的应用,部署在两个不同的环境(productionstaging)中。我们想监控这两个环境的请求次数。

  1. 定义监控目标:
scrape_configs:
- job_name: 'web_production'
static_configs:
- targets: ['192.168.1.10:9090']
labels:
app: 'web'
env: 'production'
- job_name: 'web_staging'
static_configs:
- targets: ['192.168.1.11:9090']
labels:
app: 'web'
env: 'staging'

  1. 创建度量:
scrape_configs:
- job_name: 'web_production'
static_configs:
- targets: ['192.168.1.10:9090']
labels:
app: 'web'
env: 'production'
metrics_path: '/metrics'
relabel_configs:
- source_labels: ['app', 'env']
action: keep
regex: '^(web|production)$'
metrics:
- name: 'requests_total'
help: 'Total number of requests.'
type: counter
labels:
method: '{job.name}'
code: '{code}'
- job_name: 'web_staging'
static_configs:
- targets: ['192.168.1.11:9090']
labels:
app: 'web'
env: 'staging'
metrics_path: '/metrics'
relabel_configs:
- source_labels: ['app', 'env']
action: keep
regex: '^(web|staging)$'
metrics:
- name: 'requests_total'
help: 'Total number of requests.'
type: counter
labels:
method: '{job.name}'
code: '{code}'

  1. 查询度量:
sum(rate(requests_total[5m])) by (app, env)

以上示例展示了如何使用 Prometheus 的标签和度量来监控不同环境的请求次数。通过添加更多标签和度量,可以实现对更多监控目标的监控。

猜你喜欢:云原生NPM