exporter
阅读原文时间:2023年07月16日阅读:3

何为 Prometheus Exporter?

Prometheus 监控基于一个很简单的模型: 主动抓取目标的指标接口(HTTP 协议)获取监控指标, 再存储到本地或远端的时序数据库. Prometheus 对于指标接口有一套固定的格式要求, 格式大致如下:

# HELP http_requests_total The total number of HTTP requests.

# TYPE http_requests_total counter

http_requests_total{method="post",code="200"} 1027

http_requests_total{method="post",code="400"}    3 

而这样的代理服务, 就称作 Prometheus Exporter, 对于上面那些常见的情形, 社区早就写好了成熟的 Exporter, 它们就是 node_exporter, redis_exporter 和 snmp_exporter。

为什么要写 Exporter?

写 exporter 可以把监控信息接进 Prometheus, 那为什么非要接进 Prometheus 呢?

集成到 Prometheus 监控之后, 借助 PromQL 强大的表达能力和 Alertmanager, Grafana 的强大生态, 我们不仅能实现所有监控信息的整合打通, 还能获得更丰富的报警选择和更强的看板能力. 

如何为中间件开发Exporter

Prometheus 为开发这提供了客户端工具,用于为自己的中间件开发Exporter,对接Prometheus 。

目前支持的客户端

Go

Java

Python

Ruby 

exporter demo:

一个简单的 exporter

下面我将用 golang 实现一个简单的 sample_exporter.go, 其代码大致为:

package main

import (

    "fmt"

    "net/http"

)

func handler(w http.ResponseWriter, r *http.Request) {

    fmt.Fprintf(w, exportData)

}

func main() {

    http.HandleFunc("/", handler)

    http.ListenAndServe(":8080", nil)

}

var exportData string = `# HELP sample_http_requests_total The total number of HTTP requests.

# TYPE sample_http_requests_total counter

sample_http_requests_total{method="post",code="200"} 1027 1395066363000

sample_http_requests_total{method="post",code="400"}    3 1395066363000

# Escaping in label values:

sample_msdos_file_access_time_seconds{path="C:\\DIR\\FILE.TXT",error="Cannot find file:\n\"FILE.TXT\""} 1.458255915e9

# Minimalistic line:

sample_metric_without_timestamp_and_labels 12.47

# A histogram, which has a pretty complex representation in the text format:

# HELP sample_http_request_duration_seconds A histogram of the request duration.

# TYPE sample_http_request_duration_seconds histogram

sample_http_request_duration_seconds_bucket{le="0.05"} 24054

sample_http_request_duration_seconds_bucket{le="0.1"} 33444

sample_http_request_duration_seconds_bucket{le="0.2"} 100392

sample_http_request_duration_seconds_bucket{le="0.5"} 129389

sample_http_request_duration_seconds_bucket{le="1"} 133988

sample_http_request_duration_seconds_bucket{le="+Inf"} 144320

sample_http_request_duration_seconds_sum 53423

sample_http_request_duration_seconds_count 144320

# Finally a summary, which has a complex representation, too:

# HELP sample_rpc_duration_seconds A summary of the RPC duration in seconds.

# TYPE sample_rpc_duration_seconds summary

sample_rpc_duration_seconds{quantile="0.01"} 3102

sample_rpc_duration_seconds{quantile="0.05"} 3272

sample_rpc_duration_seconds{quantile="0.5"} 4773

sample_rpc_duration_seconds{quantile="0.9"} 9001

sample_rpc_duration_seconds{quantile="0.99"} 76656

sample_rpc_duration_seconds_sum 1.7560473e+07

sample_rpc_duration_seconds_count 2693

当运行此程序,你访问 http://localhost:8080/metrics, 将看到这样的页面: 

与 Prometheus 集成

我们可以利用 Prometheus 的 static_configs 来收集 sample_exporter 的数据。

打开 prometheus.yml 文件, 在 scrape_configs 中添加如下配置:

- job_name: "sample"

    static_configs:

      - targets: ["127.0.0.1:8080"]

重启加载配置,然后到 Prometheus Console 查询,你会看到 simple_exporter 的数据。 

https://prometheus.io/docs/instrumenting/exporters/

Prometheus 官方文档中 Writing Exporter 这篇写得非常全面 

热门专题

python查询hive表大小

最新版chromeflash下载失败

mysql定时删除三天前的数据

Docker部署完image请求报404 Not Found

qbittorrent搜索插件合集

linux 设置代理服务器

sudo不用输入密码

干掉mapper.xml,MyBatis新特性动态SQL

4核16G线程池怎么设置

jupyter book 安装C kernel

randa函数C语言

chemdraw怎么调整

jenkins 上传harbor

连接ssh提示权限不足

万像客户机服务器IP

lodash dom 防抖

sql自增长主键插入后怎么快速获取

vpath查找同名文件

sqlserver2019大数据集群 还是群集

RS232每秒传输的多少个字节