工作需要最近要做一个监控的东西,监控磁盘,存储,因为公司微服务用的是kubenetes,然后运维同事推荐用prometheus来做监控,然后调研了一下,确实还可以,总结一下
一、安装prometheus
去官网http://prometheus.io/download 下载
配置启动方法:
在prometheus目录下有一个yml文件,
二、安装grafana
https://blog.youkuaiyun.com/kai172142xiang/article/details/102770394
prometheus官方或者第三方提供了很多exporter,比如 node exporter,mysql exporter,kafka exporter 等等,或者你自己也可以自己写一个,这些exporter给prometheus提供数据
mysql exporter指标解释,https://zhuanlan.zhihu.com/p/139565483
获取到的数据是prometheus的格式,我只想截取其中部分内容,所以想转成json,来获取特定内容。prometheus官方提供了一个工具 prom2json,使用方式如下:
package main
import (
"crypto/tls"
"encoding/json"
"fmt"
"log"
"net/http"
"os"
dto "github.com/prometheus/client_model/go"
"github.com/prometheus/prom2json"
)
const URL = "http://10.95.107.159:9100/metrics"
func main() {
var err error
var mfChan = make(chan *dto.MetricFamily, 1024)
transport, err := makeTransport()
if err != nil {
fmt.Println("-------------")
}
err = prom2json.FetchMetricFamilies(URL, mfChan, transport)
if err != nil {
fmt.Println("FetchMetricFamilies--------------", err)
}
result := []*prom2json.Family{}
for mf := range mfChan {
result = append(result, prom2json.NewFamily(mf))
}
jsonText, err := json.Marshal(result)
if err != nil {
log.Fatalln("error marshaling JSON:", err)
}
if _, err := os.Stdout.Write(jsonText); err != nil {
log.Fatalln("error writing to stdout:", err)
}
fmt.Println()
}
func makeTransport() (*http.Transport, error) {
var transport *http.Transport
transport = &http.Transport{
TLSClientConfig: &tls.Config{InsecureSkipVerify: true},
}
return transport, nil
}