Další nadšenecký článek od admina pro adminy. To, že používám Golang jako hlavní programovací jazyk asi netřeba představovat. Nedávno jsme nasazovali Prometheus jako monitorovací nástroj a chci tady popsat jeho výhody.
Programy v goučku se snadno ladí pomocí knihovny runtime.pprof. Pprof si vytvoří http socket, kde se lze dozvědět spousta věcí o výkonu a také exportuje textové metriky, které si lze dát do různých grafů, nebo takto program monitorovat.
Tohoto principu využívá i Prometheus, který se připojí na tyto metriky a ukládá je do vlastní time-series databáze.
Do těchto metrik si můžete přidat zajímavá data z vlastního programu a tak exportovat data ve standardní podobě, kterým rozumí spousta nástrojů, ne jen Prometheus, ukládat je pomocí standardního nástroje do vlastní databáze nebo posílat emailem, pokud služba v nějaké úloze selže.
Rozšířil jsem si svůj program pro zjištění vypršení certifikátů na webu a přidal export pro Prometheus.
Je to snadné, nejdříve definujeme proměnnou, kam budeme zapisovat stáří certifikátu (dny do jeho vypršení) a potom stačí volat kontrolu tak často, jak potřebujeme (zde každých deset sekund pro ukázku při sledování metriky pomocí curl):
var (
crtDays = promauto.NewGauge(prometheus.GaugeOpts{
Name: "Certificate days",
Help: "The number of days before expiration",
})
)
func main() {
go func() {
for {
time.Sleep(10 * time.Second)
crtDays.Set(float64(checkCerts(addr)))
}
}()
http.Handle("/metrics", promhttp.Handler())
http.ListenAndServe(":2112", nil)
}
A na portu v 2112 potom sledovat metriku “Certificate days”:
curl -s http://localhost:2112/metrics | grep Certifi
# HELP Certificate_days The number of days before expiration
# TYPE Certificate_days gauge
Certificate_days 79