Sample Exporter

既然一个 exporter 就是将收集的数据转化为文本格式,并提供 http 请求即可,那很容自己实现一个。

一个简单的 exporter

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

  1. package main
  2. import (
  3. "fmt"
  4. "net/http"
  5. )
  6. func handler(w http.ResponseWriter, r *http.Request) {
  7. fmt.Fprintf(w, exportData)
  8. }
  9. func main() {
  10. http.HandleFunc("/", handler)
  11. http.ListenAndServe(":8080", nil)
  12. }
  13. var exportData string = `# HELP sample_http_requests_total The total number of HTTP requests.
  14. # TYPE sample_http_requests_total counter
  15. sample_http_requests_total{method="post",code="200"} 1027 1395066363000
  16. sample_http_requests_total{method="post",code="400"} 3 1395066363000
  17. # Escaping in label values:
  18. sample_msdos_file_access_time_seconds{path="C:\\DIR\\FILE.TXT",error="Cannot find file:\n\"FILE.TXT\""} 1.458255915e9
  19. # Minimalistic line:
  20. sample_metric_without_timestamp_and_labels 12.47
  21. # A histogram, which has a pretty complex representation in the text format:
  22. # HELP sample_http_request_duration_seconds A histogram of the request duration.
  23. # TYPE sample_http_request_duration_seconds histogram
  24. sample_http_request_duration_seconds_bucket{le="0.05"} 24054
  25. sample_http_request_duration_seconds_bucket{le="0.1"} 33444
  26. sample_http_request_duration_seconds_bucket{le="0.2"} 100392
  27. sample_http_request_duration_seconds_bucket{le="0.5"} 129389
  28. sample_http_request_duration_seconds_bucket{le="1"} 133988
  29. sample_http_request_duration_seconds_bucket{le="+Inf"} 144320
  30. sample_http_request_duration_seconds_sum 53423
  31. sample_http_request_duration_seconds_count 144320
  32. # Finally a summary, which has a complex representation, too:
  33. # HELP sample_rpc_duration_seconds A summary of the RPC duration in seconds.
  34. # TYPE sample_rpc_duration_seconds summary
  35. sample_rpc_duration_seconds{quantile="0.01"} 3102
  36. sample_rpc_duration_seconds{quantile="0.05"} 3272
  37. sample_rpc_duration_seconds{quantile="0.5"} 4773
  38. sample_rpc_duration_seconds{quantile="0.9"} 9001
  39. sample_rpc_duration_seconds{quantile="0.99"} 76656
  40. sample_rpc_duration_seconds_sum 1.7560473e+07
  41. sample_rpc_duration_seconds_count 2693
  42. `

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

simple exporter data

与 Prometheus 集成

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

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

  1. - job_name: "sample"
  2. static_configs:
  3. - targets: ["127.0.0.1:8080"]

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

simple exporter