Prometheus 是一個基於 Golang 語言所撰寫的服務效能測量監控系統。實際上就只是把統計數據視覺化而已,這很適合用在大型系統、微服務上。你可以從 Prometheus 查看你所有服務的效能狀態等。
但這些事情可能沒有你想像的那麼自動,因為有些數據的加總、值的異動都需要自行在程式裡面處理,然後 Prometheus 會向你的程式要求這些資料。
1. 安裝與啟動 Prometheus
Prometheus 這個單字好像有點難記,我自己是切分成「Prome-th-eus」來記。廢話不多說,首先進入 Prometheus 的下載頁面,接著選取符合你系統的壓縮或安裝檔。
prometheus.yml
# metrics_path defaults to '/metrics'
# scheme defaults to 'http'.
static_configs:
- targets: ['localhost:9090']
改成下列這樣。
# metrics_path defaults to '/metrics'
# scheme defaults to 'http'.
static_configs:
- targets: ['localhost:9090', 'localhost:8080']
prometheus
$ ./prometheus
接著就能夠看到像下面這樣執行的介面。
2. 網頁管理介面
http: //localhost:9090/
- insert metric at cursor -
到這裡就沒了,我們目前能夠看到的圖表數據都是來自 Prometheus 系統內的數據。接下來就是要實作從 Golang 中將數據帶到 Prometheus 中,如此一來我們就能夠在 Prometheus 裡觀察我們的程式。
3. 引用套件庫
go get
$ go get github.com/prometheus/client_golang/prometheus
接著在你的程式中引用該套件。
import (
"github.com/prometheus/client_golang/prometheus"
"github.com/prometheus/client_golang/prometheus/promhttp"
)
4. 實作數據測量程式
cpu_temperature_celsiushd_errors_total
一個是 CPU 溫度,另一個則是硬碟錯誤次數,而這個錯誤次數還順便帶有了「裝置」標籤,這意味著我們可以詳細地告訴 Prometheus 這個錯誤次數是哪個「裝置」所發生的。
package main
import (
"log"
"net/http"
"github.com/prometheus/client_golang/prometheus"
"github.com/prometheus/client_golang/prometheus/promhttp"
)
var (
// 自訂數值型態的測量數據。
cpuTemp = prometheus.NewGauge(prometheus.GaugeOpts{
Name: "cpu_temperature_celsius",
Help: "CPU 目前的溫度。",
})
// 計數型態的測量數據,並帶有自訂標籤。
hdFailures = prometheus.NewCounterVec(
prometheus.CounterOpts{
Name: "hd_errors_total",
Help: "硬碟發生錯誤的次數。",
},
[]string{"裝置"},
)
)
func init() {
// 測量數據必須註冊才會暴露給外界知道:
prometheus.MustRegister(cpuTemp)
prometheus.MustRegister(hdFailures)
}
func main() {
// 配置測量數據的數值。
cpuTemp.Set(65.3)
hdFailures.With(prometheus.Labels{"裝置": "/dev/sda"}).Inc()
// 我們會用 Prometheus 所提供的預設處理函式在 "/metrics" 路徑監控著。
// 這會暴露我們的數據內容,所以 Prometheus 就能夠獲取這些數據。
http.Handle("/metrics", promhttp.Handler())
log.Fatal(http.ListenAndServe(":8080", nil))
}
go run
如果你仍不確定,你可以從上方的 Status 下拉式選單選取 Targets 然後就可以看見 Prometheus 是否有正常的在監控你的程式。