Sistemele Computerizate
CAP 1. INTRODUCERE
Contextul lucrării
Sistemele computerizate sunt alcătuite dintr-un suport de bază (placă de bază), unitate centrală de calcul(procesor), memorie și capacitate de stocare a datelor. Sistemele de operare Unix sunt folosite preponderent în mediul enterprise pentru rularea aplicațiilor sau a bazelor de date. Procesele astfel creeate împreună cu cele specifice sistemului de operare rulează pe server și scriu în jurnalele sistemului (în loguri).
Datorită complexității sistemului de calcul estistă posibilitatea ca lucrurile să nu meargă mereu precum au fost planificate, intervenind astfel diferite avarii care au ca rezultat timpi morți. Timpii morții reprezintă acele perioade de timp în care instanța care rulează pe sistem nu este productivă, aceasta nefiind accesibilă sau utilizabilă, provocând astfel pierderi financiare. Întrucât aceste situații nu pot fi niciodată complet eliminate se recurge la eficientizarea sistemului de monitorizare, astfel încât administratorii de sisteme să fie notificați de problemă întru-un timp cât mai scurt cu putință.
Toate tool-urile de monitorizare, inclusiv „Activity Monitor” , au la bază analiza logurilor de sistem deoarece prin prelucrarea acestora se poate detecta o problemă existentă sau chiar iminentă, încă dintr-un stadiu prematur al problemei. Este absolut necesar ca analiza logurilor să fie făcută corect deși acest lucru se întâmplă relativ rar.
Una dintre condițiile esențiale ale unui sistem de monitorizare este aceea de a avea o interfață centralizată, unde toate fluxurile de alerte și informații se vor afișa într-un mod structurat. O altă condiție importantă este standardizarea deoarece monitorizarea nu poate să fie o soluție care să se poată adapta „by default” pe toate sistemele, astfel încât trebuie făcute unele ajustări. Cu cât sistemul de monitorizare este mai standardizat cu atât integrarea lui pe scară largă este mai ușoară.
În multe organizații se poate constata că monitorizarea este greșit pusă la punct:
de multe ori se apelează la soluții consacrate pe piața de „Managed Services”, soluții precum Tivoli, OpenView astfel organizația aloca foarte multe resurse financiare dar și umane pentru a înțelege, implementa și personaliza un astfel de tool, dar în final se alege cu un tool care are aceeași funcționalitate ca un tool free. De asemenea datorită complexității, în cazult unei defecțiuni identificarea și remedierea problemei durează mult mai mult decât în cazul unui tool standardizat care utilizează un limbaj ușor de înțeles;
se alege o soluție de monitorizare care conține mai multe tooluri, fiecare îndeplinind un anumit rol dar care, la o privire de ansamblu nu funcționează corect sau la capacitate maximă interconectate. S-a constatat folosirea unui tool pentru monitorizarea bazei de date, altul pentru sistemul de operare, iar un al treilea sistem veghează asupra rețelei. În acest caz totul devine un haos, sistemele nu comunică corect între ele, de multe ori apar alerte false. Situația poate să ajungă și la extrem în momentul în care din cauza alertelor greșite sistemele de redundanță să funcționeze incorect, făcând declanșări greșite și astfel impactând serios performanța sistemului de calcul;
în alte situații s-a constatat că anumite corporații folosesc tool-uri dezvoltate „in-house” dar care au devenit obsolete deoarece dezvoltarea lor a fost sistată în trecut. Aceste situații duc la o viață grea pentru administratorul de sistem deoarece acesta trebuie să se adapteze la un tool obsolete, scris într-un limbaj de programare vechi și probabil greoi, pentru care nu mai există suport. De cele mai multe ori o astfel de circumstanță alunecă foarte ușor în cazul doi descris anterior deoarece, din considerente de costuri, pentru implementarea unor funcții noi se alege la folosirea în paralel a încă unui tool, îngreunând astfel tot procesul de monitorizare și încălcând prima condiție esențială „aceea de a avea o interfață centralizată, unde toate fluxurile de alerte și informații se vor afișa într-un mod structurat”.
Înrtucât complexitatea infrastructurii IT variază foarte mult de la un proiect la altul este necesară alegerea unei soluții de monitorizare care să se plieze cât mai bine atât pentru administratorul de sistem cât și pentru fiecare nivel de componență.
Cel mai frecvent se întâlnește cazul în care sistemul de monitorizare nu îndeplinește suficiente funcții pentru mediul IT în care acesta este implementat, astfel complexitatea acestuia este depășită de cea a mediului. Aici intervine avantajul tool-urilor de monitorizare opensource care au la bază Perl, limbaj care este mai la îndemâna administratorilor întrucât acesta este utilizat frecvent. Astfel, folosind un limbaj familiar este mult mai ușor să se implementeze funcționalitățile lipsă, crescând astfel complexitatea tool-ului și crescându-i utilitatea. La capătul opus al comparației se află tool-urile „grele”. Tivoli, spre exemplu, necesită scrierea unor reguli în Prolog pentru a adăuga funcții noi, insă acest lucru se dovedește a fi dificil deoarece Prolog nu este un limbaj pe care administratorii le folosesc în task-urile de zi cu zi.
Un alt aspect care este important în arhitectura sitemului de monitorizare este acela al comunicării între serverul central și clienții acestuia. Pentru a reduce costurile și a avea o performanță crescută se recomandă folosirea unor protocoale de comunicare cunoscute (HTTP, SMTP, SYSLOG, etc). Spre exemplu SMTP-ul este o metodă de comunicare atractivă pentru majoritatea infrastructurilor deoarece are funcții de buffering și de fail-over. Interpretarea e-mailurilor se poate face relativ ușor folosind clienți de e-mail care au capacitatea de a interpreta scripturi (ex: Lotus Notes, Outlook). De asemenea se poate alege ca mesajele să fie transmise în formate speciale prin fișiere folosind SSH sau SCP.
Sincronizarea între servere este de asemenea necesară întrucât este foarte important ca acestea să fie mereu corelate. Spre exemplu dacă serverul central raportează un fail care s-a petrecut cu o oră în urmă la nivel de client, downtime-ul pornește de la o oră și se stabilește adunând această oră la timpul de rezolvare al incidentului. Se recomandă sicnronizarea tuturor serverelor prin NTP. De asemenea, o soluție este folosirea sistemului de task-uri automate al sistemului de operare (spre exemplu CRON) pentru a rula anumite verificări la un interval de timp prestabilit.
La ora actuală, pe piată există o varietate de sisteme de monitorizare interesante dar care în anumite cazuri încearcă să „reinventeze roata”. Acestea vin cu îmbunătățri la securitate, stocarea evenimentelor în baze de date, diferite moduri de raportare (vizualizare graficuri, statistici, etc) insă în cele mai multe cazuri se uită cel mai important factor: SCOPUL. Tool-urile sunt folosite pentru utilitate, pentru a face viața administratorului de sistem mai ușorară și pentru a obține cât mai mult din infrastructura IT pe care o avem la dispoziție. Adesea se face un compromis când vine vorba de flexibilitate și exactitate iar afișarea unor informații în format Exel devine mai importantă.
Complexitatea din punct de vedere al cod-ului și exemple aferente.
În practică se pot identifica mai multe tipuri de sisteme de monitorizare, fiecare adresându-se diferitelor straturi dintr-o infrastructura IT:
Monitorizarea modificărilor de configurație ale sistemului. Aceasta categorie este formată din modificarea schimbărilor la nivel de hawrdware sau software, ce pot fi cauzate de instalarea aplicațiilor noi, modificarea parametrilor de sistem (kernel). Dependințele pe care le implică aceste schimbări trebuie să fie atent studiate iar schimbarea trebuie documentată și testata în prealabil. De asemenea ținerea unor înregistrări ale schimbărilor este importantă, cauza problemei putând fi deseori o modificare greșită;
Monitorizarea utilizării resurselor sistemului. Fiecare proces are nevoie de o cantitate minimă predefinită de resurse pentru a putea rula în parametrii optimi, spre exemplu: cantitatea de putere de procesare disponibilă, lățimea de bandă de I/O, un anumit număre de fișiere sau socket-uri deschise simultan, cantitatea de SWAP necesară pentru procesul de paginație, etc. Aceste resurse sunt importante pentru funcționarea aplicației și de aceea este necesară monitorizarea lor. Atât aplicațiile cât și sistemul de operare au definite limite de funcționare, în unele cazuri fixe, în altele dinamic în sistem „best effort”;
Monitorizarea status-ului unui sistem. În momentul în care sistemul a fost configurat și limitele au fost setate , se urmărește starea generală a sistemului. Se folosește termenul „UP” pentru un sistem care funcționează și răspunde la interogări (ex: ping). Lipsa „pingului” poate să denote mai multe probleme dar niciodată nu este un semn bun, poate fi vorba de probleme la nivel de sistem de hardware, software, rețea etc;
Monitorizarea performanței unui sistem. Se poate folosi de monitorizarea resurselor pentru a indica problema. În general se identifică zonele cu problemă, verigile slabe, deoarece performanța generală a unui sistem este dată de performanța celei mai slabe componente a acestuia. De asemenea se mai pot monitoriza orele de „vârf” în care utilizarea crește cu mult peste medie, monitorizarea parametrilor de kernel care impactează de multe ori performanța sistemului;
Monitorizarea securității sistemului. Utilizarea neautorizată a resurselor sistemului determină o scădere în performanță. Fără o securizare bună investiția în hardware și software eficient nu are niciun efect deoarece toate acestea sunt exploatate în scopuri greșite;
Monitorizarea jurnalelor de sistem. Toate tipurile de monitorizare tratate anterior sunt în strânsă legătură cu acest tip de monitorizare deoarece jurnalele oferă informații diversificate despre întregul sistem. De obicei monitorizarea jurnalelor este făcută împreună cu integrarea unui flux de mesaje într-un server specializat în procesarea acestora. De multe ori developerii încearcă să reinventeze acest sistem de procesare al fluxurilor de mesaje în loc să folosească unul care este deja opensource (ex: syslog / syslog-ng).
În cele mai multe cazuri optarea pentru softuri scumpe și complexe atrade de la sine necesitatea unui personal dedicat care să îl administrese, asftel costurile unui astfel de proiect cresc foarte rapid, ajungând în cele mai multe cazuri să nu își amortizeze investiția. Acest lucru este determinat și de decizia jucătorilor mari de pe piața acestor produse de a dezvolta și comercializa produse a căror complexitate este crescută artificial pentru a pune în dificultate administratorii de sisteme, crescând astfel dependența clienților și de serviciile post-vânzare oferite de dezvoltatori.
Soluțiile care pot fi scalabile, implementate într-o infrastructură IT care nu are o dimensiune mare ajunge în cele mai multe cazuri să nu se justifice. Investiția mare pentru un produs care este complex și poate să aibe foarte multe funcții nu se justifică în cazul în care nu există resurse umane care să știe să exploateze la maxim sistemul. Astfel în cazul prezentat anterior, investiția devine inutilă deoarece, din pricina costurilor mari de training, acestea nu se fac, iar produsului îi vor fi exploatate doar funcțiile de bază.
Companiile „grele” din industrie aleg să nu investească în platforme care au la bază scripturi ușoare deoarece această decizie le poate afecta negativ profiturile însă realitatea ne arată că aceeste platforme câștigă din ce în ce mai mult teren și că ele pot fi competitive în raport cu ofertele care se bazează pe Java.
Având în vedere toate cele enumerate anterior, a căpătat contur ideea dezvoltării unui tool de monitorizare care este simplu de folosit, extins și este scalabil la orice nivel, putând fi implementat chiar și într-o infrastructură care are mai puțin de zece servere. De asemenea , un alt atuu este posibilitatea implementării acesteia pe mai multe tipuri de sisteme de operare, atât Linux cât și Unix.
În linii mari, tool-ul vine cu următoarele promisiuni:
nu necesită cunoștințe de programare suplimentare celor cunoscute de un administrator de siste deoarece are la bază scripting-ul;
pentru a putea fi posibilă monitorizarea, singura condiție este aceea de avea rute de la serverul central la clienți. Nu este necesar ca toate sistemele să fie localizate fizic în același loc;
sistemul este ușor de înțeles întrucât are la bază o arhitectură de tipul server-client;
este open-source și are la bază scripting-ul, astfel este foarte ușor să se dezvolte suplimentar și să se aducă funcționalități noi, fără a fi necesară intervenția dezvoltatorului;
toată informația este redată într-o singură interfată WEB, de unde poată fi urmărită toată infrastructura IT;
utilizabil 24/7 chiar și în momentul în care se adaugă funcții noi, nefiind necesară restartarea sistemului de monitorizare.
Tema Proiectului „Activity Monitor”
Tema aleaseă este realizarea unui produs software folosit pentru monitorizarea atât a sistemelor Linux cât și Unix. Scopul ei este de a se asigura că sistemele monitorizate funcționează după cum au fost proiectate și să avertizeze administratorul infrastructurii când acest lucru nu se mai realizeaza.
La momentul actual această aplicație are funcții implementate cu ajutorul cărora se pot verifica:
starea generală a sistemului: „UP” sau „DOWN”;
dacă serviciile monitorizate rulează;
dacă interfețele monitorizate sunt „UP” sau nu;
utilizarea memoriei SWAP;
utilizarea spațului de stocare al filesystemelor;
dacă filesystem-ul monitorizat este montat sau nu pe sistem;
dacă clienții au ora setată cu servere NTP.
Sistemul este bazat pe arhitectura server client, astfel monitorizarea se face în paralel pentru mai multe sisteme. Fiecare sistem rulează propriile scripturi care înregistrează starea care apoi sunt colectate la serverul „mamă”.
Arhitectura server-client.
Datele se pot colecta la intervale de timp prestabilite, valoarea implicită fiind de 1 minut. Datele sunt obținute prin rularea unor comenzi standard ale sistemului de operare (df, ifconfig, etc) integrate în scripturi bash.
Fluxul de informații generat de sistemul de monitorizare se afișează într-o pagină WEB. Aceasta conține diferite moduri de vizualizare a informațiilor, de la vizualizarea generală asupra întregii infrastructuri, la o vizualizare detaliată pentru fiecare sistem monitorizat.
Aplicația este împarțită în două parți, conform arhitecturii server-client:
centrul de monitorizare: conține interfața WEB și scripturi prin care se aduc fluxuri de date de la cleinți;
clienții monitorizați: pe fiecare client se află o colecție de scripturi care aducă datele de pe sistem și le pregătește de transferul către sistemul central.
Thenologiile pe baza cărora a fost dezvoltată lucrarea sunt:
BASH – programare în shell;
PHP – interpretarea datelor în vederea afișării lor în interfață;
HTML/CSS – partea grafică a interfeței web.
Cerințele de funcționare ale tool-ului:
aplicația poate fi instalată și rulată pe sisteme de operare Unix sau Linux;
pentru interacțiunea cu PHP-ul, pe serverul central de monitorizare trebuie configurat un server Apache;
existența unei rute de la serverul central la clienți pentru comunicare.
Cap. 2 Tehnologii Utilizate
Generalități
Modelul client-server este o structură pentru aplicații distribuite care are ca scop partiționarea taskurilor între cei care oferă resursele (serverele) și cei care le folosesc (clienții). În general comunicarea se face prin intermediul unei rețele, dar există și posibilitatea ca aceasta să se desfășoare în cadrul aceluiaș sistem. Serverul rulează anumite prcese și instanțe care împart resursele și datele cu clienții. Clienții nu partajează resursă, aceștia iau resursele de la server și le prelucrează. În cadrul acestui model , clienții sunt cei care inițiază comunicarea, serverul așteaptând doar să fie contactat.
Acest model are mai multe aplicabilități, spre exemplu acesta este folosit de sistemele de E-mail, Printare în rețea, dar și la World Wide Web. [2]
Web-ul (sau World Wide Web) este totalitatea siturilor / documentelor și informaților de tip hipertext legate între ele, care pot fi accesate prin rețeaua mondială de Internet. Documentele, care rezidează în diferite locații pe diverse calculatoare server, pot fi regăsite cu ajutorul unui identificator univoc numit URL. Hipertextul inclusiv imagini etc. este afișat cu un ajutorul unui program de navigare în web numit browser, care descarcă paginile web de pe un server web și le afișează pe un terminal „client” la utilizator. [3][4]
De cele mai multe ori, acest tip de arhitectură se împarte pe mai multe nivele, funcție de dimensiunea sistemului. Pentru un sistem relativ simplu, care nu are utilizatori de ordinul miilor se poate alege o ahitectură pe două nivele:
În cazul unei aplicații de dimensiuni mai mari se mai adaugă un nivel intermediar în cadrul arhitecturii – în general încă un server care se ocupă de gestionarea bazei de date: [5]
Clientul este cel care va iniția comunicarea. El trimite o cerere care conține informații personalizate și așteaptă răspuns pentru aceasta. În acest caz clientul este o aplicație care solicită furnizarea unui set de informații de la o entitate diferită. Acesta poate fi un browser web, un client de e-mail (Outlook, Mail App, etc), un client de streaming ș.a.m.d. Așadar, clientul este cel care prin acțiunea sa declanșează un lanț de acțiuni: cerere, răspuns de la sursă, prelucrare răspuns, afișare informații finale.
Serverul rulează corespondentul aplicației de pe partea de client. Acest are un proces "listener" care ascultă pe un port anume și este într-o continuă așteptare. Rolul serverului este de a aștepta și a îndeplini anumiți pași doar dacă îi este solicitat acest lucru. Spunem că un server este pasiv deoarece nu acționează niciodată din proprie inițiativă ci așteaptă interogări. La primirea unei cereri și implicit stabilirea unei conexiuni , acesta îndeplinește anumite sarcini și returnează un rezultat așteptat celui care l-a solicitat. Spre exemplu un server de SQL care are grijă de o bază de date, așteaptă o solicitare de la un client (poate un utilizator solicită un raport într-o interfată grafică, raport care are în spate o sintaxă SQL). Acesta procesează cererea și rulează interogarea în baza de date, extrage datele solicitate și le returnează clientului în formă bruta (în general).
Un sistem de operare reprezintă un produs de tip software care este parte componentă a unui sistem, echipament sau aparat computerizat, și care se ocupă de gestionarea și coordonarea activităților acestuia. Sistemul computerizat poate fi un computer, o stație de lucru (workstation), un server, un PC, un notebook, un netbook, un smartphone, un aparat de navigație rutieră, un e-book reader sau și un alt sistem cu "inteligență" proprie. Sistemul de operare joacă și rolul de gazdă pentru aplicațiile care rulează pe echipamentul (hardwareul) respectiv. [6]
Sistemul de operare este cel care se ocupă de operații de management al taskurilor, alocă resurse hardware etc. În procesele de alocare a memoriei și activități de tip input/output, sistemul de operare reprezintă un strat intermediar, aplicațiile pot apela funcții de sistem (puse la dispoziție de SO) sau pot fi întrerupte de acestea. [7]
La ora actuală există o mare varietate de sisteme de operare pe piață, fiecare având aplicabilitate în diferite medii. Dintre acestea cele mai populare sunt:
iOS
Android
BlackBerry 10
Chrome OS
OS X
Windows 8
Ubuntu
CentOS / RedHat
Solaris
AIX
HP-UX
Componenta centrală a unui SO este reprezentată de kernel. Acesta controlează accesul la resurse și permite legătura între hardware și software. Acest lucru este ilustrat în figura de mai jos:
Aplicațiile reprezintă stratul software iar cel hardware e reprezentat de CPU, Memorie, Dispozitive, etc.
Kernelul reprezintă un strat de abstractizare al resurselor hardware (mai ales CPU , memorii, transferuri de informații), transferă informațiile între programe și perifericele. De asemenea acesta facilizează și comunicarea între procese.
Nucleul (kernelul în denumirea sa din limba română) este partea critică a unui sistem de operare asftel că dezvolvarea, implementarea și menținerea acestuia sunt taskuri critice și trebuie tratate cu exigentă deoarece rolul său implică un nivel de performanță foarte ridicat. Nucleele moderne includ multitasking real, capacități de virtualizare, gestionarea memoriei, rețele TCP/IP, distribuția executabilelor la scrierem, posibilitatea susținerii a până la un miliard de procese care rulează simultan și multe altele.
În ziua de azi Linux-ul folosește un kernel monolitic cu încărcare de module. Device driver-e și extensii de nucleu rulează tipic în inelul 0, cu acces total la hardware, deși unele rulează în spațiul utilizator. Spre deosebire de nucleele monolitice standard, device driver-ele se configurează ușor ca module, și se încarcă sau se descarcă în timpul rulării sistemului. Tot spre deosebire de nucleele monolitice standard, device driver-ele pot fi pre-empted în anumite condiții. Acest din urmă feature a fost adăugat pentru a trata întreruperile hardware corect, și pentru a îmbunătăți suportul pentru multiprocesare simetrică. Preemptiunea de asemenea ameliorează latența, crescând viteza de răspuns și făcând Linux mai potrivit pentru aplicații de timp real. [8]
GNU/Linux este unul dintre cele mai cunoscute sisteme de operare dar și cel mai bun exemplu de software liver dezvoltat ca Open Source.
Practica Open Source reprezintă activitatea de dezvoltare sau produce a anumitor produse finite, proces în care utilizatorii au libertatea de a acționa. Acesta este foarte frecven utilizat în dezvoltarea software dar, în realitate se poate aplica în orice domeniu în care se produce sau dezvoltă un produs. [9]
Deși în teorie termenul Linux se referă la nucleul Linux, în practică este folosit pentru a descrie un întreg sistem de operare în toată componența sa (nucleu, biblioteci, tool-uri, etc). Distribuția Linux adaugă sistemului de operare o multitudine de aplicații ("pachete").
Nucleul Linux a fost dezvoltat inițial pentru microprocesorul Intel 386, dar în prezent rulează pe o mare gamă de microprocesoare și arhitecturi de calculatoare. Este folosit pe calculatoare de tip personal, pe supercomputere, dar și pe sisteme încapsulate (embedded ), cum ar fi unele telefoane mobile sau recordere video.
Inițial dezvoltat și utilizat de către programatori voluntari, Linux a câștigat suportul industriei IT și al marilor companii ca IBM, Hewlett-Packard, Dell, Sun Microsystems, Google, Novell sau Nokia, și a depășit ca folosire versiunile proprietare de Unix. Analiștii atribuie succesul sistemului faptului că este independent de furnizor, implementarea are un cost scăzut, iar securitatea și fiabilitatea sistemului sunt considerate de către specialiști drept foarte bune.
Dezvoltarea sistemului a fost începută de către inginerul finlandez Linus Torvalds, care inițial dorea să obțină un sistem similar cu Minix, dar fără limitările acestuia. Linux a fost dezvoltat sub Licența Publică Generală GNU GPL, astfel încât nu numai Linux însuși, dar și codul său sursă sunt disponibile tuturor celor interesați.[10]
Interfață grafică GNOME [11]
Sistemul de operare Linux este complet și conține aplicabilitate pentru orice uz:
Server: anvând capacități avansate de rețelistică, oferă servicii necesare (de exemplu: Samba, NFS, FTP, Mail, etc). Acesta poate fi configurat în concordanță cu diferite reguli de securitate si poate ajunge la o fiabilitate și stabilitate utilizată în medii critice;
Personal: datorită interfeți grafice de care beneficiază diferitele distribuții de Linux, acesta poate fi folosit și pentru uz personal pentru, navigare pe internet, jocuri, e-mail, etc;
Business: sistemul de operare amintit are capacități care îi permit intrarea pe o plajă de productivitate. Aceste pune la dispoziție suite Office (pentru prelucrarea datelor, publicare, procesator de texte), programe de editat poze/filmări, browsere de internet, etc;
Educațional: poate fi folosit în mediul, Ubuntu spre exemplu oferă o platformă cu diferite aplicații pentru : pre-școlari, școlari, studenți, profesori.
Cele mai "grele" nume de pe piața distribuțiilor Linux sunt :
RedHat Linux – dezvoltat de RedHat Software, este cea mai răspândită distribuție în mediul enterprise. Acesta oferă performanțe și fiabilitate foarte bune. Pachetele vin sub formă de RPM (RedHat Package Management);
CentOS Linux – este o distribuție gratuită care este bazată pe sursele RedHat. Există numeroase similarități între cele două sisteme de operare enumerate, inclusiv pachetele care vin sub formă de RPM (RedHat Package Management);
SuSE – oferit de Novell Linux este una din distribuțiile cele mai performante. SuSE vine cu două unelte foarte puternice de configurare și management: YaST și Sax;
Debian GNU/Linux – oferit de Debian , este o distribuție foarte stabiliă dar este recomandată utilizatorilor care au cunoștințe avansate în Linux deoarece operarea acestuia este greoaie;
Ubuntu Linux – dezvoltat de o echipă de experți, este un sistem de operare adresat utilizatorilor simplii. Acesta vine cu cea mai bună interfață de utilizare, este foarte ușor de instalat și aplicații foarte variate. Toate acestea fac din Ubuntu cea mai bună alternativă pentru utilizatori. În ultima perioadă, Ubuntu a început să se remarce și în mediu enterprise.
Shell-ul este o componenta a sistemului de operare care permite interpretarea comenzilor UNIX tastate de catre utilizator in terminalul UNIX, sau in consola. A interpreta aceste comenzi inseamna de fapt a transforma comenzile utilizator in procese care se pot executa la nivelul procesorului. De exemplu la tastarea comenzii date care permite afisarea datei curente procesorul va trebui sa citeasca informatiile referitoare la ora sistemului de la ceasul procesorului, sa converrteasca aceste sdate intr-un format inteligibil, si apoi sa tipareasca aceste date aflate intr-un format citibil la terminalul utilizatorului. Din acest exemplu se poate trage concluzia ca toate comenzile UNIX nu se pot realiza direct la nivelul procesorului, ci este nevoie de un mediu care sa permita aceasta translatare, transpunere din formatul de comanda UNIX in operatii care se pot efectua la nivelul procesorului.
Cuvantul shell defineste in limba engleza termenul de cochilie. Aceasta “cochilie” poate fi vizualizata in schita de mai jos care prezinta componentele sistemului de operare UNIX :
Asa cum se poate obseva din figura de mai sus shell-ul UNIX este un limbaj de comenzi. Deci elementele constitutive ale shell-ului sunt comenzile UNIX. Echivalentul literar si stiintific in limba romana pentru cuvantul shell este de interpretor de comenzi. [12]
Când se introduc comenzi în interpretor, acesta urmează următorii pași:
verifică comanda introdusă din punct de vedere sintactic;
identifică și interpretează caracterele speciale (spre exemplu: pipa "|");
verifică dacă comanda dată există în căile definite de căutare;
le execută sau nu funcție de rezultatul pașilor de mai sus, se afișează mesaje în ambele cazuri.
Shell-urile au capacitatea de a interpreta atât comenzi singulare cât și algoritmi de comenzi (scripturi). Scripturile în shell au devenit atât de frecvente încât se consideră ca sunt scrise într-un un limbaj de programare (shell-scripting). Se poate face analogie cu fișierele batch din Windows care sunt de asemenea scripturi în shell, având extensia .bat.
În Linux/Unix exită mai multe interpretoare de comenzi, dintre care le amintim pe cele mai importante:
BASH – Bourne Again shell;
CSH – C Shell;
KSH – Korn Shell;
SH – Bourne Shell
Dintre acestea , în mod standard BASH este shell-ul folosit de Linux. Acesta a fost scris inițial de către Brian Fox de la Fundația pentru Software Liber pentru Proiectul GNU, având ca obiectiv inlocuirea lui SH. [13] Motivul pentru care este folosit default este ușurința de utilizare a acestuia (spre exemplu: funcția de autocompletare, sintaxa simplă a scripturilor).
Toate interpretoarele enumerate anterior au moduri similare de lucru atunci când se folosesc comenzi simple. Diferența apare atunci când se folosesc scripturile deoarece apar diferențe la nivel de sintaxa sau eficiență.
Virtualizarea
Virtualizarea este tehnologia prin care resursele hardware ale unui server fizic sunt partajate în "mașini virtuale". Aceasta operație permite utilizarea medie a resurselor fizice cu până de 10 mai mult decât în cazul clasic. Altfel spus, prin virtualizare hardware-ul se transforma in software si se creeaza posibilitatea rularii simultane a mai multor sisteme de operare pe un singur computer. [14]
Deși mulți văd virtualizarea ca pe o tehnologie nou, aceasta este cunoscută în domeniu de mult timp. Ea a fost prima data utilizată în compania IBM, unde programatorul Kim Rymarczyk a făcut primul proces de virtualizare pentru un computer mainframe.. Software-ul se numea CP-67 IBM și folosea o tehnologie de partiționare ce permitea aplicațiilor să ruleze simultan pe mainframe.
Aceasta tehnologie IT ofera eficiență și capacitate deosebită în lumea reală, unele aplicații rulând mai bine într-un mediu virtual.
Beneficiile virtualizarii sunt de cele mai multe ori de reducere a costului însă cel mai mare beneficiu al virtualizarii serverelor este reducerea cantității de hardware necesară pentru a rula aplicațiile. Folosind un proces de virtualizare in consolidarea serverelor, nu numai că se reduce costul achizitionarii de masini fizice, dar si dimensiunea datacenterului se optimizează.
Virtualizarea computerelor permite ca o varietate de sisteme de operare si configurații software să fie folosite de o singură mașină, aplicațiile virtualizate flexibilitate software-ului clasic. Fără virtualizare, o companie poate fi nevoita să suporte costul de a rula 5 servere separate cu sisteme diferite de operare sau configurații diferite pentru a putea rula toate aplicațiile necesare businessului. Flexibilitatea care rezultă în urma virtualizării se refera la faptul că toate sistemele de operare si toate aplicatiile pot rula pe o singura arhitectura hardware.[15]
În linii mari, beneficiile virtualizării sunt următoarele:
uptime mărit;
management-ul enviroment-ului mai ușor;
beneficiile oferite de platformele de virtualizare, nedisponibile în cazul sistemelor fizice;
economisirea energiei și a scăderea costurilor cu hardware-ul;
reducerea spațiului în datacenter.
În momentul actual existăm mai mulți jucători importanți pe piața soluțiilor de virtualizare, printre care se remarcă în mod deosebit VMware. Platforma de virtualizare VMware este construita pe arhitecturi de tip business-ready. Utilizarea unui software WMware ajută la transformarea un calculator x86 intr-o unealtă ce poate imparti resurse de tip CPU, RAM , HDD și rețea intre mai multe medii de operare. Fiecare masină virtuală conține un sistem complet, eliminând potențialele conflicte. Virtualizarea cu ajutorul VMware functionează prin introducerea unui nou layer software pe hardware-ul existent sau pe sistemul de operare existent. Există mai multe tipuri de virtualizare folosite în mediile enterprise:
Virtualizare Hardware: folosește hypervizoare (VMware ESXi, Microsoft Hyper-V sau Citrix XenServer) pentru a abstractiza caracteristicile fizice ale serverului. Acest lucru permite mai multor sisteme de operare sa ruleze virtual sub acelasi server fizic, astfel resursele fizice sunt utilizate mai eficient;
Virtualizare Software (sau la nivel de aplicație):
CAP 3. Componente “Activity Monitor”
Tool-ul este format din două părți principale: partea client și partea server, fiecare având în componența sa diferite scripturi, fișiere de configurare și fișiere necesare interfeței web (doar pe partea de server).
Server Side
Nucleul tool-ului este constituit de serverul de monitorizare central. Acesta conține partea de interfața web formată din fișiere PHP care interpretează fișierele de status, PHP-ul și CSS-ul este folosti pentru pagina web și designul ei, iar scripturile BASH au scopul de a aduce log-urile de la serverele client, le prelucrează și apoi le afișează într-un format special.
Pentru început ar fi bine să ne adresăm scripturilor BASH. Fișierele sunt, după cum se poate observat în imaginea alăturată, getstatus.sh respectiv overview.sh. Este obligatoriu ca acestea să fie rulate sub același user sub care sunt rulate scripturile de pe partea client (preferabil „root”).
Prin apelare scriptului getstatus.sh este început procesul de actualizare al statusului serverelor monitorizate:
#!/bin/bash
wdir="/Users/alex/licenta/servmon"
# Se verifica prima coloana a fisierului servmon.conf de unde
# se extrag hostnameuile serverelor monitorizate, se executa
# ping pe ele și funcție de exit code-ul comenzii se
# stabiliește dacă sunt ”UP” sau „DOWN”.
# Fiecare server are in folderul /servers un folder denumit
# după propriul hostname, unde vor fi importate log-urile
# proprii.
for i in `awk -F: '{print $1}' $wdir/servmon.conf`
do
if [ -d $wdir/servers/$i ] ;then
ping -c 2 -W 1 $i > /dev/null
if [ $? -ne 0 ] ; then
echo "Server is down!" > $wdir/servers/$i/down
# Dacă serverul e “DOWN” se crează un fișier in
# folderul serverului denumit „down”.
else
# În cazul în care serverul a fost “DOWN” și este
# „UP”, tool-ul șterge fișierul “DOWN” generat la
# pasul anterior.
if [ -f $wdir/servers/$i/down ]; then
rm -f $wdir/servers/$i/down
fi
# La acest punct se știe exact statusul serverului
# monitorizat, astfel că se încearcă transferarea
# logurilor de status prin protocolul Secure Copy
# (scp).
scp $i:~/servermon/status/* $wdir/servers/$i &> /dev/null
fi
else
# Dacă folderul de configurație al serverului lipsește se
# va scrie o alertă în logul de inițializare.
echo "$(date) Make the configuration for $i" >> $wdir/initializing
fi
done
# După verificarea statusurilor serverelor și importarea
# fișierelor de status se execută următorul script.
sh $wdir/overview.sh
După cum se poate observa în explicațiile anterioare, getstatus.sh este dependent de mai multe fișiere de configurare respectiv de output. Lista serverelor client se gasește în servmon.conf, având următoarea structură:
<hostname client>:<IP client>
………..
<hostname client>:<IP client>
Hostname-urile sunt extrase din această lită printr-un awk care extrage coloana 1 ($1), coloană delimitată prin caracterul „:” (opțiunea –F).
Din acet punct următorul pas este prelucrarea fișierelor care au fost importate anterior din host-urile client. Acest lucru se realizează prin overview.sh:
#!/bin/bash
wdir="/Users/alex/licenta/servmon"
# Se numără căte intrări se află în fișierul de configurare al
# serverelor, obținând astfel numărul total de sisteme
# monitorizate și suprascrie overview.status.
grep -v ^# $wdir/servmon.conf | wc -l | awk '{print $1,"servere sunt monitorizate" > "/Users/alex/licenta/servmon/overview.status"}'
# Afișează un mesaj corespunzâtor pe linia a II-a în
# overview.status și caută toate # fișierele denumite „down”
# din folderul /servers, inclusiv sub-folderele acestuia
# numărându-le.
echo "Numarul de servere “DOWN” este "$(find $wdir/servers/ -name “DOWN” | wc -l) >> $wdir/overview.status
# Urmatoarele one-linere listează toate fișierele denumite
# „error” din folderele serverelor și prelucrează outputul
# după următoarea regulă: prima dată se iau liniile care încep
# cu cuvântul „objects” și iau numărul de pe coloana a II-a,
# îl adaugă variabilei „error” (inițializată cu 0) apoi
# afișează numărul de obiecte monitorizate. Același lucru se
# întâmplă cu obiectele aflate în stadiu de eroare,
# rezultatele fiind output-uite pe rândurile 3 respectiv 4 din
# overview.status.
awk -F : 'BEGIN {errors=0} /objects/ {errors=errors+$2} END {print errors,"obiecte sunt monitorizate" >>"/Users/alex/licenta/servmon/overview.status" }' /Users/alex/licenta/servmon/servers/*/errors
awk -F : 'BEGIN {errors=0} /obj_error/ {errors=errors+$2} END {print errors,"obiecte sunt in status error" >> "/Users/alex/licenta/servmon/overview.status" }' /Users/alex/licenta/servmon/servers/*/errors
După fiecare rulare a scriptului overview.sh se va rescrie sau genera (după caz) fișierul overview.status. Acesta va avea o structură predefinită, după cum urează:
linia I: <număr> <mesaj> # linia cu numărul de servere monitorizate
linia II: <mesaj> <număr> # linia cu numărul de servere care sunt DOWN
linia III: <număr> <mesaj> # linia cu numărul de obiecte monitorizate
linia IV: <număr> <mesaj> # linia cu numărul de obiecte în status „error”
Fișierul overview.status este prelucrat în continuare de interfața Web. Aceasta este formată din 3 fișiere PHP principale, aferent celor 3 pagini din interfața.
Pagina principală al tool-ului este index.php care preia informațiile privind status-ul din overview.status, le formatează și le afișează în browser. Colectarea datelor se face prin funcția:
<?php
$text=file("overview.status");
echo '<p>'.$text[0]."<br />".$text[1].'</p>';
echo '<p>'.$text[2]."<br />".$text[3].'</p>';
?>
Design-ul este scris in CSS și este importat în toate fișierele PHP, stylesheet-ul folosit fiind main.css (acesta se poate găsi în folderul /style. De asemenea imaginile care sunt folosite în index.php au ca sursă folderul /images.
<link href="style/main.css" rel="stylesheet" type="text/css">
……..
<li><a href="index.php"> <img src="images/menu/button1.png" alt="" width="115" height="32"></a></li>
Implicit, la accesarea paginii principale, secțiunea „Overview” este selectată. Dacă se navighează la pagina „Status” browserul va afișea fișierul raport.php. Acesta are o structură tabelară în care se afișează 4 coloane : Hosts, Address, Status, Errors. Funcția PHP care realizează acest lucru este:
<?php
// Început tabel, se afișează capul de tabel.
echo '<table border="1">'."\n";
echo '<tr>'."\n";
echo '<th>Hosts</th>'.'<th>Address</th>'.'<th>Status</th>'.'<th>Errors</th>'."\n";
echo '</tr>'."\n";
// Variabila status se inițializează.
$status="up";
// Din servmon.conf se ia host-ul și IP-ul.
$file = @fopen("servmon.conf","r");
if ($file) {
while (($rand = fgets($file, 4096)) !== false) {
list($host,$addr)=explode(":",$rand);
// Se reverifică existența fișierului
// “DOWN” pentru afișarea statusului. if(file_exists("servers/$host/down")) {
$status= “DOWN” ;
}
else $status="up";
$obj_line=file("servers/$host/errors"); $objects=explode(":",$obj_line[0]);
echo '<tr>'."\n";
// Se afișează celula cu link-ul spre
// statistica detaliată.
echo '<td>'.'<a href="detaliat.php?host='.$host.'">'.$host.'</a>'.'</td>'.'<td>'.$addr.'</td>'.'<td>'.$status.'</td>'.'<td>'.$objects[1].'</td>'."\n";
echo '</tr>'."\n";
}
echo '</table>';
if (!feof($file)) {
echo "Error: unexpected fgets() fail\n";
}
fclose($file);
}?>
Ultimul fișier care se afișează în interfața cu utilizatorul este detaliat.php. Acesta ia conținutul <hostname>.status din folderul /servers și îl afișează în browser:
<?php
$host=$_GET['host'];
$handle = @fopen("servers/".$host."/".$host.".status", "r");
if ($handle) {
while (($buffer = fgets($handle, 4096)) !== false) {
echo $buffer."<br />";
}
if (!feof($handle)) {
echo "Error: unexpected fgets() fail\n";
}
fclose($handle);
}
?>
Tool-ul prezentat poate fi setat sa își facă refresh automat la un interval pre-setat de 60 de secunde. Pentru a modifica acest interval trebuie modificate:
din fișierele PHP (pentru partea de web):
<meta http-equiv="refresh" content="5">
din CRONTAB pe serverul central și pe clienți:
* * * * * /root/servermon/status.sh – pentru clienți
* * * * * /…/servermon/getstatus.sh – pentru central
În cadrul lui „Activity Monitor” există un log intern care a fost amintit mai sus ( fișierul „initializing”). Momentan în acesta se scriu log-uri pentru configurația (sau lipsa acesteia) pentru serverele monitorizate. Pe viitor se dorește creșterea complexității logurilor pentru acest sistem.
Client Side
Pentru a fi înregistrați în monitorizare clienții trebuie să îndeplinească două condiții: să aibă pe partea de server folderul cu hostname-ul creat și pe partea client să existe scripturile (default acestea trebuie să fie în home-ul userului root).
Scriptul care colectează statusurile și se rulează în fiecare minut este denumit ca stauts.sh. Acesta va citi un fișier de configurare ( objects.conf ), folosind aceste date va rula o serie de verificări și output-ul va fi scris în folderul /reports. Alăturat se poate vedea structura status.sh:
#!/bin/bash
wdir="/root/servermon"
output=$(hostname -s).status
# Se suprascrie fișierul de output pentru a se reactualiza.
echo "Statusul obiectelor pe" $(date +" "%d" "%b" "%Y" ora "%H:%M) > $wdir/status/$output
# Se citește fișierul de configurație iar output-ul se
# prelucrează în objects.awk.
grep -v "^#" $wdir/objects.conf | awk -v wdir=$wdir -f $wdir/scripts/objects.awk
# Adaugă statusurile obiectelor monitorizate în fișierul de
# output.
cp $wdir/status/$output $wdir/reports/$output.$(date +%d%m%H%M)
După cum am amintit mai sus, status.sh se folosește de fișierul de configurare objects.conf. În acesta sunt precizate toate obiectele care trebuie monitorizate precum și parametrii lor. Coloanele, după cum se va observa în următoarea imagine sunt separate prin „:” :
Se poate observa formatarea acestui fișier:
coloana I tagul „OBJ”;
coloana II ce se monitorizează:
dacă se monitorizează un filesystem se urmează structura:
coloana III ce anume se monitorizează la acest filesystem;
coloana IV trashold-ul monitorizat (exprimat în procent);
coloana V starea sa (montat sau nemontat);
dacă se monitorizează un proces:
coloana III reprezintă numele procesului;
coloana IV arată cum se monitorizează (momentan există doar „PSMON” implementat, adică procesul să ruleze);
dacă se monitorizează o interfată:
coloana III reprezintă numele interfeței;
coloana IV arată cum se monitorizează (momentan există doar „IFMON” implementat, interfața să aibe flagul „UP”).
Toate datele citite din fișierul de configurare sunt trimise mai departe la objects.awk, care se poate găsi în folderul /scripts. Acesta va prelucra fiecare rând și funcție de informațiile citite va apela diferite scripturi:
BEGIN { FS=":";objerr=0}
{
for ( i=1 ; i <= NF ; i++ )
{
# Salvează numele obiectului care va fi moniotrizat.
if ( $i == "OBJ" ) {
object=$(i+1)
}
# Verifică dacă s-a atins limita de spatiu pentru
# obiectul respectiv (în cazul acesta obiectul este
# numele unui filesystem).
if ( $i == "SIZE" ) {
# Se importa limita din următoarea coloană.
limit=$(i+1)
if ( system(wdir"/scripts/freespace.sh "object" "limit) ){
# Scriptul freespace.sh va genera o valoare
# pentru objerr, funcție de rezultatul
# verificărilor, acesta va fi adăugat în
# această sumă pentru a avea numărul total de
# erori la final.
objerr=objerr+1
}
}
# Verifică dacă obiectul este montat pe sistem (în
# cazul acesta obiectul este numele unui filesystem).
if ( $i == "MOUNTED" ) {
if ( system(wdir"/scripts/mounted.sh "object) != 0 ) {
objerr=objerr+1
}
}
# Verifică dacă serverul are ora sincronizată cu
# serverul de NTP.
if ( $i == "NTPMON" ) {
if ( system(wdir"/scripts/ntpmon.sh") !=0 ) {
objerr=objerr+1
}
}
# Verifică dacă obiectul monitorizat rulează (în cazul
# acesta obiectul este un proces).
if ( $i == "PSMON" ) {
if ( system(wdir"/scripts/psmon.sh "object) !=0 ) {
objerr=objerr+1
}
}
# Verifică dacă interfața monitorizată rulează.
if ( $i == "IFMON" ) {
if ( system(wdir"/scripts/interface.sh "object) !=0 ) {
objerr=objerr+1
}
}
}
}
# Se printează în fișierul de erori numărul de obiecte
# monitorizate și numărul de obiecte care au erori.
END { print "obj_error:",objerr > wdir"/status/errors"}
END { print "objects:",NR >> wdir"/status/errors"}
Scripturile pe care le apelează objects.awk se află în același folder cu el. Fiecare îndeplinește o singură funcție și returnează un mesaj în fișierul de status al clientului respectiv o variabilă (objerr) prin care se numără câte obiecte sunt în stadiul de eroare (se va folosi valoarea returnată „0” pentru status corect iar valoarea „1” pentru status incorect (diferit de cel care trebuia să fie).
Momentan tool-ul poate să monitorizeze 4 tipuri de elemente: filesystem (se poate urmări o anume valoare procentuală pentru spațiu ocupat și dacă este montat sau nu), procese (se verifică dacă acestea rulează pe sistem) , interfețe (se verifică dacă interfețele sunt „UP” sau „DOWN”) și NTP (sicronizarea cu servere de network time protocol). Scripturile prin care se fac aceste monitorizări sunt :
Freespace.sh monitorizează spațiul free al unui filesystem :
#/bin/bash
wdir="/root/servermon"
output=$(hostname -s).status
LIMIT=$2 # Limita de spatiu monitorizat
FS=$1 # Patiția monitorizată
df -h | awk -v output=$wdir/status/$output -v MAX=$LIMIT -v DISK=$FS '
{
# Compară output-ul df –h cu obiectele
# monitorizate și afișează rezultatul.
if ( $6 == DISK && int($5) >= MAX ){
print "Filesystem "DISK" is over the limit("MAX"%)" >> output
exit 1
}
}'
Interface.sh verifică dacă interfața monitorizată are flag-ul „UP”:
#!/bin/bash
interface=$1 # Preia primul argument în variabila „interface”
wdir="/root/servermon"
output=$(hostname -s).status
ifconfig $interface | grep -i up > /dev/null
if [ $? -ne 0 ];then
echo "Interface is missing" >> $wdir/status/$output
exit 1
else
echo "Interface is UP" >> $wdir/status/$output
exit 0
fi
Mounted.sh verifică dacă filesystem-ul monitorizat este montat sau nu:
#!/bin/bash
mounted=$1
wdir="/root/servermon"
output=$(hostname -s).status
# Caută în procese fs-urile montate și încearcă să îl
# găsească pe cel monitorizat. În caz că îl găsește se
# afișează mesaj corespunzător. Se decide status-ul
# funcție de exitcode-ul comenzii de căutare.
awk '{print $2}' /proc/mounts | grep "^${mounted}$" > /dev/null
if [ $? -ne 0 ]; then
echo "Filesystem $mounted is not mounted" >> $wdir/status/$output
exit 1
else
#echo "Filesystem $mounted is mounted" >> $wdir/status/$output
exit 0
fi
NTPmon.sh verifică dacă clientul este sincronizat cu serverul de NTP definit:
#!/bin/bash
wdir="/root/servermon"
output=$(hostname -s).status
# Dacă există o linie în ntpq –nr care începe cu „*” exitcode-
# ul comenzii va fi „0”, astfel clientul nu este sincronizat
# cu unul din serverele NTP partenere.
ntpq -np 2> /dev/null | grep ^* 1> /dev/null
if [ $? -ne 0 ]; then
echo "Time is not synchronized!" >> $wdir/status/$output
exit 1
else
#echo "Time is synchronized!"
exit 0
fi
PSmon.sh monitorizează dacă un anume proces monitorizat este activ în lista de procese:
#!/bin/bash
wdir="/root/servermon"
output=$(hostname -s).status
object=$1
# Se folosește funcția „grep” pentru a filtra lista de procese
# active din „ps -ef”. Se elimina intrarea rulată de psmon.sh
# deoarece în lista de procese căutarea în sine apare ca
# proces. Funcție de exitcode-ul comenzii se adjudecă starea
# procesului.
ps -ef | grep "${object}" | egrep -v "grep|psmon.sh" > /dev/null
if [ $? -ne 0 ];then
echo "Object $object is not running!" >> $wdir/status/$output
exit 1
else
#echo "Object $object is running!" >> $wdir/status/$output
exit 0
fi
Momentan există doar aceste 5 funcții implementate deoarece sunt considerate cele mai de bază într-o rețea. După cum se poate observa în exemplele de mai sus, toate funcțiile au la bază niște căutări și filtrări ale unor comenzi comune pentru un administrator de sisteme de operare. De asemenea se folosește în fiecare caz exitcode-ul comenzii rulate anterior pentru a știi dacă aceasta a rulat cu succes sau nu.
Pe viitor se dorește implementarea unor noi astfel de funcții, sporind astfel complexitatea și utilitatea „Activity Monitor”.
Pentru a urmări status-ul obiectelor monitorizate, la fiecare rulare a lui status.sh se creează fișiere de log-uri în directorul reports. Rolul acestui feature este pentru depanare avansata, întrucât se poate observa, spre exemplu, de la ce moment un anume proces „X” nu mai rulează, apoi folosind ora și data obținută putem filtra logurile de sistem să aflăm eroarea care a provocat oprirea procesului. Formatul acestor fișiere de status este identic cu cel al fișierului care merge pe serverul central de monitorizare.
Pentru o identificare mai ușoară, denumirea fișierelor de raport a primit timestamp:
CAP 4. CONCLUZII
Ce s-a realizat?
S-a realizat o aplicație care monitorizează sitemele Linux / Unix, aplicație care constă în centralizarea următoarelor informații critice, pe un singur sistem central:
inactivitatea procesului monitorizat;
depășirea limitei de utilizare monitorizată a unui filesystem;
lipa unui mount-point;
inactivitatea unei interfețe de rețea;
lipsa sincronizării clienților cu servere NTP.
Interfața WEB are rol scrtict de vizualizare, aici vor fi afișate avertismentele și stările sistemelor, într-un mod cât mai practic și ușor de înțeles.
Unde se clasează sistemul nostru în raport cu alte produse?
În dezvoltarea aplicației studiul produselor similar disponibile pe piață a ajutat la arhitectura generala a tool-ului. Majoritatea sistemelor sunt extreme de complexe, scrise în limbaje dificil de înțeles, costă mult și sunt dificil de implementat. Acestea sunt în general destinate companiilor care au o infrastructură mare, care își permit să investească mult în monitorizare, însă pentru infrastructuri medii și mici nu se justifică. În astfel de infrastructuri aplicațiile simple, care nu necesită investiții majore câștigă tot mai mult teren.
Această abordaere are mai multe avantaje:
aplicația poate fi depanată ușor, fiind scrisă într-un limbaj familiar;
tot datorită limbajului folosit, funcționalitatea se poate extinde foarte ușor;
automatizează multe din task-urile pe care un administrator ar trebui să le facă pentru a se asigura că starea sistemului este corectă.
Până unde se poate merge cu dezvoltarea aplicației?
Funcție de necesitate, tool-ului i se poat adăuga un număr nelimitat de funcționalități. Fiind scrise în BASH, scripturile pot fi ușor adaptate în cazul în care apar versiuni diferite de distribuții ale sistemelor de operare. De asemenea, posibilitatea obținerii unui status (de exemplu: statusul unei interfețe de rețea) se poate obține în foarte multe moduri, astfel există mult loc de optimizare.
Se poate lucra foarte mult la interfața WEB, atât din punct de vedere estetic cât și din punct de vedere funcțional.
Funcțional se pot avea în vedere următoarele:
structurarea serverelor afișate pe grupuri (în cazul în care se vor monitoriza mai multe infrastructuri prin același tool);
autentificarea prin useri și implementarea unui sistem ierarhic de funcții (dacă avem o companie care oferă servicii, clientul va avea acces la sistemul de monitorizare pentru a scoate diferite rapoarte);
posibilitatea adăugării din interfața grafică a unor noi elemente care trebuiesc monitorizate (de exemplu: interfețe noi, filesysteme noi, etc.);
dezvoltarea de API-uri pentru integrarea sistemului de monitorizare cu diferite sisteme de tichetare pentru partea de operațional;
implementarea unui modul de raportare prin care se pot exporta statistici și raportări pe intervale de timp introduse de utilizator;
module de informare prin e-mail pentru diferite alerte, în timp real.
După cum se poate observa, majoritatea îmbunătățirilor se adresează mai mult unor terțe părți (raportare, autentificare, etc) însă funcționalitatea de bază rămâne neschimbată deoarece aceasta oferă exact ceea ce trebuie, când trebuie.
Bibliografie:
[1]http://www.cs.montana.edu/~halla/csci466/lectures/lec2.html
[2]http://en.wikipedia.org/wiki/Client–server_model
[3]http://en.wikipedia.org/wiki/World_Wide_Web
[4]http://ro.wikipedia.org/wiki/World_Wide_Web
[5]http://en.kioskea.net/contents/151-networking-3-tier-client-server-architecture
[6]http://ro.wikipedia.org/wiki/Sistem_de_operare
[7]http://en.wikipedia.org/wiki/Operating_system
[8]http://ro.wikipedia.org/wiki/Linux_(nucleul)
[9]http://ro.wikipedia.org/wiki/Sursă_deschisă
[10]http://ro.wikipedia.org/wiki/Linux
[11]http://lifehacker.com/5762081/wtf-desktop-environments-gnome-kde-and-more-explained
[12]http://web.info.uvt.ro/~oaritoni/so1/Laboratoare/Lab5/ScripturiUNIX.pdf
[13]http://ro.wikipedia.org/wiki/Bash
[14]http://www.virtualizare.ro/-Page-/virtualizarea/Default.aspx
[15]http://softline.ro/article/topul-beneficiilor-virtualizarii/
Copyright Notice
© Licențiada.org respectă drepturile de proprietate intelectuală și așteaptă ca toți utilizatorii să facă același lucru. Dacă consideri că un conținut de pe site încalcă drepturile tale de autor, te rugăm să trimiți o notificare DMCA.
Acest articol: Sistemele Computerizate (ID: 150571)
Dacă considerați că acest conținut vă încalcă drepturile de autor, vă rugăm să depuneți o cerere pe pagina noastră Copyright Takedown.
