Visualiser une révision

[Debian/Ubuntu] Health Check de services grâce aux conkys

voxdemonix : révision n°11 (25 août 2019 16:25:39)

![screenshot demo conky](https://wiki.0rion.netlib.re/lib/exe/fetch.php?media=documentation_en:screenshot-2019_08_24-healthcheck_services_via_conky.png)

Liste
=====

Health check d'un service web ou de l'IOT (camera, etc)
-----------

```
camera : ${alignr}${execp curl --connect-timeout 5 --user-agent "Conky HealthCheck" -k -s http://192.168.42.42 >/dev/null 2>/dev/null && echo '${color green}ONLINE${color}' || echo '${color red}OFFLINE${color}' }
```

Remplacez http://192.168.42.42 par l'adresse de la WEBUI de votre caméra. Certaines caméra utilisent https à la place d'http (il n'y a pas vraiment de différence ici mais il faut l'indiquer dans l'URL)

Health check d'un service web à travers Tor
-----------

Pratique pour vérifier la présence en ligne depuis internet de votre serveur web sur votre réseau LAN ou depuis un autre pays. Vous devez avoir installé tor (_apt install tor_)

```
WebServer via tor : ${alignr}${execp torsocks curl --connect-timeout 5 --user-agent "Conky HealthCheck" -k -s http://7j3ncmar4jm2r3e7.onion >/dev/null 2>/dev/null && echo '${color green}ONLINE${color}' || echo '${color red}OFFLINE${color}' }
```

Health check d'un serveur VPN ou des machines connectées à votre sous réseau
-----------

```
VPN :${alignr}${execp ping -c 1 -W 5 10.8.42.42 >/dev/null 2>/dev/null && echo '${color green}ONLINE${color}' || echo '${color red}OFFLINE${color}'	}

```
Remplacez _10.8.42.42_ par l'adresse de votre VPN à l'intérieur du sous réseau VPN.


Health check d'un serveur SSH
-----------

```
SSH_Server1 :${alignr}${execp ssh fake_user@192.168.42.42 -o "BatchMode=yes" 2>&1 | grep -Eo "Permission denied" >/dev/null && echo '${color green}ONLINE${color}' || echo '${color red}OFFLINE${color}' }
```

Health check d'un serveur DNS
-----------

```
DNS_Server1 :${alignr}${execp host -W 5 -t A linuxfr.org 192.168.1.42 >/dev/null && echo '${color green}ONLINE${color}' || echo '${color red}OFFLINE${color}' }
```

Remplacez _192.168.42.42_ par l'adresse de votre serveur DNS.


Health check d'un serveur MariaDB/MySQL
-----------

### Installation des pré-requis

Sur votre ordinateur de bureau, vous devez avoir installé mysql-client.

```
apt install mysql-client
```

Sur votre serveur de base de données, vous devez créer un utilisateur avec le moins de permissions possible. Ici nous créons l'utilisateur "_healthcheck_"

```
mysql -u root -p -e "CREATE USER 'healthcheck'@'10.8.42.%';"
```

### Le code pour conky

```
MariaDB : ${alignr}${execp mysql -s --connect-timeout=5 -u healthcheck -h 10.8.42.42 -P 3306 -e "quit" >/dev/null 2>/dev/null && echo '${color green}ONLINE${color}' || echo '${color red}OFFLINE${color}' }
```

Remplacez _10.8.42.42_ par l'adresse de votre serveur MySQL/MariaDB. Si vous utilisez un autre serveur que celui par défaut (3306), remplacez la valeur indiquée dans la commande.




Health check d'un serveur NTP
-----------

```
NTP_Server1 :${alignr}${execp ntpdate -t 5 -q 192.168.42.42 >/dev/null 2>/dev/null && echo '${color green}ONLINE${color}' || echo '${color red}OFFLINE${color}'	}
```

Remplacez _192.168.42.42_ par l'adresse de votre serveur NTP.


Lister l'ensemble des machines connectées au sous-réseau
-----------

Vous devez avoir installé [nmap](https://fr.wikipedia.org/wiki/Nmap) sur votre machine (_apt install nmap_). sudo n'est pas requis pour les scans aux ping avec nmap. Les ping scan peuvent provoquer des alertes de sécurités sur les machines du réseaux ayant certains antivirus.

```
${color yellow}Network List${color}
${execp nmap -n -sn 192.168.42.1-254 | grep -Eo "(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)|(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]).){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]).){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))" | sed 's/^/${alignc}/' | grep ^ || echo '${alignc}${color rose}network down${color}' }
```

Remplacez _192.168.42.42_ par la première adresse de votre sous réseau. Fonctionne aussi sur les réseaux VPN et en IPv6.


Exemples
===========

L'exemple suivant est celui qui a permis de faire le screenshot en début d'article.

```
# INFOS : https://wiki.0rion.netlib.re/doku.php?id=documentation_en:debian_ubuntu_health_check_service_via_conky
# http://conky.sourceforge.net/config_settings.html
# Use Xft?
use_xft yes
xftfont Ubuntu Beta:size=8
xftalpha 0.8
text_buffer_size 2048

# Update interval in seconds
update_interval 60

# 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 210  # 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 200 40
maximum_width 200
maximum_height 500

# Draw shades?
draw_shades no

# 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 beige
default_shade_color black
default_outline_color white
own_window_colour black

# 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 -25
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
${font :style=Bold}${color yellow}  ${alignc}~ Check Services ~ $color${font}
#${color yellow}CAMERAS${color}
caméra 1 :${alignr}${execp curl --connect-timeout 5 --user-agent "Conky HealthCheck" -k -s captive.apple.com >/dev/null 2>/dev/null && echo '${color green}ONLINE${color}' || echo '${color red}OFFLINE${color}' }
caméra 2 : ${alignr}${execp curl --connect-timeout 5 --user-agent "Conky HealthCheck" -k -s captive.apple.com >/dev/null 2>/dev/null && echo '${color green}ONLINE${color}' || echo '${color red}OFFLINE${color}' }
caméra 3 : ${alignr}${execp curl --connect-timeout 5 --user-agent "Conky HealthCheck" -k -s captive.apple.com >/dev/null 2>/dev/null && echo '${color green}ONLINE${color}' || echo '${color red}OFFLINE${color}' }
caméra 4 : ${alignr}${execp curl --connect-timeout 5 --user-agent "Conky HealthCheck" -k -s captive.apple.com >/dev/null 2>/dev/null && echo '${color green}ONLINE${color}' || echo '${color red}OFFLINE${color}' }
caméra 5 : ${alignr}${execp curl --connect-timeout 5 --user-agent "Conky HealthCheck" -k -s captive.apple.com >/dev/null 2>/dev/null && echo '${color green}ONLINE${color}' || echo '${color red}OFFLINE${color}' }

${color yellow}INFRASTRUCTURE${color}
NTP_1 :${alignr}${execp ntpdate -t 5 -q 192.168.42.42 >/dev/null 2>/dev/null && echo '${color green}ONLINE${color}' || echo '${color red}OFFLINE${color}'	}
NTP_2 :${alignr}${execp ntpdate -t 5 -q 192.168.42.43 >/dev/null 2>/dev/null && echo '${color green}ONLINE${color}' || echo '${color red}OFFLINE${color}'	}
VPN_1 :${alignr}${execp ping -c 1 -W 5 10.8.42.1 >/dev/null 2>/dev/null && echo '${color green}ONLINE${color}' || echo '${color red}OFFLINE${color}' }
VPN_2 :${alignr}${execp ping -c 1 -W 5 10.8.43.1 >/dev/null 2>/dev/null && echo '${color green}ONLINE${color}' || echo '${color red}OFFLINE${color}' }
DNS_1 :${alignr}${execp host -W 5 -t A gstatic.com 8.8.8.8 >/dev/null && echo '${color green}ONLINE${color}' || echo '${color red}OFFLINE${color}' }
DNS_2 :${alignr}${execp host -W 5 -t A gstatic.com 80.67.169.40 >/dev/null && echo '${color green}ONLINE${color}' || echo '${color red}OFFLINE${color}' }
MariaDB : ${alignr}${execp mysql -s --connect-timeout=5 -u healthcheck -h 10.8.42.42 -P 3306 -e "quit" >/dev/null 2>/dev/null && echo '${color green}ONLINE${color}' || echo '${color red}OFFLINE${color}' }

${goto 20}${color cyan}Blog Stephane Bortzmeyer${color}
www.bortzmeyer.org :${alignr}${execp torsocks curl --connect-timeout 5 --user-agent "Conky HealthCheck" -s www.bortzmeyer.org >/dev/null 2>/dev/null && echo '${color green}ONLINE${color}' || echo '${color red}OFFLINE${color}' }
7j3ncmar4jm2r3e7.onion :${alignr}${execp torsocks curl --connect-timeout 5 --user-agent "Conky HealthCheck" -k -s http://7j3ncmar4jm2r3e7.onion >/dev/null 2>/dev/null && echo '${color green}ONLINE${color}' || echo '${color red}OFFLINE${color}' }


${goto 20}${color cyan}Facebook${color}
www.facebook.com :${alignr}${execp torsocks curl --connect-timeout 5 --user-agent "Conky HealthCheck" -s https://www.facebook.com >/dev/null 2>/dev/null && echo '${color green}ONLINE${color}' || echo '${color red}OFFLINE${color}' }
facebookcorewwwi.onion :${alignr}${execp torsocks curl --connect-timeout 5 --user-agent "Conky HealthCheck" -s https://www.facebookcorewwwi.onion/ >/dev/null 2>/dev/null && echo '${color green}ONLINE${color}' || echo '${color red}OFFLINE${color}' }


${color yellow}Network List${color}
${execp nmap -n -sn 192.168.42.1-254 | grep -Eo "(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)|(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]).){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]).){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))" | sed 's/^/${alignc}/' | grep ^ || echo '${alignc}${color rose}network down${color}' }
${execp nmap -n -sn 10.8.42.1-254 | grep -Eo "(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)|(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]).){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]).){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))" | sed 's/^/${alignc}/' | grep ^ || echo '${alignc}${color rose}network down${color}' }
```