Przeglądanie logów systemowych, z serwerów jest zajęciem monotonnym i żmudnym, zwłaszcza kiedy musimy obejrzeć miliony białych linii na czarnym ekranie. W takich sytuacjach trudno jest wyłapać interesujące nas wartości, a w szczególności błędy. Dobrym pomysłem byłoby napisanie prostego skryptu, który w jakiś sposób wyszczególni interesujące nas wartości.

Kolory w Bashu

Korzystanie z kolorów jest dość proste. Pierwszym krokiem jest stworzenie tekstu bez użycia dodatkowych kolorów. Kolejnym krokiem jest dodanie specjalnej sekwencji sterującej terminalem (nie powłoką bash), która doda nieco barw do naszego tekstu. Standardowy terminal systemowy oraz te graficzne umożliwiają zmianę koloru tła, pierwszego planu (tekst), a także wagi czcionki (czy tekst jest pogrubiony, czy nie). Do wyboru mamy osiem podstawowych kolorów.

Użycie danego koloru wiąże się z zastosowaniem specjalnej sekwencji sterującej umieszczając odpowiednie liczby pomiędzy \e[ (znak ucieczki) i m. Jeśli chcemy użyć większą ilość kodów, używamy znaku średnika pomiędzy każdą z nich. Najprostszym “kolorem” jest powrót do wartości domyślnych: "\e[0m".

Zastosowanie powyższego kodu spowoduje powrót do wartości domyślnych ustawień terminala, dotyczących koloru pierwszego planu, tła oraz wagi tekstu. Najczęściej wykorzystywać będziemy go do zakańczania kolorowania tekstu. Aby odkryć kolory jaki umożliwia nam terminal wystarczy uruchomić prosty skrypt:

#!/bin/bash
esc="\033["
echo -n " _ _ _ _ _40 _ _ _ 41_ _ _ _42 _ _ _ 43" 
echo "_ _ _ 44_ _ _ _45 _ _ _ 46_ _ _ _47 _"
for fore in 30 31 32 33 34 35 36 37; do
	line1="$fore  "
	line2="    "
	for back in 40 41 42 43 44 45 46 47; do
		line1="${line1}${esc}${back};${fore}m Normal  ${esc}0m"
		line2="${line2}${esc}${back};${fore};1m Bold    ${esc}0m"
	done
	echo -e "$line1\n$line2"
done

W terminalu powinniśmy zobaczyć następującą paletę kolorów:

Konsola z tablicą kolorów

Teraz, aby otrzymać kod koloru najpierw należy wybrać odpowiedni kolor z tablicy. Następnie należy znaleźć liczby odpowiadające pierwszemu planowi (30-37) i tłu (40-47). Przykładowo, jeśli chcemy użyć zielonego koloru na czarnym tle, musimy użyć liczb 32 i 40 (echo -e "\033[32;40m"). Wiedząc w jaki sposób możemy kolorować tekst w konsoli możemy napisać proste skrypty kolorujące logi systemowe.

Loco oraz CCZE

Oczywiście nic nie stoi na przeszkodzie, aby wykorzystać już istniejące aplikacje do kolorowania logów. Pierwszą z nich jest program napisany w języku C o nazwie CCZE. Program jest modularny dzięki czemu za pomocą odpowiednich pluginów może kolorować logi z takich aplikacji lub usług jak:

  • apm
  • exim
  • fetchmail
  • httpd
  • postfix
  • procmail
  • squid
  • syslog
  • ulogd
  • vsftpd
  • xferlog
  • i wiele, wiele więcej

Uruchomienie kolorowania logów za pomocą tej aplikacji jest bardzo proste. Wystarczy na końcu polecenia, którym przeglądamy logi opisać | ccze.

tail -100f /var/log/auth.log | ccze

Taki efekt powinniśmy uzyskać:

CCZE kolorujące auth.log

Możemy również skorzystać ze skryptu napisanego w języku Perl, którego autorem jest Jules Stuifbergen. Chodzi tutaj o skrypt loco. Wykorzystuje on moduł Perla zwany Term::ANSIColor do kolorowania tekstu. Również tutaj uruchomienie skryptu jest bardzo proste:

tail -100f /var/log/auth.log | perl loco

Taki efekt powinniśmy uzyskać:

loco kolorujące auth.log

Tego typu rozwiązań w Internecie znajdziemy jeszcze dość dużo. Tak czy siak, najlepiej jest napisać własne kolorujące skrypty, które pomogą nam w przeglądaniu logów.

Podobne artykuły

  • rgabrysiak

    "bez użycie dodatkowych kolorów"

    Nie powinno być bez użycia …

  • Naprawione ;-) W sumie mógłbym dopisać jakiś skrypt co koloruje logi w Bashu :P

  • Michał Olber

    świetny tekst, Kamil. Jak tylko znajdę chwilkę czasu, to się tym pobawię :)

  • Ja sam pisałem o modyfikacji basha. PS1, kolorki, przywitanie.

  • Zmienianie PS1 też jest ciekawe ;) Mogę wrzucić Twójego arta tutaj jak chcesz ;-)