fix(inputs.php-fpm): Parse JSON output (#14430)
This commit is contained in:
parent
235f0556c4
commit
34296b8154
|
|
@ -39,6 +39,12 @@ See the [CONFIGURATION.md][CONFIGURATION.md] for more details.
|
||||||
## urls = ["http://192.168.1.20/status", "/tmp/fpm.sock"]
|
## urls = ["http://192.168.1.20/status", "/tmp/fpm.sock"]
|
||||||
urls = ["http://localhost/status"]
|
urls = ["http://localhost/status"]
|
||||||
|
|
||||||
|
## Format of stats to parse, set to "status" or "json"
|
||||||
|
## If the user configures the URL to return JSON (e.g.
|
||||||
|
## http://localhost/status?json), set to JSON. Otherwise, will attempt to
|
||||||
|
## parse line-by-line. The JSON mode will produce additonal metrics.
|
||||||
|
# format = "status"
|
||||||
|
|
||||||
## Duration allowed to complete HTTP requests.
|
## Duration allowed to complete HTTP requests.
|
||||||
# timeout = "5s"
|
# timeout = "5s"
|
||||||
|
|
||||||
|
|
@ -70,6 +76,23 @@ host, and socket path is accessible to telegraf user.
|
||||||
- max_active_processes
|
- max_active_processes
|
||||||
- max_children_reached
|
- max_children_reached
|
||||||
- slow_requests
|
- slow_requests
|
||||||
|
- phpfpm_process
|
||||||
|
- tags:
|
||||||
|
- pool
|
||||||
|
- request method
|
||||||
|
- request uri
|
||||||
|
- script
|
||||||
|
- url
|
||||||
|
- user
|
||||||
|
- fields:
|
||||||
|
- content length
|
||||||
|
- last request cpu
|
||||||
|
- last request memory
|
||||||
|
- request duration
|
||||||
|
- requests
|
||||||
|
- start time
|
||||||
|
- start since
|
||||||
|
- state
|
||||||
|
|
||||||
## Example Output
|
## Example Output
|
||||||
|
|
||||||
|
|
@ -78,3 +101,19 @@ phpfpm,pool=www accepted_conn=13i,active_processes=2i,idle_processes=1i,listen_q
|
||||||
phpfpm,pool=www2 accepted_conn=12i,active_processes=1i,idle_processes=2i,listen_queue=0i,listen_queue_len=0i,max_active_processes=2i,max_children_reached=0i,max_listen_queue=0i,slow_requests=0i,total_processes=3i 1453011293083691422
|
phpfpm,pool=www2 accepted_conn=12i,active_processes=1i,idle_processes=2i,listen_queue=0i,listen_queue_len=0i,max_active_processes=2i,max_children_reached=0i,max_listen_queue=0i,slow_requests=0i,total_processes=3i 1453011293083691422
|
||||||
phpfpm,pool=www3 accepted_conn=11i,active_processes=1i,idle_processes=2i,listen_queue=0i,listen_queue_len=0i,max_active_processes=2i,max_children_reached=0i,max_listen_queue=0i,slow_requests=0i,total_processes=3i 1453011293083691658
|
phpfpm,pool=www3 accepted_conn=11i,active_processes=1i,idle_processes=2i,listen_queue=0i,listen_queue_len=0i,max_active_processes=2i,max_children_reached=0i,max_listen_queue=0i,slow_requests=0i,total_processes=3i 1453011293083691658
|
||||||
```
|
```
|
||||||
|
|
||||||
|
With the JSON output, additional metrics around processes are generated:
|
||||||
|
|
||||||
|
```text
|
||||||
|
phpfpm,pool=www,url=http://127.0.0.1:44637?full&json accepted_conn=3879i,active_processes=1i,idle_processes=9i,listen_queue=0i,listen_queue_len=0i,max_active_processes=3i,max_children_reached=0i,max_listen_queue=0i,slow_requests=0i,start_since=4901i,total_processes=10i
|
||||||
|
phpfpm_process,pool=www,request_method=GET,request_uri=/fpm-status?json&full,script=-,url=http://127.0.0.1:44637?full&json,user=- content_length=0i,last_request_cpu=0,last_request_memory=0,request_duration=159i,requests=386i,start_time=1702044927i,state="Running"
|
||||||
|
phpfpm_process,pool=www,request_method=GET,request_uri=/fpm-status,script=-,url=http://127.0.0.1:44637?full&json,user=- content_length=0i,last_request_cpu=0,last_request_memory=2097152,request_duration=174i,requests=390i,start_time=1702044927i,state="Idle"
|
||||||
|
phpfpm_process,pool=www,request_method=GET,request_uri=/index.php,script=script.php,url=http://127.0.0.1:44637?full&json,user=- content_length=0i,last_request_cpu=104.93,last_request_memory=2097152,request_duration=9530i,requests=389i,start_time=1702044927i,state="Idle"
|
||||||
|
phpfpm_process,pool=www,request_method=GET,request_uri=/ping,script=-,url=http://127.0.0.1:44637?full&json,user=- content_length=0i,last_request_cpu=0,last_request_memory=2097152,request_duration=127i,requests=399i,start_time=1702044927i,state="Idle"
|
||||||
|
phpfpm_process,pool=www,request_method=GET,request_uri=/index.php,script=script.php,url=http://127.0.0.1:44637?full&json,user=- content_length=0i,last_request_cpu=0,last_request_memory=2097152,request_duration=9713i,requests=382i,start_time=1702044927i,state="Idle"
|
||||||
|
phpfpm_process,pool=www,request_method=GET,request_uri=/ping,script=-,url=http://127.0.0.1:44637?full&json,user=- content_length=0i,last_request_cpu=0,last_request_memory=2097152,request_duration=133i,requests=383i,start_time=1702044927i,state="Idle"
|
||||||
|
phpfpm_process,pool=www,request_method=GET,request_uri=/fpm-status?json,script=-,url=http://127.0.0.1:44637?full&json,user=- content_length=0i,last_request_cpu=0,last_request_memory=2097152,request_duration=154i,requests=381i,start_time=1702044927i,state="Idle"
|
||||||
|
phpfpm_process,pool=www,request_method=GET,request_uri=/ping,script=-,url=http://127.0.0.1:44637?full&json,user=- content_length=0i,last_request_cpu=0,last_request_memory=2097152,request_duration=108i,requests=397i,start_time=1702044927i,state="Idle"
|
||||||
|
phpfpm_process,pool=www,request_method=GET,request_uri=/index.php,script=script.php,url=http://127.0.0.1:44637?full&json,user=- content_length=0i,last_request_cpu=110.28,last_request_memory=2097152,request_duration=9068i,requests=381i,start_time=1702044927i,state="Idle"
|
||||||
|
phpfpm_process,pool=www,request_method=GET,request_uri=/index.php,script=script.php,url=http://127.0.0.1:44637?full&json,user=- content_length=0i,last_request_cpu=64.27,last_request_memory=2097152,request_duration=15559i,requests=391i,start_time=1702044927i,state="Idle"
|
||||||
|
```
|
||||||
|
|
|
||||||
|
|
@ -5,6 +5,7 @@ import (
|
||||||
"bufio"
|
"bufio"
|
||||||
"bytes"
|
"bytes"
|
||||||
_ "embed"
|
_ "embed"
|
||||||
|
"encoding/json"
|
||||||
"fmt"
|
"fmt"
|
||||||
"io"
|
"io"
|
||||||
"net/http"
|
"net/http"
|
||||||
|
|
@ -40,15 +41,49 @@ const (
|
||||||
PfSlowRequests = "slow requests"
|
PfSlowRequests = "slow requests"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
type JSONMetrics struct {
|
||||||
|
Pool string `json:"pool"`
|
||||||
|
ProcessManager string `json:"process manager"`
|
||||||
|
StartTime int `json:"start time"`
|
||||||
|
StartSince int `json:"start since"`
|
||||||
|
AcceptedConn int `json:"accepted conn"`
|
||||||
|
ListenQueue int `json:"listen queue"`
|
||||||
|
MaxListenQueue int `json:"max listen queue"`
|
||||||
|
ListenQueueLen int `json:"listen queue len"`
|
||||||
|
IdleProcesses int `json:"idle processes"`
|
||||||
|
ActiveProcesses int `json:"active processes"`
|
||||||
|
TotalProcesses int `json:"total processes"`
|
||||||
|
MaxActiveProcesses int `json:"max active processes"`
|
||||||
|
MaxChildrenReached int `json:"max children reached"`
|
||||||
|
SlowRequests int `json:"slow requests"`
|
||||||
|
Processes []struct {
|
||||||
|
Pid int `json:"pid"`
|
||||||
|
State string `json:"state"`
|
||||||
|
StartTime int `json:"start time"`
|
||||||
|
StartSince int `json:"start since"`
|
||||||
|
Requests int `json:"requests"`
|
||||||
|
RequestDuration int `json:"request duration"`
|
||||||
|
RequestMethod string `json:"request method"`
|
||||||
|
RequestURI string `json:"request uri"`
|
||||||
|
ContentLength int `json:"content length"`
|
||||||
|
User string `json:"user"`
|
||||||
|
Script string `json:"script"`
|
||||||
|
LastRequestCPU float64 `json:"last request cpu"`
|
||||||
|
LastRequestMemory float64 `json:"last request memory"`
|
||||||
|
} `json:"processes"`
|
||||||
|
}
|
||||||
|
|
||||||
type metric map[string]int64
|
type metric map[string]int64
|
||||||
type poolStat map[string]metric
|
type poolStat map[string]metric
|
||||||
|
|
||||||
type phpfpm struct {
|
type phpfpm struct {
|
||||||
Urls []string
|
Format string `toml:"format"`
|
||||||
Timeout config.Duration
|
Timeout config.Duration `toml:"timeout"`
|
||||||
tls.ClientConfig
|
Urls []string `toml:"urls"`
|
||||||
|
|
||||||
|
tls.ClientConfig
|
||||||
client *http.Client
|
client *http.Client
|
||||||
|
log telegraf.Logger
|
||||||
}
|
}
|
||||||
|
|
||||||
func (*phpfpm) SampleConfig() string {
|
func (*phpfpm) SampleConfig() string {
|
||||||
|
|
@ -61,6 +96,15 @@ func (p *phpfpm) Init() error {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
switch p.Format {
|
||||||
|
case "":
|
||||||
|
p.Format = "status"
|
||||||
|
case "status", "json":
|
||||||
|
// both valid
|
||||||
|
default:
|
||||||
|
return fmt.Errorf("invalid format: %s", p.Format)
|
||||||
|
}
|
||||||
|
|
||||||
p.client = &http.Client{
|
p.client = &http.Client{
|
||||||
Transport: &http.Transport{
|
Transport: &http.Transport{
|
||||||
TLSClientConfig: tlsCfg,
|
TLSClientConfig: tlsCfg,
|
||||||
|
|
@ -158,7 +202,7 @@ func (p *phpfpm) gatherFcgi(fcgi *conn, statusPath string, acc telegraf.Accumula
|
||||||
}, "/"+statusPath)
|
}, "/"+statusPath)
|
||||||
|
|
||||||
if len(fpmErr) == 0 && err == nil {
|
if len(fpmErr) == 0 && err == nil {
|
||||||
importMetric(bytes.NewReader(fpmOutput), acc, addr)
|
p.importMetric(bytes.NewReader(fpmOutput), acc, addr)
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
return fmt.Errorf("unable parse phpfpm status, error: %s; %w", string(fpmErr), err)
|
return fmt.Errorf("unable parse phpfpm status, error: %s; %w", string(fpmErr), err)
|
||||||
|
|
@ -186,12 +230,20 @@ func (p *phpfpm) gatherHTTP(addr string, acc telegraf.Accumulator) error {
|
||||||
return fmt.Errorf("unable to get valid stat result from %q: %w", addr, err)
|
return fmt.Errorf("unable to get valid stat result from %q: %w", addr, err)
|
||||||
}
|
}
|
||||||
|
|
||||||
importMetric(res.Body, acc, addr)
|
p.importMetric(res.Body, acc, addr)
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// Import stat data into Telegraf system
|
// Import stat data into Telegraf system
|
||||||
func importMetric(r io.Reader, acc telegraf.Accumulator, addr string) {
|
func (p *phpfpm) importMetric(r io.Reader, acc telegraf.Accumulator, addr string) {
|
||||||
|
if p.Format == "json" {
|
||||||
|
p.parseJSON(r, acc, addr)
|
||||||
|
} else {
|
||||||
|
parseLines(r, acc, addr)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func parseLines(r io.Reader, acc telegraf.Accumulator, addr string) {
|
||||||
stats := make(poolStat)
|
stats := make(poolStat)
|
||||||
var currentPool string
|
var currentPool string
|
||||||
|
|
||||||
|
|
@ -245,6 +297,55 @@ func importMetric(r io.Reader, acc telegraf.Accumulator, addr string) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (p *phpfpm) parseJSON(r io.Reader, acc telegraf.Accumulator, addr string) {
|
||||||
|
var metrics JSONMetrics
|
||||||
|
if err := json.NewDecoder(r).Decode(&metrics); err != nil {
|
||||||
|
p.log.Errorf("Unable to decode JSON response: %s", err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
timestamp := time.Now()
|
||||||
|
|
||||||
|
tags := map[string]string{
|
||||||
|
"pool": metrics.Pool,
|
||||||
|
"url": addr,
|
||||||
|
}
|
||||||
|
fields := map[string]any{
|
||||||
|
"start_since": metrics.StartSince,
|
||||||
|
"accepted_conn": metrics.AcceptedConn,
|
||||||
|
"listen_queue": metrics.ListenQueue,
|
||||||
|
"max_listen_queue": metrics.MaxListenQueue,
|
||||||
|
"listen_queue_len": metrics.ListenQueueLen,
|
||||||
|
"idle_processes": metrics.IdleProcesses,
|
||||||
|
"active_processes": metrics.ActiveProcesses,
|
||||||
|
"total_processes": metrics.TotalProcesses,
|
||||||
|
"max_active_processes": metrics.MaxActiveProcesses,
|
||||||
|
"max_children_reached": metrics.MaxChildrenReached,
|
||||||
|
"slow_requests": metrics.SlowRequests,
|
||||||
|
}
|
||||||
|
acc.AddFields("phpfpm", fields, tags, timestamp)
|
||||||
|
|
||||||
|
for _, process := range metrics.Processes {
|
||||||
|
tags := map[string]string{
|
||||||
|
"pool": metrics.Pool,
|
||||||
|
"url": addr,
|
||||||
|
"user": process.User,
|
||||||
|
"request_uri": process.RequestURI,
|
||||||
|
"request_method": process.RequestMethod,
|
||||||
|
"script": process.Script,
|
||||||
|
}
|
||||||
|
fields := map[string]any{
|
||||||
|
"state": process.State,
|
||||||
|
"start_time": process.StartTime,
|
||||||
|
"requests": process.Requests,
|
||||||
|
"request_duration": process.RequestDuration,
|
||||||
|
"content_length": process.ContentLength,
|
||||||
|
"last_request_cpu": process.LastRequestCPU,
|
||||||
|
"last_request_memory": process.LastRequestMemory,
|
||||||
|
}
|
||||||
|
acc.AddFields("phpfpm_process", fields, tags, timestamp)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func expandUrls(urls []string) ([]string, error) {
|
func expandUrls(urls []string) ([]string, error) {
|
||||||
addrs := make([]string, 0, len(urls))
|
addrs := make([]string, 0, len(urls))
|
||||||
for _, address := range urls {
|
for _, address := range urls {
|
||||||
|
|
|
||||||
|
|
@ -13,11 +13,13 @@ import (
|
||||||
"net/http"
|
"net/http"
|
||||||
"net/http/fcgi"
|
"net/http/fcgi"
|
||||||
"net/http/httptest"
|
"net/http/httptest"
|
||||||
|
"os"
|
||||||
"strconv"
|
"strconv"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
"github.com/stretchr/testify/require"
|
"github.com/stretchr/testify/require"
|
||||||
|
|
||||||
|
"github.com/influxdata/telegraf/plugins/parsers/influx"
|
||||||
"github.com/influxdata/telegraf/testutil"
|
"github.com/influxdata/telegraf/testutil"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
@ -73,6 +75,34 @@ func TestPhpFpmGeneratesMetrics_From_Http(t *testing.T) {
|
||||||
acc.AssertContainsTaggedFields(t, "phpfpm", fields, tags)
|
acc.AssertContainsTaggedFields(t, "phpfpm", fields, tags)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestPhpFpmGeneratesJSONMetrics_From_Http(t *testing.T) {
|
||||||
|
outputSampleJSON, err := os.ReadFile("testdata/phpfpm.json")
|
||||||
|
require.NoError(t, err)
|
||||||
|
server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
||||||
|
w.Header().Set("Content-Type", "text/json")
|
||||||
|
w.Header().Set("Content-Length", strconv.Itoa(len(outputSampleJSON)))
|
||||||
|
_, err := fmt.Fprint(w, string(outputSampleJSON))
|
||||||
|
require.NoError(t, err)
|
||||||
|
}))
|
||||||
|
defer server.Close()
|
||||||
|
|
||||||
|
parser := &influx.Parser{}
|
||||||
|
require.NoError(t, parser.Init())
|
||||||
|
expected, err := testutil.ParseMetricsFromFile("testdata/expected.out", parser)
|
||||||
|
require.NoError(t, err)
|
||||||
|
|
||||||
|
input := &phpfpm{
|
||||||
|
Urls: []string{server.URL + "?full&json"},
|
||||||
|
Format: "json",
|
||||||
|
log: testutil.Logger{},
|
||||||
|
}
|
||||||
|
require.NoError(t, input.Init())
|
||||||
|
|
||||||
|
var acc testutil.Accumulator
|
||||||
|
require.NoError(t, acc.GatherError(input.Gather))
|
||||||
|
testutil.RequireMetricsEqual(t, expected, acc.GetTelegrafMetrics(), testutil.IgnoreTime(), testutil.IgnoreTags("url"))
|
||||||
|
}
|
||||||
|
|
||||||
func TestPhpFpmGeneratesMetrics_From_Fcgi(t *testing.T) {
|
func TestPhpFpmGeneratesMetrics_From_Fcgi(t *testing.T) {
|
||||||
// Let OS find an available port
|
// Let OS find an available port
|
||||||
tcp, err := net.Listen("tcp", "127.0.0.1:0")
|
tcp, err := net.Listen("tcp", "127.0.0.1:0")
|
||||||
|
|
|
||||||
|
|
@ -23,6 +23,12 @@
|
||||||
## urls = ["http://192.168.1.20/status", "/tmp/fpm.sock"]
|
## urls = ["http://192.168.1.20/status", "/tmp/fpm.sock"]
|
||||||
urls = ["http://localhost/status"]
|
urls = ["http://localhost/status"]
|
||||||
|
|
||||||
|
## Format of stats to parse, set to "status" or "json"
|
||||||
|
## If the user configures the URL to return JSON (e.g.
|
||||||
|
## http://localhost/status?json), set to JSON. Otherwise, will attempt to
|
||||||
|
## parse line-by-line. The JSON mode will produce additonal metrics.
|
||||||
|
# format = "status"
|
||||||
|
|
||||||
## Duration allowed to complete HTTP requests.
|
## Duration allowed to complete HTTP requests.
|
||||||
# timeout = "5s"
|
# timeout = "5s"
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,11 @@
|
||||||
|
phpfpm,pool=www,url=http://127.0.0.1:44637?full&json accepted_conn=3879i,active_processes=1i,idle_processes=9i,listen_queue=0i,listen_queue_len=0i,max_active_processes=3i,max_children_reached=0i,max_listen_queue=0i,slow_requests=0i,start_since=4901i,total_processes=10i
|
||||||
|
phpfpm_process,pool=www,request_method=GET,request_uri=/fpm-status?json&full,script=-,url=http://127.0.0.1:44637?full&json,user=- content_length=0i,last_request_cpu=0,last_request_memory=0,request_duration=159i,requests=386i,start_time=1702044927i,state="Running"
|
||||||
|
phpfpm_process,pool=www,request_method=GET,request_uri=/fpm-status,script=-,url=http://127.0.0.1:44637?full&json,user=- content_length=0i,last_request_cpu=0,last_request_memory=2097152,request_duration=174i,requests=390i,start_time=1702044927i,state="Idle"
|
||||||
|
phpfpm_process,pool=www,request_method=GET,request_uri=/index.php,script=script.php,url=http://127.0.0.1:44637?full&json,user=- content_length=0i,last_request_cpu=104.93,last_request_memory=2097152,request_duration=9530i,requests=389i,start_time=1702044927i,state="Idle"
|
||||||
|
phpfpm_process,pool=www,request_method=GET,request_uri=/ping,script=-,url=http://127.0.0.1:44637?full&json,user=- content_length=0i,last_request_cpu=0,last_request_memory=2097152,request_duration=127i,requests=399i,start_time=1702044927i,state="Idle"
|
||||||
|
phpfpm_process,pool=www,request_method=GET,request_uri=/index.php,script=script.php,url=http://127.0.0.1:44637?full&json,user=- content_length=0i,last_request_cpu=0,last_request_memory=2097152,request_duration=9713i,requests=382i,start_time=1702044927i,state="Idle"
|
||||||
|
phpfpm_process,pool=www,request_method=GET,request_uri=/ping,script=-,url=http://127.0.0.1:44637?full&json,user=- content_length=0i,last_request_cpu=0,last_request_memory=2097152,request_duration=133i,requests=383i,start_time=1702044927i,state="Idle"
|
||||||
|
phpfpm_process,pool=www,request_method=GET,request_uri=/fpm-status?json,script=-,url=http://127.0.0.1:44637?full&json,user=- content_length=0i,last_request_cpu=0,last_request_memory=2097152,request_duration=154i,requests=381i,start_time=1702044927i,state="Idle"
|
||||||
|
phpfpm_process,pool=www,request_method=GET,request_uri=/ping,script=-,url=http://127.0.0.1:44637?full&json,user=- content_length=0i,last_request_cpu=0,last_request_memory=2097152,request_duration=108i,requests=397i,start_time=1702044927i,state="Idle"
|
||||||
|
phpfpm_process,pool=www,request_method=GET,request_uri=/index.php,script=script.php,url=http://127.0.0.1:44637?full&json,user=- content_length=0i,last_request_cpu=110.28,last_request_memory=2097152,request_duration=9068i,requests=381i,start_time=1702044927i,state="Idle"
|
||||||
|
phpfpm_process,pool=www,request_method=GET,request_uri=/index.php,script=script.php,url=http://127.0.0.1:44637?full&json,user=- content_length=0i,last_request_cpu=64.27,last_request_memory=2097152,request_duration=15559i,requests=391i,start_time=1702044927i,state="Idle"
|
||||||
|
|
@ -0,0 +1,168 @@
|
||||||
|
{
|
||||||
|
"pool": "www",
|
||||||
|
"process manager": "static",
|
||||||
|
"start time": 1702044927,
|
||||||
|
"start since": 4901,
|
||||||
|
"accepted conn": 3879,
|
||||||
|
"listen queue": 0,
|
||||||
|
"max listen queue": 0,
|
||||||
|
"listen queue len": 0,
|
||||||
|
"idle processes": 9,
|
||||||
|
"active processes": 1,
|
||||||
|
"total processes": 10,
|
||||||
|
"max active processes": 3,
|
||||||
|
"max children reached": 0,
|
||||||
|
"slow requests": 0,
|
||||||
|
"processes": [
|
||||||
|
{
|
||||||
|
"pid": 583,
|
||||||
|
"state": "Running",
|
||||||
|
"start time": 1702044927,
|
||||||
|
"start since": 4901,
|
||||||
|
"requests": 386,
|
||||||
|
"request duration": 159,
|
||||||
|
"request method": "GET",
|
||||||
|
"request uri": "/fpm-status?json&full",
|
||||||
|
"content length": 0,
|
||||||
|
"user": "-",
|
||||||
|
"script": "-",
|
||||||
|
"last request cpu": 0,
|
||||||
|
"last request memory": 0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"pid": 584,
|
||||||
|
"state": "Idle",
|
||||||
|
"start time": 1702044927,
|
||||||
|
"start since": 4901,
|
||||||
|
"requests": 390,
|
||||||
|
"request duration": 174,
|
||||||
|
"request method": "GET",
|
||||||
|
"request uri": "/fpm-status",
|
||||||
|
"content length": 0,
|
||||||
|
"user": "-",
|
||||||
|
"script": "-",
|
||||||
|
"last request cpu": 0,
|
||||||
|
"last request memory": 2097152
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"pid": 585,
|
||||||
|
"state": "Idle",
|
||||||
|
"start time": 1702044927,
|
||||||
|
"start since": 4901,
|
||||||
|
"requests": 389,
|
||||||
|
"request duration": 9530,
|
||||||
|
"request method": "GET",
|
||||||
|
"request uri": "/index.php",
|
||||||
|
"content length": 0,
|
||||||
|
"user": "-",
|
||||||
|
"script": "script.php",
|
||||||
|
"last request cpu": 104.93,
|
||||||
|
"last request memory": 2097152
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"pid": 586,
|
||||||
|
"state": "Idle",
|
||||||
|
"start time": 1702044927,
|
||||||
|
"start since": 4901,
|
||||||
|
"requests": 399,
|
||||||
|
"request duration": 127,
|
||||||
|
"request method": "GET",
|
||||||
|
"request uri": "/ping",
|
||||||
|
"content length": 0,
|
||||||
|
"user": "-",
|
||||||
|
"script": "-",
|
||||||
|
"last request cpu": 0,
|
||||||
|
"last request memory": 2097152
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"pid": 587,
|
||||||
|
"state": "Idle",
|
||||||
|
"start time": 1702044927,
|
||||||
|
"start since": 4901,
|
||||||
|
"requests": 382,
|
||||||
|
"request duration": 9713,
|
||||||
|
"request method": "GET",
|
||||||
|
"request uri": "/index.php",
|
||||||
|
"content length": 0,
|
||||||
|
"user": "-",
|
||||||
|
"script": "script.php",
|
||||||
|
"last request cpu": 0,
|
||||||
|
"last request memory": 2097152
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"pid": 588,
|
||||||
|
"state": "Idle",
|
||||||
|
"start time": 1702044927,
|
||||||
|
"start since": 4901,
|
||||||
|
"requests": 383,
|
||||||
|
"request duration": 133,
|
||||||
|
"request method": "GET",
|
||||||
|
"request uri": "/ping",
|
||||||
|
"content length": 0,
|
||||||
|
"user": "-",
|
||||||
|
"script": "-",
|
||||||
|
"last request cpu": 0,
|
||||||
|
"last request memory": 2097152
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"pid": 589,
|
||||||
|
"state": "Idle",
|
||||||
|
"start time": 1702044927,
|
||||||
|
"start since": 4901,
|
||||||
|
"requests": 381,
|
||||||
|
"request duration": 154,
|
||||||
|
"request method": "GET",
|
||||||
|
"request uri": "/fpm-status?json",
|
||||||
|
"content length": 0,
|
||||||
|
"user": "-",
|
||||||
|
"script": "-",
|
||||||
|
"last request cpu": 0,
|
||||||
|
"last request memory": 2097152
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"pid": 590,
|
||||||
|
"state": "Idle",
|
||||||
|
"start time": 1702044927,
|
||||||
|
"start since": 4901,
|
||||||
|
"requests": 397,
|
||||||
|
"request duration": 108,
|
||||||
|
"request method": "GET",
|
||||||
|
"request uri": "/ping",
|
||||||
|
"content length": 0,
|
||||||
|
"user": "-",
|
||||||
|
"script": "-",
|
||||||
|
"last request cpu": 0,
|
||||||
|
"last request memory": 2097152
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"pid": 591,
|
||||||
|
"state": "Idle",
|
||||||
|
"start time": 1702044927,
|
||||||
|
"start since": 4901,
|
||||||
|
"requests": 381,
|
||||||
|
"request duration": 9068,
|
||||||
|
"request method": "GET",
|
||||||
|
"request uri": "/index.php",
|
||||||
|
"content length": 0,
|
||||||
|
"user": "-",
|
||||||
|
"script": "script.php",
|
||||||
|
"last request cpu": 110.28,
|
||||||
|
"last request memory": 2097152
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"pid": 592,
|
||||||
|
"state": "Idle",
|
||||||
|
"start time": 1702044927,
|
||||||
|
"start since": 4901,
|
||||||
|
"requests": 391,
|
||||||
|
"request duration": 15559,
|
||||||
|
"request method": "GET",
|
||||||
|
"request uri": "/index.php",
|
||||||
|
"content length": 0,
|
||||||
|
"user": "-",
|
||||||
|
"script": "script.php",
|
||||||
|
"last request cpu": 64.27,
|
||||||
|
"last request memory": 2097152
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue