jan
31
Posted on 31-01-2011
Filed Under (Supervision) by admin

Depuis quelques temps déjà, le développement d’un plugin Cacti me trotter dans la tête. Le week-end dernier n’étant pas trop surchargé, je m’attaquais donc à l’écriture de ce plugin que je vous présente maintenant dans ce post.

Ce script, écris en Perl côté serveur et en PHP coté client, permet de retourner l’utilisation courante du cache d’opcode.

    Le template contient quatre graphes :

  • Web – APC Memory Usage : Utilisation de la mémoire allouée pour le cache
  • Web – APC File Request Rate : Taux de requêtes (Hits, Misses et Inserts) au niveau du cache de fichiers
  • Web – APC User Request Rate : Taux de requêtes (Hits, Misses et Inserts) au niveau du cache de variables
  • Web – APC Cache Entry : Nombres d’entrées dans le cache de fichiers et de variables

Installation

Rien de bien particuliers pour cette étape si ce n’est la copie des scripts sur les serveurs correspondants.

Serveur client

Je commencerai par la configuration du client étant donné que la configuration du serveur se basera sur ce qui a été définit dans cette partie.

Script PHP

<?php
/*
* Author	: Axel JAMAIN <axel@jamain.net>
* Date		: 02/12/2010
* Version	: 0.1
* Description	: Returns APC informations
*                 This script is to place on the client
*/
 
/********** Functions **********/
function byteSize($size) {
        $new_size = ($size / 1024) / 1024;
 
        return round($new_size,1);
}
 
 
/********** Main **********/
if( isset($_GET['type']) ) { 
        if( extension_loaded('apc') && ini_get('apc.enabled') ) {
                switch($_GET['type']) {
                        case 'memory':
                                $mem_info = apc_sma_info(true);
                                $memory['free'] = byteSize($mem_info['avail_mem']);
 
				foreach(array('files','user') as $value) {
					$arr_cacheinfo = apc_cache_info($value);
					$memory[$value] = byteSize($arr_cacheinfo['mem_size']);
				}
 
                                print("mf:$memory[free] mfc:$memory[files] muc:$memory[user]");
 
                                break;
 
                        case 'request':
                                $timestamp = $_SERVER["REQUEST_TIME"];
 
				foreach(array('files','user') as $value) {
					$arr_cacheinfo = apc_cache_info($value);
					$start_time = $arr_cacheinfo['start_time'];
					$request[$value]['hit'] = round(($arr_cacheinfo['num_hits'] / ($timestamp - $start_time)),2);
					$request[$value]['miss'] = round(($arr_cacheinfo['num_misses'] / ($timestamp - $start_time)),2) ;
					$request[$value]['insert'] = round(($arr_cacheinfo['num_inserts'] / ($timestamp - $start_time)),2);
				}
 
                                print("fh:{$request['files']['hit']} fm:{$request['files']['miss']} fi:{$request['files']['insert']} ");
				print("uh:{$request['user']['hit']} um:{$request['user']['miss']} ui:{$request['user']['insert']}");
 
                                break;
 
			case 'cache':
				foreach(array('files','user') as $value) {
					$arr_cacheinfo = apc_cache_info($value);
					$cache[$value]['entries'] = $arr_cacheinfo['num_entries'];
				}
 
				print("cf:{$cache['files']['entries']} cu:{$cache['user']['entries']}");
 
				break;
                }
        }
}
 
?>

Pour ma part, le script se trouve dans /var/www/apc_infos.php.

Configuration du serveur HTTP
Une fois que le script PHP est en place, passons à la configuration du serveur HTTP Apache qui permettra au serveur Cacti de récupérer les informations sur le cache APC. Pour cela, on déclare un nouveau Virtual Host.

$ cat /usr/local/etc/apache22/httpd.conf
[...]
<VirtualHost *:80>
        ServerName status.worldofunix.fr
 
        Alias /apc_infos.php /var/www/apc_infos.php
 
        <Location /apc_infos.php>
                Order deny,allow
                Deny from all
                # Adresse IP du serveur Cacti
                Allow from 192.168.1.100
        </Location>
</VirtualHost>

Un reload du serveur HTTP pour terminer la configuration du client.

Validation de la configuration cliente
Connectons nous au serveur Cacti et effectuons une requête HTTP.

$ telnet status.worldofunix.fr 80
Trying 192.168.1.154...
Connected to web.worldofunix.fr.
Escape character is '^]'.
GET /apc_infos.php?type=memory HTTP/1.1
Host: status.worldofunix.fr
 
HTTP/1.1 200 OK
Date: Wed, 12 Jan 2011 09:02:36 GMT
Server: Apache
Content-Length: 21
Content-Type: text/html
 
mf:63.7 mfc:0.3 muc:0
 
quit

Le serveur Apache retourne bien les informtations sur le cache APC, passons maintenant à la configuration du serveur Cacti.

Serveur Cacti

Ce script est à copier dans le répertoire des scripts Cacti.

#!/usr/bin/perl -w
#
# Author	: Axel JAMAIN <axel@jamain.net>
# Date		: 02/12/2010
# Version	: 0.1
# Description	: Returns APC informations
#		  This script is to place on the server
#
# Syntaxe	: apc_infos.pl <hostname> <type_of_request>
#			<hostname>		= server.domain.com
#			<type_of_request>	= {memory|request|cache}
 
use strict;
use warnings;
require LWP::UserAgent;
require HTTP::Request;
 
 
########## Variables ########## 
my $uri = '/apc_infos.php';	# URI which is called	(ex: http://<hostname>/apc_infos.php)
 
 
########## Main ########## 
if( @ARGV == 2 ) {
	my $host = $ARGV[0];
	my $type = $ARGV[1];
	my $url = "http://$host$uri?type=$type";
	my $ua = LWP::UserAgent->new(agent => 'APCbot/0.1');
	my $response = $ua->request(HTTP::Request->new(GET => "$url"));
 
	if( $response->is_success) {
		print $response->content;
	}
}

Le script prend deux paramètres :
– Le nom d’hôte du serveur qui permettra d’afficher la page PHP
– Le type de check à faire (memory, request ou cache)

Configuration Cacti

Les quatres fichiers xml ci-dessous sont à importer dans l’interface Cacti.
cacti-apc_cache_entry.xml
cacti-apc_file_request_rate.xml
cacti-apc_memory_usage.xml
cacti-apc_user_request_rate.xml

Ce qui donne au final :

Pour finir, il ne reste plus qu’à associer les graphes au serveur.

Et indiquer à Cacti de les grapher.

Prévisualisation

Aperçu de ce que donne le plugin sur l’un de mes serveurs.

APC Memory Usage

APC Cache Entry

APC User Request

APC File Request

Si vous avez des remarques ou juste pour dire un petit « merci », laissez un commentaire.

(0) Comments    Read More   
Poster un commentaire
Votre pseudo:
Votre e-mail:
Votre site:
Votre commentaire: