diff --git a/plugins/inputs/phpfpm/README.md b/plugins/inputs/phpfpm/README.md index 117d24298..aed41ada6 100644 --- a/plugins/inputs/phpfpm/README.md +++ b/plugins/inputs/phpfpm/README.md @@ -1,65 +1,59 @@ -# Telegraf plugin: phpfpm +# PHP-FPM Input Plugin -Get phpfpm stat using either HTTP status page or fpm socket. +Get phpfpm stats using either HTTP status page or fpm socket. -# Measurements - -Meta: - -- tags: `pool=poolname` - -Measurement names: - -- phpfpm - -Measurement field: - -- accepted_conn -- listen_queue -- max_listen_queue -- listen_queue_len -- idle_processes -- active_processes -- total_processes -- max_active_processes -- max_children_reached -- slow_requests - -# Example output - -Using this configuration: +### Configuration: +```toml +# Read metrics of phpfpm, via HTTP status page or socket +[[inputs.phpfpm]] + ## An array of addresses to gather stats about. Specify an ip or hostname + ## with optional port and path + ## + ## Plugin can be configured in three modes (either can be used): + ## - http: the URL must start with http:// or https://, ie: + ## "http://localhost/status" + ## "http://192.168.130.1/status?full" + ## + ## - unixsocket: path to fpm socket, ie: + ## "/var/run/php5-fpm.sock" + ## or using a custom fpm status path: + ## "/var/run/php5-fpm.sock:fpm-custom-status-path" + ## + ## - fcgi: the URL must start with fcgi:// or cgi://, and port must be present, ie: + ## "fcgi://10.0.0.12:9000/status" + ## "cgi://10.0.10.12:9001/status" + ## + ## Example of multiple gathering from local socket and remove host + ## urls = ["http://192.168.1.20/status", "/tmp/fpm.sock"] + urls = ["http://localhost/status"] ``` -[phpfpm] - # An array of address to gather stats about. Specify an ip on hostname - # with optional port and path. ie localhost, 10.10.3.33/server-status, etc. - # - # We can configure in three modes: - # - unixsocket: the string is the path to fpm socket like - # /var/run/php5-fpm.sock - # - http: the URL has to start with http:// or https:// - # - fcgi: the URL has to start with fcgi:// or cgi://, and socket port must present - # - # If no servers are specified, then default to 127.0.0.1/server-status - urls = ["http://localhost/status", "10.0.0.12:/var/run/php5-fpm-www2.sock", "fcgi://10.0.0.12:9000/status"] -``` - -When run with: - -``` -./telegraf --config telegraf.conf --input-filter phpfpm --test -``` - -It produces: - -``` -* Plugin: phpfpm, Collection 1 -> phpfpm,pool=www accepted_conn=13i,active_processes=2i,idle_processes=1i,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 1453011293083331187 -> 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 -``` - -## Note When using `unixsocket`, you have to ensure that telegraf runs on same host, and socket path is accessible to telegraf user. + +### Metrics: + +- phpfpm + - tags: + - pool + - url + - fields: + - accepted_conn + - listen_queue + - max_listen_queue + - listen_queue_len + - idle_processes + - active_processes + - total_processes + - max_active_processes + - max_children_reached + - slow_requests + +# Example Output + +``` +phpfpm,pool=www accepted_conn=13i,active_processes=2i,idle_processes=1i,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 1453011293083331187 +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 +``` diff --git a/plugins/inputs/phpfpm/phpfpm.go b/plugins/inputs/phpfpm/phpfpm.go index 36cd02f59..e40dae174 100644 --- a/plugins/inputs/phpfpm/phpfpm.go +++ b/plugins/inputs/phpfpm/phpfpm.go @@ -148,11 +148,11 @@ func (g *phpfpm) gatherServer(addr string, acc telegraf.Accumulator) error { return err } - return g.gatherFcgi(fcgi, statusPath, acc) + return g.gatherFcgi(fcgi, statusPath, acc, addr) } // Gather stat using fcgi protocol -func (g *phpfpm) gatherFcgi(fcgi *conn, statusPath string, acc telegraf.Accumulator) error { +func (g *phpfpm) gatherFcgi(fcgi *conn, statusPath string, acc telegraf.Accumulator, addr string) error { fpmOutput, fpmErr, err := fcgi.Request(map[string]string{ "SCRIPT_NAME": "/" + statusPath, "SCRIPT_FILENAME": statusPath, @@ -164,7 +164,7 @@ func (g *phpfpm) gatherFcgi(fcgi *conn, statusPath string, acc telegraf.Accumula }, "/"+statusPath) if len(fpmErr) == 0 && err == nil { - importMetric(bytes.NewReader(fpmOutput), acc) + importMetric(bytes.NewReader(fpmOutput), acc, addr) return nil } else { return fmt.Errorf("Unable parse phpfpm status. Error: %v %v", string(fpmErr), err) @@ -192,12 +192,12 @@ func (g *phpfpm) gatherHttp(addr string, acc telegraf.Accumulator) error { addr, err) } - importMetric(res.Body, acc) + importMetric(res.Body, acc, addr) return nil } // Import stat data into Telegraf system -func importMetric(r io.Reader, acc telegraf.Accumulator) (poolStat, error) { +func importMetric(r io.Reader, acc telegraf.Accumulator, addr string) (poolStat, error) { stats := make(poolStat) var currentPool string @@ -240,6 +240,7 @@ func importMetric(r io.Reader, acc telegraf.Accumulator) (poolStat, error) { for pool := range stats { tags := map[string]string{ "pool": pool, + "url": addr, } fields := make(map[string]interface{}) for k, v := range stats[pool] { diff --git a/plugins/inputs/phpfpm/phpfpm_test.go b/plugins/inputs/phpfpm/phpfpm_test.go index 2f470c72b..ba24b0f36 100644 --- a/plugins/inputs/phpfpm/phpfpm_test.go +++ b/plugins/inputs/phpfpm/phpfpm_test.go @@ -40,6 +40,7 @@ func TestPhpFpmGeneratesMetrics_From_Http(t *testing.T) { tags := map[string]string{ "pool": "www", + "url": ts.URL, } fields := map[string]interface{}{ @@ -80,6 +81,7 @@ func TestPhpFpmGeneratesMetrics_From_Fcgi(t *testing.T) { tags := map[string]string{ "pool": "www", + "url": r.Urls[0], } fields := map[string]interface{}{ @@ -124,6 +126,7 @@ func TestPhpFpmGeneratesMetrics_From_Socket(t *testing.T) { tags := map[string]string{ "pool": "www", + "url": r.Urls[0], } fields := map[string]interface{}{ @@ -168,6 +171,7 @@ func TestPhpFpmGeneratesMetrics_From_Socket_Custom_Status_Path(t *testing.T) { tags := map[string]string{ "pool": "www", + "url": r.Urls[0], } fields := map[string]interface{}{