ncabatoff / process-exporter

Prometheus exporter that mines /proc to report on selected processes
MIT License
1.67k stars 265 forks source link

Exe full and arguments #281

Open MichaelHuys opened 10 months ago

MichaelHuys commented 10 months ago

I'm currently using the process exporter with below configuration:

process_names:
  - name: "{{.ExeFull}}"
    cmdline:
      - "python"

My metrics are displayed as follows:

namedprocess_namegroup_context_switches_total{ctxswitchtype="nonvoluntary",groupname="/home/AD/cce6r54/.conda/envs/smart-berry-optimization/bin/python3.10"} 0

Can I also include the arguments of in this case the python function I'm running? Eg. /home/AD/cce6r54/.conda/envs/smart-berry-optimization/bin/python3.10 My_Py_Script.py

tangguangliang commented 9 months ago
...
cmdline:
  - ".*python.*"
MichaelHuys commented 9 months ago

I changed our config as below:

process_names:
  - name: "{{.ExeFull}}({{.Username}})"
    cmdline:
      - '.*'

But still I only get the command/executable itself without parameters, eg.:

Extract from top:

PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 2786399 mhsctd6 20 0 27724 9156 2832 R 28.1 0.1 0:01.35 python test.py --dry-run 2786400 mhsctd6 20 0 27724 9156 2832 S 28.1 0.1 0:01.35 python test.py --dry-run 2786401 mhsctd6 20 0 27724 9156 2832 S 28.1 0.1 0:01.41 python test.py --dry-run 2786398 mhsctd6 20 0 27724 9152 2832 R 27.2 0.1 0:01.38 python test.py --dry-run

In Grafana we only see the Python executable without parameters (test.py --dry-run) part: image

tangguangliang commented 9 months ago

Because your process names are all python test. py -- dry run, if you want to display each process, you need to add the PID of each process.. blew info from README.MD

Using a config file: group name

Each item in process_names gives a recipe for identifying and naming processes. The optional name tag defines a template to use to name matching processes; if not specified, name defaults to {{.ExeBase}}.

Template variables available:

Using PID or StartTime is discouraged: this is almost never what you want, and is likely to result in high cardinality metrics which Prometheus will have trouble with.

MichaelHuys commented 8 months ago

My requirement is not to have every single process (id) in my overview but to have the {{.ExeFull}} (python) together with all it's parameters (test. py -- dry run). This information is available in /proc//cmdline but I don't know how I can target it using the template variables described above?

StefanSander3 commented 1 week ago

@MichaelHuys have you find a way to do so? In my use case, I do have users computing on servers (without queuing) and I do think I would like to get all user processes

MichaelHuys commented 1 week ago

@StefanSander3 Unfortunately not. :-(