Projet

Général

Profil

Paste
Télécharger au format
Statistiques
| Branche: | Révision:

root / plugins / processes / multicpu @ 25670973

Historique | Voir | Annoter | Télécharger (2,07 ko)

1
#!/usr/bin/php
2
<?
3
  /*
4
    multicpu monitors the cpu usage of multiple processes.
5
    you can configure the list of processes via munin's configuration
6

    
7
    [multicpu]
8
      env.ps_filter apache2 mysqld
9

    
10
    I have very little knowlege about munin plugins, it just 'works fine for me'.
11
    Please feel free to improve :)
12

    
13
    0.1 initial release - Florian Fida
14
  */
15

    
16
  // make sure that paht to ps is valid for your system
17
  $ps_cmd = '/bin/ps -eo "%C,%a"';
18

    
19
  // list of processes to monitor, can also be set by env.ps_filter in munin config
20
  $ps_filter = array(
21
    'apache2', 'mysqld', 'exim', 'php', 'perl', 'ruby', 'bftpd'
22
  );
23

    
24

    
25
  $cmdl = implode(' ', $argv);
26
  $config = stripos($cmdl, 'config') !== false;
27

    
28
  if(!empty($_ENV['ps_filter'])){
29
    $ps_filter = explode(' ', $_ENV['ps_filter']);
30
  }
31

    
32
  if($config){
33
    $out  = "multigraph multicpu_pcpu\n";
34
    $out .= "graph_title CPU usage per process\n";
35
    $out .= "graph_vlabel CPU usage [%]\n";
36
    $out .= "graph_category processes\n";
37
    foreach($ps_filter as $process) $out .= "$process.label $process\n";
38

    
39
    $out .= "multigraph multicpu_cnt\n";
40
    $out .= "graph_title Instances per process\n";
41
    $out .= "graph_vlabel count\n";
42
    $out .= "graph_category processes\n";
43
    foreach($ps_filter as $process) $out .= "$process.label $process\n";
44

    
45
    echo $out."\n";
46
    exit;
47
  }
48

    
49
  $ps_txt = shell_exec($ps_cmd);
50
  $ps_a = explode("\n", $ps_txt);
51

    
52
  $result = array();
53
  $result_cnt = array();
54
  foreach($ps_filter as $process){
55
    if(!isset($result[$process])) $result[$process] = 0;
56
    if(!isset($result_cnt[$process])) $result_cnt[$process] = 0;
57
    foreach($ps_a as $line){
58
      $line_a = explode(',', $line, 2);
59
      if(count($line_a) == 2){
60
        if(stripos($line_a[1], $process) !== false){
61
          $result[$process] += floatval($line_a[0]);
62
          ++$result_cnt[$process];
63
        }
64
      }
65
    }
66
  }
67

    
68
  echo "multigraph multicpu_pcpu\n";
69
  foreach($result as $process => $value) echo "$process.value $value\n";
70
  echo "multigraph multicpu_cnt\n";
71
  foreach($result_cnt as $process => $value) echo "$process.value $value\n";
72