Le module Livestatus permet d'ouvrir une API (via TCP) sur le Broker. Les outils externes comme Thruk ou Nagvis (UIs tierces compatibles Nagios) peuvent alors envoyer des requêtes à cette API afin de récupérer les états des éléments supervisés.
Il est possible de modifier des paramètres (comme l'adresse d'écoute ou le port) via le fichier de configuration ci-dessous.
Voici le fichier CFG de configuration présent dans : /etc/shinken/modules/livestatus.cfg
#===============================================================================
# Livestatus
#===============================================================================
# Daemons that can load this module:
# - broker
# This module open a TCP API that can be query by external tools like Nagios
# UIs (Thruk or NagVis)
#===============================================================================
define module {
# Shinken Enterprise. Lines added by import core. Do not remove it, it's used by Shinken Enterprise to update your objects if you re-import them.
_SE_UUID core-module-6e1beab85adc11e5a4ea080027f08538
_SE_UUID_HASH bc47ca0c63c8b7cf1a3f3ca1d3c3b79f
# End of Shinken Enterprise part
#======== Module identity =========
# Module name. Must be unique
module_name Livestatus
# Module type (to load module code). Do not edit.
module_type livestatus
#======== Listening address =========
# host: IP address to listen to.
# note: * = all interfaces.
host *
# port to listen
port 50000
# socket: file path of a unix socket. If set, will listen this socket for query
#socket /var/lib/shinken/live
#======== Security =========
# The livestatus protocol allows to set AuthUser: in the query to filter results
# for a specific user (if the user is a notification contact of hosts/checks)
# The remote_user_case_sensitive parameter allows to set if the user name should
# be checked in a case sensitive mode or in case insensitive mode.
# 0 : Do not look at case when filtering by user name
# 1 : [default] Look at the case when filtering by user name
remote_user_case_sensitive 1
#====== Debug logging =======
# Enable only for debugging this module
#debug /var/log/shinken/livestatus.debug
# If set to 1, log queryes. Note: it's very verbose
#debug_queries 0
}
|
Pour cela, utiliser par exemple la commande nc
Pour installer le paquet nc :
yum install nc |
Vous pouvez alors lancer la commande à destination du port 50000 du serveur hébergeant Livestatus (broker) :
echo 'GET hosts' | nc 127.0.0.1 50000 |
Cette commande permettra de récupérer la liste des hôtes avec leurs infos.
Les commandes :
##################################################################
LQL - pronounced "Liquel" as in "liquid" - is a simple language for telling Livestatus what data you want and how it should be formatted. It does much the same as SQL but does it in another, simpler way. Its syntax reflects (but is not compatible to) HTTP.
Each query consists of:
All keywords including GET are case sensitive. Lines are terminated by single linefeeds (no <CR>). The current version of Livestatus implements the following tables:
Like in an SQL database all tables consist of a number of columns. If you query the table without any parameters, you retrieve all available columns in alphabetical order. The first line of the answer contains the names of the columns. Please note that the available columns will change from version to version. Thus you should not depend on a certain order of the columns!
##################################################################
Des infos sur API Livestatus ici : http://www.naemon.org/documentation/usersguide/livestatus.html
Vous pouvez aussi créer un fichier query contant la requête LQL GET hosts, puis en lancant :
nc 127.0.0.1 50000 < hosts.lql |
Vous pouvez également envoyer votre sortie dans un fichier CSV afin de l'ouvrir dans un tableur comme MS Excel par exemple :
nc 127.0.0.1 50000 < hosts.lql >> hosts.csv |
ou
printf 'GET hosts' | nc 127.0.0.1 50000 >> hosts.csv |
Vous obtiendrez alors :

Exemples de requêtes LQL
Récupérer tous les checks en état critique :
GET services Columns: host_name description state Filter: state = 2 Filter: in_notification_period = 1 |
Voici un exemple de retour de la commande
test [copy];check-dummy-critical;2 test [copy];check-loop-custom;2 test [copy];check-loop-simple;2 test;check-dummy-critical;2 test;check-random-py;2 |
Récupérer les checks dont le contact est toto :
GET services Columns: host_name description contacts AuthUser: toto |