diff --git a/.gitignore b/.gitignore index e77d206..9e38b36 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1 @@ -passenger_exporter -passenger_exporter_nginx -passenger_exporter_nginx-*.tar.gz +passenger-exporter diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000..8097266 --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,16 @@ +# Changelog + +## 0.5.0 + +### Improvements +* Added home page with link to metrics. +* Added new fields to output parsed from passenger status command. +* Removed mentions of nginx as this exporter can support other integration modes. + +### Breaking Changes +* Changed metrics prefix from `passenger_nginx` to `passenger`. This affects _all_ passenger metrics. +* Renamed metrics: + * Changed `passenger_top_level_queue` to `passenger_top_level_request_queue`. + * Changed `passenger_app_queue` to `passenger_app_request_queue`. +* Changed unit of passenger command timeout duration to seconds. +* Removed deprecated `code_revision` field from output parsed from passenger status command. diff --git a/CODEOWNERS b/CODEOWNERS new file mode 100644 index 0000000..c907cbc --- /dev/null +++ b/CODEOWNERS @@ -0,0 +1 @@ +* @itskingori @tsu-shiuan @zacblazic diff --git a/Makefile b/Makefile index 697153c..1dcac10 100644 --- a/Makefile +++ b/Makefile @@ -1,6 +1,6 @@ VERSION := $(shell cat VERSION) -BIN := passenger_exporter_nginx -CONTAINER := passenger_exporter_nginx +BIN := passenger-exporter +CONTAINER := passenger-exporter GOOS ?= linux GOARCH ?= amd64 @@ -23,4 +23,3 @@ build-docker: $(BIN) $(TAR): $(BIN) tar czf $@ $< - diff --git a/README b/README deleted file mode 100644 index 3bfcb00..0000000 --- a/README +++ /dev/null @@ -1,71 +0,0 @@ -************************ -passenger_exporter_nginx ------------------------- - -This is a Prometheus exporter for passenger with nginx integration. - -https://www.phusionpassenger.com/ - -********************* -Building the Exporter ---------------------- - -The default Makefile target creates a statically linked binary for Linux. - -A Dockerfile and Makefile target are also supplied: - -make build-docker - -******************** -Running the Exporter --------------------- - -Usage of passenger_exporter_nginx: - -log.format value - If set use a syslog logger or JSON logging. - Example: logger:syslog?appname=bob&local=7 or logger:stdout?json=true. - Defaults to stderr. - -log.level value - Only log messages with the given severity or above. - Valid levels: [debug, info, warn, error, fatal]. (default info) - -passenger.command string - Passenger command for querying passenger status. - (default "passenger-status --show=xml") - -passenger.pid-file string - Optional path to a file containing the passenger/nginx PID for additional metrics. - -passenger.command.timeout duration - Timeout for passenger.command. (default 500ms) - -web.listen-address string - Address to listen on for web interface and telemetry. (default ":9149") - -web.telemetry-path string - Path under which to expose metrics. (default "/metrics") - -To run the Docker image: - -docker run -p 9106:9106 -v $PATH_TO_PASSENGER_STATUS:/bin \ - passenger_exporter_nginx:latest /passenger_exporter_nginx - -Notes for running the Docker container: - -- You must mount the passenger-status binary within the container to - have access. -- You must expose the -web.listen-address port on the container to be scraped. - -********** -Collectors ----------- - -An example of the metrics exported can be seen in testdata/scrape_output.txt - -************* -Running Tests -------------- - -Tests can be run with: - -go test . - -Additionally, the testdata/scrape_output.txt can be regenerated by passing the ---golden flag: - -go test -v . --golden diff --git a/README.md b/README.md new file mode 100644 index 0000000..5622b34 --- /dev/null +++ b/README.md @@ -0,0 +1,40 @@ +# Passenger Exporter + +Prometheus exporter for [Phusion Passenger](https://www.phusionpassenger.com) metrics. + +## Flags + +``` + -log.format value + If set use a syslog logger or JSON logging. + Example: logger:syslog?appname=bob&local=7 or logger:stdout?json=true. + Defaults to stderr. + -log.level value + Only log messages with the given severity or above. + Valid levels: [debug, info, warn, error, fatal]. (default info) + -passenger.command string + Passenger command for querying passenger status. + (default "passenger-status --show=xml") + -passenger.pid-file string + Optional path to a file containing the passenger PID for additional metrics. + -passenger.command.timeout duration + Timeout for passenger.command. (default 500ms) + -web.listen-address string + Address to listen on for web interface and telemetry. (default ":9149") + -web.telemetry-path string + Path under which to expose metrics. (default "/metrics") +``` + + +## Running Tests + +Tests can be run with: +``` +go test . +``` + +Additionally, the test/scrape_output.txt can be regenerated by passing the +`--golden` flag: +``` +go test -v . --golden +``` diff --git a/main.go b/passenger_exporter.go similarity index 52% rename from main.go rename to passenger_exporter.go index 9aa964a..322f63d 100644 --- a/main.go +++ b/passenger_exporter.go @@ -3,7 +3,6 @@ package main import ( "bytes" "encoding/xml" - "errors" "flag" "fmt" "io" @@ -22,19 +21,121 @@ import ( "github.com/prometheus/common/version" ) -const ( - namespace = "passenger_nginx" +// Info represents the info section of passenger's status. +type Info struct { + PassengerVersion string `xml:"passenger_version"` + AppCount string `xml:"group_count"` + CurrentProcessCount string `xml:"process_count"` + MaxProcessCount string `xml:"max"` + CapacityUsed string `xml:"capacity_used"` + TopLevelRequestQueueSize string `xml:"get_wait_list_size"` + SuperGroups []SuperGroup `xml:"supergroups>supergroup"` +} + +// SuperGroup represents the super group section of passenger's status. +type SuperGroup struct { + Name string `xml:"name"` + State string `xml:"state"` + RequestQueueSize string `xml:"get_wait_list_size"` + CapacityUsed string `xml:"capacity_used"` + Group Group `xml:"group"` +} + +// Group represents the group section of passenger's status. +type Group struct { + Name string `xml:"name"` + ComponentName string `xml:"component_name"` + AppRoot string `xml:"app_root"` + AppType string `xml:"app_type"` + Environment string `xml:"environment"` + UUID string `xml:"uuid"` + EnabledProcessCount string `xml:"enabled_process_count"` + DisablingProcessCount string `xml:"disabling_process_count"` + DisabledProcessCount string `xml:"disabled_process_count"` + CapacityUsed string `xml:"capacity_used"` + RequestQueueSize string `xml:"get_wait_list_size"` + DisableWaitListSize string `xml:"disable_wait_list_size"` + ProcessesSpawning string `xml:"processes_being_spawned"` + LifeStatus string `xml:"life_status"` + User string `xml:"user"` + UID string `xml:"uid"` + Group string `xml:"group"` + GID string `xml:"gid"` + Default string `xml:"default,attr"` + Options Options `xml:"options"` + Processes []Process `xml:"processes>process"` +} +// Process represents the process section of passenger's status. +type Process struct { + PID string `xml:"pid"` + StickySessionID string `xml:"sticky_session_id"` + GUPID string `xml:"gupid"` + Concurrency string `xml:"concurrency"` + Sessions string `xml:"sessions"` + Busyness string `xml:"busyness"` + RequestsProcessed string `xml:"processed"` + SpawnerCreationTime string `xml:"spawner_creation_time"` + SpawnStartTime string `xml:"spawn_start_time"` + SpawnEndTime string `xml:"spawn_end_time"` + LastUsed string `xml:"last_used"` + LastUsedDesc string `xml:"last_used_desc"` + Uptime string `xml:"uptime"` + LifeStatus string `xml:"life_status"` + Enabled string `xml:"enabled"` + HasMetrics string `xml:"has_metrics"` + CPU string `xml:"cpu"` + RSS string `xml:"rss"` + PSS string `xml:"pss"` + PrivateDirty string `xml:"private_dirty"` + Swap string `xml:"swap"` + RealMemory string `xml:"real_memory"` + VMSize string `xml:"vmsize"` + ProcessGroupID string `xml:"process_group_id"` + Command string `xml:"command"` +} + +// Options represents the options section of passenger's status. +type Options struct { + AppRoot string `xml:"app_root"` + AppGroupName string `xml:"app_group_name"` + AppType string `xml:"app_type"` + StartCommand string `xml:"start_command"` + StartupFile string `xml:"startup_file"` + ProcessTitle string `xml:"process_title"` + LogLevel string `xml:"log_level"` + StartTimeout string `xml:"start_timeout"` + Environment string `xml:"environment"` + BaseURI string `xml:"base_uri"` + SpawnMethod string `xml:"spawn_method"` + DefaultUser string `xml:"default_user"` + DefaultGroup string `xml:"default_group"` + IntegrationMode string `xml:"integration_mode"` + RubyBinPath string `xml:"ruby"` + PythonBinPath string `xml:"python"` + NodeJSBinPath string `xml:"nodejs"` + USTRouterAddress string `xml:"ust_router_address"` + USTRouterUsername string `xml:"ust_router_username"` + USTRouterPassword string `xml:"ust_router_password"` + Debugger string `xml:"debugger"` + Analytics string `xml:"analytics"` + APIKey string `xml:"api_key"` + MinProcesses string `xml:"min_processes"` + MaxProcesses string `xml:"max_processes"` + MaxPreloaderIdleTime string `xml:"max_preloader_idle_time"` + MaxOutOfBandWorkInstances string `xml:"max_out_of_band_work_instances"` +} + +const ( + namespace = "passenger" nanosecondsPerSecond = 1000000000 ) var ( - timeoutErr = errors.New("passenger-status command timed out") - processIdentifiers = make(map[string]int) ) -// Exporter collects metrics from a passenger-nginx integration. +// Exporter collects metrics from passenger. type Exporter struct { // binary file path for querying passenger state. cmd string @@ -44,15 +145,15 @@ type Exporter struct { timeout time.Duration // Passenger metrics. - up *prometheus.Desc - version *prometheus.Desc - toplevelQueue *prometheus.Desc - maxProcessCount *prometheus.Desc - currentProcessCount *prometheus.Desc - appCount *prometheus.Desc + up *prometheus.Desc + version *prometheus.Desc + topLevelRequestQueue *prometheus.Desc + maxProcessCount *prometheus.Desc + currentProcessCount *prometheus.Desc + appCount *prometheus.Desc // App metrics. - appQueue *prometheus.Desc + appRequestQueue *prometheus.Desc appProcsSpawning *prometheus.Desc // Process metrics. @@ -61,27 +162,28 @@ type Exporter struct { procMemory *prometheus.Desc } -func NewExporter(cmd string, timeout time.Duration) *Exporter { +// NewExporter returns an initialized exporter. +func NewExporter(cmd string, timeout float64) *Exporter { cmdComponents := strings.Split(cmd, " ") return &Exporter{ cmd: cmdComponents[0], args: cmdComponents[1:], - timeout: timeout, + timeout: time.Duration(timeout * nanosecondsPerSecond), up: prometheus.NewDesc( prometheus.BuildFQName(namespace, "", "up"), - "Could passenger status be queried.", + "Current health of passenger.", nil, nil, ), version: prometheus.NewDesc( prometheus.BuildFQName(namespace, "", "version"), - "Version of passenger", + "Version of passenger.", []string{"version"}, nil, ), - toplevelQueue: prometheus.NewDesc( - prometheus.BuildFQName(namespace, "", "top_level_queue"), + topLevelRequestQueue: prometheus.NewDesc( + prometheus.BuildFQName(namespace, "", "top_level_request_queue"), "Number of requests in the top-level queue.", nil, nil, @@ -104,9 +206,9 @@ func NewExporter(cmd string, timeout time.Duration) *Exporter { nil, nil, ), - appQueue: prometheus.NewDesc( - prometheus.BuildFQName(namespace, "", "app_queue"), - "Number of requests in app process queues.", + appRequestQueue: prometheus.NewDesc( + prometheus.BuildFQName(namespace, "", "app_request_queue"), + "Number of requests in the app queue.", []string{"name"}, nil, ), @@ -118,14 +220,14 @@ func NewExporter(cmd string, timeout time.Duration) *Exporter { ), requestsProcessed: prometheus.NewDesc( prometheus.BuildFQName(namespace, "", "requests_processed_total"), - "Number of processes served by a process.", + "Number of requests served by a process.", []string{"name", "id"}, nil, ), procStartTime: prometheus.NewDesc( prometheus.BuildFQName(namespace, "", "proc_start_time_seconds"), - "Number of seconds since processor started.", - []string{"name", "id", "codeRevision"}, + "Number of seconds since process started.", + []string{"name", "id"}, nil, ), procMemory: prometheus.NewDesc( @@ -137,8 +239,23 @@ func NewExporter(cmd string, timeout time.Duration) *Exporter { } } -// Collect fetches the statistics from the configured passenger frontend, and -// delivers them as Prometheus metrics. It implements prometheus.Collector. +// Describe describes all the metrics exported by the passenger exporter. +func (e *Exporter) Describe(ch chan<- *prometheus.Desc) { + ch <- e.up + ch <- e.version + ch <- e.topLevelRequestQueue + ch <- e.maxProcessCount + ch <- e.currentProcessCount + ch <- e.appCount + ch <- e.appRequestQueue + ch <- e.appProcsSpawning + ch <- e.requestsProcessed + ch <- e.procStartTime + ch <- e.procMemory +} + +// Collect fetches the statistics from passenger, and delivers them as +// Prometheus metrics. func (e *Exporter) Collect(ch chan<- prometheus.Metric) { info, err := e.status() if err != nil { @@ -147,16 +264,15 @@ func (e *Exporter) Collect(ch chan<- prometheus.Metric) { return } ch <- prometheus.MustNewConstMetric(e.up, prometheus.GaugeValue, 1) - ch <- prometheus.MustNewConstMetric(e.version, prometheus.GaugeValue, 1, info.PassengerVersion) - ch <- prometheus.MustNewConstMetric(e.toplevelQueue, prometheus.GaugeValue, parseFloat(info.TopLevelRequestsInQueue)) + ch <- prometheus.MustNewConstMetric(e.topLevelRequestQueue, prometheus.GaugeValue, parseFloat(info.TopLevelRequestQueueSize)) ch <- prometheus.MustNewConstMetric(e.maxProcessCount, prometheus.GaugeValue, parseFloat(info.MaxProcessCount)) ch <- prometheus.MustNewConstMetric(e.currentProcessCount, prometheus.GaugeValue, parseFloat(info.CurrentProcessCount)) ch <- prometheus.MustNewConstMetric(e.appCount, prometheus.GaugeValue, parseFloat(info.AppCount)) for _, sg := range info.SuperGroups { - ch <- prometheus.MustNewConstMetric(e.appQueue, prometheus.GaugeValue, parseFloat(sg.Group.GetWaitListSize), sg.Name) + ch <- prometheus.MustNewConstMetric(e.appRequestQueue, prometheus.GaugeValue, parseFloat(sg.Group.RequestQueueSize), sg.Name) ch <- prometheus.MustNewConstMetric(e.appProcsSpawning, prometheus.GaugeValue, parseFloat(sg.Group.ProcessesSpawning), sg.Name) // Update process identifiers map. @@ -168,13 +284,12 @@ func (e *Exporter) Collect(ch chan<- prometheus.Metric) { if startTime, err := strconv.Atoi(proc.SpawnStartTime); err == nil { ch <- prometheus.MustNewConstMetric(e.procStartTime, prometheus.GaugeValue, float64(startTime/nanosecondsPerSecond), - sg.Name, strconv.Itoa(bucketID), proc.CodeRevision, + sg.Name, strconv.Itoa(bucketID), ) } } } } - } func (e *Exporter) status() (*Info, error) { @@ -189,37 +304,27 @@ func (e *Exporter) status() (*Info, error) { return nil, err } - errc := make(chan error, 1) - go func(cmd *exec.Cmd, c chan<- error) { - c <- cmd.Wait() - }(cmd, errc) + done := make(chan error, 1) + go func() { + done <- cmd.Wait() + }() select { - case err := <-errc: + case <-time.After(e.timeout): + if err := cmd.Process.Kill(); err != nil { + log.Errorf("failed to kill process: %s", err) + } + err = fmt.Errorf("status command timed out after %f seconds", e.timeout.Seconds()) + return nil, err + case err := <-done: if err != nil { return nil, err } - case <-time.After(e.timeout): - return nil, timeoutErr } return parseOutput(&out) } -func (e *Exporter) Describe(ch chan<- *prometheus.Desc) { - ch <- e.up - ch <- e.version - ch <- e.toplevelQueue - ch <- e.maxProcessCount - ch <- e.currentProcessCount - ch <- e.appCount - ch <- e.appQueue - ch <- e.appProcsSpawning - ch <- e.requestsProcessed - ch <- e.procStartTime - ch <- e.procMemory -} - func parseOutput(r io.Reader) (*Info, error) { var info Info decoder := xml.NewDecoder(r) @@ -305,8 +410,8 @@ func updateProcesses(old map[string]int, processes []Process) map[string]int { func main() { var ( cmd = flag.String("passenger.command", "passenger-status --show=xml", "Passenger command for querying passenger status.") - timeout = flag.Duration("passenger.command.timeout", 500*time.Millisecond, "Timeout for passenger.command.") - pidFile = flag.String("passenger.pid-file", "", "Optional path to a file containing the passenger/nginx PID for additional metrics.") + timeout = flag.Float64("passenger.command.timeout-seconds", 0.5, "Timeout in seconds for passenger.command.") + pidFile = flag.String("passenger.pid-file", "", "Optional path to a file containing the passenger PID for additional metrics.") metricsPath = flag.String("web.telemetry-path", "/metrics", "Path under which to expose metrics.") listenAddress = flag.String("web.listen-address", ":9149", "Address to listen on for web interface and telemetry.") ) @@ -332,9 +437,18 @@ func main() { prometheus.MustRegister(NewExporter(*cmd, *timeout)) http.Handle(*metricsPath, prometheus.Handler()) - - log.Infoln("starting passenger_exporter_nginx", version.Info()) - log.Infoln("build context", version.BuildContext()) - log.Infoln("listening on", *listenAddress) + http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { + w.Write([]byte(` + Passenger Exporter + +

Passenger Exporter

+

Metrics

+ + `)) + }) + + log.Infoln("Starting passenger-exporter", version.Info()) + log.Infoln("Build context", version.BuildContext()) + log.Infoln("Listening on", *listenAddress) log.Fatal(http.ListenAndServe(*listenAddress, nil)) } diff --git a/main_test.go b/passenger_exporter_test.go similarity index 92% rename from main_test.go rename to passenger_exporter_test.go index 4a14a5e..edfc4de 100644 --- a/main_test.go +++ b/passenger_exporter_test.go @@ -8,6 +8,7 @@ import ( "net/http/httptest" "os" "reflect" + "strings" "testing" "time" @@ -32,7 +33,7 @@ func TestParsing(t *testing.T) { return info }, "parseOutput": func(t *testing.T) *Info { - f, err := os.Open("./testdata/passenger_xml_output.xml") + f, err := os.Open("./test/passenger_xml_output.xml") if err != nil { t.Fatalf("open xml file failed: %v", err) } @@ -84,9 +85,9 @@ func TestScrape(t *testing.T) { t.Fatalf("failed to read response body: %v", err) } - scrapeFixturePath := "./testdata/scrape_output.txt" + scrapeFixturePath := "./test/scrape_output.txt" if golden { - idx := bytes.Index(body, []byte("# HELP passenger_nginx_app_count Number of apps.")) + idx := bytes.Index(body, []byte("# HELP passenger_app_count Number of apps.")) ioutil.WriteFile(scrapeFixturePath, body[idx:], 0666) t.Skipf("--golden passed: re-writing %s", scrapeFixturePath) } @@ -102,13 +103,13 @@ func TestScrape(t *testing.T) { } func TestStatusTimeout(t *testing.T) { - e := NewExporter("sleep 1", time.Millisecond) + e := NewExporter("sleep 1", time.Millisecond.Seconds()) _, err := e.status() if err == nil { t.Fatalf("failed to timeout") } - if err != timeoutErr { + if !strings.Contains(err.Error(), "status command timed out after 0.001000 seconds") { t.Fatalf("incorrect err: %v", err) } } @@ -238,5 +239,5 @@ func TestInsertingNewProcesses(t *testing.T) { } func newTestExporter() *Exporter { - return NewExporter("cat ./testdata/passenger_xml_output.xml", time.Second) + return NewExporter("cat ./test/passenger_xml_output.xml", time.Second.Seconds()) } diff --git a/structs.go b/structs.go deleted file mode 100644 index d4040fd..0000000 --- a/structs.go +++ /dev/null @@ -1,98 +0,0 @@ -package main - -type Info struct { - CapacityUsed string `xml:"capacity_used"` - MaxProcessCount string `xml:"max"` - PassengerVersion string `xml:"passenger_version"` - AppCount string `xml:"group_count"` - TopLevelRequestsInQueue string `xml:"get_wait_list_size"` - CurrentProcessCount string `xml:"process_count"` - SuperGroups []SuperGroup `xml:"supergroups>supergroup"` -} - -type SuperGroup struct { - RequestsInQueue string `xml:"get_wait_list_size"` - CapacityUsed string `xml:"capacity_used"` - State string `xml:"state"` - Group Group `xml:"group"` - Name string `xml:"name"` -} - -type Group struct { - Environment string `xml:"environment"` - DisabledProcessCount string `xml:"disabled_process_count"` - UID string `xml:"uid"` - GetWaitListSize string `xml:"get_wait_list_size"` - CapacityUsed string `xml:"capacity_used"` - Name string `xml:"name"` - AppType string `xml:"app_type"` - AppRoot string `xml:"app_root"` - User string `xml:"user"` - ComponentName string `xml:"component_name"` - LifeStatus string `xml:"life_status"` - UUID string `xml:"uuid"` - Default string `xml:"default,attr"` - DisablingProcessCount string `xml:"disabling_process_count"` - EnabledProcessCount string `xml:"enabled_process_count"` - DisableWaitListSize string `xml:"disable_wait_list_size"` - GID string `xml:"gid"` - ProcessesSpawning string `xml:"processes_being_spawned"` - Options Options `xml:"options"` - Processes []Process `xml:"processes>process"` -} - -type Process struct { - CodeRevision string `xml:"code_revision"` - Enabled string `xml:"enabled"` - SpawnEndTime string `xml:"spawn_end_time"` - HasMetrics string `xml:"has_metrics"` - LifeStatus string `xml:"life_status"` - Busyness string `xml:"busyness"` - RealMemory string `xml:"real_memory"` - StickySessionID string `xml:"sticky_session_id"` - PSS string `xml:"pss"` - Command string `xml:"command"` - LastUsed string `xml:"last_used"` - CPU string `xml:"cpu"` - SpawnerCreationTime string `xml:"spawner_creation_time"` - LastUsedDesc string `xml:"last_used_desc"` - Uptime string `xml:"uptime"` - Swap string `xml:"swap"` - Sessions string `xml:"sessions"` - RSS string `xml:"rss"` - PrivateDirty string `xml:"private_dirty"` - RequestsProcessed string `xml:"processed"` - ProcessGroupID string `xml:"process_group_id"` - PID string `xml:"pid"` - GUPID string `xml:"gupid"` - VMSize string `xml:"vmsize"` - Concurrency string `xml:"concurrency"` - SpawnStartTime string `xml:"spawn_start_time"` -} - -type Options struct { - DefaultGroup string `xml:"default_group"` - RubyBinPath string `xml:"ruby"` - USTRouterAddress string `xml:"ust_router_address"` - USTRouterPassword string `xml:"ust_router_password"` - StartCommand string `xml:"start_command"` - USTRouterUsername string `xml:"ust_router_username"` - MaxPreloaderIdleTime string `xml:"max_preloader_idle_time"` - BaseURI string `xml:"base_uri"` - SpawnMethod string `xml:"spawn_method"` - AppType string `xml:"app_type"` - Environment string `xml:"environment"` - Analytics string `xml:"analytics"` - MinProcesses string `xml:"min_processes"` - StartTimeout string `xml:"start_timeout"` - AppRoot string `xml:"app_root"` - ProcessTitle string `xml:"process_title"` - Debugger string `xml:"debugger"` - DefaultUser string `xml:"default_user"` - MaxOutOfBandWorkInstances string `xml:"max_out_of_band_work_instances"` - MaxProcesses string `xml:"max_processes"` - AppGroupName string `xml:"app_group_name"` - StartupFile string `xml:"startup_file"` - IntegrationMode string `xml:"integration_mode"` - LogLevel string `xml:"log_level"` -} diff --git a/testdata/passenger_xml_output.xml b/test/passenger_xml_output.xml similarity index 96% rename from testdata/passenger_xml_output.xml rename to test/passenger_xml_output.xml index f925278..ef56e43 100644 --- a/testdata/passenger_xml_output.xml +++ b/test/passenger_xml_output.xml @@ -75,7 +75,6 @@ 1462479725218338 0s ago 34m 54s - 4fef3ec ALIVE ENABLED true @@ -103,7 +102,6 @@ 1462479725262357 0s ago 34m 43s - 4fef3ec ALIVE ENABLED true @@ -131,7 +129,6 @@ 1462479724844363 1s ago 34m 33s - 4fef3ec ALIVE ENABLED true @@ -159,7 +156,6 @@ 1462479724951789 1s ago 34m 23s - 4fef3ec ALIVE ENABLED true @@ -187,7 +183,6 @@ 1462479725234990 0s ago 34m 13s - 4fef3ec ALIVE ENABLED true @@ -215,7 +210,6 @@ 1462479725071885 0s ago 34m 2s - 4fef3ec ALIVE ENABLED true @@ -243,7 +237,6 @@ 1462479725291842 0s ago 33m 52s - 4fef3ec ALIVE ENABLED true @@ -271,7 +264,6 @@ 1462479724987085 1s ago 33m 42s - 4fef3ec ALIVE ENABLED true @@ -299,7 +291,6 @@ 1462479725291925 0s ago 33m 32s - 4fef3ec ALIVE ENABLED true @@ -327,7 +318,6 @@ 1462479725295845 0s ago 33m 22s - 4fef3ec ALIVE ENABLED true @@ -355,7 +345,6 @@ 1462479725280878 0s ago 33m 12s - 4fef3ec ALIVE ENABLED true @@ -383,7 +372,6 @@ 1462479725277911 0s ago 33m 2s - 4fef3ec ALIVE ENABLED true @@ -411,7 +399,6 @@ 1462479725273013 0s ago 32m 52s - 4fef3ec ALIVE ENABLED true @@ -439,7 +426,6 @@ 1462479725278205 0s ago 32m 42s - 4fef3ec ALIVE ENABLED true @@ -467,7 +453,6 @@ 1462479725208853 0s ago 32m 31s - 4fef3ec ALIVE ENABLED true @@ -495,7 +480,6 @@ 1462479725210092 0s ago 32m 21s - 4fef3ec ALIVE ENABLED true @@ -523,7 +507,6 @@ 1462479725069799 0s ago 32m 11s - 4fef3ec ALIVE ENABLED true @@ -551,7 +534,6 @@ 1462479725073291 0s ago 32m 1s - 4fef3ec ALIVE ENABLED true @@ -579,7 +561,6 @@ 1462479725079017 0s ago 31m 51s - 4fef3ec ALIVE ENABLED true @@ -607,7 +588,6 @@ 1462479722285638 3s ago 31m 40s - 4fef3ec ALIVE ENABLED true @@ -635,7 +615,6 @@ 1462479722286757 3s ago 31m 31s - 4fef3ec ALIVE ENABLED true @@ -663,7 +642,6 @@ 1462479722287097 3s ago 31m 20s - 4fef3ec ALIVE ENABLED true @@ -691,7 +669,6 @@ 1462479722102361 3s ago 31m 8s - 4fef3ec ALIVE ENABLED true @@ -719,7 +696,6 @@ 1462479714371904 11s ago 30m 58s - 4fef3ec ALIVE ENABLED true @@ -747,7 +723,6 @@ 1462479714371920 11s ago 30m 48s - 4fef3ec ALIVE ENABLED true @@ -775,7 +750,6 @@ 1462479689907679 36s ago 30m 38s - 4fef3ec ALIVE ENABLED true @@ -803,7 +777,6 @@ 1462479678442770 47s ago 30m 28s - 4fef3ec ALIVE ENABLED true @@ -831,7 +804,6 @@ 1462479599147273 2m 6s ago 30m 18s - 4fef3ec ALIVE ENABLED true @@ -859,7 +831,6 @@ 1462479599149297 2m 6s ago 30m 8s - 4fef3ec ALIVE ENABLED true @@ -887,7 +858,6 @@ 1462479599149485 2m 6s ago 29m 58s - 4fef3ec ALIVE ENABLED true @@ -915,7 +885,6 @@ 1462479476254444 4m 9s ago 29m 48s - 4fef3ec ALIVE ENABLED true @@ -943,7 +912,6 @@ 1462479476256611 4m 9s ago 29m 38s - 4fef3ec ALIVE ENABLED true @@ -971,7 +939,6 @@ 1462478645631915 18m 0s ago 29m 26s - 4fef3ec ALIVE ENABLED true @@ -999,7 +966,6 @@ 1462478645632843 18m 0s ago 29m 16s - 4fef3ec ALIVE ENABLED true @@ -1027,7 +993,6 @@ 1462478645614383 18m 0s ago 29m 5s - 4fef3ec ALIVE ENABLED true @@ -1055,7 +1020,6 @@ 1462478645616320 18m 0s ago 28m 55s - 4fef3ec ALIVE ENABLED true @@ -1083,7 +1047,6 @@ 1462478000166418 28m 45s ago 28m 45s - 4fef3ec ALIVE ENABLED true @@ -1111,7 +1074,6 @@ 1462478010227916 28m 35s ago 28m 35s - 4fef3ec ALIVE ENABLED true @@ -1139,7 +1101,6 @@ 1462478020210776 28m 25s ago 28m 25s - 4fef3ec ALIVE ENABLED true @@ -1167,7 +1128,6 @@ 1462478030076590 28m 15s ago 28m 15s - 4fef3ec ALIVE ENABLED true @@ -1195,7 +1155,6 @@ 1462478040746532 28m 5s ago 28m 5s - 4fef3ec ALIVE ENABLED true @@ -1223,7 +1182,6 @@ 1462478051138239 27m 54s ago 27m 54s - 4fef3ec ALIVE ENABLED true @@ -1251,7 +1209,6 @@ 1462478061402699 27m 44s ago 27m 44s - 4fef3ec ALIVE ENABLED true @@ -1279,7 +1236,6 @@ 1462478071439058 27m 34s ago 27m 34s - 4fef3ec ALIVE ENABLED true @@ -1307,7 +1263,6 @@ 1462478081184367 27m 24s ago 27m 24s - 4fef3ec ALIVE ENABLED true @@ -1335,7 +1290,6 @@ 1462478090749911 27m 15s ago 27m 15s - 4fef3ec ALIVE ENABLED true @@ -1363,7 +1317,6 @@ 1462478100931419 27m 5s ago 27m 5s - 4fef3ec ALIVE ENABLED true @@ -1391,7 +1344,6 @@ 1462478111138392 26m 54s ago 26m 54s - 4fef3ec ALIVE ENABLED true diff --git a/test/scrape_output.txt b/test/scrape_output.txt new file mode 100644 index 0000000..5a6276a --- /dev/null +++ b/test/scrape_output.txt @@ -0,0 +1,174 @@ +# HELP passenger_app_count Number of apps. +# TYPE passenger_app_count gauge +passenger_app_count 1 +# HELP passenger_app_procs_spawning Number of processes spawning. +# TYPE passenger_app_procs_spawning gauge +passenger_app_procs_spawning{name="/srv/app/my_app (production)"} 0 +# HELP passenger_app_request_queue Number of requests in the app queue. +# TYPE passenger_app_request_queue gauge +passenger_app_request_queue{name="/srv/app/my_app (production)"} 0 +# HELP passenger_current_processes Current number of processes. +# TYPE passenger_current_processes gauge +passenger_current_processes 48 +# HELP passenger_max_processes Configured maximum number of processes. +# TYPE passenger_max_processes gauge +passenger_max_processes 48 +# HELP passenger_proc_memory Memory consumed by a process +# TYPE passenger_proc_memory gauge +passenger_proc_memory{id="0",name="/srv/app/my_app (production)"} 330012 +passenger_proc_memory{id="1",name="/srv/app/my_app (production)"} 303296 +passenger_proc_memory{id="10",name="/srv/app/my_app (production)"} 303984 +passenger_proc_memory{id="11",name="/srv/app/my_app (production)"} 289680 +passenger_proc_memory{id="12",name="/srv/app/my_app (production)"} 306148 +passenger_proc_memory{id="13",name="/srv/app/my_app (production)"} 293128 +passenger_proc_memory{id="14",name="/srv/app/my_app (production)"} 322064 +passenger_proc_memory{id="15",name="/srv/app/my_app (production)"} 297124 +passenger_proc_memory{id="16",name="/srv/app/my_app (production)"} 290364 +passenger_proc_memory{id="17",name="/srv/app/my_app (production)"} 292056 +passenger_proc_memory{id="18",name="/srv/app/my_app (production)"} 272784 +passenger_proc_memory{id="19",name="/srv/app/my_app (production)"} 281176 +passenger_proc_memory{id="2",name="/srv/app/my_app (production)"} 288884 +passenger_proc_memory{id="20",name="/srv/app/my_app (production)"} 269520 +passenger_proc_memory{id="21",name="/srv/app/my_app (production)"} 269404 +passenger_proc_memory{id="22",name="/srv/app/my_app (production)"} 275844 +passenger_proc_memory{id="23",name="/srv/app/my_app (production)"} 276412 +passenger_proc_memory{id="24",name="/srv/app/my_app (production)"} 267316 +passenger_proc_memory{id="25",name="/srv/app/my_app (production)"} 265152 +passenger_proc_memory{id="26",name="/srv/app/my_app (production)"} 261144 +passenger_proc_memory{id="27",name="/srv/app/my_app (production)"} 260224 +passenger_proc_memory{id="28",name="/srv/app/my_app (production)"} 243688 +passenger_proc_memory{id="29",name="/srv/app/my_app (production)"} 243724 +passenger_proc_memory{id="3",name="/srv/app/my_app (production)"} 293316 +passenger_proc_memory{id="30",name="/srv/app/my_app (production)"} 261492 +passenger_proc_memory{id="31",name="/srv/app/my_app (production)"} 260196 +passenger_proc_memory{id="32",name="/srv/app/my_app (production)"} 244720 +passenger_proc_memory{id="33",name="/srv/app/my_app (production)"} 261268 +passenger_proc_memory{id="34",name="/srv/app/my_app (production)"} 261320 +passenger_proc_memory{id="35",name="/srv/app/my_app (production)"} 244740 +passenger_proc_memory{id="36",name="/srv/app/my_app (production)"} 244656 +passenger_proc_memory{id="37",name="/srv/app/my_app (production)"} 244860 +passenger_proc_memory{id="38",name="/srv/app/my_app (production)"} 244752 +passenger_proc_memory{id="39",name="/srv/app/my_app (production)"} 244708 +passenger_proc_memory{id="4",name="/srv/app/my_app (production)"} 330412 +passenger_proc_memory{id="40",name="/srv/app/my_app (production)"} 244684 +passenger_proc_memory{id="41",name="/srv/app/my_app (production)"} 255428 +passenger_proc_memory{id="42",name="/srv/app/my_app (production)"} 243744 +passenger_proc_memory{id="43",name="/srv/app/my_app (production)"} 254432 +passenger_proc_memory{id="44",name="/srv/app/my_app (production)"} 243592 +passenger_proc_memory{id="45",name="/srv/app/my_app (production)"} 244640 +passenger_proc_memory{id="46",name="/srv/app/my_app (production)"} 242576 +passenger_proc_memory{id="47",name="/srv/app/my_app (production)"} 255376 +passenger_proc_memory{id="5",name="/srv/app/my_app (production)"} 306904 +passenger_proc_memory{id="6",name="/srv/app/my_app (production)"} 330644 +passenger_proc_memory{id="7",name="/srv/app/my_app (production)"} 315104 +passenger_proc_memory{id="8",name="/srv/app/my_app (production)"} 288508 +passenger_proc_memory{id="9",name="/srv/app/my_app (production)"} 306520 +# HELP passenger_proc_start_time_seconds Number of seconds since process started. +# TYPE passenger_proc_start_time_seconds gauge +passenger_proc_start_time_seconds{id="0",name="/srv/app/my_app (production)"} 1.462477e+06 +passenger_proc_start_time_seconds{id="1",name="/srv/app/my_app (production)"} 1.462477e+06 +passenger_proc_start_time_seconds{id="10",name="/srv/app/my_app (production)"} 1.462477e+06 +passenger_proc_start_time_seconds{id="11",name="/srv/app/my_app (production)"} 1.462477e+06 +passenger_proc_start_time_seconds{id="12",name="/srv/app/my_app (production)"} 1.462477e+06 +passenger_proc_start_time_seconds{id="13",name="/srv/app/my_app (production)"} 1.462477e+06 +passenger_proc_start_time_seconds{id="14",name="/srv/app/my_app (production)"} 1.462477e+06 +passenger_proc_start_time_seconds{id="15",name="/srv/app/my_app (production)"} 1.462477e+06 +passenger_proc_start_time_seconds{id="16",name="/srv/app/my_app (production)"} 1.462477e+06 +passenger_proc_start_time_seconds{id="17",name="/srv/app/my_app (production)"} 1.462477e+06 +passenger_proc_start_time_seconds{id="18",name="/srv/app/my_app (production)"} 1.462477e+06 +passenger_proc_start_time_seconds{id="19",name="/srv/app/my_app (production)"} 1.462477e+06 +passenger_proc_start_time_seconds{id="2",name="/srv/app/my_app (production)"} 1.462477e+06 +passenger_proc_start_time_seconds{id="20",name="/srv/app/my_app (production)"} 1.462477e+06 +passenger_proc_start_time_seconds{id="21",name="/srv/app/my_app (production)"} 1.462477e+06 +passenger_proc_start_time_seconds{id="22",name="/srv/app/my_app (production)"} 1.462477e+06 +passenger_proc_start_time_seconds{id="23",name="/srv/app/my_app (production)"} 1.462477e+06 +passenger_proc_start_time_seconds{id="24",name="/srv/app/my_app (production)"} 1.462477e+06 +passenger_proc_start_time_seconds{id="25",name="/srv/app/my_app (production)"} 1.462477e+06 +passenger_proc_start_time_seconds{id="26",name="/srv/app/my_app (production)"} 1.462477e+06 +passenger_proc_start_time_seconds{id="27",name="/srv/app/my_app (production)"} 1.462477e+06 +passenger_proc_start_time_seconds{id="28",name="/srv/app/my_app (production)"} 1.462477e+06 +passenger_proc_start_time_seconds{id="29",name="/srv/app/my_app (production)"} 1.462477e+06 +passenger_proc_start_time_seconds{id="3",name="/srv/app/my_app (production)"} 1.462477e+06 +passenger_proc_start_time_seconds{id="30",name="/srv/app/my_app (production)"} 1.462477e+06 +passenger_proc_start_time_seconds{id="31",name="/srv/app/my_app (production)"} 1.462477e+06 +passenger_proc_start_time_seconds{id="32",name="/srv/app/my_app (production)"} 1.462477e+06 +passenger_proc_start_time_seconds{id="33",name="/srv/app/my_app (production)"} 1.462477e+06 +passenger_proc_start_time_seconds{id="34",name="/srv/app/my_app (production)"} 1.462477e+06 +passenger_proc_start_time_seconds{id="35",name="/srv/app/my_app (production)"} 1.462477e+06 +passenger_proc_start_time_seconds{id="36",name="/srv/app/my_app (production)"} 1.462477e+06 +passenger_proc_start_time_seconds{id="37",name="/srv/app/my_app (production)"} 1.462478e+06 +passenger_proc_start_time_seconds{id="38",name="/srv/app/my_app (production)"} 1.462478e+06 +passenger_proc_start_time_seconds{id="39",name="/srv/app/my_app (production)"} 1.462478e+06 +passenger_proc_start_time_seconds{id="4",name="/srv/app/my_app (production)"} 1.462477e+06 +passenger_proc_start_time_seconds{id="40",name="/srv/app/my_app (production)"} 1.462478e+06 +passenger_proc_start_time_seconds{id="41",name="/srv/app/my_app (production)"} 1.462478e+06 +passenger_proc_start_time_seconds{id="42",name="/srv/app/my_app (production)"} 1.462478e+06 +passenger_proc_start_time_seconds{id="43",name="/srv/app/my_app (production)"} 1.462478e+06 +passenger_proc_start_time_seconds{id="44",name="/srv/app/my_app (production)"} 1.462478e+06 +passenger_proc_start_time_seconds{id="45",name="/srv/app/my_app (production)"} 1.462478e+06 +passenger_proc_start_time_seconds{id="46",name="/srv/app/my_app (production)"} 1.462478e+06 +passenger_proc_start_time_seconds{id="47",name="/srv/app/my_app (production)"} 1.462478e+06 +passenger_proc_start_time_seconds{id="5",name="/srv/app/my_app (production)"} 1.462477e+06 +passenger_proc_start_time_seconds{id="6",name="/srv/app/my_app (production)"} 1.462477e+06 +passenger_proc_start_time_seconds{id="7",name="/srv/app/my_app (production)"} 1.462477e+06 +passenger_proc_start_time_seconds{id="8",name="/srv/app/my_app (production)"} 1.462477e+06 +passenger_proc_start_time_seconds{id="9",name="/srv/app/my_app (production)"} 1.462477e+06 +# HELP passenger_requests_processed_total Number of requests served by a process. +# TYPE passenger_requests_processed_total counter +passenger_requests_processed_total{id="0",name="/srv/app/my_app (production)"} 43578 +passenger_requests_processed_total{id="1",name="/srv/app/my_app (production)"} 48130 +passenger_requests_processed_total{id="10",name="/srv/app/my_app (production)"} 26226 +passenger_requests_processed_total{id="11",name="/srv/app/my_app (production)"} 22752 +passenger_requests_processed_total{id="12",name="/srv/app/my_app (production)"} 18646 +passenger_requests_processed_total{id="13",name="/srv/app/my_app (production)"} 15254 +passenger_requests_processed_total{id="14",name="/srv/app/my_app (production)"} 11561 +passenger_requests_processed_total{id="15",name="/srv/app/my_app (production)"} 9107 +passenger_requests_processed_total{id="16",name="/srv/app/my_app (production)"} 6831 +passenger_requests_processed_total{id="17",name="/srv/app/my_app (production)"} 4804 +passenger_requests_processed_total{id="18",name="/srv/app/my_app (production)"} 3420 +passenger_requests_processed_total{id="19",name="/srv/app/my_app (production)"} 2150 +passenger_requests_processed_total{id="2",name="/srv/app/my_app (production)"} 46701 +passenger_requests_processed_total{id="20",name="/srv/app/my_app (production)"} 1333 +passenger_requests_processed_total{id="21",name="/srv/app/my_app (production)"} 809 +passenger_requests_processed_total{id="22",name="/srv/app/my_app (production)"} 504 +passenger_requests_processed_total{id="23",name="/srv/app/my_app (production)"} 288 +passenger_requests_processed_total{id="24",name="/srv/app/my_app (production)"} 161 +passenger_requests_processed_total{id="25",name="/srv/app/my_app (production)"} 99 +passenger_requests_processed_total{id="26",name="/srv/app/my_app (production)"} 60 +passenger_requests_processed_total{id="27",name="/srv/app/my_app (production)"} 49 +passenger_requests_processed_total{id="28",name="/srv/app/my_app (production)"} 24 +passenger_requests_processed_total{id="29",name="/srv/app/my_app (production)"} 19 +passenger_requests_processed_total{id="3",name="/srv/app/my_app (production)"} 45134 +passenger_requests_processed_total{id="30",name="/srv/app/my_app (production)"} 9 +passenger_requests_processed_total{id="31",name="/srv/app/my_app (production)"} 5 +passenger_requests_processed_total{id="32",name="/srv/app/my_app (production)"} 4 +passenger_requests_processed_total{id="33",name="/srv/app/my_app (production)"} 4 +passenger_requests_processed_total{id="34",name="/srv/app/my_app (production)"} 2 +passenger_requests_processed_total{id="35",name="/srv/app/my_app (production)"} 2 +passenger_requests_processed_total{id="36",name="/srv/app/my_app (production)"} 0 +passenger_requests_processed_total{id="37",name="/srv/app/my_app (production)"} 0 +passenger_requests_processed_total{id="38",name="/srv/app/my_app (production)"} 0 +passenger_requests_processed_total{id="39",name="/srv/app/my_app (production)"} 0 +passenger_requests_processed_total{id="4",name="/srv/app/my_app (production)"} 42932 +passenger_requests_processed_total{id="40",name="/srv/app/my_app (production)"} 0 +passenger_requests_processed_total{id="41",name="/srv/app/my_app (production)"} 0 +passenger_requests_processed_total{id="42",name="/srv/app/my_app (production)"} 0 +passenger_requests_processed_total{id="43",name="/srv/app/my_app (production)"} 0 +passenger_requests_processed_total{id="44",name="/srv/app/my_app (production)"} 0 +passenger_requests_processed_total{id="45",name="/srv/app/my_app (production)"} 0 +passenger_requests_processed_total{id="46",name="/srv/app/my_app (production)"} 0 +passenger_requests_processed_total{id="47",name="/srv/app/my_app (production)"} 0 +passenger_requests_processed_total{id="5",name="/srv/app/my_app (production)"} 40815 +passenger_requests_processed_total{id="6",name="/srv/app/my_app (production)"} 38615 +passenger_requests_processed_total{id="7",name="/srv/app/my_app (production)"} 35802 +passenger_requests_processed_total{id="8",name="/srv/app/my_app (production)"} 33600 +passenger_requests_processed_total{id="9",name="/srv/app/my_app (production)"} 30490 +# HELP passenger_top_level_request_queue Number of requests in the top-level queue. +# TYPE passenger_top_level_request_queue gauge +passenger_top_level_request_queue 0 +# HELP passenger_up Current health of passenger. +# TYPE passenger_up gauge +passenger_up 1 +# HELP passenger_version Version of passenger. +# TYPE passenger_version gauge +passenger_version{version="5.0.26"} 1 diff --git a/testdata/scrape_output.txt b/testdata/scrape_output.txt deleted file mode 100644 index 460a315..0000000 --- a/testdata/scrape_output.txt +++ /dev/null @@ -1,124 +0,0 @@ -# HELP passenger_nginx_app_count Number of apps. -# TYPE passenger_nginx_app_count gauge -passenger_nginx_app_count 1 -# HELP passenger_nginx_app_procs_spawning Number of processes spawning. -# TYPE passenger_nginx_app_procs_spawning gauge -passenger_nginx_app_procs_spawning{name="/srv/app/my_app (production)"} 0 -# HELP passenger_nginx_app_queue Number of requests in app process queues. -# TYPE passenger_nginx_app_queue gauge -passenger_nginx_app_queue{name="/srv/app/my_app (production)"} 0 -# HELP passenger_nginx_current_processes Current number of processes. -# TYPE passenger_nginx_current_processes gauge -passenger_nginx_current_processes 48 -# HELP passenger_nginx_max_processes Configured maximum number of processes. -# TYPE passenger_nginx_max_processes gauge -passenger_nginx_max_processes 48 -# HELP passenger_nginx_proc_memory Memory consumed by a process -# TYPE passenger_nginx_proc_memory gauge -passenger_nginx_proc_memory{id="0",name="/srv/app/my_app (production)"} 330012 -passenger_nginx_proc_memory{id="1",name="/srv/app/my_app (production)"} 303296 -passenger_nginx_proc_memory{id="10",name="/srv/app/my_app (production)"} 303984 -passenger_nginx_proc_memory{id="11",name="/srv/app/my_app (production)"} 289680 -passenger_nginx_proc_memory{id="12",name="/srv/app/my_app (production)"} 306148 -passenger_nginx_proc_memory{id="13",name="/srv/app/my_app (production)"} 293128 -passenger_nginx_proc_memory{id="14",name="/srv/app/my_app (production)"} 322064 -passenger_nginx_proc_memory{id="15",name="/srv/app/my_app (production)"} 297124 -passenger_nginx_proc_memory{id="16",name="/srv/app/my_app (production)"} 290364 -passenger_nginx_proc_memory{id="17",name="/srv/app/my_app (production)"} 292056 -passenger_nginx_proc_memory{id="18",name="/srv/app/my_app (production)"} 272784 -passenger_nginx_proc_memory{id="19",name="/srv/app/my_app (production)"} 281176 -passenger_nginx_proc_memory{id="2",name="/srv/app/my_app (production)"} 288884 -passenger_nginx_proc_memory{id="20",name="/srv/app/my_app (production)"} 269520 -passenger_nginx_proc_memory{id="21",name="/srv/app/my_app (production)"} 269404 -passenger_nginx_proc_memory{id="22",name="/srv/app/my_app (production)"} 275844 -passenger_nginx_proc_memory{id="23",name="/srv/app/my_app (production)"} 276412 -passenger_nginx_proc_memory{id="24",name="/srv/app/my_app (production)"} 267316 -passenger_nginx_proc_memory{id="25",name="/srv/app/my_app (production)"} 265152 -passenger_nginx_proc_memory{id="26",name="/srv/app/my_app (production)"} 261144 -passenger_nginx_proc_memory{id="27",name="/srv/app/my_app (production)"} 260224 -passenger_nginx_proc_memory{id="28",name="/srv/app/my_app (production)"} 243688 -passenger_nginx_proc_memory{id="29",name="/srv/app/my_app (production)"} 243724 -passenger_nginx_proc_memory{id="3",name="/srv/app/my_app (production)"} 293316 -passenger_nginx_proc_memory{id="30",name="/srv/app/my_app (production)"} 261492 -passenger_nginx_proc_memory{id="31",name="/srv/app/my_app (production)"} 260196 -passenger_nginx_proc_memory{id="32",name="/srv/app/my_app (production)"} 244720 -passenger_nginx_proc_memory{id="33",name="/srv/app/my_app (production)"} 261268 -passenger_nginx_proc_memory{id="34",name="/srv/app/my_app (production)"} 261320 -passenger_nginx_proc_memory{id="35",name="/srv/app/my_app (production)"} 244740 -passenger_nginx_proc_memory{id="36",name="/srv/app/my_app (production)"} 244656 -passenger_nginx_proc_memory{id="37",name="/srv/app/my_app (production)"} 244860 -passenger_nginx_proc_memory{id="38",name="/srv/app/my_app (production)"} 244752 -passenger_nginx_proc_memory{id="39",name="/srv/app/my_app (production)"} 244708 -passenger_nginx_proc_memory{id="4",name="/srv/app/my_app (production)"} 330412 -passenger_nginx_proc_memory{id="40",name="/srv/app/my_app (production)"} 244684 -passenger_nginx_proc_memory{id="41",name="/srv/app/my_app (production)"} 255428 -passenger_nginx_proc_memory{id="42",name="/srv/app/my_app (production)"} 243744 -passenger_nginx_proc_memory{id="43",name="/srv/app/my_app (production)"} 254432 -passenger_nginx_proc_memory{id="44",name="/srv/app/my_app (production)"} 243592 -passenger_nginx_proc_memory{id="45",name="/srv/app/my_app (production)"} 244640 -passenger_nginx_proc_memory{id="46",name="/srv/app/my_app (production)"} 242576 -passenger_nginx_proc_memory{id="47",name="/srv/app/my_app (production)"} 255376 -passenger_nginx_proc_memory{id="5",name="/srv/app/my_app (production)"} 306904 -passenger_nginx_proc_memory{id="6",name="/srv/app/my_app (production)"} 330644 -passenger_nginx_proc_memory{id="7",name="/srv/app/my_app (production)"} 315104 -passenger_nginx_proc_memory{id="8",name="/srv/app/my_app (production)"} 288508 -passenger_nginx_proc_memory{id="9",name="/srv/app/my_app (production)"} 306520 -# HELP passenger_nginx_requests_processed_total Number of processes served by a process. -# TYPE passenger_nginx_requests_processed_total counter -passenger_nginx_requests_processed_total{id="0",name="/srv/app/my_app (production)"} 43578 -passenger_nginx_requests_processed_total{id="1",name="/srv/app/my_app (production)"} 48130 -passenger_nginx_requests_processed_total{id="10",name="/srv/app/my_app (production)"} 26226 -passenger_nginx_requests_processed_total{id="11",name="/srv/app/my_app (production)"} 22752 -passenger_nginx_requests_processed_total{id="12",name="/srv/app/my_app (production)"} 18646 -passenger_nginx_requests_processed_total{id="13",name="/srv/app/my_app (production)"} 15254 -passenger_nginx_requests_processed_total{id="14",name="/srv/app/my_app (production)"} 11561 -passenger_nginx_requests_processed_total{id="15",name="/srv/app/my_app (production)"} 9107 -passenger_nginx_requests_processed_total{id="16",name="/srv/app/my_app (production)"} 6831 -passenger_nginx_requests_processed_total{id="17",name="/srv/app/my_app (production)"} 4804 -passenger_nginx_requests_processed_total{id="18",name="/srv/app/my_app (production)"} 3420 -passenger_nginx_requests_processed_total{id="19",name="/srv/app/my_app (production)"} 2150 -passenger_nginx_requests_processed_total{id="2",name="/srv/app/my_app (production)"} 46701 -passenger_nginx_requests_processed_total{id="20",name="/srv/app/my_app (production)"} 1333 -passenger_nginx_requests_processed_total{id="21",name="/srv/app/my_app (production)"} 809 -passenger_nginx_requests_processed_total{id="22",name="/srv/app/my_app (production)"} 504 -passenger_nginx_requests_processed_total{id="23",name="/srv/app/my_app (production)"} 288 -passenger_nginx_requests_processed_total{id="24",name="/srv/app/my_app (production)"} 161 -passenger_nginx_requests_processed_total{id="25",name="/srv/app/my_app (production)"} 99 -passenger_nginx_requests_processed_total{id="26",name="/srv/app/my_app (production)"} 60 -passenger_nginx_requests_processed_total{id="27",name="/srv/app/my_app (production)"} 49 -passenger_nginx_requests_processed_total{id="28",name="/srv/app/my_app (production)"} 24 -passenger_nginx_requests_processed_total{id="29",name="/srv/app/my_app (production)"} 19 -passenger_nginx_requests_processed_total{id="3",name="/srv/app/my_app (production)"} 45134 -passenger_nginx_requests_processed_total{id="30",name="/srv/app/my_app (production)"} 9 -passenger_nginx_requests_processed_total{id="31",name="/srv/app/my_app (production)"} 5 -passenger_nginx_requests_processed_total{id="32",name="/srv/app/my_app (production)"} 4 -passenger_nginx_requests_processed_total{id="33",name="/srv/app/my_app (production)"} 4 -passenger_nginx_requests_processed_total{id="34",name="/srv/app/my_app (production)"} 2 -passenger_nginx_requests_processed_total{id="35",name="/srv/app/my_app (production)"} 2 -passenger_nginx_requests_processed_total{id="36",name="/srv/app/my_app (production)"} 0 -passenger_nginx_requests_processed_total{id="37",name="/srv/app/my_app (production)"} 0 -passenger_nginx_requests_processed_total{id="38",name="/srv/app/my_app (production)"} 0 -passenger_nginx_requests_processed_total{id="39",name="/srv/app/my_app (production)"} 0 -passenger_nginx_requests_processed_total{id="4",name="/srv/app/my_app (production)"} 42932 -passenger_nginx_requests_processed_total{id="40",name="/srv/app/my_app (production)"} 0 -passenger_nginx_requests_processed_total{id="41",name="/srv/app/my_app (production)"} 0 -passenger_nginx_requests_processed_total{id="42",name="/srv/app/my_app (production)"} 0 -passenger_nginx_requests_processed_total{id="43",name="/srv/app/my_app (production)"} 0 -passenger_nginx_requests_processed_total{id="44",name="/srv/app/my_app (production)"} 0 -passenger_nginx_requests_processed_total{id="45",name="/srv/app/my_app (production)"} 0 -passenger_nginx_requests_processed_total{id="46",name="/srv/app/my_app (production)"} 0 -passenger_nginx_requests_processed_total{id="47",name="/srv/app/my_app (production)"} 0 -passenger_nginx_requests_processed_total{id="5",name="/srv/app/my_app (production)"} 40815 -passenger_nginx_requests_processed_total{id="6",name="/srv/app/my_app (production)"} 38615 -passenger_nginx_requests_processed_total{id="7",name="/srv/app/my_app (production)"} 35802 -passenger_nginx_requests_processed_total{id="8",name="/srv/app/my_app (production)"} 33600 -passenger_nginx_requests_processed_total{id="9",name="/srv/app/my_app (production)"} 30490 -# HELP passenger_nginx_top_level_queue Number of requests in the top-level queue. -# TYPE passenger_nginx_top_level_queue gauge -passenger_nginx_top_level_queue 0 -# HELP passenger_nginx_up Could passenger status be queried. -# TYPE passenger_nginx_up gauge -passenger_nginx_up 1 -# HELP passenger_nginx_version Version of passenger -# TYPE passenger_nginx_version gauge -passenger_nginx_version{version="5.0.26"} 1