prometheus/server.go (58 lines of code) (raw):

/* * Copyright (c) Facebook, Inc. and its affiliates. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ package main import ( "flag" "fmt" "io/ioutil" "os" "strings" "github.com/facebookincubator/prometheus-configmanager/fsclient" "github.com/facebookincubator/prometheus-configmanager/prometheus/alert" "github.com/facebookincubator/prometheus-configmanager/prometheus/handlers" "github.com/golang/glog" "github.com/labstack/echo" "github.com/labstack/echo/middleware" ) const ( defaultPort = "9100" defaultPrometheusURL = "prometheus:9090" defaultTenancyLabel = "tenant" ) func main() { port := flag.String("port", defaultPort, fmt.Sprintf("Port to listen for requests. Default is %s", defaultPort)) rulesDir := flag.String("rules-dir", ".", "Directory to write rules files. Default is '.'") prometheusURL := flag.String("prometheusURL", defaultPrometheusURL, fmt.Sprintf("URL of the prometheus instance that is reading these rules. Default is %s", defaultPrometheusURL)) multitenancyLabel := flag.String("multitenant-label", "tenant", fmt.Sprintf("The label name to segment alerting rules to enable multi-tenant support, having each tenant's alerts in a separate file. Default is %s", defaultTenancyLabel)) restrictQueries := flag.Bool("restrict-queries", false, "If this flag is set all alert rule expressions will be restricted to only match series with {<multitenant-label>=<tenant>}") flag.Parse() if !strings.HasSuffix(*rulesDir, "/") { *rulesDir += "/" } // Check if rulesDir exists and create it if not if _, err := os.Stat(*rulesDir); os.IsNotExist(err) { files, err := ioutil.ReadDir("/") if err != nil { glog.Fatalf("Could not stat directory: %v", err) } fmt.Println(files) err = os.Mkdir(*rulesDir, 0644) if err != nil { glog.Fatalf("Could not create rules directory: %v", err) } } fileLocks, err := alert.NewFileLocker(alert.NewDirectoryClient(*rulesDir)) clientTenancy := alert.TenancyConfig{ RestrictQueries: *restrictQueries, RestrictorLabel: *multitenancyLabel, } alertClient := alert.NewClient(fileLocks, *prometheusURL, fsclient.NewFSClient(*rulesDir), clientTenancy) if err != nil { glog.Fatalf("error creating alert client: %v", err) } e := echo.New() e.Use(middleware.CORS()) e.Use(middleware.Logger()) handlers.RegisterBaseHandlers(e) handlers.RegisterV0Handlers(e, alertClient) handlers.RegisterV1Handlers(e, alertClient) glog.Infof("Prometheus Config server listening on port: %s\n", *port) e.Logger.Fatal(e.Start(fmt.Sprintf(":%s", *port))) }