Skip to content

Commit cf10311

Browse files
author
Jesus Samitier
committed
php-fpm integration
1 parent 217882e commit cf10311

File tree

13 files changed

+1410
-0
lines changed

13 files changed

+1410
-0
lines changed

apps/images/PHP-FPM.svg

Lines changed: 5 additions & 0 deletions
Loading

apps/php-fpm.yaml

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
---
2+
apiVersion: v1
3+
kind: App
4+
name: "php-fpm"
5+
keywords:
6+
- PHP
7+
- Available
8+
availableVersions:
9+
- '7.2'
10+
shortDescription: "PHP-FPM (FastCGI Process Manager) is an alternative PHP FastCGI implementation with some additional features useful for sites of any size, especially busier sites."
11+
description: |
12+
PHP-FPM (FastCGI Process Manager) is an alternative PHP FastCGI implementation with some additional features useful for sites of any size, especially busier sites.
13+
icon: https://raw.githubusercontent.com/sysdiglabs/promcat-resources/master/apps/images/PHP-FPM.svg
14+
website: https://www.php.net/manual/en/book.fpm.php
15+
available: true

resources/php-fpm/ALERTS.md

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
# Alerts
2+
3+
## No Output Records From Plugin
4+
No Output Records From Plugin.
5+
6+
## Percentage of instances low
7+
Percentage of instances low
8+
9+
## Recently reboot
10+
Recently reboot
11+
12+
## Limit of child proccess exceeded
13+
Limit of child proccess exceeded
14+
15+
## Reaching limit of queue process
16+
Reaching limit of queue process
17+
18+
## Requests processed reached timeout limit
19+
Requests processed reached timeout limit

resources/php-fpm/INSTALL.md

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
# Prerequisites
2+
3+
In addition to having PHP-FPM desployed in Kubernetes, a Prometheus exporter is also necessary. The exporter can be installed as a sidecar of the pod with the PHP-FPM server. In order to get a metrics endpoint for the php-fpm service, you need to enable the status endpoint in the PHP-FPM service configuration.
4+
5+
```
6+
apiVersion: v1
7+
kind: ConfigMap
8+
metadata:
9+
labels:
10+
app: php-fpm
11+
name: php-fpm-config
12+
namespace: php-fpm
13+
data:
14+
www.conf: |
15+
...
16+
pm.status_path=/status
17+
...
18+
```
19+
20+
21+
You can find a deployment below with the exporter as a sidecar and the ConfigMap with the configuration required to scrape metrics from the server.

resources/php-fpm/README.md

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
# PHP-FPM
2+
PHP-FPM (FastCGI Process Manager) is an alternative PHP FastCGI implementation with some additional features useful for sites of any size, especially busier sites.
3+
4+
# Prometheus and exporters
5+
Since PHP-FPM isn't instrumentalized for Prometheus, so a exporter is needed. Here we're using the [php-fpm_exporter](https://github.com/hipages/php-fpm_exporter)
6+
7+
# Metrics
8+
9+
- phpfpm_accepted_connections
10+
- phpfpm_active_processes
11+
- phpfpm_idle_processes
12+
- phpfpm_listen_queue
13+
- phpfpm_listen_queue_length
14+
- phpfpm_max_active_processes
15+
- phpfpm_max_children_reached
16+
- phpfpm_max_listen_queue
17+
- phpfpm_process_last_request_cpu
18+
- phpfpm_process_last_request_memory
19+
- phpfpm_process_request_duration
20+
- phpfpm_process_requests
21+
- phpfpm_process_state
22+
- phpfpm_scrape_failures
23+
- phpfpm_slow_requests
24+
- phpfpm_start_since
25+
- phpfpm_total_processes
26+
- phpfpm_up
27+
28+
# Attributions
29+
Configuration files, dashboards and alerts are maintained by [Sysdig team](https://sysdig.com/).

resources/php-fpm/alerts.yaml

Lines changed: 91 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,91 @@
1+
apiVersion: v1
2+
kind: Alert
3+
app: php-fpm
4+
version: 1.0.0
5+
appVersion:
6+
- '7.2'
7+
descriptionFile: ALERTS.md
8+
configurations:
9+
- kind: Prometheus
10+
data: |-
11+
groups:
12+
- name: "Php-Fpm"
13+
groupId: "php-fpm"
14+
description: "Php-Fpm alerts"
15+
integrationType: "php-fpm"
16+
scopeVariables:
17+
- variable: cluster
18+
label: kubernetes.cluster.name
19+
operator: in
20+
- variable: namespace
21+
label: kubernetes.namespace.name
22+
operator: in
23+
- variable: workload
24+
label: kubernetes.workload.name
25+
operator: in
26+
rules:
27+
- alert: "[Php-Fpm] Percentage of instances low"
28+
alertId: "PercentageOfInstancesLow"
29+
description: "Most of the instances are down"
30+
expr: |
31+
sum by (kube_workload_name,kube_namespace_name,kube_cluster_name)(phpfpm_up{kube_cluster_name=~$cluster,kube_namespace_name=~$namespace,kube_workload_name=~$workload})/sum by (kube_workload_name,kube_namespace_name,kube_cluster_name)(kube_workload_status_desired{kube_cluster_name=~$cluster,kube_namespace_name=~$namespace,kube_workload_name=~$workload}) < 0.75
32+
for: 5m
33+
labels:
34+
severity: high
35+
annotations:
36+
summary: |
37+
[{{$labels.kube_cluster_name}} > {{$labels.kube_namespace_name}} > {{$labels.kube_workload_name}}] {{__alert_name__}} is {{__alert_status__}}
38+
description: |
39+
Most of the instances are down
40+
- alert: "[Php-Fpm] Recently reboot"
41+
alertId: "RecentlyReeboot"
42+
description: "Instances have been recently reboot"
43+
expr: |
44+
(count by (kube_cluster_name, kube_namespace_name,kube_pod_name)(phpfpm_start_since{kube_cluster_name=~$cluster,kube_namespace_name=~$namespace,kube_workload_name=~$workload} < 1800) or vector (0))/sum by (kube_cluster_name, kube_namespace_name,kube_pod_name)(phpfpm_up{kube_cluster_name=~$cluster,kube_namespace_name=~$namespace,kube_workload_name=~$workload}) > 0.4
45+
for: 5m
46+
labels:
47+
severity: high
48+
annotations:
49+
summary: |
50+
[{{$labels.kube_cluster_name}} > {{$labels.kube_namespace_name}} > {{$labels.kube_workload_name}}] {{__alert_name__}} is {{__alert_status__}}
51+
description: |
52+
Instances have been recently reboot
53+
- alert: "[Php-Fpm] Limit of child proccess exceeded"
54+
alertId: "LimitOfChildsExceeded"
55+
description: "Number of childs process have been exceeded"
56+
expr: |
57+
sum by (kube_cluster_name, kube_namespace_name,kube_pod_name) (rate (phpfpm_max_children_reached{kube_cluster_name=~$cluster,kube_namespace_name=~$namespace,kube_workload_name=~$workload}[5m])) > 0
58+
for: 5m
59+
labels:
60+
severity: high
61+
annotations:
62+
summary: |
63+
[{{$labels.kube_cluster_name}} > {{$labels.kube_namespace_name}} > {{$labels.kube_workload_name}}] {{__alert_name__}} is {{__alert_status__}}
64+
description: |
65+
Number of childs process have been exceeded
66+
- alert: "[Php-Fpm] Reaching limit of queue process"
67+
alertId: "ReachedQueueLimit"
68+
description: "Buffer of queue requests reaching its limit"
69+
expr: |
70+
(phpfpm_listen_queue{kube_cluster_name=~$cluster,kube_namespace_name=~$namespace,kube_workload_name=~$workload} / phpfpm_listen_queue_length{kube_cluster_name=~$cluster,kube_namespace_name=~$namespace,kube_workload_name=~$workload}) > 0.8
71+
for: 5m
72+
labels:
73+
severity: medium
74+
annotations:
75+
summary: |
76+
[{{$labels.kube_cluster_name}} > {{$labels.kube_namespace_name}} > {{$labels.kube_workload_name}}] {{__alert_name__}} is {{__alert_status__}}
77+
description: |
78+
Buffer of queue requests reaching its limit
79+
- alert: "[Php-Fpm] Requests processed reached timeout limit"
80+
alertId: "TimeoutLimitRequestReached"
81+
description: "Timeout limit reached by some of the requests"
82+
expr: |
83+
rate (phpfpm_slow_requests{kube_cluster_name=~$cluster,kube_namespace_name=~$namespace,kube_workload_name=~$workload}[5m]) / rate (phpfpm_process_requests{kube_cluster_name=~$cluster,kube_namespace_name=~$namespace,kube_workload_name=~$workload}[5m]) > 0.75
84+
for: 5m
85+
labels:
86+
severity: medium
87+
annotations:
88+
summary: |
89+
[{{$labels.kube_cluster_name}} > {{$labels.kube_namespace_name}} > {{$labels.kube_workload_name}}] {{__alert_name__}} is {{__alert_status__}}
90+
description: |
91+
Timeout limit reached by some of the requests

resources/php-fpm/dashboards.yaml

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
apiVersion: v1
2+
kind: Dashboard
3+
app: php-fpm
4+
version: 1.0.0
5+
appVersion:
6+
- '7.2'
7+
configurations:
8+
- name: php-fpm
9+
kind: Sysdig
10+
image: php-fpm/images/php-fpm.png
11+
description: |
12+
This dashboard offers information on:
13+
* Status
14+
* Requests
15+
* Processes
16+
* Connections
17+
file: include/php-fpm.json

resources/php-fpm/description.yaml

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
apiVersion: v1
2+
kind: Description
3+
app: php-fpm
4+
version: 1.0.0
5+
appVersion:
6+
- '7.2'
7+
descriptionFile: README.md
464 KB
Loading
Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
apiVersion: apps/v1
2+
kind: Deployment
3+
metadata:
4+
name: php-fpm-app
5+
namespace: php-fpm
6+
labels:
7+
app: php-fpm
8+
pod: php-app
9+
spec:
10+
selector:
11+
matchLabels:
12+
app: php-fpm
13+
replicas: 3
14+
template:
15+
metadata:
16+
labels:
17+
app: php-fpm
18+
pod: php-app
19+
spec:
20+
containers:
21+
- image: php:7.2-fpm
22+
imagePullPolicy: Always
23+
name: php-fpm
24+
ports:
25+
- containerPort: 9000
26+
protocol: TCP
27+
volumeMounts:
28+
- name: php-fpm-config
29+
mountPath: /usr/local/etc/php-fpm.d/www.conf
30+
subPath: www.conf
31+
- name: php-fpm-exporter
32+
image: "quay.io/sysdig/php-fpm-exporter:v2.3.0"
33+
ports:
34+
- containerPort: 9253
35+
env:
36+
- name: PHP_FPM_WEB_LISTEN_ADDRESS
37+
value: :9253
38+
- name: PHP_FPM_WEB_TELEMETRY_PATH
39+
value: /metrics
40+
- name: PHP_FPM_SCRAPE_URI
41+
value: tcp://127.0.0.1:9000/status
42+
- name: PHP_FPM_FIX_PROCESS_COUNT
43+
value: "false"
44+
- name: PHP_FPM_LOG_LEVEL
45+
value: info
46+
volumes:
47+
- configMap:
48+
defaultMode: 420
49+
name: php-fpm-config
50+
name: php-fpm-config
51+
---
52+
apiVersion: v1
53+
kind: ConfigMap
54+
metadata:
55+
labels:
56+
app: php-fpm
57+
name: php-fpm-config
58+
namespace: php-fpm
59+
data:
60+
www.conf: |
61+
[www]
62+
user=www-data
63+
group=www-data
64+
listen=127.0.0.1:9000
65+
pm.status_path=/status
66+
php_admin_value[display_errors] = Off
67+
php_admin_flag[log_errors] = on
68+
php_admin_value[error_log] = /var/log/fpm-php.www.log

0 commit comments

Comments
 (0)