8000 Improve multiprocessing documentation (#524) · rwky/client_python@0497442 · GitHub
[go: up one dir, main page]

Skip to content

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Commit 0497442

Browse files
authored
Improve multiprocessing documentation (prometheus#524)
* Improve multiproc documentation Signed-off-by: Sinclert Pérez <Sinclert@hotmail.com>
1 parent 2d85f4a commit 0497442

File tree

1 file changed

+29
-18
lines changed

1 file changed

+29
-18
lines changed

README.md

Lines changed: 29 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -489,31 +489,25 @@ This comes with a number of limitations:
489489

490490
There's several steps to getting this working:
491491

492-
**One**: Gunicorn deployment
492+
**1. Gunicorn deployment**:
493493

494494
The `prometheus_multiproc_dir` environment variable must be set to a directory
495495
that the client library can use for metrics. This directory must be wiped
496496
between Gunicorn runs (before startup is recommended).
497497

498-
Put the following in the config file:
499-
```python
500-
from prometheus_client import multiprocess
498+
This environment variable should be set from a start-up shell script,
499+
and not directly from Python (otherwise it may not propagate to child processes).
501500

502-
def child_exit(server, worker):
503-
multiprocess.mark_process_dead(worker.pid)
504-
```
501+
**2. Metrics collector**:
502+
503+
The application must initialize a new `CollectorRegistry`,
504+
and store the multi-process collector inside.
505505

506-
**Two**: Inside the application
507506
```python
508507
from prometheus_client import multiprocess
509-
from prometheus_client import generate_latest, CollectorRegistry, CONTENT_TYPE_LATEST, Gauge
510-
511-
# Example gauge.
512-
IN_PROGRESS = Gauge("inprogress_requests", "help", multiprocess_mode='livesum')
513-
508+
from prometheus_client import generate_latest, CollectorRegistry, CONTENT_TYPE_LATEST
514509

515510
# Expose metrics.
516-
@IN_PROGRESS.track_inprogress()
517511
def app(environ, start_response):
518512
registry = CollectorRegistry()
519513
multiprocess.MultiProcessCollector(registry)
@@ -527,19 +521,36 @@ def app(environ, start_response):
527521
return iter([data])
528522
```
529523

530-
**Three**: Instrumentation
524+
**3. Gunicorn configuration**:
525+
526+
The `gunicorn` configuration file needs to include the following function:
527+
528+
```python
529+
from prometheus_client import multiprocess
530+
531+
def child_exit(server, worker):
532+
multiprocess.mark_process_dead(worker.pid)
533+
```
531534

532-
Counters, Summarys and Histograms work as normal.
535+
**4. Metrics tuning (Gauge)**:
533536

534-
Gauges have several modes they can run in, which can be selected with the
535-
`multiprocess_mode` parameter.
537+
When `Gauge` metrics are used, additional tuning needs to be performed.
538+
Gauges have several modes they can run in, which can be selected with the `multiprocess_mode` parameter.
536539

537540
- 'all': Default. Return a timeseries per process alive or dead.
538541
- 'liveall': Return a timeseries per process that is still alive.
539542
- 'livesum': Return a single timeseries that is the sum of the values of alive processes.
540543
- 'max': Return a single timeseries that is the maximum of the values of all processes, alive or dead.
541544
- 'min': Return a single timeseries that is the minimum of the values of all processes, alive or dead.
542545

546+
```python
547+
from prometheus_client import Gauge
548+
549+
# Example gauge
550+
IN_PROGRESS = Gauge("inprogress_requests", "help", multiprocess_mode='livesum')
551+
```
552+
553+
543554
## Parser
544555

545556
The Python client supports parsing the Prometheus text format.

0 commit comments

Comments
 (0)
0