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