Add splash page, make metrics path configuriable

Also reformat using `go fmt` and document this in
the README.md

Normalized parameter names by looking at what node-
exporter offers.
This commit is contained in:
Martin Weinelt 2017-03-28 22:20:04 +02:00
parent 14593192c8
commit e52dbd900d
No known key found for this signature in database
GPG key ID: BD4AA0528F63F17E
2 changed files with 36 additions and 20 deletions

View file

@ -2,6 +2,12 @@
We are building a prometheus exporter for the fastd vpn daemon. We don't have a working version yet, stay tuned We are building a prometheus exporter for the fastd vpn daemon. We don't have a working version yet, stay tuned
## Formatting
We are using `go fmt` for formatting the code.
## Getting Started
For now run For now run
``` ```
@ -14,4 +20,4 @@ and
$ ./fastd-exporter --instance ffda $ ./fastd-exporter --instance ffda
``` ```
It will print json data received from the socket and maybe also show metrics on `http://127.0.0.1:9099/metrics`. It will print json data received from the socket and maybe also show metrics on `http://127.0.0.1:9099/metrics`.

View file

@ -18,8 +18,9 @@ import (
) )
var ( var (
address = flag.String("listen-address", ":9099", "The address to listen on for HTTP requests.") address = flag.String("web.listen-address", ":9099", "Address on which to expose metrics and web interface.")
instances = flag.String("instances", "", "The fastd instances to Update on, comma separated.") metricsPath = flag.String("web.telemetry-path", "/metrics", "Path under which to expose metrics.")
instances = flag.String("instances", "", "The fastd instances to Update on, comma separated.")
) )
// These are the structs necessary for unmarshalling the data that is being // These are the structs necessary for unmarshalling the data that is being
@ -65,23 +66,22 @@ type PrometheusExporter struct {
uptime *prometheus.Desc uptime *prometheus.Desc
rxPackets *prometheus.Desc rxPackets *prometheus.Desc
rxBytes *prometheus.Desc rxBytes *prometheus.Desc
rxReorderedPackets *prometheus.Desc rxReorderedPackets *prometheus.Desc
rxReorderedBytes *prometheus.Desc rxReorderedBytes *prometheus.Desc
txPackets *prometheus.Desc txPackets *prometheus.Desc
txBytes *prometheus.Desc txBytes *prometheus.Desc
txDroppedPackets *prometheus.Desc txDroppedPackets *prometheus.Desc
txDroppedBytes *prometheus.Desc txDroppedBytes *prometheus.Desc
txErrorPackets *prometheus.Desc txErrorPackets *prometheus.Desc
txErrorBytes *prometheus.Desc txErrorBytes *prometheus.Desc
} }
func c(parts ...string) string {
func c(parts... string) string {
parts = append([]string{"fastd"}, parts...) parts = append([]string{"fastd"}, parts...)
return strings.Join(parts, "_") return strings.Join(parts, "_")
} }
@ -92,23 +92,23 @@ func NewPrometheusExporter(instanceName string, sockName string) PrometheusExpor
return PrometheusExporter{ return PrometheusExporter{
SocketName: sockName, SocketName: sockName,
uptime: prometheus.NewDesc(c(instanceName ,"uptime"), "uptime of the prometheus exporter", nil, l), uptime: prometheus.NewDesc(c(instanceName, "uptime"), "uptime of the prometheus exporter", nil, l),
rxPackets: prometheus.NewDesc(c("rx_packets"), "rx packet count", nil, l), rxPackets: prometheus.NewDesc(c("rx_packets"), "rx packet count", nil, l),
rxBytes: prometheus.NewDesc(c("rx_bytes"), "rx byte count", nil, l), rxBytes: prometheus.NewDesc(c("rx_bytes"), "rx byte count", nil, l),
rxReorderedPackets: prometheus.NewDesc(c("rx_reordered_packets"), "rx reordered packets", nil, l), rxReorderedPackets: prometheus.NewDesc(c("rx_reordered_packets"), "rx reordered packets", nil, l),
rxReorderedBytes: prometheus.NewDesc(c("rx_reordered_bytes"), "rx reordered packets", nil, l), rxReorderedBytes: prometheus.NewDesc(c("rx_reordered_bytes"), "rx reordered packets", nil, l),
txPackets: prometheus.NewDesc(c("tx_packets"), "tx packet count", nil, l), txPackets: prometheus.NewDesc(c("tx_packets"), "tx packet count", nil, l),
txBytes: prometheus.NewDesc(c("tx_bytes"), "tx byte count", nil, l), txBytes: prometheus.NewDesc(c("tx_bytes"), "tx byte count", nil, l),
txDroppedPackets: prometheus.NewDesc(c("tx_dropped_packets"), "tx dropped packets", nil, l), txDroppedPackets: prometheus.NewDesc(c("tx_dropped_packets"), "tx dropped packets", nil, l),
txDroppedBytes: prometheus.NewDesc(c("tx_dropped_bytes"), "tx dropped packets", nil, l), txDroppedBytes: prometheus.NewDesc(c("tx_dropped_bytes"), "tx dropped packets", nil, l),
} }
} }
func (e PrometheusExporter) Describe(c chan<- *prometheus.Desc) { func (e PrometheusExporter) Describe(c chan<- *prometheus.Desc) {
c <- e.uptime c <- e.uptime
c <- e.rxPackets c <- e.rxPackets
c <- e.rxBytes c <- e.rxBytes
c <- e.rxReorderedPackets c <- e.rxReorderedPackets
@ -123,7 +123,7 @@ func (e PrometheusExporter) Collect(c chan<- prometheus.Metric) {
data := data_from_sock(e.SocketName) data := data_from_sock(e.SocketName)
c <- prometheus.MustNewConstMetric(e.uptime, prometheus.GaugeValue, data.Uptime) c <- prometheus.MustNewConstMetric(e.uptime, prometheus.GaugeValue, data.Uptime)
c <- prometheus.MustNewConstMetric(e.rxPackets, prometheus.CounterValue, float64(data.Statistics.RX.Count)) c <- prometheus.MustNewConstMetric(e.rxPackets, prometheus.CounterValue, float64(data.Statistics.RX.Count))
c <- prometheus.MustNewConstMetric(e.rxBytes, prometheus.CounterValue, float64(data.Statistics.RX.Bytes)) c <- prometheus.MustNewConstMetric(e.rxBytes, prometheus.CounterValue, float64(data.Statistics.RX.Bytes))
c <- prometheus.MustNewConstMetric(e.rxReorderedPackets, prometheus.CounterValue, float64(data.Statistics.RX_Reordered.Count)) c <- prometheus.MustNewConstMetric(e.rxReorderedPackets, prometheus.CounterValue, float64(data.Statistics.RX_Reordered.Count))
@ -192,6 +192,16 @@ func main() {
prometheus.MustRegister(exp) prometheus.MustRegister(exp)
// Expose the registered metrics via HTTP. // Expose the registered metrics via HTTP.
http.Handle("/metrics", promhttp.Handler()) http.Handle(*metricsPath, promhttp.Handler())
http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
w.Write([]byte(`<html>
<head><title>fastd exporter</title></head>
<body>
<h1>fastd exporter</h1>
<p><a href="` + *metricsPath + `">Metrics</a></p>
</body>
</html>`))
})
log.Fatal(http.ListenAndServe(*address, nil)) log.Fatal(http.ListenAndServe(*address, nil))
} }