B2PWeb/Services/Monitoring/WebserviceMonitoring

De TartareFR
Version datée du 12 juillet 2013 à 09:04 par Didier (discussion | contributions)
(diff) ← Version précédente | Voir la version actuelle (diff) | Version suivante → (diff)
Aller à la navigation Aller à la recherche
B2PMonitoringClient.png

Actions, Offres, Recherches et Utilisateurs et Lag des serveurs MySQL

WebserviceMonitoring.png

Le Webservice

Le webservice est présent sur tous les WSR dans le répertoire <path>/home/b2pweb.com/services.b2pweb.com/monitoring</path>

monitoring
|-- class
|   |-- bdd.class.php
|   |-- fault.class.php
|   `-- monitoring.class.php
|-- conf
|   `-- config.conf.php
|-- include
|   `-- fonctions.php
|-- index.php
`-- wsdl
    `-- monitoring.wsdl

La gestion des serveurs se fait dans le fichier <path>conf/config.conf.php</path>

<?php
//path
define ("PATH_BDD_SERVICE", "/home/common/bdd");
define ('__PATH', '');
define('LOG_TRACE', "monitoring.log");
define('PATH_LOG',"/var/log/monitoring/");


//debug
define ('DEBUG', 1);
define ('LOG', 1);
define ('STDOUT', 0);

/* List of allowed address.
 * This is a list of IP address which are allowed to use the webservice
 */
$ALLOWED_HOSTS = array (
	'195.216.193.1',		//ld wan
	'195.216.193.2',
	'195.216.193.3',
	'46.218.176.169',               // completel fiber
	'46.218.176.170',               // completel fiber
	'46.218.176.171',               // completel fiber
	'46.218.176.172',               // completel fiber
	'46.218.176.173',               // completel fiber
	'46.218.176.174',               // completel fiber
	'78.248.44.91',			// free
	'92.103.23.50',			// completel
	'10.8.0.1',     		// ld vpn
	'192.168.0.148',		// test Didier
);

/*
 * Associative array of server which are on public plateform
 * - id => The uniq server identifiant
 * - name => The host name ( without domain )
 * - enabled => flag to know if SQL lag must be checked.
 * - wsdl => WSDL address to get host data
 */
$PUBLIC_SERVER_LIST = array(
	array( "id" => 0  , "name" => "SQL2",        "enabled" => true,  "wsdl" => null ),
	array( "id" => 1  , "name" => "WSR1",        "enabled" => true,  "wsdl" => null ),
	array( "id" => 2  , "name" => "WSR2",        "enabled" => true,  "wsdl" => null ),
	array( "id" => 3  , "name" => "WSR3",        "enabled" => true,  "wsdl" => null ),
	array( "id" => 4  , "name" => "WSR4",        "enabled" => true,  "wsdl" => null ),
	array( "id" => 5  , "name" => "WSR5",        "enabled" => true,  "wsdl" => null ),
	array( "id" => 6  , "name" => "WSR6",        "enabled" => false, "wsdl" => null ),
);

/* Associative array of server which are NOT on public plateform
 * - id => The uniq server identifiant
 * - name => The host name ( without domain )
 * - enabled => flag to know if SQL lag must be checked.
 * - wsdl => WSDL address to get host data
 */
$PRIVATE_SERVER_LIST = array(
	// Dedicated servers
	array( "id" => 100, "name" => "TRED1",       "enabled" => true,  "wsdl" => "http://services-tred-union.bdfweb.com/monitoring/?wsdl" ),
	array( "id" => 110, "name" => "EVOLUTRANS1", "enabled" => true,  "wsdl" => "http://services-evolutrans.bdfweb.com/monitoring/?wsdl" ),
	array( "id" => 120, "name" => "FLO1",        "enabled" => true,  "wsdl" => "http://services-flo.bdfweb.com/monitoring/?wsdl" ),
	array( "id" => 130, "name" => "ASTRE1",      "enabled" => true,  "wsdl" => "http://services-astre.bdfweb.com/monitoring/?wsdl" ),
	array( "id" => 140, "name" => "ALLOIN1",     "enabled" => true,  "wsdl" => "http://services-alloin.bdfweb.com/monitoring/?wsdl" ),
	array( "id" => 150, "name" => "KUEHNE1",     "enabled" => true,  "wsdl" => "http://services-kuehne.bdfweb.com/monitoring/?wsdl" ),
	array( "id" => 160, "name" => "MORY1",       "enabled" => true,  "wsdl" => "http://services-mory.bdfweb.com/monitoring/?wsdl" ),
	array( "id" => 170, "name" => "STEF1",       "enabled" => true,  "wsdl" => "http://services-stef.bdfweb.com/monitoring/?wsdl" ),
	array( "id" => 180, "name" => "GEODIS1",     "enabled" => true,  "wsdl" => "http://services-geodis.bdfweb.com/monitoring/?wsdl" ),
	// VM
	array( "id" => 500, "name" => "NS13114",     "enabled" => false, "alias" => "LEROY", "wsdl" => "http://services-leroy.bdfweb.com/monitoring/?wsdl" ),
	array( "id" => 501, "name" => "NS13125",     "enabled" => false, "alias" => "TRANSCO", "wsdl" => "http://services-transco.bdfweb.com/monitoring/?wsdl" ),
	array( "id" => 502, "name" => "NS13134",     "enabled" => false, "alias" => "BREGER",  "wsdl" => "http://services-breger.bdfweb.com/monitoring/?wsdl" ),
);

?>
  • Le tableau ALLOWED_HOSTS définit toutes les IP WAN autorisée à se connecter à ce webservice.
  • Le tableau PUBLIC_SERVER_LIST définit les serveurs de la plateforme publique ayant une base MySQL en réplication esclave:
  • la clé id attribut un identifiant unique au serveur
  • la clé name définit le nom simple d'hôte du serveur ( sans le domaine )
  • la clé enabled définit si le lag doit être surveillé ou non
  • la clé wsdl n'est pas utilisée pour la plateforme publique
  • Le tableau PRIVATE_SERVER_LIST définit les serveurs dédiés actifs
  • la clé id attribut un identifiant unique au serveur
  • la clé name définit le nom simple d'hôte du serveur ( sans le domaine )
  • la clé enabled définit si le lag doit être surveillé ou non
  • la clé wsdl définit l'adresse de la WSDL
  • la clé alias définit l'alias du serveur. En effet les serveurs sur VM ont des noms d'hôtes propre à MIT et le webservice utilise donc l'alias en lieu et place du nom pour l'affichage s'il est présent.

Le Client

Le client est situé sur les virtual machine monitoring ( ns1 et ns2 ) du LAN. Il est installé via un paquet RPM dans le répertoire <path>/usr/share/webservice-monitoring/client/</path>.

De plus le fichier de configuration pour Apache est <path>/etc/httpd/conf.d/webservice-monitoring-client.conf</path>

Le fichier de configuration <path>include/vars.php</path>

<?php

	// Account which can call webservice
	$ACCOUNT = array( "login" => "ADMIN", "passwd" => "abf33nih" );

	// Timezone
	$TIMEZONE = 'Europe/Paris';

	// Debug flag
	$DEBUG = false;

	// Customer list
	$CUSTOMER_LIST = array(
		array( "name" => "Public"    , "id" => "pub"        , "checkall" => true , "wsdl" => "http://services.b2pweb.com/monitoring/" ),
		array( "name" => "Tred-Union", "id" => "tred"       , "checkall" => true , "wsdl" => "http://services-tred-union.b2pweb.com/monitoring/" ),
		array( "name" => "Evolutrans", "id" => "evolutrans" , "checkall" => true , "wsdl" => "http://services-evolutrans.b2pweb.com/monitoring/" ),
		array( "name" => "Flo"       , "id" => "flo"        , "checkall" => true , "wsdl" => "http://services-flo.b2pweb.com/monitoring/" ),
		array( "name" => "Astre"     , "id" => "astre"      , "checkall" => true , "wsdl" => "http://services-astre.b2pweb.com/monitoring/" ),
		array( "name" => "Alloin"    , "id" => "alloin"     , "checkall" => true , "wsdl" => "http://services-alloin.b2pweb.com/monitoring/" ),
		array( "name" => "Kuehne"    , "id" => "kuehne"     , "checkall" => true , "wsdl" => "http://services-kuehne.b2pweb.com/monitoring/" ),
		array( "name" => "Mory"      , "id" => "mory"       , "checkall" => true , "wsdl" => "http://services-mory.b2pweb.com/monitoring/" ),
		array( "name" => "Stef-TFE"  , "id" => "stef"       , "checkall" => true , "wsdl" => "http://services-stef-tfe.b2pweb.com/monitoring/" ),
		array( "name" => "Geodis"    , "id" => "geodis"     , "checkall" => true , "wsdl" => "http://services-geodis.b2pweb.com/monitoring/" ),
		array( "name" => "Leroy"     , "id" => "leroy"      , "checkall" => false, "wsdl" => "http://services-leroy.b2pweb.com/monitoring/" ),
		array( "name" => "Transco"   , "id" => "transco"    , "checkall" => false, "wsdl" => "http://services-transco.b2pweb.com/monitoring/" ),
		array( "name" => "Breger"    , "id" => "breger"     , "checkall" => false, "wsdl" => "http://services-breger.b2pweb.com/monitoring/" ),
		//array( "name" => "Test"      , "id" => "test"       , "checkall" => false, "wsdl" => "http://services.nowhere.com/monitoring/" ),
	);

	/*************************** Action to process ***************************/
	// thresholds
	$ACTION_2_PROCESS_WARN = array(
		0 => array( 'name' => 'A traiter', 'value' => 20 ),
		1 => array( 'name' => 'En erreur', 'value' => 5 ), // 80 on nagios
		2 => array( 'name' => 'A traiter bourse', 'value' => 20 ),
	);
	$ACTION_2_PROCESS_CRITIC = array(
		0 => array( 'name' => 'A traiter', 'value' => 25 ),
		1 => array( 'name' => 'En erreur', 'value' => 10 ), // 100 on nagios
		2 => array( 'name' => 'A traiter bourse', 'value' => 25 ),
	);

	/******************************* Action In *******************************/
	// thresholds
	$ACTION_IN_WARN = array(
		0 => array( 'name' => 'Total', 'value' => 500 ),
		1 => array( 'name' => 'Dépose', 'value' => 500 ),
		2 => array( 'name' => 'Suppression', 'value' => 500 ),
		3 => array( 'name' => 'Modification', 'value' => 200 ),
		4 => array( 'name' => 'Refresh', 'value' => 500 ),
	);
	$ACTION_IN_CRITIC = array(
		0 => array( 'name' => 'Total', 'value' => 400 ),
		1 => array( 'name' => 'Dépose', 'value' => 200 ),
		2 => array( 'name' => 'Suppression', 'value' => 200 ),
		3 => array( 'name' => 'Modification', 'value' => 150 ),
		4 => array( 'name' => 'Refresh', 'value' => 200 ),
	);

	/**************************** Number of offers ***************************/
	// thresholds
	$OFFERS_WARN = array(
		0 => array( 'name' => 'Correspondant a une recherche', 'value' => 3000 ),
		1 => array( 'name' => 'Nombre d\'offre', 'value' => 3000 ),
	);
	$OFFERS_CRITIC = array(
		0 => array( 'name' => 'Correspondant a une recherche', 'value' => 2000 ),
		1 => array( 'name' => 'Nombre d\'offre', 'value' => 2000 ),
	);

	/************************** Number of Searches ***************************/
	// thresholds
	$SEARCH_WARN = array(
		0 => array( 'name' => 'Nombre de recherche', 'value' => 22000 ),
		1 => array( 'name' => 'Correspondant a une offre', 'value' => 22000 ),
	);
	$SEARCH_CRITIC = array(
		0 => array( 'name' => 'Nombre de recherche', 'value' => 20000 ),
		1 => array( 'name' => 'Correspondant a une offre', 'value' => 20000 ),
	);

	/*************************** Number of Users *****************************/
	// thresholds
	$USER_WARN = array(
		0 => array( 'name' => 'Utilisateur LEA', 'value' => 1 ),
		1 => array( 'name' => 'Utilisateur Site', 'value' => 300 ),
	);
	$USER_CRITIC = array(
		0 => array( 'name' => 'Utilisateur LEA', 'value' => 2 ),
		1 => array( 'name' => 'Utilisateur Site', 'value' => 250 ),
	);

	/******************************* MySQL Lag *******************************/
	// thresholds
	$MYSQL_LAG_WARN = 20; // seconds
	$MYSQL_LAG_CRITIC = 30;
	$NO_CRITICAL_SERVERS = array(
		'SQL2',
	);

	/******************************* TopClient *******************************/
	// WSDL Topclient
	$TOPCLIENT_WSDL = "http://services.b2pweb.com/monitoring";
	// thresholds for age of report
	$TOPCLIENT_REPORT_WARN = 15; // minutes
	$TOPCLIENT_REPORT_CRITIC = 20;
	// thresholds for number of actions
	$TOPCLIENT_ACTION_WARN = 10;
	$TOPCLIENT_ACTION_CRITIC = 0;

	/***************************** Search Offers *****************************/
	// thresholds
	$SEARCH_OFFER_WARN = array(
		0 => array( 'name' => 'Search-Offers', 'value' => 4000000 ),
	);
	$SEARCH_OFFER_CRITIC = array(
		0 => array( 'name' => 'Search-Offers', 'value' => 5000000 ),
	);

	/************************ FR-FR search and offers ************************/
	// thresholds
	$FR_FR_WARN = array(
		0 => array( 'name' => 'Search', 'value' => 100 ),
		1 => array( 'name' => 'Offers', 'value' => 400000 ),
	);
	$FR_FR_CRITIC = array(
		0 => array( 'name' => 'Search', 'value' => 150 ),
		1 => array( 'name' => 'Offers', 'value' => 500000 ),
	);
	$FR_FR_MAX_AGE = 60; // minutes

	/********************************* Sound *********************************/
	$SOUNDS = array(
		'agneau'       => array( 'name' => 'Agneau',       'file' => 'sound/agneau' ),
		'aligator'     => array( 'name' => 'Aligator',     'file' => 'sound/aligator' ),
		'canard'       => array( 'name' => 'Canard',       'file' => 'sound/canard' ),
		'cloche'       => array( 'name' => 'Cloche',       'file' => 'sound/cloche' ),
		'dindon'       => array( 'name' => 'Dindon',       'file' => 'sound/dindon' ),
		'elephant'     => array( 'name' => 'Elephant',     'file' => 'sound/elephant' ),
		'frogs'        => array( 'name' => 'Frogs',        'file' => 'sound/frogs' ),
		'gorille'      => array( 'name' => 'Gorille',      'file' => 'sound/gorille' ),
		'loup'         => array( 'name' => 'Loup',         'file' => 'sound/loup' ),
		'ours'         => array( 'name' => 'Ours',         'file' => 'sound/ours' ),
		'fouet'        => array( 'name' => 'Fouet',        'file' => 'sound/fouet' ),
		'ah'           => array( 'name' => 'Ah',           'file' => 'sound/ah' ),
		'hard'         => array( 'name' => 'Hard',         'file' => 'sound/hard' ),
		'alarm'        => array( 'name' => 'Alarm',        'file' => 'sound/alarm' ),
		'shipcorn'     => array( 'name' => 'Shipcorn',     'file' => 'sound/shipcorn' ),
		'submarine'    => array( 'name' => 'UBoat',        'file' => 'sound/submarine' ),
		'tacot'        => array( 'name' => 'Tacot',        'file' => 'sound/tacot' ),
		'simpsons'     => array( 'name' => 'Simpsons',     'file' => 'sound/dho' ),
		'tombraider01' => array( 'name' => 'TombRaider01', 'file' => 'sound/tomb-raider/s01' ),
		'tombraider02' => array( 'name' => 'TombRaider02', 'file' => 'sound/tomb-raider/s02' ),
		'tombraider03' => array( 'name' => 'TombRaider03', 'file' => 'sound/tomb-raider/s03' ),
		'tombraider04' => array( 'name' => 'TombRaider04', 'file' => 'sound/tomb-raider/s04' ),
		'tombraider05' => array( 'name' => 'TombRaider05', 'file' => 'sound/tomb-raider/s05' ),
		'tombraider06' => array( 'name' => 'TombRaider06', 'file' => 'sound/tomb-raider/s06' ),
		'tombraider07' => array( 'name' => 'TombRaider07', 'file' => 'sound/tomb-raider/s07' ),
		'tombraider08' => array( 'name' => 'TombRaider08', 'file' => 'sound/tomb-raider/s08' ),
		'tombraider09' => array( 'name' => 'TombRaider09', 'file' => 'sound/tomb-raider/s09' ),
		'tombraider10' => array( 'name' => 'TombRaider10', 'file' => 'sound/tomb-raider/s10' ),
		'tombraider11' => array( 'name' => 'TombRaider11', 'file' => 'sound/tomb-raider/s11' ),
		'tombraider12' => array( 'name' => 'TombRaider12', 'file' => 'sound/tomb-raider/s12' ),
		'tombraider13' => array( 'name' => 'TombRaider13', 'file' => 'sound/tomb-raider/s13' ),
		'tombraider14' => array( 'name' => 'TombRaider14', 'file' => 'sound/tomb-raider/s14' ),
		'tombraider15' => array( 'name' => 'TombRaider15', 'file' => 'sound/tomb-raider/s15' ),
		'tombraider16' => array( 'name' => 'TombRaider16', 'file' => 'sound/tomb-raider/s16' ),
		'tombraider17' => array( 'name' => 'TombRaider17', 'file' => 'sound/tomb-raider/s17' ),
		'tombraider18' => array( 'name' => 'TombRaider18', 'file' => 'sound/tomb-raider/s18' ),
		'tombraider19' => array( 'name' => 'TombRaider19', 'file' => 'sound/tomb-raider/s19' ),
		'tombraider20' => array( 'name' => 'TombRaider20', 'file' => 'sound/tomb-raider/s20' ),
		'tombraider21' => array( 'name' => 'TombRaider21', 'file' => 'sound/tomb-raider/s21' ),
		'tombraider22' => array( 'name' => 'TombRaider22', 'file' => 'sound/tomb-raider/s22' ),
		'tombraider23' => array( 'name' => 'TombRaider23', 'file' => 'sound/tomb-raider/s23' ),
		'tombraider24' => array( 'name' => 'TombRaider24', 'file' => 'sound/tomb-raider/s24' ),
		'tombraider25' => array( 'name' => 'TombRaider25', 'file' => 'sound/tomb-raider/s25' ),
		'tombraider26' => array( 'name' => 'TombRaider26', 'file' => 'sound/tomb-raider/s26' ),
		'tombraider27' => array( 'name' => 'TombRaider27', 'file' => 'sound/tomb-raider/s27' ),
		'tombraider28' => array( 'name' => 'TombRaider28', 'file' => 'sound/tomb-raider/s28' ),
		'tombraider29' => array( 'name' => 'TombRaider29', 'file' => 'sound/tomb-raider/s29' ),
		'tombraider30' => array( 'name' => 'TombRaider30', 'file' => 'sound/tomb-raider/s30' ),
		'tombraider31' => array( 'name' => 'TombRaider31', 'file' => 'sound/tomb-raider/s31' ),
		'tombraider32' => array( 'name' => 'TombRaider32', 'file' => 'sound/tomb-raider/s32' ),
		'tombraider33' => array( 'name' => 'TombRaider33', 'file' => 'sound/tomb-raider/s33' ),
		'tombraider34' => array( 'name' => 'TombRaider34', 'file' => 'sound/tomb-raider/s34' ),
		'tombraider35' => array( 'name' => 'TombRaider35', 'file' => 'sound/tomb-raider/s35' ),
		'tombraider36' => array( 'name' => 'TombRaider36', 'file' => 'sound/tomb-raider/s36' ),
		'tombraider37' => array( 'name' => 'TombRaider37', 'file' => 'sound/tomb-raider/s37' ),
		'tombraider38' => array( 'name' => 'TombRaider38', 'file' => 'sound/tomb-raider/s38' ),
		'tombraider39' => array( 'name' => 'TombRaider39', 'file' => 'sound/tomb-raider/s39' ),
		'tombraider40' => array( 'name' => 'TombRaider40', 'file' => 'sound/tomb-raider/s40' ),
		'tombraider41' => array( 'name' => 'TombRaider41', 'file' => 'sound/tomb-raider/s41' ),
		'tombraider42' => array( 'name' => 'TombRaider42', 'file' => 'sound/tomb-raider/s42' ),
		'tombraider43' => array( 'name' => 'TombRaider43', 'file' => 'sound/tomb-raider/s43' ),
		'tombraider44' => array( 'name' => 'TombRaider44', 'file' => 'sound/tomb-raider/s44' ),
		'tombraider45' => array( 'name' => 'TombRaider45', 'file' => 'sound/tomb-raider/s45' ),
		'tombraider46' => array( 'name' => 'TombRaider46', 'file' => 'sound/tomb-raider/s46' ),
		'tombraider47' => array( 'name' => 'TombRaider47', 'file' => 'sound/tomb-raider/s47' ),
		'tombraider48' => array( 'name' => 'TombRaider48', 'file' => 'sound/tomb-raider/s48' ),
		'tombraider49' => array( 'name' => 'TombRaider49', 'file' => 'sound/tomb-raider/s49' ),
		'tombraider50' => array( 'name' => 'TombRaider50', 'file' => 'sound/tomb-raider/s50' ),
		'tombraider51' => array( 'name' => 'TombRaider51', 'file' => 'sound/tomb-raider/s51' ),
		'tombraider52' => array( 'name' => 'TombRaider52', 'file' => 'sound/tomb-raider/s52' ),
		'tombraider53' => array( 'name' => 'TombRaider53', 'file' => 'sound/tomb-raider/s53' ),
		'tombraider54' => array( 'name' => 'TombRaider54', 'file' => 'sound/tomb-raider/s54' ),
		'tombraider55' => array( 'name' => 'TombRaider55', 'file' => 'sound/tomb-raider/s55' ),
		'tombraider56' => array( 'name' => 'TombRaider56', 'file' => 'sound/tomb-raider/s56' ),
	);

	$DEFAULT_WARN_SOUND = 'tacot';
	$DEFAULT_CRITIC_SOUND = 'shipcorn';
?>
  • Le tableau ACCOUNT définit le compte B2PWeb à utiliser pour se connecter. Ce compte doit exister en base ( table "users", base "BASE_BDF" )
  • La variable DEBUG n'est utile que pour le développement.
  • Le tableau CUSTOMER_LIST définit les serveurs qui doivent être contrôlés
  • la clé tabs définit le numéro de l'onglet
  • la clé name définit le nom simple de la plateforme
  • la clé id attribut un identifiant unique à la plateforme
  • la clé checkall définit le mode de vérification:
  • true vérifie les actions, les offres, les recherches et les utilisateurs
  • false vérifie uniquement les actions et les utiisateurs
  • la clé wsdl définit l'adresse de la WSDL de la plateforme
  • La variable WARN_REPORT définit l'age maximum en minute de la dernière vérification du topclient avant de considérer le status comme nécessitant l'attention
  • La variable CRTIC_REPORT définit l'age maximum en minute de la dernière vérification du topclient avant de considérer le status comme critique
  • La variable WSDL_TOPCLIENT définit l'adresse de la WSDL pour le topclient

Top Client

Installation

TopClient.png

Engine

Le moteur est situé sur sql2-cogent dans le répertoire <path>/root/scripts/monitoring/topclient</path>. Il est lancé par un cron.

# crontab -l  | grep -i 'top\s*client'
# Monitoring - Top client engine
*/15 8-20 * * 1-5 /root/scripts/monitoring/topclient/engine-topclient.php 1>>/var/log/monitoring-engine-topclient.log 2>&1
Important.png
Fichiers utilisés
  • log : /var/log/monitoring-engine-topclient.log
  • lock : /var/lock/b2p/topclient.lock

En éditant le fichier <path>/root/scripts/monitoring/topclient/vars.php</path>, on peut voir le nom du fichier de lock utilisé: <path>/var/lock/b2p/topclient.lock</path>, ainsi que la définition de chaque client et autres paramètres.

  • Pour chaque client, on définit dans le tableau CUSTOMER_LIST
    • Les paramètres obligatoires
      • order: Paramètre déprécié.
      • name: Le nom du client correspondant à l'identifiant. Le préfixe (P) est automatiquement ajouté, de même que le suffixe (DED) si la requète est exécuter sur un serveur dédié.
      • ID: L'identifiant unique
      • level: Correspond à différentes méthodes d’interrogation des bases de données. Paramètre déprécié.
    • Les paramètres facultatifs
      • dbhost: Correspond à la cible définit dans le fichier <path>/home/common/Bdf/config/db.ini</path> pour les paramètres de la base de données.
        Si celui-ci est absent ou vide, c'est MONITORING_LOG qui sera utilisé (c.a.d. la base B2P_LOG sur le serveur stats ).
      • timeperiods: définit la la plage horaire pendant laquelle l'envoi d'email d'alerte est autorisé pour ce customer. Si ce champs est absent ou vide, c'est la période de temps par défaut qui est prise en compte. La syntaxe est la même que DEFAULT_TIMEPERIOD.
  • LOCK_FILE: Le fichier de lock afin de prévenir plusieurs démarrage d'instance de ce même script.
  • ALERT_RECEIVERS: Définition de toutes les adresses email réceptrices des alertes.
  • DEFAULT_TIMEPERIOD: Définition de la plage horaire par défaut où l'envoi de mail d'alerte est autorisé. Le nombre correspond au nombre de secondes depuis minuit. Les plages horaires sont cumulatives ( OU et non pas ET ).
  • ALERT_SUBJECT: Sujet de l'email d'alerte
  • ALERT_MESSAGE: Corps du message d'alerte
  • DEPOSIT_PERIOD: Période de temps durant laquelle le nombre d'offre déposées est comptabilisé, en secondes.
  • ALERT_PERIOD: Période minimum entre deux alertes par email, en secondes.
  • DEBUG: les logs contiennent des traces de debug si ce paramètre est fixé à true.
  • VERBOSE: Les logs sont plus bavards si ce paramètre est fixé à true.
<?php
	/*
	* dbhost: must be MONITORING_LOG for sending request on public platform
	*/
	$CUSTOMER_LIST = array (
		array ( 'order'=>'1', 'name'=>'ALLOIN',           'ID'=>'400100', 'level'=>'2', 'dbhost'=>'MONITORING_ALLOIN'  ),
		array ( 'order'=>'1', 'name'=>'BREGER',           'ID'=>'401780', 'level'=>'2', 'dbhost'=>'MONITORING_BREGER'  ),
		array ( 'order'=>'1', 'name'=>'GEFCO',            'ID'=>'401307', 'level'=>'2', ),
		array ( 'order'=>'1', 'name'=>'GEODIS BM',        'ID'=>'401664', 'level'=>'2', 'dbhost'=>'MONITORING_GEODIS'  ),
		array ( 'order'=>'1', 'name'=>'GEODIS CALBERSON', 'ID'=>'401663', 'level'=>'2', 'dbhost'=>'MONITORING_GEODIS'  ),
		array ( 'order'=>'1', 'name'=>'HEPPNER',          'ID'=>'401263', 'level'=>'2', ),
		array ( 'order'=>'1', 'name'=>'JUNG',             'ID'=>'407455', 'level'=>'2', ),
		array ( 'order'=>'1', 'name'=>'LEROY',            'ID'=>'406067', 'level'=>'2', 'dbhost'=>'MONITORING_LEROY'   ),
		array ( 'order'=>'1', 'name'=>'MAUFFREY',         'ID'=>'401274', 'level'=>'2', ),
		array ( 'order'=>'1', 'name'=>'MTA',              'ID'=>'406615', 'level'=>'2', ),
		array ( 'order'=>'1', 'name'=>'SCHENCKER JOYAU',  'ID'=>'400101', 'level'=>'2', ),
		array ( 'order'=>'1', 'name'=>'STEF',             'ID'=>'403522', 'level'=>'2', 'dbhost'=>'MONITORING_STEF'    ),
		array ( 'order'=>'1', 'name'=>'TRANSALLIANCE',    'ID'=>'404010', 'level'=>'2', ),
		array ( 'order'=>'1', 'name'=>'ZIEGLER',          'ID'=>'410838', 'level'=>'2', 'dbhost'=>'MONITORING_ZIEGLER' ),
	);

	$LOCK_FILE = "/var/lock/b2p/topclient.lock";

	$DEBUG = false;
	$VERBOSE = true;

	$ALERT_RECEIVERS = array(
		'dfabert@b2pweb.com',
	);

	/* Number of seconds elapsed  after midnight */
	$DEFAULT_TIMEPERIOD = array(
		array( 'begin' => 28800, 'end' => 43200 ), // 08h00 - 12h00
		array( 'begin' => 50400, 'end' => 64800 ), // 14h00 - 18h00
	);

	$ALERT_SUBJECT = 'TopClient Passerelle alert - Customer %1';
	$ALERT_MESSAGE = 'Deposit from customer %1 not found in last 30 minutes !!!';

	// Period about last deposit in seconds. 1800 = 30 minutes
	$DEPOSIT_PERIOD = 1800;

	// Period about alert in seconds. 3600 = 1hour
	$ALERT_PERIOD = 3600;
?>

Le fichier de log est spécifié dans le crontab : <path>/var/log/monitoring-engine-topclient.log</path>

La base de données monitoring est placé sur sql2-cogent.

DROP TABLE IF EXISTS `topclient`;

CREATE TABLE `topclient` (
  `client_id` int(11) NOT NULL,
  `client_name` varchar(50) NOT NULL,
  `cur_hour_act` int(11) DEFAULT NULL,
  `cur_day_act` int(11) DEFAULT NULL,
  `last_week_day_act` int(11) DEFAULT NULL,
  `last_check` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (`client_id`),
  KEY `last_check` (`last_check`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

Webservice

Le moteur est situé sur tous les WSR dans le répertoire <path>/home/b2pweb.com/services.b2pweb.com/monitoring</path>

monitoring
|-- class
|   |-- bdd.class.php
|   |-- fault.class.php
|   `-- monitoring.class.php
|-- conf
|   `-- config.conf.php
|-- include
|   `-- fonctions.php
|-- index.php
`-- wsdl
    `-- monitoring.wsdl

Client

Le client est situé sur les virtual machine monitoring ( ns1 et ns2 ) du LAN. Il est installé via un paquet RPM dans le répertoire <path>/usr/share/webservice-monitoring/client/</path>.

De plus le fichier de configuration pour Apache est <path>/etc/httpd/conf.d/webservice-monitoring-client.conf</path>

Fonctionnement

  • La partie Engine : Sur stats, un script enrichit la base de données, moteur qui est lancé via un cron tous les quart d'heure.
  1. Requêtes mysql sur stats
  2. Mise en base des résultats synthétisés
  • La partie serveur du topclient est installé sur tous les WSR et interroge la base monitoring
  • La partie cliente fait une requête HTTP sur le webservice http://services.b2pweb.com/monitoring des WSR.

Interface

La date de dernière mise à jour apparait au survol de la souris sur le champs ClientID.

  • Lorsque le champs ClientID est vert, les informations sont à jour.
  • Lorsque le champs ClientID est orange, les informations commence à être obsolètes ( entre 15 et 20 minutes ).
  • Lorsque le champs ClientID est rouge, les informations sont obsolètes ( supérieures à 20 minutes ).


TopClientInterface.png

F.A.Q.

Le top client ne se met plus à jour !

Important.png
Vérifier le fichier de log
La dernière ligne peut indiquer le problème
  • Si la dernière ligne du fichier de log contient:
    Previous process is still running!
  1. C'est qu'une exécution antérieure ne s'est pas bien terminée et que le fichier de lock est encore présent. Il suffit juste de supprimer ce fichier
    rm -f /var/lock/b2p/topclient.lock
  2. L'engine a planté suite à une erreur
    Fatal error: Uncaught exception 'Bdf_Db_Exception' with message 'Erreur d'execution' in /home/common/Bdf/Bdf/Db/Adapter/MySQLi.class.php:99
    Il faut augmenter les paramètres wait_timeout et interactive_wait_timeout dans le fichier <path>/etc/my.cnf</path> et relancer MySQL.