关于prometheus的一些简单的理解和总结

一、pushgateway和Node Exporter区别

1.Pushgateway

  • 数据采集方式:传统的 Prometheus 是通过拉取(pull)的方式从目标系统获取监控指标数据。而 Pushgateway 允许客户端主动推送(push)指标数据到它这里,然后 Prometheus 再从 Pushgateway 拉取数据 。这种方式打破了 Prometheus 只能主动拉取数据的限制,适用于那些无法被 Prometheus 直接拉取数据的场景,比如一些短生命周期的任务(如一次性的批处理作业),这些任务运行时间短,Prometheus 可能来不及去拉取数据,任务就结束了,此时就可以将任务的指标数据推送到 Pushgateway。
  • 适用场景
    • 批处理任务监控:像每天定时执行的数据库备份脚本、数据清洗作业等,在任务执行完成后,将执行状态(成功或失败次数)、耗时、处理的数据量等指标推送到 Pushgateway。
    • 网络隔离环境:当目标系统处于严格的网络隔离环境,无法与 Prometheus 直接通信时,可以在允许的网络区域部署 Pushgateway,目标系统将数据推送到 Pushgateway,再由 Pushgateway 提供给 Prometheus。
  • 数据持久性:Pushgateway 中的数据默认是临时存储的,它不保证数据的长期保存。如果 Pushgateway 重启或者客户端长时间不推送新数据,之前的数据可能会过期被删除。
  • 默认监听端口:9091

安装配置方法:

在安装prometheus主机上的vim /usr/local/prometheus/conf/prometheus.yml里面添加下面的内容
客户端主机上需要安装上Pushgateway

方法1:静态发现

复制代码
  - job_name: "pushgateway"
    honor_labels: true  # 可选项,设置为true,Prometheus将使用Pushgateway上的job和instance标签。
                        # 如果设置为false,它将重命名这些值,在它们前面加上exported_前缀,并在服务器上为这些标签附加新值。
    scrape_interval: 10s  # 可选项
    static_configs:
      - targets: ["10.0.0.101:9091"]  # 目标Pushgateway服务器地址

客户端主机上安装Pushgateway 略 可以从github上进行下载解压

执行脚本以客户端为10.0.0.101为例

复制代码
#!/bin/bash

# Configuration
METRIC_NAME="login_number"
METRIC_VALUE_CMD="who | wc -l"
METRIC_TYPE="gauge"
METRIC_HELP="login user number"

# Optional metric (commented out)
# METRIC_NAME="mem_free"
# METRIC_VALUE_CMD="free -b | awk 'NR==2{print \$4}'"
# METRIC_TYPE="gauge"
# METRIC_HELP="free memory"

# Pushgateway settings
PUSHGATEWAY_HOST="10.0.0.101:9091"
EXPORTED_JOB="pushgateway_job"
INSTANCE=$(hostname -I | awk '{print $1}')
SLEEP_TIME=1

# Construct cURL command
CURL_URL="curl --silent --data-binary @- http://${PUSHGATEWAY_HOST}/metrics/job/${EXPORTED_JOB}/instance/${INSTANCE}"

# Function to push metrics
push_metric() {
    while true; do
        VALUE=$(eval "$METRIC_VALUE_CMD")

        # Send metrics to Pushgateway
        cat <<EOF | $CURL_URL
# HELP ${METRIC_NAME} ${METRIC_HELP}
# TYPE ${METRIC_NAME} ${METRIC_TYPE}
${METRIC_NAME} ${VALUE}
EOF

        # Add error handling
        if [ $? -ne 0 ]; then
            echo "[$(date)] Failed to push metric ${METRIC_NAME}" >&2
        fi

        sleep $SLEEP_TIME
    done
}

# Start pushing metrics
push_metric

方法2:文件形式的自动发现

复制代码
  - job_name: pushgateway
    honor_labels: true
    file_sd_configs:
      - files:
          - targets/pushgateway/*.json
        refresh_interval: 5m

#pushgateway目标:
vim /usr/local/prometheus/conf/targets/pushgateway/test.json

{"targets": \["10.0.0.101:9091"\]}

2.Node Exporter

  • 数据采集方式:Node Exporter 遵循 Prometheus 拉取数据的模型,它在目标主机上运行,暴露 HTTP 接口,当 Prometheus 按照配置的抓取任务和时间间隔来请求该接口时,Node Exporter 会将主机的系统指标(如 CPU 使用率、内存使用量、磁盘 I/O、网络流量等)以 Prometheus 可识别的格式返回。
  • 适用场景:主要用于长期监控服务器主机的系统资源使用情况。无论是物理服务器、虚拟机还是容器环境中的主机,Node Exporter 都能持续提供详细的基础性能指标,方便运维人员实时掌握主机的运行状态,进行性能分析、故障排查以及容量规划等工作 。
  • 数据持久性:Node Exporter 本身不负责数据的持久化存储,它只是定期将采集到的指标提供给 Prometheus,由 Prometheus 进行数据的存储和管理。
  • 默认监听端口:9100

安装和配置方法:

在安装prometheus主机上的vim /usr/local/prometheus/conf/prometheus.yml里面添加下面的内容
同时按照下面的例子,101,102主机上需要安装上node_exporter

复制代码
 - job_name: 'node_exporter'
    static_configs:
      - targets: ['10.0.0.101:9100','10.0.0.102:9100']

3.两者对比总结

  • 数据流向:Pushgateway 是客户端推数据到它,再由 Prometheus 拉取;Node Exporter 是 Prometheus 直接从它拉取数据 。
  • 应用场景:Pushgateway 针对特殊场景(短任务、网络受限等)的数据采集;Node Exporter 专注于主机系统指标的长期、稳定采集。
  • 数据性质:Pushgateway 数据临时、动态变化大;Node Exporter 数据相对稳定、持续产生。

简单来说,虽然它们都服务于 Prometheus 的数据采集,但 Pushgateway 拓展了 Prometheus 的数据采集方式,而 Node Exporter 则是 Prometheus 进行主机监控的重要组件。

二、PromQL运算

对于PromQL来说,它的操作符号主要有以下两类:
①二元运算符
https://prometheus.io/docs/prometheus/latest/querying/operators/
②聚合运算
https://prometheus.io/docs/prometheus/latest/querying/operators/

rateirate****函数
都表示变化速率,但有所不同。
rate函数可以用来求指标的平均变化速率
rate函数=时间区间前后两个点的差 / 时间范围
irate函数=时间区间内最后两个样本点的差 / 最后两个样本点的时间差
一般情况下,irate函数的图像峰值变化大,rate函数变化较为平缓。

相关推荐
Apache RocketMQ1 天前
基于 RocketMQ Prometheus Exporter 打造定制化 DevOps 平台
阿里云·云原生·消息队列·rocketmq·prometheus·devops
core5125 天前
prometheus+grafana接入nginx实战
nginx·grafana·prometheus·监控·接入·vts·vtx
鼠鼠我捏,要死了捏8 天前
大规模集群下 Prometheus 监控架构实战经验分享
prometheus·monitoring·devops
山岚的运维笔记8 天前
AlpineLinux使用docker部署prometheus
docker·容器·prometheus
DaxiaLeeSuper9 天前
Prometheus+Grafana+node_exporter监控linux服务器资源的方案
linux·grafana·prometheus
core51210 天前
Grafana接入Prometheus实战
grafana·prometheus
奈斯ing10 天前
【prometheus+Grafana篇】PromQL核心函数解析:rate()与irate()函数详解
运维·grafana·prometheus
lingRJ77712 天前
从混沌到掌控:基于OpenTelemetry与Prometheus构建分布式调用链监控告警体系
java·springboot·prometheus·backend·opentelemetry·jaeger·microservices
码上淘金14 天前
【Prometheus 】通过 Pushgateway 上报指标数据
prometheus