Kategória: Linux a sieť

Zmenené: 7. jún 2015

Vlastný skript do Cacti

V Linuxe je k dispozícii obrovské množstvo informácií, ktoré zmenu môže byť zaujímavé sledovať v čase. Jednou z týchto informácií sú teploty (procesora, základnej dosky, …) a otáčky ventilátorov. Na zisťovanie týchto hodnôt je vhodný projekt lm-sensors, ktorý po nastavení ponúka informácie, avšak nie vo formáte, ktorý dokáže spracovať Cacti, a tak je potrebné výstup upraviť do vhodnej formy.

Ako som už spomenul, je veľká šanca, že nájdete všetko potrebné už hotové, alebo skoro hotové. Ja som tak našiel popis pridania hodnôt výstupu z lm-sensors v článku CactiLMSensors. Bolo potrebné len trochu prispôsobiť skript a trochu upraviť postup, pretože článok je trochu starý a v novších verziách Cacti sa niektoré veci zmenili…

Postup pridania je možno trochu pracný a na prvý pohľad neprehľadný, ale vôbec nie je zložitý. Všetko čo je potrebné možno zhrnúť do postupu:

  1. vytvorenie/príprava skriptu
  2. definícia vstupnej metódy
  3. definícia dátovej šablóny
  4. vytvorenie šablóny grafu
  5. pridanie grafu
vzťahy komponentov

Skript

Vytvorenie skriptu závisí od toho, čo chcete sledovať. S trochou snahy sa vám iste podarí nájsť hotový skript alebo si vytvoriť vlastný, ktorého výstupom bude zoznam polí a ich hodnôt. Meno poľa a jeho hodnota majú byť oddelené dvojbodkou a jednotlivé dvojice medzerami:

pole1:hodnota1 pole2:hodnota2 ...

V mojom prípade som použil skript, ktorý číta výstup senzorov LM (zo stránky zdroja):

perl get_lmsensors.pl
temp1:41.0 temp2:41.0 temp3:44.0 fan1:1721 fan2:1562

Skript je vhodné umiestniť do adresára inštalácie Cacti scripts/, dôležité je, aby ho mal právo čítať (prípadne spúšťať) používateľ, pod ktorým je spúšťaná úloha cron ` (:file:`pooler.php).

Vstupná metóda

Keď máte funkčný skript, ktorý poskytuje dáta v požadovanej forme, možno vytvoriť definíciu vstupnej metódy dát (Data Input Method), ktorá popisuje ako interpetovať výstup skriptu. Samotnú vstupnú metódu pridáte kliknutím na Console -> Data Input Methods -> Add.

V dialógu treba vyplniť niektoré popisné i výkonné hodnoty:

  1. Name – meno vstupnej metódy, pomocou neho bude možné odkazovať na metódu zo šablóny dát.

  2. Input Type – typ vstupu, z rozbaľovacieho zoznamu zvoliť Script/Command, pretože dáta sú získavané pomocou skriptu

  3. Input String – vlastne ide o príkaz, ktorým bude Cacti získavať hodnoty:

    perl <path_cacti>/scripts/get_lmsensors.pl
    

    Je dôležité nastaviť správnu cestu, ako zjednodušenie je použitá nahradzovaná hodnota <path_cacti>, ktorá je pri spúšťaní nahradená reálnou cestou k inštalácii Cacti. Ak ste skript umiestnili inam, je potrebné cestu patrične prispôsobiť.

  4. Input Field – vstupné polia, tento skript žiadne nepoužíva, preto tu nič nepridávam. Ak však váš skript vyžaduje nejaké parametre, je možné tu pridať jednotlivé polia a potom ich možno v Input String odkazovať na tieto vstupné polia pomocou <meno>.

  5. Output Fields – výstupné polia, tu je potrebné zadať všetky mená výstupných polí, ktoré má vstupná metóda spracovávať (nemusia to byť všetky výstupné polia skriptu). Každé výstupné pole musí mať rovnaké meno, ako má vo výstupe skriptu.

Nakoniec ostáva vstupnú metódu uložiť

Vstupná metóda dát

Výsledná vstupná metóda dát

Dátová šablóna

Po vytvorení vstupnej metódy možno vytvoriť šablónu dát pomocou Console .* Data Templates -> Add. Pri vytváraní dátovej šablóny je trochu viac polí, ktoré sú rozdelené do viacerých sekcií, tak pekne po poriadku:

Data Templates

  1. Name – znova popisné meno šablóny

Data Source

  1. Name – pomenovania, ktoré bude použité pri vytváraní (pomenovaní) dátového zdroja, možno tu použiť vzor |host_description|, ktorý bude neskôr nahradený menom stroja.
  2. Data Input Method – odkaz na vstupnú metódy, vyberte zo zoznamu pred chvíľou vytvorenú dátovú metódu s menom script - get LM Sensors.
  3. Associated RRAs – tu vyberáte, aké archívy databázy RoundRobin majú byť vytvorené, ja vyberám denný, týždenný, mesačný a ročný archív
  4. Step – udáva ako často je aktualizovaná databáza, 300 s je predvolená hodnota, tj. 5 min.
  5. Data Source Active – dátový zdroj možno deaktivovať, ale to asi teraz nie je to pravé.

Položky dátového zdroja

Tu je potrebné pridať jednu položku pre každú hodnotu, ktorá sa má ukladať:

  1. Internal Data Source Name – zase meno, tentokrát meno dát v databáze RoundRobin, určite by som sa vyvaroval medzier a slovenských znakov, hoci som to nikdy neskúšal. Toto meno nemusí byť rovnaké ako meno výstupného poľa skriptu.
  2. Minimum a Maximum – ako meno napovedá, jedná sa minimálnu/maximálnu hodnotu, ktorá ešte bude do databázy ukladaná, ak vstupná hodnota prekročí tieto hranice, tak bude uložená ako neznáma hodnota. Ak nechcete nastavovať hranice, zadajte U
  3. Data Source Type – vyberte podľa typu meraných dát, v prípade merania teploty a otáčok je vhodný voľba GAUGE, význam ostatných možností treba pozrieť v dokumentácii RRDTool.
  4. Heartbeat – udáva čas, po ktorom zapísať do databázy hodnotu ako chýbajúcu. Predvolená hodnota 600 je pre 10 min a netreba ju meniť, ak ste nemenili frekvenciu zberu dát.
  5. Output Field – výstupné poole skriptu, ak ste správne zvolili pole Data Input Method, tak rozbaľovací zoznam ponúka výstupné polia metódy, ktorú ste vytvorili v predošlom kroku

Keď vyplníte prvú položku, pohľadajte pomerne zle viditeľnú položku New v pravej časti hlavičky, a takto vyplňte postupne všetky polia.

Custom Data

Pretože vstupná metóda neobsahuje žiadne vstupné polia, nie je možnosť niečo tu zadať, inak by tu bol zoznam vstupných polí.

Takto vyzerá môj výsledok:

Dátová šablóna skriptu

Dátová šablóna skriptu

Šablóna grafu

Ako posledná úloha prípravy ostáva vytvorenie šablóny grafu. Myslím, že toto je popísané na mnohých miestach, tak naozaj len zbežne o tom, ako vytvoriť graf pre moje dva ventilátory. Začnite tým, že vytvoríte novú šablónu pomocou Console -> Graph Templates -> Add:

Graph Template Items

Tu definujete čo všetko sa má objaviť vo výslednom grafe, pridajte novú položku (Add vpravo hore) a vyplňte:

  1. Data Source – dátový zdroj, tj. „Sla script - LMsensors - (fan1)”
  2. Color – podľa vlastného vkusu
  3. Opacity – nepriehľadnosť - vhodné ak sa položky prekrývajú a chcete vidieť aj tie v pozadí, inak 100%
  4. Graph Item type – typ položky grafu, pretože chcem čiary, vyberám LINE2, prípadne AREA
  5. Consolidate Function – konsolidačná funkcia RRDTool, ja vyberám AVERAGE, čiže chcem v grafe zobrazovať priemernú hodnotu za daný časový úsek
  6. CDEF Function nechávam None, nepotrebujem s hodnotami databázy robiť nič
  7. Value – nechávam prázdne, pretože i tak je len pre typy HRULE a VRULE
  8. GPRINT Type – udáva formátovanie zobrazenia hodnoty, ale pre čiary nie je potrebné
  9. Text Format – Píšem „Fan 1”, to je reťazec, ktorý bude zobrazený v legende grafu
  10. Inserd Hard Return – ponechávam nezaškrtnuté, pretože chcem aby sa hodnoty vypisovali vedľa textu legendy, nie pod ním.

Takte je definovaná vykresľovaná čiara, ešte to chce vpisovať hodnoty do legendy, tak pridávam ďalšiu položku a pre túto volím typ položky LEGEND. tento typ nie je skutočným typom RRDTool, ale pridá mi predvolenú legendu. Nezabúdam ani zvoliť správny Data Source a volím typ GPRINT Normal. Ak neviete, čo to ten typ GPRINT je, nejaký zvoľte, potom si v grafe pozrite čo robí a prípadne zvoľte iný. Po kliknutí na uložiť sa mi vytvoria tri položky typu GPRINT.

Položky grafu pre druhý ventilátor pridávam rovnako, len volím druhý dátový zdroj.

Graph Item Inputs

Zvolením dátového zdroja je automaticky pridaný do Graph Item Inputs, a ak všetko urobíte dobre, nie je potrebné v tejto časti nič meniť. Ak nie, tak samozrejme môžete na jednotlivé položky kliknúť a upraviť, ku ktorým položkám grafu je daný zdroj priradený manuálne.

položky a vstupy grafu

Položky a vstupy grafu

Template

V tejto časti je len meno šablóny, naozaj voľte meno popisné, aby ste neskôr vedeli, čo ktorá šablóna robí, ale inak si ju môžete nazvať ako len chcete.

Graph Template

V tejto časti si nastavujete ako má vyzerať samotný výstupný graf. Vyberám len dôležité polia:

  1. Title – udáva šablónu pomenovania grafu, na obrázku môžete vidieť opäť použite |host_description|.
  2. Auto Scale – pretože nepotrebujem graf od 0, volím automatické prispôsobovanie nameraným hodnotám.
  3. Vertical Label je zvislý text, ktorý je zobrazený vedľa osi Y.

Z ďalších polí vyberám:

  • Slope Mode – zaobľuje hrany v grafe
  • Rigid Boundaries – zvolil som automatické prispôsobovanie mierky grafu, ktorá ignoruje zadané dolné a horné hranice, ale v ďalších troch režimoch ich rešpektuje, no len ak hodnota nie je vyššia. Táto voľba vynúti rešpektovanie zadaných hraníc bez ohľadu na zobrazované hodnoty
  • Auto Padding – ďalšie vylepšenie Cacti, ktoré sa snaží pekne zarovnávať položky legendy (pomerne úspešne)
vlastnosti grafu

Vlastnosti grafu

Rovnaký postup zopakujem ešte raz, ale tentokrát pre graf teplôt.

Samotný graf

A teraz nastala tá chvíľa! Už je pripravené všetko potrebné, dokonca počas vytvárania šablóny grafu sa už aj zbierali dáta, tak po pridaní grafu by hneď malo byť vidno výsledok. Prejdite do Console -> New Graphs a tam si vyberte príslušný stroj. Potom v sekcii Graph Templates v rozbaľovacom zozname pri Create vyberte nedávno vytvorenú šablónu („Sla Linux - LMSensors Fans”) a nakoniec kliknite na Create.

Rovnako pridajte graf teplôt, no tu som sa stretol s nedokonalosťou môjho postupu, pretože pridaním ďalšieho grafu bol vytvorený aj ďalší dátový zdroj (a aby to bolo ešte zložitejšie s rovnakým menom ako predošlý), preto som manuálne odstránil ten s vyšším ID (pozor, zvoliť – ponechať všetko ako je) a potom som vo vlastnostiach grafu ručne vybral existujúci dátový zdroj s jednotlivými teplotami.

Aby ste videli prvé výsledky, treba počkať dve päťminútovky (pri prvej bude vytvorený súbor databázy a pri druhej budú zapísané prvé dáta):

Ako sami vidíte, nevyzerá to zle, len musím upraviť, aby mi graf otáčok neukazoval kilootáčky, a tak upravím šablónu ventilátorov, kde stačí nastaviť pole Unit Exponent Value na 0.