Grafana: 数据可视化,可定时请求数据源并图表化
Prometheus: 时间序列数据库,定时从上流数据源 exporter 中获取数据保存,通过 HTTP API 接口返回时间序列化的数据
Prometheus exporter: Prometheus 数据源,通过 /metrics
HTTP API 接口对外提供数据,开发者自己能过 prometheus 提供的 client 进行开发,比如 prometheus/client_golang
下面是自己用 Golang 写一个 prometheus exporter, 用来提供进程的连接数以及 HTTP QPS 的指标数据,主要是实现 promethues client 包中 Collector 接口,然后注册即可
比如:
type QpsMetric struct {
metric *prometheus.Desc
}
func NewQpsMetric() *QpsMetric {
go cal()
return &QpsMetric{
metric: prometheus.NewDesc("http_request_count_second",
"http qps",
nil, nil,
),
}
}
func (m *QpsMetric) Describe(ch chan<- *prometheus.Desc) {
ch <- m.metric
}
func (m *QpsMetric) Collect(ch chan<- prometheus.Metric) {
metricValue := float64(qps)
ch <- prometheus.MustNewConstMetric(m.metric, prometheus.GaugeValue, metricValue)
}
然后对该 Collector 进行注册
prometheus.MustRegister(metric.NewQpsMetric())
下载好 prometheus 主程序后在 配置文件prometheus.yml
中static_configs->targets
加入自己开发的 exporter 的支持,比如新加 exporter 为127.0.0.1:8019
scrape_configs:
# The job name is added as a label `job=<job_name>` to any timeseries scraped from this config.
- job_name: 'demo'
# metrics_path defaults to '/metrics'
# scheme defaults to 'http'.
scrape_interval: 3s # Set the scrape interval to every 15 seconds. Default is every 1 minute.
static_configs:
- targets: ['127.0.0.1:8019','127.0.0.1:8018']
- 启动 exporter 以及 prometheus
- 下载并运行 grafana
- 在 grafanna 管理界面新增 prometheus 的 data source , 具体参考 GRAFANA SUPPORT FOR PROMETHEUS
- New Dhshboard->add pane 选择 Graph
- 在 pane title 下拉 选择 edit 进行展示数据的配置,这个隐藏不好找,如图:
设置展示数据,记得选择好数据展示的时间段和数据刷新频率,这样图表才会动态显示,比如这里设置前 30 秒每 5 秒更新一次数据,如图
最后展示效果为:
参考:
自己写一个 prometheus exporter
PROMETHEUS GETTING STARTED
GRAFANA SUPPORT FOR PROMETHEUS