Bár nem szoktam sokat cikkezni VMware-ről, annál intenzívebben használom a cég virtualizációs megoldásait. A napokban olvastam egy cikket melyben egy JAVA toolt mutatnak be performancia elemzésre. Nagyon megörültem neki, mert virtuális környezetben állandó kérdés a teljesítmény és kapacitás kimutatás. Maga a VMware is kínál robusztus, grafikus eszközöket erre a problémára. Most viszont egy apró ingyenes megoldást kívánok bemutatni.

Mire jó és mire nem?

Ez nem egy appliance, illetve nem fut folyamatosan, csak ahogy beállítottuk, és mi magunk elindítottuk. Illetve, ami nagyon fontos, hogy a tool csak a definiált teljesítmény adatokat gyűjti össze, semmit nem értékel ki számunkra, vagy jelenít meg grafikusan. Azt már magunknak kell megtennünk. Tehát, ha valaki a több ezer dolláros komplex telejesímény mérő és kiértékelő software-t keres, akkor ezzel az egyszerű java toolal, nem fogja megtalálni, azt amit keres.

Hogyan működik?

Először is le kell tölteni a tool-t a http://labs.vmware.com/flings/statsfeeder oldalról. Tömörítsük ki és a következő állományokat kell majd látnunk.

statsfeeder1

Windows esetban a StatsFeeder.bat Linux/Unix esetében a StatsFeeder.sh scriptet kell használni.

Mielőtt elindítjuk, nézzük meg a konfigurációs állományát.

# cat config/sampleConfig.xml

<?xml version="1.0" encoding="UTF-8"?>

<statsfeeder>
    <numberOfThreads>10</numberOfThreads>

    <frequency unit="second">600</frequency>
 
    <feeder>true</feeder>
    <csvOutput>true</csvOutput>
    <receivers>
        <receiver>
            <name>csvOutput</name>
            <class>
            com.vmware.ee.statsfeeder.CSVFileStatsReceiver
            </class>
            <properties>
                <property>
                    <name>file</name>
                    <value>output.csv</value>
                </property>
            </properties>
        </receiver>
    </receivers>

    <entityList>

        <entities>
            <receivers>csvOutput</receivers>
            <container>
                <name>vCenter</name>
                <type>Folder</type>
            </container>
            <childType>HostSystem,VirtualMachine</childType>
            <exceptions></exceptions>
            <intervalId>20</intervalId>

            <maxSamples>45</maxSamples>
            <statsList>
                <!-- Stats common to both VMs and Hosts -->
                <stat>cpu.used.summation</stat>

                <!-- Stats specific to VMs -->
                <stat>cpu.system.summation</stat>
                <stat>cpu.wait.summation</stat>
                <stat>cpu.ready.summation</stat>
                <stat>cpu.extra.summation</stat>
                <stat>cpu.guaranteed.latest</stat>
                <stat>mem.swapped.average</stat>
                <stat>mem.swaptarget.average</stat>
                <stat>mem.vmmemctl.average</stat>

                <!-- Stats specific to hosts -->
                <stat>cpu.used.summation</stat>
                <stat>cpu.idle.summation</stat>
                <stat>disk.usage.average</stat>
                <stat>disk.read.average</stat>
                <stat>disk.write.average</stat>
                <stat>disk.commands.summation</stat>
                <stat>disk.numberRead.summation</stat>
                <stat>disk.numberWrite.summation</stat>
                <stat>disk.commandsAborted.summation</stat>
                <stat>disk.busResets.summation</stat>
                <stat>net.packetsRx.summation</stat>
                <stat>net.packetsTx.summation</stat>
                <stat>net.usage.average</stat>
                <stat>net.received.average</stat>
                <stat>net.transmitted.average</stat>
            </statsList>
        </entities>
    </entityList>
</statsfeeder>

Ahogy látszik ez egy XML. Én a legtöbb megjegyzést eltávolítottam. A minta konfiguráció így van beállítva, tehát ha ezzel indítjuk el a tool-t, akkor ezek a feltételek szerint fog működni az alkalmazás.

Ahogy látszik, tudunk minden féle idő intervallumot, és mintavételezési sűrűséget beállítani. Szintén itt tudjuk beállítani, hogy milyen file-ba íródjanak az adatok. Ezek után tudunk entry-ket definiálni. Milyen elemeken, milyen sűrűn, és mennyi mintát vegyen a program. Illetve elemenként fel tudjuk sorolni, hogy milyen teljesítmény adatokat gyűjtsön.

Nézzünk néhány példát:

Gyűjtsük össze a felsorolt statisztikákat minden VM-ről, ami a megadott, “FAKE” Datacenterben érhető el.

      <entities>
            <receivers>csvOutput</receivers>
            <container>
                <name>Fake</name>
                <type>Datacenter</type>
            </container>
            <childType>VirtualMachine</childType>
            <exceptions></exceptions>
            <intervalId>20</intervalId>
            <maxSamples>3</maxSamples>
            <statsList>
                <stat>cpu.used.summation</stat>
                <stat>cpu.ready.summation</stat>
                <stat>mem.vmmemctl.average</stat>
                <stat>mem.swapped.average</stat>
                <stat>net.received.average</stat>
                <stat>net.transmitted.average</stat>
                <stat>disk.read.average</stat>
                <stat>disk.write.average</stat>
            </statsList>
        </entities>

Gyűjtsük össze a felsorolt statisztikákat minden HOST-ról a megadott “ha cluster” cluster-ban.

        <entities>
            <receivers>csvOutput</receivers>
            <container>
                <name>ha cluster</name>
                <type>ClusterComputeResource</type>
            </container>
            <childType>HostSystem</childType>
            <exceptions></exceptions>
            <intervalId>20</intervalId>
            <maxSamples>3</maxSamples>
            <statsList>
                <stat>cpu.usage.average</stat>
                <stat>cpu.usagemhz.average</stat>
            </statsList>
        </entities>

Gyűjtsük össze a felsorolt statisztikákat csupán egyetlen megadott VM-ről.

        <entity>
            <receivers>csvOutput</receivers>
            <name>win2k332-2</name>
            <type>VirtualMachine</type>
            <intervalId>20</intervalId>
            <maxSamples>3</maxSamples>
            <statsList>
                <stat>cpu.usage.average</stat>
                <stat>cpu.usagemhz.average</stat>
                <stat>mem.consumed.average</stat>
                <stat>mem.usage.average</stat>
            </statsList>
        </entity>

Gyűjtsük össze a felsorolt statisztikákat minden VM-ről egy megadott vApp-ban.

        <entities>
            <receivers>csvOutput</receivers>
            <container>
                <name>vAppTest</name>
                <type>ResourcePool</type>
            </container>
            <childType>VirtualMachine</childType>
            <exceptions></exceptions>
            <intervalId>20</intervalId>
            <maxSamples>3</maxSamples>
            <statsList>
                <stat>cpu.usage.average</stat>
                <stat>cpu.usagemhz.average</stat>
            </statsList>
        </entities>

Gyűjtsük össze a felsorolt statisztikákat minden VM-ről, egy megadott HOST-on. A <exceptions> részben definiálhatjuk azokat a VM-eket, amiket ki akarunk hagyni a gyűjtésből.

        <entities>
            <receivers>csvOutput</receivers>
            <container>
                <name>namib.eng.vmware.com</name>
                <type>HostSystem</type>
            </container>
            <childType>VirtualMachine</childType>
            <exceptions>dos-r-100,dos-r-101</exceptions>
            <intervalId>20</intervalId>
            <maxSamples>3</maxSamples>
            <statsList>
                <stat>cpu.usage.average</stat>
                <stat>cpu.usagemhz.average</stat>
            </statsList>
        </entities>

Gyűjtsük össze a felsorolt statisztikákat a felsorolt VM-ekről.

        <entity>
            <receivers>csvOutput</receivers>
            <name>dos-r-100,dos-r-101,dos-r-102,dos-r-103</name>
            <type>VirtualMachine</type>
            <intervalId>20</intervalId>
            <maxSamples>3</maxSamples>
            <statsList>
                <stat>cpu.usage.average</stat>
                <stat>cpu.usagemhz.average</stat>
            </statsList>
        </entity>

Ezek a példák megjegyzésként ugyan úgy megtalálhatóak a sampleConfig.xml file-ban, ahogy itt felsoroltam. Remélem látszik, hogy viszonylag egyszerűn testre lehet szabni a feltételeket. Miről, mit akarunk lejegyezni.

Amennyiben megírtuk a konfigurációs állomány, most már csak futtatnunk kell azt:

Windows c:\ StatsFeeder.bat -h my-vcenter-ip.vmware.com -u root -p “secret” -c config\sampleConfig.xml
Linux/UNIX # StatsFeeder.sh -h 10.28.140.147 -u Administrator -p password -c config\sampleConfig.xml

A parancs azonnal elkezdi létrehozni a kimeneti file-t, amit megadtunk a konfigban. Alapértelmezésként az output.csv. Nézzünk bele, mit is fogunk látni a CSV-ben.

statsfeeder2

Én most egy sima Microsoft Excel-el nyitottam, meg. Természetesen a CSV formátumot akármi mással is fel tudjuk dolgozni. A továbbiakban én maradok az Excel-nél. Ahogy látjuk a CSV csupán a rengeteg információt tartalmaz. Viszont Excel-ben is elég beállítani egy AutoFilter-t, kilistázni például a CPU.USED statisztikákat.

statsfeeder3

A maradék sorokat kijelölve, és grafikont csinálva máris egyértelművé válnak az értékek.

statsfeeder4

statsfeeder5

Természetesen megfelelő szűréssel, és grafikonnal teljesen mást tudunk kirajzolni. Ezt viszont gyorsan, és egyszerűen megtehetjük. Amennyiben megfelelő programunk, scriptünk van, akár automatikusan is feldolgozhatjuk az adatokat, igény szerint. Erről viszont már magunknak kell gondoskodnunk. Ingyen csak az információ kinyerését, és CSV-be tárolását kapjuk az alkalmazás által.

Ha valakinek nem hosszú távon, csak hibakeresés, és pillanatnyi szűk keresztmetszetet kell kimutatni, vagy megtalálni, arra ideális eszköz lehet.