Visualiser une révision

Afficher dans un conky sur votre bureau les infos CPU de vos serveurs.

voxdemonix : révision n°2 (07 août 2019 18:52:46)

Ce tutoriel fonctionne sur : Ubuntu et Debian. 
(Si vous l'avez testé sur d'autres systèmes avec succès, n'hésitez pas à rajouter la compatibilité.)

Introduction.
===========

![capture écran exemple conky](https://wiki.0rion.netlib.re/lib/exe/fetch.php?media=tutoriel_fr:screenshot_tuto_conky_afficher_temperature_cpu_serveur_distant-conky_display_remote_cpu_temp.png)

Nous allons voir ici comment récupérer sur un conky sur notre bureau Ubuntu ou Debian les températures (et le % d'utilisation) d'autres machines (serveurs, routeurs, etc) sur lesquels nous aurons installé un serveur Web avec PHP.

Vous pouvez bien entendu utiliser Apache2 ou Nginx selon vos préférences. Par contre le moteur PHP doit être fonctionnel et pouvoir utiliser les commandes exec().

Le script utilisé ne nécessite aucune dépendance tierce mais utilise Bash.

Mise en place.
==============

Côté Serveur
------------


1. **Il faut un serveur web fonctionnel avec php, si vous ne disposez pas d'un installez les pré-requis suivants :**

```bash
( apt update ; apt-get install -y apache2 php libapache2-mod-php php-mbstring php-dom php-apcu php-dev libsystemd-dev php-intl libapache2-mod-php; a2enmod headers rewrite ssl env dir mime ; a2dismod status )
```

Note : certains packages précédemment cité ne sont peut-être pas requis. Tout tri serait le bienvenue.


1. **Créez un VHOST ou utilisez celui par défaut ( _/etc/apache2/sites-available/000-default.conf_ ).**



1. **Ajoutez le script suivant dans le dossier que vous avez choisi comme DocumentRoot dans votre VHOST :**

_temperature.php_

```
<?php
/*	https://wiki.0rion.netlib.re/doku.php?id=tutoriel_fr:linuxfr.org/wiki/afficher_-dans_-un_-conky_-sur_-votre_-bureau_la_temperature_-les-infos-cpu_-de_-vos_-serveurs
	work on Ubuntu/Debian
 */
$infos ='';
exec('T=$(cat /sys/class/thermal/thermal_zone0/temp); echo $(( $T / 1000 ))', $cpu_temp);
if (!$cpu_temp[0]){    $cpu_temp[0] = -1;      }
$infos .= 'CPU : '.$cpu_temp[0].'°C';
exec('top -b -n2 | grep "Cpu(s)"|tail -n 1 | awk \'{print $2 + $4}\'',$cpu_usage);
if (!$cpu_usage[0]){    $cpu_usage[0] = -1;     }
$infos .= " ( ".$cpu_usage[0]."% )\n";
print_r($infos);
?>
```

Côté Ordinateur de bureau ou portable
-----------


Dans votre conky ajoutez une des commandes suivantes selon vos choix. Un exemple de conky basique est fournis après.

### Contact via nom de domaine forcé

Ici on force l'[adresse ip](https://fr.wikipedia.org/wiki/Adresse_IP) _10.8.42.42_ pour le nom de domaine MonServer.infos. C'est utile s'il y a plusieurs noms de domaines sur la même IP, mais peu parfois ne pas fonctionner pour obscure raisons (bug)

```
MonServer :
${goto 25}${execpi 10 curl --connect-timeout 5 -k --resolve MonServer.infos:80:10.8.42.42 http://MonServer.infos/temperature.php | sed '/\°C\|\°F/!d' | sed 's/\( [0-6]\{1\}[0-9]\{1\}\°C\)/${color lightgreen}&/; s/\( [7-8]\{1\}[0-9]\{1\}\°C\)/${color orange}&/; s/\( [9]\{1\}[0-9]\{1\}\°C\)/${color red}&/; s/\( [0-9]\{3,\}\°C\)/${color red}&/; s/\( [-]\{1\}[0-9]\{1,\}\°C\)/${color white}&/; s/\([0-9]\{1,\}\°C\)/&${color}/; s/[^-][1-7]\{0,1\}[0-9]\{1\}.[0-9]\{1,\}%/${color yellow}&/; s/[1]\{0,1\}[08-9]\{1\}[0-9]\{1\}.[0-9]\{1,\}%/${color red}&/; s/-1%/${color white}&/; s/[0-9]\{1,\}%/&${color}/' | sed -E 's/42|69/😛/g' | { grep ^ || echo '${color red}- server down -${color}' ; } & }
```

### Contact direct

```
MonServer :
${goto 25}${execpi 10 curl --connect-timeout 5 -k --resolve http://10.8.42.42/temperature.php | sed '/\°C\|\°F/!d' | sed 's/\( [0-6]\{1\}[0-9]\{1\}\°C\)/${color lightgreen}&/; s/\( [7-8]\{1\}[0-9]\{1\}\°C\)/${color orange}&/; s/\( [9]\{1\}[0-9]\{1\}\°C\)/${color red}&/; s/\( [0-9]\{3,\}\°C\)/${color red}&/; s/\( [-]\{1\}[0-9]\{1,\}\°C\)/${color white}&/; s/\([0-9]\{1,\}\°C\)/&${color}/; s/[^-][1-7]\{0,1\}[0-9]\{1\}.[0-9]\{1,\}%/${color yellow}&/; s/[1]\{0,1\}[08-9]\{1\}[0-9]\{1\}.[0-9]\{1,\}%/${color red}&/; s/-1%/${color white}&/; s/[0-9]\{1,\}%/&${color}/' | sed -E 's/42|69/😛/g' | { grep ^ || echo '${color red}- server down -${color}' ; } & }
```

Exemple de conky complet
------------------------

```
# INFOS : [FR] https://wiki.0rion.netlib.re/doku.php?id=tutoriel_fr:afficher_dans_un_conky_sur_votre_bureau_la_temperature_cpu_de_vos_serveurs
# http://conky.sourceforge.net/config_settings.html
# Use Xft?
use_xft yes
xftfont Ubuntu Beta:size=9
xftalpha 0.8
text_buffer_size 2048

# Update interval in seconds
update_interval 9

# This is the number of times Conky will update before quitting.
# Set to zero to run forever.
total_run_times 0

# Create own window instead of using desktop (required in nautilus)
own_window yes
own_window_transparent no
own_window_argb_visual yes
own_window_argb_value 235  # semi-transparent
own_window_type normal
own_window_class conky
own_window_hints undecorated,below,sticky,skip_taskbar,skip_pager
background no

# Use double buffering (reduces flicker, may not work for everyone)
double_buffer yes

# Minimum size of text area
minimum_size 300 120
maximum_width 335
maximum_height 900

# Draw shades?
draw_shades yes

# Draw outlines?
draw_outline no

# Draw borders around text
draw_borders no

# Stippled borders?
stippled_borders 0

# border margins
border_inner_margin 2

# border width
border_width 1

# Default colors and also border colors
default_color cyan
default_shade_color black
default_outline_color black
own_window_colour black
color1 orange

# Text alignment, other possible values are commented
#alignment top_left
alignment tm
#alignment bottom_left
#alignment bottom_right

# Gap between borders of screen and text
# same thing as passing -x at command line
gap_x -378
gap_y 330

# Subtract file system buffers from usedmemory?
no_buffers yes

# set to yes if you want all text to be in uppercase
uppercase no

# Force UTF8? note that UTF8 support required XFT
override_utf8_locale yes

# Add spaces to keep things from moving about?  This only affects certain objects.
use_spacer none

TEXT
Server1 :
${goto 25}${execpi 10 curl --connect-timeout 5 -k --resolve Server1.infos:80:10.8.42.42 http://Server1.infos/temperature.php | sed '/\°C\|\°F/!d' | sed 's/\( [0-6]\{1\}[0-9]\{1\}\°C\)/${color lightgreen}&/; s/\( [7-8]\{1\}[0-9]\{1\}\°C\)/${color orange}&/; s/\( [9]\{1\}[0-9]\{1\}\°C\)/${color red}&/; s/\( [0-9]\{3,\}\°C\)/${color red}&/; s/\( [-]\{1\}[0-9]\{1,\}\°C\)/${color white}&/; s/\([0-9]\{1,\}\°C\)/&${color}/; s/[^-][1-7]\{0,1\}[0-9]\{0,1\}[.]\{0,1\}[0-9]\{1,\}%/${color yellow}&/; s/[1]\{0,1\}[08-9]\{1\}[0-9]\{1\}[.]\{0,1\}[0-9]\{0,1\}%/${color red}&/; s/-1%/${color white}&/; s/[0-9]\{1,\}%/&${color}/' | sed -E 's/42|69/😛/g' | { grep ^ || echo '${color red}- server down -${color}' ; } & }
Server2 :
${goto 25}${execpi 10 curl --connect-timeout 5 -k --resolve Server2.infos:80:10.8.42.43 http://Server2.infos/temperature.php | sed '/\°C\|\°F/!d' | sed 's/\( [0-6]\{1\}[0-9]\{1\}\°C\)/${color lightgreen}&/; s/\( [7-8]\{1\}[0-9]\{1\}\°C\)/${color orange}&/; s/\( [9]\{1\}[0-9]\{1\}\°C\)/${color red}&/; s/\( [0-9]\{3,\}\°C\)/${color red}&/; s/\( [-]\{1\}[0-9]\{1,\}\°C\)/${color white}&/; s/\([0-9]\{1,\}\°C\)/&${color}/; s/[^-][1-7]\{0,1\}[0-9]\{0,1\}[.]\{0,1\}[0-9]\{1,\}%/${color yellow}&/; s/[1]\{0,1\}[08-9]\{1\}[0-9]\{1\}[.]\{0,1\}[0-9]\{0,1\}%/${color red}&/; s/-1%/${color white}&/; s/[0-9]\{1,\}%/&${color}/' | sed -E 's/42|69/😛/g' | { grep ^ || echo '${color red}- server down -${color}' ; } & }
HomeRouter :
${goto 25}${execpi 10 curl --connect-timeout 5 -k --resolve HomeRouter.infos:80:10.8.42.44 http://HomeRouter.infos/temperature.php | sed '/\°C\|\°F/!d' | sed 's/\( [0-6]\{1\}[0-9]\{1\}\°C\)/${color lightgreen}&/; s/\( [7-8]\{1\}[0-9]\{1\}\°C\)/${color orange}&/; s/\( [9]\{1\}[0-9]\{1\}\°C\)/${color red}&/; s/\( [0-9]\{3,\}\°C\)/${color red}&/; s/\( [-]\{1\}[0-9]\{1,\}\°C\)/${color white}&/; s/\([0-9]\{1,\}\°C\)/&${color}/; s/[^-][1-7]\{0,1\}[0-9]\{0,1\}[.]\{0,1\}[0-9]\{1,\}%/${color yellow}&/; s/[1]\{0,1\}[08-9]\{1\}[0-9]\{1\}[.]\{0,1\}[0-9]\{0,1\}%/${color red}&/; s/-1%/${color white}&/; s/[0-9]\{1,\}%/&${color}/' | sed -E 's/42|69/😛/g' | { grep ^ || echo '${color red}- server down -${color}' ; } & }
```