diff options
-rw-r--r-- | README.rst | 2 | ||||
-rw-r--r-- | main.go | 16 | ||||
-rw-r--r-- | metrics.go | 13 |
3 files changed, 31 insertions, 0 deletions
@@ -14,6 +14,8 @@ You can use ``geoipupdate`` to download MaxMind's City database:: sudo cp /usr/share/doc/geoipupdate/examples/GeoIP.conf.default /etc/GeoIP.conf sudo geoipupdate -v +(note: this service now requires a license key) + Usage ----------------------- @@ -32,6 +32,8 @@ import ( "github.com/StefanSchroeder/Golang-Ellipsoid/ellipsoid" "github.com/hongshibao/go-kdtree" "github.com/oschwald/geoip2-golang" + "github.com/prometheus/client_golang/prometheus" + "github.com/prometheus/client_golang/prometheus/promhttp" "github.com/tidwall/cities" ) @@ -178,6 +180,8 @@ func (jh *jsonHandler) ServeHTTP(w http.ResponseWriter, req *http.Request) { record := jh.geoipdb.getRecordForIP(ipstr) sortedGateways := jh.geoipdb.sortGateways(record.Location.Latitude, record.Location.Longitude) + hitsPerCountry.With(prometheus.Labels{"country": record.Country.IsoCode}).Inc() + data := &GeolocationJSON{ ipstr, record.Country.IsoCode, @@ -210,6 +214,7 @@ func (th *txtHandler) ServeHTTP(w http.ResponseWriter, req *http.Request) { func main() { rand.Seed(time.Now().UnixNano()) var port = flag.Int("port", 9001, "port where the service listens on") + var metricsPort = flag.Int("metricsPort", 9002, "port where the metrics server listens on") var dbpath = flag.String("geodb", "/var/lib/GeoIP/GeoLite2-City.mmdb", "path to the GeoLite2-City database") var notls = flag.Bool("notls", false, "disable TLS on the service") var key = flag.String("server_key", "", "path to the key file for TLS") @@ -255,6 +260,17 @@ func main() { th := &txtHandler{&geoipdb} mux.Handle("/", th) + mtr := http.NewServeMux() + mtr.Handle("/metrics", promhttp.Handler()) + + /* prometheus metrics */ + go func() { + pstr := ":" + strconv.Itoa(*metricsPort) + log.Println("/metrics endpoint listening in port", *metricsPort) + log.Fatal(http.ListenAndServe(pstr, mtr)) + }() + + /* geolocation api */ log.Println("Started Geolocation Service") log.Printf("Listening on port %v...\n", *port) diff --git a/metrics.go b/metrics.go new file mode 100644 index 0000000..2c581ba --- /dev/null +++ b/metrics.go @@ -0,0 +1,13 @@ +package main + +import ( + "github.com/prometheus/client_golang/prometheus" + "github.com/prometheus/client_golang/prometheus/promauto" +) + +var hitsPerCountry = promauto.NewCounterVec(prometheus.CounterOpts{ + Name: "getmyip_hits", + Help: "Number of hits in the geolocation service", +}, + []string{"country"}, +) |