mirror of
				https://github.com/librenms/librenms.git
				synced 2024-10-07 16:52:45 +00:00 
			
		
		
		
	* Added Prometheus PushGateway support * fixed formatting * fix set_curl_proxy to correct variable * add documentation * Update Metric-Storage.md * Update mkdocs.yml
		
			
				
	
	
		
			74 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			74 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
<?php
 | 
						|
 | 
						|
/*
 | 
						|
 * LibreNMS
 | 
						|
 *
 | 
						|
 * Copyright (c) 2014 Neil Lathwood <https://github.com/laf/ http://www.lathwood.co.uk/fa>
 | 
						|
 *
 | 
						|
 * This program is free software: you can redistribute it and/or modify it
 | 
						|
 * under the terms of the GNU General Public License as published by the
 | 
						|
 * Free Software Foundation, either version 3 of the License, or (at your
 | 
						|
 * option) any later version.  Please see LICENSE.txt at the top level of
 | 
						|
 * the source code distribution for details.
 | 
						|
 */
 | 
						|
 | 
						|
function prometheus_push($device, $measurement, $tags, $fields)
 | 
						|
{
 | 
						|
    global $prometheus, $config;
 | 
						|
    if ($config['prometheus']['enable'] === true) {
 | 
						|
        if ($prometheus !== false) {
 | 
						|
            try {
 | 
						|
                $ch = curl_init();
 | 
						|
 | 
						|
                set_curl_proxy($ch);
 | 
						|
                $vals = "";
 | 
						|
                $promtags = "/measurement/".$measurement;
 | 
						|
 | 
						|
                foreach ($fields as $k => $v) {
 | 
						|
                    if ($v !== null) {
 | 
						|
                        $vals = $vals . "$k $v\n";
 | 
						|
                    }
 | 
						|
                }
 | 
						|
                
 | 
						|
                foreach ($tags as $t => $v) {
 | 
						|
                    if ($v !== null) {
 | 
						|
                        $promtags = $promtags . "/$t/$v";
 | 
						|
                    }
 | 
						|
                }
 | 
						|
 | 
						|
                $promurl = $config['prometheus']['url'].'/metrics/job/'.$config['prometheus']['job'].'/instance/'.$device['hostname'].$promtags;
 | 
						|
                $promurl = str_replace(" ", "-", $promurl); // Prometheus doesn't handle tags with spaces in url
 | 
						|
        
 | 
						|
                d_echo("\nPrometheus data:\n");
 | 
						|
                d_echo($measurement);
 | 
						|
                d_echo($tags);
 | 
						|
                d_echo($fields);
 | 
						|
                d_echo($vals);
 | 
						|
                d_echo($promurl);
 | 
						|
                d_echo("\nEND\n");
 | 
						|
 | 
						|
                curl_setopt($ch, CURLOPT_URL, $promurl);
 | 
						|
                curl_setopt($ch, CURLOPT_POST, 1);
 | 
						|
                curl_setopt($ch, CURLOPT_POSTFIELDS, $vals);
 | 
						|
                curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
 | 
						|
 
 | 
						|
                $headers = array();
 | 
						|
                $headers[] = "Content-Type: test/plain";
 | 
						|
                curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
 | 
						|
 | 
						|
        
 | 
						|
                curl_exec($ch);
 | 
						|
 
 | 
						|
                if (curl_errno($ch)) {
 | 
						|
                    d_echo('Error:' . curl_error($ch));
 | 
						|
                }
 | 
						|
            } catch (Exception $e) {
 | 
						|
                d_echo("Caught exception: " . $e->getMessage() . PHP_EOL);
 | 
						|
                d_echo($e->getTrace());
 | 
						|
            }
 | 
						|
        } else {
 | 
						|
            c_echo("[%gPrometheus Push Disabled%n]\n");
 | 
						|
        }//end if
 | 
						|
    }//end if
 | 
						|
}// end prometheus_push
 |