[MUNIN] Überwachung AVM Fritzbox Cable mit Munin

1 Stern2 Sterne3 Sterne4 Sterne5 Sterne (Keine Bewertung vorhanden)
Loading...

Aufgrund deutlicher Bandbreitenschwankungen vor ein paar Wochen habe ich mir ein neues Plugin geschrieben, welches jedoch nur auf den FritzBox Modellen 6460 und 6360 funktioniert. Das Plugin liest die aktuellen Kabelwerte aus und zeigt diese in einem Graphen an. Angefangen von Frequenz, über Modulation bis hin zu Power Level [dBuV]. Jeder dieser Daten-Gruppen wird in einem eigenen Graph angezeigt.

Konfiguriert wird das Plugin wie immer durch Enviroment Variablen, relevant sind hier besonders diese:

 * env.row 2
 * env.io Empfangsrichtung (or Senderichtung)

row ist die Zeile in der jeweiligen Tabelle, kann man auch an den Daten in $rowValues erkennen. io ist die Tabelle für Eingehend oder Ausgehend. Es muss entweder der eine String oder der andere gesetzt sein.

  1. #!/usr/bin/php
  2. <?php
  3. ##############################
  4. #%# family=auto
  5. #%# capabilities=autoconf
  6.  
  7. require_once dirname(__FILE__) . DIRECTORY_SEPARATOR . 'MuninPlugin.php';
  8.  
  9. /**
  10.  * AVM WLAN Connection Count plugin for Munin
  11.  *
  12.  * - Add symlink:
  13.  * ln -s <pathtothisfile> /etc/munin/plugins/avm_cable_router
  14.  *
  15.  * - Add plugin configuration to /etc/munin/plugin-conf.d/avm
  16.  * [avm_cable_router]
  17.  * env.ip 192.168.178.1
  18.  * env.host fritz.box
  19.  * env.row 2
  20.  * env.io Empfangsrichtung (or Senderichtung)
  21.  *
  22.  * @author Mike Goldhausen
  23.  * @copyright Copyright (c) 2015 by MiGo-WebDesign, www.migo-webdesign.de, Germany
  24.  */
  25.  
  26. class AvmCable extends MuninPlugin {
  27.  
  28. 	private $rowValues = array(1 => "Kanal ID", 2 => "Frequenz [MHz]", 3 => "Modulation", 4 => "Power Level [dBuV]", 5 => "MSE [dB] ");
  29.  
  30. 	/**
  31. 	 * general Config for Plugin
  32. 	 *
  33. 	 * @return array
  34. 	 */
  35. 	protected function getPluginSetup() {
  36. 		$row = intval(getenv('row'));
  37. 		return array(
  38. 				'host_name' => $this->avm['host'],
  39. 				'graph_order' => 'wlan',
  40. 				'graph_title' => 'AVM Fritz!Box Cable DOCSIS '.$this->rowValues[$row],
  41. 				'graph_category' => 'cable_'.strtolower(getenv('io')),
  42. 				'graph_info' => 'This graph shows the Cable DOCSIS '.$this->rowValues[$row],
  43. 				'graph_vlabel' => $this->rowValues[$row],
  44. 				'graph_args' => '--base 1000'
  45. 		);
  46. 	}
  47.  
  48. 	/**
  49. 	 * Config for Graphs
  50. 	 *
  51. 	 * @return array
  52. 	 */
  53. 	protected function getPluginGraphs() {
  54. 		$graphs = array();
  55.  
  56. 		$row = intval(getenv('row'));
  57. 		$io = getenv('io');
  58.  
  59. 		$content = $this->readFromAvmGui("internet/docsis_info.lua?update=uiInfo", "<h4>".$io,"</div>");
  60.  
  61. 		$doc = new DOMDocument();
  62. 		$doc->loadHTML($content);
  63. 		$tmp = simplexml_import_dom($doc);
  64.  
  65. 		$rows = $tmp->body->div->table->tr[0]->th;
  66.  
  67. 		$i=0;
  68. 		foreach ($rows as $v) {
  69. 			$v = preg_replace("/[^0-9]/","", $v);
  70. 			if ((strlen($v) > 0) && is_numeric($v)) {
  71. 				$i++;
  72. 			}
  73. 		}
  74.  
  75. 		for ($z=1;$z<=$i;$z++) {
  76. 			$graphs['channel_'.$z]['label'] = "Kanal ".$z;
  77. 			$graphs['channel_'.$z]['info'] = "Kanal ".$z;
  78. 		}
  79.  
  80. 		return $graphs;
  81. 	}
  82.  
  83. 	/**
  84. 	 * Transform data from RAW HTML into XML Structure
  85. 	 *
  86. 	 * @param string $content
  87. 	 * @return data
  88. 	 */
  89. 	protected function transformData($content) {
  90. 		$row = intval(getenv('row'));
  91.  
  92. 		$doc = new DOMDocument();
  93. 		$doc->loadHTML($content);
  94. 		$tmp = simplexml_import_dom($doc);
  95.  
  96. 		$rows = $tmp->body->div->table->tr[0]->th;
  97.  
  98. 		$i=0;
  99. 		foreach ($rows as $v) {
  100. 			$v = preg_replace("/[^0-9]/","", $v);
  101. 			if ((strlen($v) > 0) && is_numeric($v)) {
  102. 				$i++;
  103. 			}
  104. 		}
  105.  
  106. 		for ($z=1;$z<=$i;$z++) {
  107. 			$graphs['channel_'.$z] = preg_replace("/[^0-9\.]/","", $tmp->body->div->table->tr[$row]->td[$z]);
  108. 		}
  109.  
  110. 		return $graphs;
  111. 	}
  112.  
  113. 	/**
  114. 	 * Read source & collecting values
  115. 	 *
  116. 	 * @return array
  117. 	 */
  118. 	protected function getValues() {
  119. 		$io = getenv('io');
  120. 		$content = $this->readFromAvmGui("internet/docsis_info.lua?update=uiInfo", "<h4>".$io,"</div>");
  121. 		$data = $this->transformData($content);
  122. 		return $data;
  123. 	}
  124.  
  125. }
  126.  
  127. $plugin = new AvmCable($argv);
  128. $plugin->start($argv);
  129. ?>

[MUNIN] Überwachung AVM Fritzbox Auslastung mit Munin

1 Stern2 Sterne3 Sterne4 Sterne5 Sterne (Keine Bewertung vorhanden)
Loading...

Heute möchte ich ein weiteres Plugin für die Überwachung der AVM FritzBox Modelle vorstellen. Da die UPNP Schnittstelle diese Informationen nicht zur Verfügung stellt, kommt hier wieder der GUI-Grep aus unserem ersten vorgestellten Plugin zum Einsatz. Das Plugin zeigt die Auslastung des Hauptprozessors, des WLAN Moduls & des Gesamtsystems an:

Auch hier wird die globale Klasse MuninPlugin benötigt, welche Sie hier finden.

avm_energy_router-day

  1. #!/usr/bin/php
  2. <?php
  3. ##############################
  4. #%# family=auto
  5. #%# capabilities=autoconf
  6.  
  7. require_once dirname(__FILE__) . DIRECTORY_SEPARATOR . 'MuninPlugin.php';
  8.  
  9. /**
  10.  * AVM Energy plugin for Munin
  11.  *
  12.  * - Add symlink:
  13.  * ln -s <pathtothisfile> /etc/munin/plugins/avm_energy_router
  14.  *
  15.  * - Add plugin configuration to /etc/munin/plugin-conf.d/avm
  16.  * [avm_energy_router]
  17.  * env.ip 192.168.178.1
  18.  * env.host fritz.box
  19.  *
  20.  * @author Mike Goldhausen
  21.  * @copyright Copyright (c) 2015 by MiGo-WebDesign, www.migo-webdesign.de, Germany
  22.  */
  23.  
  24. class AvmEnergy extends MuninPlugin {
  25.  
  26. 	/**
  27. 	 * general Config for Plugin
  28. 	 *
  29. 	 * @return array
  30. 	*/
  31. 	protected function getPluginSetup() {
  32. 		return array(
  33. 				'host_name' => $this->avm['host'],
  34. 				'graph_order' => 'overall cpu wlan',
  35. 				'graph_title' => 'AVM Fritz!Box Auslastung',
  36. 				'graph_category' => 'system',
  37. 				'graph_info' => 'This graph shows the energy level of the AVM Fritz!Box.',
  38. 				'graph_vlabel' => 'Energy Level in percentage',
  39. 				'graph_args' => '--base 1000'
  40. 		);
  41. 	}
  42.  
  43. 	/**
  44. 	 * Config for Graphs
  45. 	 *
  46. 	 * @return array
  47. 	 */
  48. 	protected function getPluginGraphs() {
  49. 		$graphs = array();
  50.  
  51. 		$graphs['overall']['label'] = "Gesamtsystem";
  52. 		$graphs['overall']['info'] = "Performance Fritz!BOX Gesamtsystem.";
  53. 		$graphs['overall']['max'] = "100";
  54.  
  55. 		$graphs['corecpu']['label'] = "Hauptprozessor";
  56. 		$graphs['corecpu']['info'] = "Performance Fritz!BOX Hauptprozessor.";
  57. 		$graphs['corecpu']['max'] = "100";
  58.  
  59. 		$graphs['wlan']['label'] = "WLAN";
  60. 		$graphs['wlan']['info'] = "Performance Fritz!BOX WLAN.";
  61. 		$graphs['wlan']['max'] = "100";
  62.  
  63. 		return $graphs;
  64. 	}
  65.  
  66. 	/**
  67. 	 * Transform data from RAW HTML into XML Structure
  68. 	 *
  69. 	 * @param string $content
  70. 	 * @return data
  71. 	 */
  72. 	protected function transformData($content) {
  73. 		$doc = new DOMDocument();
  74. 		$doc->loadHTML($content);
  75. 		$tmp = simplexml_import_dom($doc);
  76.  
  77. 		//Gesamtsystem:
  78. 		$overall = $tmp->body->table->tr[1]->td[1]->div[0];
  79. 		//Hauptprozessor:
  80. 		$corecpu = $tmp->body->table->tr[2]->td[1]->div[0];
  81. 		//WLAN:
  82. 		$wlan = $tmp->body->table->tr[3]->td[1]->div[0];
  83.  
  84. 		$graphs['overall'] = intval($overall);
  85. 		$graphs['corecpu'] = intval($corecpu);
  86. 		$graphs['wlan'] = intval($wlan);
  87.  
  88. 		return $graphs;
  89. 	}
  90.  
  91. 	/**
  92. 	 * Read source & collecting values
  93. 	 *
  94. 	 * @return array
  95. 	 */
  96. 	protected function getValues() {
  97. 		$content = $this->readFromAvmGui("system/energy.lua","<table id=\"energy\">","<\/table>");
  98. 		$data = $this->transformData($content);
  99. 		return $data;
  100. 	}
  101.  
  102. }
  103.  
  104. $plugin = new AvmEnergy($argv);
  105. $plugin->start($argv);
  106. ?>

[MUNIN] Überwachung AVM Fritzbox Traffic via UPNP mit Munin

1 Stern2 Sterne3 Sterne4 Sterne5 Sterne (2 Stimmen, Durchschnitt: 3,00 von 5)
Loading...

Heute stelle ich ein weiteres Plugin für die Überwachung der AVM FritzBox Modelle vor. Auch dieses Plugin nutzt die UPNP Schnittstelle, welche ich bereits im letzten Beitrag vorgestellt habe. Das Plugin liest die globale Anzahl Transferierter Bytes der Box aus und errechnet automatisch den Diff seit dem letzten Update. Die Daten werden in Bits angezeigt.

Auch hier wird die globale Klasse MuninPlugin benötigt, welche Sie hier finden.

avm_traffic_router-day

  1. #!/usr/bin/php
  2. <?php
  3. ##############################
  4. #%# family=auto
  5. #%# capabilities=autoconf
  6.  
  7. require_once dirname(__FILE__) . DIRECTORY_SEPARATOR . 'MuninPlugin.php';
  8.  
  9. /**
  10.  * AVM Traffic plugin for Munin
  11.  *
  12.  * - Add symlink:
  13.  * ln -s <pathtothisfile> /etc/munin/plugins/avm_traffic_router
  14.  *
  15.  * - Add plugin configuration to /etc/munin/plugin-conf.d/avm
  16.  * [avm_traffic_router]
  17.  * env.ip 192.168.178.1:49000
  18.  * env.host fritz.box
  19.  *
  20.  * @author Mike Goldhausen
  21.  * @copyright Copyright (c) 2015 by MiGo-WebDesign, www.migo-webdesign.de, Germany
  22.  */
  23.  
  24. class AvmTraffic extends MuninPlugin {
  25.  
  26. 	/**
  27. 	 * general Config for Plugin
  28. 	 *
  29. 	 * @return array
  30. 	*/
  31. 	protected function getPluginSetup() {
  32. 		return array(
  33. 				'host_name' => $this->avm['host'],
  34. 				'graph_order' => 'down up',
  35. 				'graph_title' => 'AVM Fritz!Box WAN traffic',
  36. 				'graph_category' => 'network',
  37. 				'graph_info' => 'This graph shows the traffic of the AVM Fritz!Box WAN network interface. Please note that the traffic is shown in bits per second, not bytes.',
  38. 				'graph_vlabel' => 'bits in (-) / out (+) per \${graph_period}',
  39. 				'graph_args' => '--base 1024'
  40. 		);
  41. 	}
  42.  
  43. 	/**
  44. 	 * Config for Graphs
  45. 	 *
  46. 	 * @return array
  47. 	 */
  48. 	protected function getPluginGraphs() {
  49. 		$graphs = array();
  50.  
  51. 		$graphs['down']['label'] = "received";
  52. 		$graphs['down']['type'] = "COUNTER";
  53. 		$graphs['down']['graph'] = "no";
  54. 		$graphs['down']['cdef'] = "down,8,*";
  55. 		$graphs['down']['max'] = "1000000000";
  56.  
  57. 		$graphs['up']['label'] = "send";
  58. 		$graphs['up']['type'] = "COUNTER";
  59. 		$graphs['up']['draw'] = "AREA";
  60. 		$graphs['up']['cdef'] = "up,8,*";
  61. 		$graphs['up']['max'] = "1000000000";
  62. 		$graphs['up']['negative'] = "down";
  63. 		$graphs['up']['info'] = "Traffic of the WAN interface.";
  64.  
  65. 		return $graphs;
  66. 	}
  67.  
  68. 	/**
  69. 	 * Transform data from RAW HTML into XML Structure
  70. 	 *
  71. 	 * @return data
  72. 	 */
  73. 	protected function transformData() {
  74. 		$client = new SoapClient(
  75. 			null,
  76. 			array(
  77. 					'location'   => "http://".$this->avm['ip']."/igdupnp/control/WANCommonIFC1",
  78. 					'uri'        => "urn:schemas-upnp-org:service:WANCommonInterfaceConfig:1",
  79. 					'soapaction' => "",
  80. 					'noroot'     => True
  81. 			)
  82. 		);
  83.  
  84. 		$data_prop = $client->GetCommonLinkProperties();
  85. 		$data_stats = $client->GetAddonInfos();
  86.  
  87. 		$graphs['up'] = $data_stats['NewTotalBytesSent'];
  88. 		$graphs['down'] = $data_stats['NewTotalBytesReceived'];
  89.  
  90. 		return $graphs;
  91. 	}
  92.  
  93. 	/**
  94. 	 * Read source & collecting values
  95. 	 *
  96. 	 * @return array
  97. 	 */
  98. 	protected function getValues() {
  99. 		$data = $this->transformData();
  100. 		return $data;
  101. 	}
  102.  
  103. }
  104.  
  105. $plugin = new AvmTraffic($argv);
  106. $plugin->start($argv);
  107. ?>

[MUNIN] Überwachung AVM Fritzbox Uptime via UPNP mit Munin

1 Stern2 Sterne3 Sterne4 Sterne5 Sterne (Keine Bewertung vorhanden)
Loading...

Wie in unserem letzten Artikel angekündigt, möchte ich heute ein weiteres Plugin vorstellen. Diesmal greift das Plugin nicht über die HTML GUI zu, sondern fragt die UPNP Schnittstelle der Fritzbox ab. Mehr Details dazu finden Sie in unserem ersten und zweiten Artikel dazu.

Auch hier wird die globale Klasse MuninPlugin benötigt, welche Sie hier finden.

avm_uptime_router-day

  1. #!/usr/bin/php
  2. <?php
  3. ##############################
  4. #%# family=auto
  5. #%# capabilities=autoconf
  6.  
  7. require_once dirname(__FILE__) . DIRECTORY_SEPARATOR . 'MuninPlugin.php';
  8.  
  9. /**
  10.  * AVM Uptime plugin for Munin
  11.  *
  12.  * - Add symlink:
  13.  * ln -s <pathtothisfile> /etc/munin/plugins/avm_uptime_router
  14.  *
  15.  * - Add plugin configuration to /etc/munin/plugin-conf.d/avm
  16.  * [avm_uptime_router]
  17.  * env.ip 192.168.178.1:49000
  18.  * env.host fritz.box
  19.  *
  20.  * @author Mike Goldhausen
  21.  * @copyright Copyright (c) 2015 by MiGo-WebDesign, www.migo-webdesign.de, Germany
  22.  */
  23.  
  24. class AvmUptime extends MuninPlugin {
  25.  
  26.   /**
  27. 	 * general Config for Plugin
  28. 	 *
  29. 	 * @return array
  30. 	*/
  31. 	protected function getPluginSetup() {
  32. 		return array(
  33. 				'host_name' => $this->avm['host'],
  34. 				#'graph_order' => 'down up',
  35. 				'graph_title' => 'AVM Fritz!Box Uptime',
  36. 				'graph_category' => 'system',
  37. 				'graph_info' => 'Uptime AVM!FritzBox in Days',
  38. 				'graph_vlabel' => 'Uptime in Days',
  39. 				'graph_args' => '--base 1000 -l 0',
  40. 				'graph_scale' => 'no'
  41. 		);
  42. 	}
  43.  
  44. 	/**
  45. 	 * Config for Graphs
  46. 	 *
  47. 	 * @return array
  48. 	 */
  49. 	protected function getPluginGraphs() {
  50. 		$graphs = array();
  51.  
  52. 		$graphs['uptime']['label'] = "uptime";
  53. 		$graphs['uptime']['draw'] = "AREA";
  54.  
  55. 		return $graphs;
  56. 	}
  57.  
  58. 	/**
  59. 	 * Transform data from RAW HTML into XML Structure
  60. 	 *
  61. 	 * @return data
  62. 	 */
  63. 	protected function transformData() {
  64. 		$client = new SoapClient(
  65. 		    null,
  66. 		    array(
  67. 		        'location'   => "http://".$this->avm['ip']."/igdupnp/control/WANIPConn1",
  68. 		        'uri'        => "urn:schemas-upnp-org:service:WANIPConnection:1",
  69. 		        'soapaction' => "",
  70. 		        'noroot'     => True
  71. 		    )
  72. 		);
  73.  
  74. 		$status = $client->GetStatusInfo();
  75. 		$uptime = round((intval($status['NewUptime']) / 86400),2);
  76.  
  77. 		$graphs['uptime'] = $uptime;
  78.  
  79. 		return $graphs;
  80. 	}
  81.  
  82. 	/**
  83. 	 * Read source & collecting values
  84. 	 *
  85. 	 * @return array
  86. 	 */
  87. 	protected function getValues() {
  88. 		$data = $this->transformData();
  89. 		return $data;
  90. 	}
  91.  
  92. }
  93.  
  94. $plugin = new AvmUptime($argv);
  95. $plugin->start($argv);
  96. ?>