Visualiser une révision

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

voxdemonix : révision n°5 (07 août 2019 19:00:33)

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](https://fr.wikipedia.org/wiki/Apache_HTTP_Server) ou [Nginx](https://fr.wikipedia.org/wiki/NGINX) selon vos préférences. Par contre le [moteur PHP](https://fr.wikipedia.org/wiki/PHP) doit être fonctionnel et pouvoir utiliser les commandes exec().

Le script utilisé ne nécessite aucune dépendance tierce mais utilise [Bash](https://fr.wikipedia.org/wiki/Bourne-Again_shell).

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
<?php
/*	https://linuxfr.org/wiki/afficher-dans-un-conky-sur-votre-bureau-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)

```bash
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

```bash
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
------------------------

```bash
# INFOS : [FR] 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
# 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}' ; } & }
```


Farm Link
=========

- [[FR] [Tuto/HowTo] [Debian/Ubuntu] Afficher dans un conky sur votre bureau la température CPU de vos serveurs](https://wiki.0rion.netlib.re/doku.php?id=tutoriel_fr:afficher_dans_un_conky_sur_votre_bureau_la_temperature_cpu_de_vos_serveurs) (article d'origine)