Ksar – Comment générer des graphes SAR

On vous demande de fournir pour la réunion qui a lieu dans 1 heure des graphiques de l’activité CPU et d’occupation de la mémoire des 7 derniers jours pour  4 serveurs Linux de production.
Bien entendu, aucun outil (payant) du marché  fournissant simplement ces graphiques n’est disponible sur vos systèmes et vous n’êtes pas un as d’Excel, la situation semble donc désespérée.
Heureusement pour vous il existe un outil pour ça : kSar.

kSar est un programme écrit en Java -gratuit -dont la fonction est de générer des graphes à partir des données SAR (System Activity Report)  brutes enregistrées dans les fichiers /var/log/sa<jj>.
Il peut analyser les données produites par le programme SAR sur  des systèmes Linux, Solaris et Mac (!). Il ne fonctionne pas sur AIX pour lequel il existe d’autres outils gratuits tels que Nmon Analyzer.
Il peut également comme être utilisé depuis un système Windows pour récupérer en SSH les données SAR du serveur à analyser.
Cet article ne vas pas vous détailler l’utilisation et l’emploi de toutes les options de Sar et de kSar, elles ont nombreuses  mais vous montrer comment prendre en main rapidement l’outil pour générer très facilement  des graphes d’ historique pour les compteurs collectés par SAR.
Petit rappel succint sur SAR

    • Sur Linux il est installé par le package sysstat
    • L’activité d’une journée est écrite dans un fichier /var/log/sa<jj>
    • La rétention des logs  est par défaut de 7 jours , maximum 31 jours  ( paramètre HISTORY de /etc/sysconfig/sysstat)
    • sar -A affiche toutes les données collectées pour le jour courant, il est possible de filtrer les compteurs affichés et la période avec les autres options disponibles (cf: man sar)
    • L’enregistrement dans les logs est déclenchée toutes les 10 mn par le cron de systat qui est configuré sous Linux  dans le fichier /etc/cron.d/sysstat dont le contenu standard est le suivant :
# cat /etc/cron.d/sysstat
# run system activity accounting tool every 10 minutes
*/10 * * * * root /usr/lib64/sa/sa1 1 1
# generate a daily summary of process accounting at 23:53
53 23 * * * root /usr/lib64/sa/sa2 -A

Dans le répertoire /var/log/sa, les fichiers crées par les commandes ci-dessus sont:

  • sa<jj>  : fichier raw non lisible avec un éditeur
  • sar<jj> : fichier texte contenant les enregistrements horodatés et  utilisable par ksar

Installation et lancement de kSar
Aucune installation n’est nécessaire, il suffit de décompresser le fichier zip téléchargé sur le site officiel.
kSar est à exécuter avec le compte root.
Point important : Pour éviter quelques dysfonctionnements, il est impératif sous Unix de positionner les variables d’environnement suivantes avant de lancer ksar.

export LC_TIME=POSIX
export LC_ALL=C
export S_TIME_FORMAT=ISO

De plus, à moins que  java ne soit déclaré dans la variable PATH de root, la variable JAVA_HOME doit être renseignée avec le chemin correspondant à votre installation.
Puis pour lancer kSar,  2 possibilités:

  1. Lancer kSar directement sur le serveur concerné (graphique ou ligne de commande)
  2. Lancer kSar sur son poste de travail  : connexion ssh ou chargement d’un fichier texte sar

La première possibilité suppose que vous puissiez démarrer un serveur X sur le serveur ou votre poste de travail (type Xming par exemple) . Il faut ensuite exporter le graphe dans un des formats proposés (PDF, JPG, PNG, CSV,TXT)
La seconde possibilité vous permet de récupérer directement depuis votre poste de travail la sortie de la commande sar que vous indiquez (par défaut sar -A) lancée en ssh (connexion root) vers le serveur Unix à étudier. Il est également possible d’alimenter kSar  par un fichier au format texte résultat d »une commande sar, par exemple pour les statistiques d’utilisation de la mémoire pour le jour courant.

sar -r > sar_mem.txt

Pour extraire les données du jour 28 du mois (la commande sar -f prend en entrée un fichier brut sa<jj>et non le fichier texte sar<jj>) il faut lancer :

sar -r -f /var/log/sa28 > sar_mem_28.txt

En lançant kSar sur votre poste de travail vous ne pourrez récupérer en ssh que les données de la journée courante. En lancement local sur le serveur il est par contre possible de donner le nom du fichier sa<jj> à lire dans la commande sar comme on va le voir un peu plus loin.
Lancement de kSar :
– Sous Unix, si le runtime Java est correctement installé, lancer simplement le script run.sh en tant que root depuis le répertoire de kSar (un serveur X doit être démarré).

– Sous Windows, dans un shell CMD  lancer depuis le répertoire de kSar :

java -jar kSar.jar

La fenêtre suivante et le menu Data ci-dessous sont les seuls qui nous seront utiles ici.
blog-ksar0
Récupération des données de la journée du 28, choisir dans le menu « Run local command »
blog-ksar-4
On précise avec l’option -f <nom du fichier sa<jj> que l’on veut charger les données du jour 28 au lieu du jour courant (par défaut).
Ce qui permet d’obtenir le graphe ci-dessous pour la charge serveur, journée du 28.
Dans la partie gauche, les graphes par type sont indiqués, dans le cas présent ils sont tous affichés car la commande sar -A à récupéré tous les compteurs.
blog-ksar-1Pour charger les données SAR correspondant à plusieurs jours, il faut obligatoirement utiliser la fonction « Load from Text file… » du menu data, en lui donnant un fichier texte généré par concaténation, par exemple, pour les données CPU, charge, IO, mémoire et swap du 22 au 28 du mois courant :

for i in "22 23 24 25 26 27 28"
do 
sar -q -u -r -b  -f /var/log/sa/sa$i >> /tmp/sar-monserveur-22-28.txt
done

Le chargement du fichier texte peut peut être réalisé dans kSar installé sur votre de travail après transfert depuis le serveur.
blog-ksar-5
On peut imaginer un processus générant automatiquement les fichiers concaténés et les transférant dans un répertoire distant accessible par votre poste de travail, il devient alors très simple de générer rapidement  des graphes pour les différents compteurs et de les exporter dans un des formats proposés, kSar demande alors quels compteurs de statistiques sont  à exporter.
blog-ksar-6Bien sûr tout cela peut être exécuté en ligne de commande, on se reportera à la documentation pour le détail des options disponibles. Par exemple pour générer un fichier PDF à partir des données du 22 au 28 pour tous les compteurs, il suffit de lancer :

java -jar kSar.jar  -input /tmp/sar-monserveur-22-28.txt -outputPDF sar-monserveur-22-28-09-2013.pdf
  • Sur certains serveurs, la commande ne rend pas la main , il suffit de taper CTRL-C, le fichier est généré tout de même…
  • La génération peut planter si le fichier d’entrée est trop gros (sar -A sur un mois), il faut réduire l’échantillon ou augmenter les paramètres mémoire de java.
  • Il reste quelques bugs, les tickets sont là : http://sourceforge.net/p/ksar/support-requests/

Avec tout cela, il ne reste qu’à écrire un script automatisant la génération de fichiers pdf sur chaque serveur et vous pourrez sereinement préparer vos réunions !
Quelques références pour finir :