Innhold Forord...3 Begreper og akronymer...4 Systembeskrivelse...5 Generelt...5 Funksjonelle krav...7 Ikke-Funksjonelle krav...9 Prioritering...9 2
Forord Denne kravspesifikasjonen har blitt utviklet i samarbeid med Redpill Linpro AS(heretter referert til som oppdragsgiveren ), diskusjoner i gruppen, og veileder har også hatt en betydelig rolle. Oppdragsgiver har hatt generelle ønsker som gruppen har jobbet videre med og utvidet. Dette på grunn av at gruppen først måtte gjøre en undersøkelse over hva de er selv i stand til og hva teknologien tillater dem å utføre. Dokumentet har vært en pekepinn på hvor mye arbeid som er nødvendig da det har vært veldig XP basert. På denne måten har det også vært en slags dobbeltsjekk for fremdriftsplanen. Dokumentet er i tillegg til gruppens egen bruk også skrevet for oppdragsgiver, veileder og sensor. Det er derfor skrevet med hensyn på at personene som leser dokumentet har erfaring med systemutvikling, er kjent med spesielle begrep innenfor programmering og IT-drift, særlig med hensyn på Java. Noe vil også være skrevet på engelsk da det ikke har hensikt å oversette tekniske begreper til norsk. Munin pluginene har et felt under grafene for beskrivelse av grafen i sin helhet og de enkelte dataene som er representert i grafen. Disse beskrivelsene er hentet ut fra JavaDoc og er på engelsk. Dette er fordi personene som vil benytte pluginene i stor grad er fra utlandet og engelsk er i stor grad benyttet i driftssammenheng. 3
Begreper og akronymer JVM - Java Virtual Machine SDK - Software development kit. JBoss - Innholds server Tomcat Applikasjonsserver for servletbaserte applikasjoner. Munin Grafgenererningsrammeverk basert på DDRTool JavaDoc - Java dokumentasjon JMX (JavaManagementExtention) Dette er et rammeverk for henting av management data ut fra MBeans server. Mbeans (Management Beans) En server som kan bli startet etter behov ved å angi prefix i sdk 1.5.x eller som default i sdk 1.6.x XP Extreme Programming. En prosessutviklingsmodell. 4
Systembeskrivelse I denne delen av kravspesifikasjonen vil gruppen dokumentere sine oppfatninger om hvordan prosjektet skal utformes. Da de har benyttet seg av XP som er en Agile systemutviklingsprosess har de forbeholdt retten til å endre på kravspesifikasjonen underveis i den grad det har vært nødvendig og mulig. Generelt Pluginene gruppen utvikler vil bli lagt ut på Munin Exchange sidene til oppdragsgiveren http://muninexchange.projects.linpro.no/ og vil være med i neste versjon av Munin pakken. Hensikten er at alle bedrifter og enkeltpersoner som benytter seg av Munin til å overvåke og drifte systemer vil få tilgang til pluginene og benytte dem enkelt uten endringer i overvåkingsprosessen. Pluginene vil bli programmert til å møte Munin standarden som benytter RRD Tool for å prosessere data. Derfor vil pluginene også i hovedsak også være mest nyttig å implementere i et Unix miljø. Det er derimot ingenting som forhindrer pluginene å bli kjørt på en hver platform da Java som det skrives i er platform uavhengig. Pluginene vil være generelle, det vil si at pluginene kan hente ut data fra enhver Mbean server. I oppdragsgiveren sitt tilfelle er det ønskelig å hente ut data for Tomcat og Jboss. Gruppen har fokusert på å lage alle grafer som er mulig. Gruppen har testet dataene for Tomcat 5.5. Det eneste som må endres er porten og IP adressen som pluginen benytter for å lytte til en annen applikasjon. Applikasjonen som blir overvåket må ha implementert et MBean interface for at dataene skal bli sendt. Mange applikasjoner har allerede implementert dette interfacet. Ofte må programmet startes opp med en spesiell suffix slik at serveren startes. Med Tomcat 5.5 startes det ved å legge til disse linjene i /etc/init.d/tomcat5.5 5
CATALINA_OPTS="$CATALINA_OPTS -Dcom.sun.management.jmxremote \ -Dcom.sun.management.jmxremote.port=5400 \ -Dcom.sun.management.jmxremote.ssl=false \ -Dcom.sun.management.jmxremote.authenticate=false" Dette vil starte Tomcat med JMX. Serveren vil lytte til port 5400, denne kan byttes til en annen ønskelig port. Dersom denne porten endres må også porten til munin pluginene endres slik at de samsvarer. Her har vi startet JMX uten noen form for sikkerhet. Det er mulig å starte JMX slik at det benyttes SSL kryptering og brukernavn og passord. Brukernavn og passordet må fylles inn i en properties fil. For enkelhets skyld har vi unlatt å benytte sikkerheten da vi har fokusert på den funksjonelle delen. 6
Funksjonelle krav Kunden skal kunne overvåke grafer generert med Munin basert på følgende data for JVM. Med JVM menes ikke Java i sin helhet i et operativsystem, men som en instans av JVM. Det betyr at disse grafene kan implementeres for enhver Java prosess kjørende i et Unix miljø. Det skal hentes ut data for alle ManagementBean, herunder; MemoryMXBean, GarbageCollectorMXBean, OperatingSystemMXBean, RuntimeMXBean, ThreadMXBean og MemoryPoolMXBean. Data som ikke er tallverdier, eller konstanter skal ikke hentes ut da det ikke lar seg representere i grafer, herunder; operativsystem, Java versjon m.m. MemoryMXBean: 1. getobjectpendingfinalizationcount() 2. getheapmemoryusage().getcommitted() 3. getheapmemoryusage().getinit() 4. getheapmemoryusage().getmax() 5. getheapmemoryusage().getused() 6. getnonheapmemoryusage().getcommitted() 7. getnonheapmemoryusage().getinit() 8. getnonheapmemoryusage().getmax() 9. getnonheapmemoryusage().getused() GarbageCollectorMXBean: 1. getcollectioncount() 2. getcollectiontime() OperatingSystemMXBean: 1. getavailableprocessors() RuntimeMXBean: 7
1. getuptime() ThreadMXBean: 1. getcurrentthreadcputime 2. getcurrentthreadusertime() 3. getdaemonthreadcount() 4. getpeakthreadcount() 5. getthreadcount() 6. gettotalstartedthreadcount() 7. DeadLockedThreads() MemoryPoolMXBean: For disse objektene: Eden Space, Survivor Space, Tenured Gen, Perm Gen. Disse er separert i 12 grafer for å gjøre grafene mer oversiktlig. 1. getusage().getcommitted() 2. getusage().getinit() 3. getusage().getmax() 4. getusage().getused() 5. getcollectionusage().getcommitted() 6. getcollectionusage().getinit() 7. getcollectionusage().getmax() 8. getcollectionusage().getused() 9. getpeakusage().getcommitted() 10. getpeakusage().getinit() 11. getpeakusage().getmax() 12. getpeakusage().getused() 13. getmemorypooltreshold().tenuredgen() 14. getmemorypooltreshold().permgen() 15. getmemorypooltreshold().eden() 16. getmemorypooltreshold().survivor() ClassLoadingMXBean: 1. getloadedclasscount() 8
2. gettotalloadedclasscount() 3. getunloadedclasscount() CompilationMXBean: 1. gettotalcompilationtime() Da Munin fungerer slik at alle script som ligger i /etc/munin/plugins/ blir kjørt som et plugin betyr det at alle plugin gruppen lager trenger en fil i denne mappen. Denne filen må være en script som Unix miljøet kan kjøre direkte. Enten ved at det er et sh, bash, perl eller lignende script. Et Java program kan ikke kjøres direkte, den må bli kjørt via Java kommandoen. Gruppen har valgt å skrive scriptene i sh. Pluginene skal konsolideres med de binære javafilene. Det betyr at alle Munin felter og andre deler av pluginen skal ligge i Java programmet. Sh scriptet skal kun starte Java programmet enten med en config, eller $ip,$port suffix som blir lagret I String[] args I java programmet. Ikke-Funksjonelle krav Oppdragsgiver og gruppen har diskutert problematikken rundt plotting av data for ulike typer grafer, herunder kurver, plan og andre former. Oppdragsgiver har stilt krav om å organisere dataene på en måte som gjør det forståelig for driftpersonell å tolke endringer. For eksempel må man plotte en kurve minimum to ganger per bølgelengde for å unngå å få et rett plan (Nyquist rate). Da Munin oppdaterer grafer hvert 5. minutt vil grafer med bølgelengde kortere enn 10 minutter til en viss grad være ubrukelige og misvisende. Prioritering Følgende liste er i prioritert rekkefølge av krav. 1. Kunden ønsker flest mulig grafer relatert til minne da dette er et av de største problemene med Java. 2. Grafer for JBoss som er relatert til database connections(droppes) Graph_info og $variabel_info skal være fylt ut så godt som mulig for alle plugin. Disse feltene viser en beskrivelse av alle variable i grafen og en beskrivelse for grafen i sin helhet. 9