Home > World Of ICT > IPutil for Monitoring High Performance Computing system

IPutil for Monitoring High Performance Computing system


Hari ini tanggal 22 Juli 2014, bertepatan dengan penetapan rekapitulisasi total perolehan suara Capres  oleh KPU.  Saya berharap kepada Presiden terpilih agar menjalankan amanah kepemimpinan ini dengan sebaik-baiknya, semoga rakyat Indonesia semakin sejahtera dibawah kepemimpinan beliau kelak.

Biarlah KPU menyelesaikan tugasnya sampai tuntas😀 , kali ini kita akan mengupas bagaimana caranya memonitor salah satu system High Performace Computing yang kami kelola yaitu Sistem Informasi Akademik (SIAKAD) Unila. Mengapa dan untuk apa dimonitor ?? tentu pertanyaan ini akan muncul dibenak pembaca, baiklah saya coba ulas sedikit bagaimana konsep proyek rekayasa perangkat lunak yang umumnya diimplementasikan oleh kebanyakan developer sistem informasi, sebagian besar dari mereka mengadopsi konsep Sistem Development Life Cycle (SDLC).

SDLC terdiri dari 6 Fase Siklus yang berkelanjutan yaitu;  Fase Planning, Fase Analysis, Fase Design, Fase Implementation, Fase Support.  Secara spesifik proses  Monitor System Performance dilakukan pada fase ke 6 (Support) setelah seluruh sistem dipastikan telah berjalan dengan baik dan sesuai dengan requirement yang ada. Measuring Performance sangat penting dilakukan untuk mengukur tingkat kehandalan/endurance suatu sistem terutama ketika dihadapkan dengan serangkaian beban kerja/load besar, dari hasil analisis selanjutnya akan dijadikan pertimbangan apakah sistem existing sudah stable atau perlu dilakukan scalling out, scalling up  untuk meningkatkan kinerja. Saya kira cukup sekian penjelasannya, kesimpulannya proses monitoring ini penting… titik !!!😀

Ok Lets move to another point, kita punya sistem dengan resource komputasi tinggi,  kira kira aplikasi apa yang cocok digunakan untuk memonitor ?? , karena platform virtualization berbasis VMWare Enterprise sebagai backend aplikasi maka sebetulnya VCentre yang reliable melakukan tugas ini, namun berhubung kita tidak punya lisensinya makanya beralih ke skenario alternatif lainnya. Ahaa  Ai Ce… there is Simple Network Management Protocol (SNMP) technology yang dapat digenerate dengan aplikasi third party semacam Solarwind, PRTG, MRTG  dan sebangsanya, tapi menurut saya itu terlalu Main Streaammm sodaraa sodaraa  hehehe. Kita coba dengan “hard way” yaitu build from the scrath menggunakan Python programming.  hmmm….   Whatttt ?? Python maniiing Python maniiing  kagak bosen lu Ndrooooo😀 ,  ya kagak lah bro…. namanya  juga belajar, ibarat kate pepateh “Lifelong learning is the ongoing, voluntary, and self-motivated”  jadi akan terus berproses gak pake bosen🙂 .

Yap kita siapkan dulu alat dan bahan yang dibutuhkan, gak perlu ke warung, mini market, apalagi indo maret, cukup siapkan Python dengan library Matplotlib, Numpy, Scipy, Python Psutil, Python MySQL Library, MySQL database, dan yang terpenting adalah “self motifated” tadi. Jika sudah kira kira ini source code hasil experiment saya, silahkan anda compile sendiri;

  • Listing program capturing memory utilization
#!/usr/bin/python
#By-Gigih-F, iseng-iseng aja : 17-07-2014 13:38 WIB)
import time
import datetime
now = datetime.datetime.now()
jam= now.strftime("%Y-%m-%d %H:%M")
import MySQLdb
import os
try:
 import psutil
except ImportError:
 print "Cannot import psutil module - this is needed for this application.";
 print "Exiting..."
 sys.exit();
try:
 import re # Needed for regex
except ImportError:
 print "Cannot import re module - this is needed for this application.";
 print "Exiting..."
 sys.exit();
#
# Routine to add commas to a float string
#
def commify3(amount):
 amount = str(amount)
 amount = amount[::-1]
 amount = re.sub(r"(\d\d\d)(?=\d)(?!\d*\.)", r"\1,", amount)
 return amount[::-1]
# end def commify3(amount):
# ===================
# Main Python section
# ===================
if __name__ == '__main__':
# memory usage:
 mem = psutil.virtual_memory();
 used = mem.total - mem.available;
 a1 = str(int(used / 1024 / 1024)) + "M";
 a2 = str(int(mem.total / 1024 / 1024)) + "M";
 a3 = commify3(a1) + "/" + commify3(a2);
 memtot = int(mem.total / 1024 / 1024);
 memavailable = int(mem.available / 1024 / 1024);
 memuse= memtot - memavailable
 mempercent = (mem.percent);
 muse1bufcache = int(mem.used / 1024 / 1024);
 memfree = int(mem.free / 1024 / 1024);
 memactive = int(mem.active / 1024 / 1024);
 meminactive = int(mem.inactive/ 1024 / 1024);
 membuffers = int(mem.buffers / 1024 / 1024);
 memcache = int(mem.cached / 1024 / 1024);
conn = MySQLdb.connect(host= "192.168.xxx.yyy",
 user="username",
 passwd="xxxyyy",
 db="siakad_monitor")
x = conn.cursor()
try:
 x.execute("""INSERT INTO memory VALUES (%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s)""", (now,memtot,memavailable,memuse,muse1bufcache,mempercent,memfree,mema
ctive,meminactive,membuffers,memcache,swaptot,swapused,swapfree,swappercent,swapin,swapout ))
 conn.commit()
except:
 conn.rollback()
# end if
  • Listing program plotting from database
##By-Gigih-F, iseng-iseng aja : 16-07-2014 13:52 WIB)
import matplotlib
matplotlib.use('Agg')
import Image
import MySQLdb as mdb
import sys
import matplotlib.pyplot as plt
import datetime
import shutil


now = datetime.datetime.now()
print now
#Inisialisasi ke Database
conn = mdb.connect('192.168.xxx.yyy', 'usernamemysql', 'xyzxyz', 'siakad_monitor');

with conn:
 cursor = conn.cursor ()
 cursor.execute ("SELECT memory.date,memory.memtot,memory.memavailable,memory.memuse,memory.muse1bufcache,memory.mempercent,memory.memfree,memory.memactive,memory.mem
inactive,memory.membuffers,memory.memcache FROM memory WHERE DATE (date) = DATE(NOW()) ")
 row = cursor.fetchall()
 print "RESULT:", row[0]
 date,memtot,memavailable,memuse,muse1bufcache,mempercent,memfree,memactive,meminactive,membuffers,memcache=zip(*row) #Fetching setiap row

def plot1():
 fig = matplotlib.pyplot.gcf()
 fig.set_size_inches(18.5,10.5)
 ax = plt.subplot(111)
 plt.plot(date,memuse,marker='+',linestyle='-',color='c',label='Utilisasi Memory Usage')
 plt.legend(loc=10)
 plt.ylabel('Memory Usage (MByte) ') #Label pada sumbu Y
 plt.xlabel('Waktu') #Label pada sumbu X
 plt.grid()
 plt.title(' Memory Usage SIAKAD tgl : [%s] (Credit to Python+MySQL)'%(now)) #Judul Grafik
 plt.savefig('/var/xxx/yyy/SIAKAD/siakadmemuse.png', dpi=100) #Simpan file dengan judul xxx.png
 plt.close()
def plot2():
 fig = matplotlib.pyplot.gcf()
 fig.set_size_inches(18.5,10.5)
 ax = plt.subplot(111)
 plt.plot(date,memavailable,marker='+',linestyle='-',color='c',label='Available Memory (MByte)')
 plt.legend(loc=10)
 plt.ylabel('Available Memory (MByte) ') #Label pada sumbu Y
 plt.xlabel('Waktu') #Label pada sumbu X
 plt.grid()
 plt.title(' Available Memory Server SIAKAD tgl : [%s] (Credit to Python+MySQL)'%(now)) #Judul Grafik
 plt.savefig('/var/xxx/yyy/SIAKAD/siakadmemavailable.png', dpi=100) #Simpan file dengan judul xxx.png
 plt.close()

def plot3():
 fig = matplotlib.pyplot.gcf()
 fig.set_size_inches(18.5,10.5)
 ax = plt.subplot(111)
 plt.plot(date,memuse,marker='+',linestyle='-',color='c',label='Memory Usage (MByte)')
 plt.legend(loc=10)
 plt.ylabel('Memory Usage (MByte) ') #Label pada sumbu Y
 plt.xlabel('Waktu') #Label pada sumbu X
 plt.grid()
 plt.title(' Memory Usage Server SIAKAD tgl : [%s] (Credit to Python+MySQL)'%(now)) #Judul Grafik
 plt.savefig('/var/xxx/yyy/SIAKAD/siakadmemuse.png', dpi=100) #Simpan file dengan judul xxx.png
 plt.close()

def plot4():
 fig = matplotlib.pyplot.gcf()
 fig.set_size_inches(18.5,10.5)
 ax = plt.subplot(111)
 plt.plot(date,muse1bufcache,marker='+',linestyle='-',color='c',label='Memory + Cache Usage (MByte)')
 plt.legend(loc=10)
 plt.ylabel('Memory + Cache Usage (MByte) ') #Label pada sumbu Y
 plt.xlabel('Waktu') #Label pada sumbu X
 plt.grid()
 plt.title(' Memory + Cache Usage Server SIAKAD tgl : [%s] (Credit to Python+MySQL)'%(now)) #Judul Grafik
 plt.savefig('/var/xxx/yyy/SIAKAD/siakadmuse1bufcache.png', dpi=100) #Simpan file dengan judul xxx.png
 plt.close()

def plot5():
 fig = matplotlib.pyplot.gcf()
 fig.set_size_inches(18.5,10.5)
 ax = plt.subplot(111)
 plt.plot(date,mempercent,marker='+',linestyle='-',color='c',label='Persentage Memory Utilization')
 plt.legend(loc=10)
 plt.ylabel('Percentage Memory Utilization') #Label pada sumbu Y
 plt.xlabel('Waktu') #Label pada sumbu X
 plt.grid()
 plt.title(' Persentage Memory Utilization: tgl : [%s] (Credit to Python+MySQL)'%(now)) #Judul Grafik
 plt.savefig('/var/xxx/yyy/SIAKAD/siakadmempercent.png', dpi=100) #Simpan file dengan judul xxx.png
 plt.close()


def plot6():
 fig = matplotlib.pyplot.gcf()
 fig.set_size_inches(18.5,10.5)
 ax = plt.subplot(111)
 plt.plot(date,memfree,marker='+',linestyle='-',color='c',label='Free Memory SIAKAD')
 plt.legend(loc=10)
 plt.ylabel('Free Memory (MByte) ') #Label pada sumbu Y
 plt.xlabel('Waktu') #Label pada sumbu X
 plt.grid()
 plt.title(' Free Memory SIAKAD tgl : [%s] (Credit to Python+MySQL)'%(now)) #Judul Grafik
 plt.savefig('/var/xxx/yyy/SIAKAD/siakadmemfree.png', dpi=100) #Simpan file dengan judul xxx.png
 plt.close()
def plot7():
 fig = matplotlib.pyplot.gcf()
 fig.set_size_inches(18.5,10.5)
 ax = plt.subplot(111)
 plt.plot(date,memactive,marker='+',linestyle='-',color='c',label='Memory Active (Mbyte)')
 plt.legend(loc=10)
 plt.ylabel('Memory Active (Mbyte) ') #Label pada sumbu Y
 plt.xlabel('Waktu') #Label pada sumbu X
 plt.grid()
 plt.title(' Memory Active tgl : [%s] (Credit to Python+MySQL)'%(now)) #Judul Grafik
 plt.savefig('/var/xxx/yyy/SIAKAD/siakadmemactive.png', dpi=100) #Simpan file dengan judul xxx.png
 plt.close()


def plot8():
 fig = matplotlib.pyplot.gcf()
 fig.set_size_inches(18.5,10.5)
 ax = plt.subplot(111)
 plt.plot(date,meminactive,marker='+',linestyle='-',color='c',label='Memory Inactive (MByte)')
 plt.legend(loc=10)
 plt.ylabel('Memory Inactive (MByte) ') #Label pada sumbu Y
 plt.xlabel('Waktu') #Label pada sumbu X
 plt.grid()
 plt.title(' Memory Inactive tgl : [%s] (Credit to Python+MySQL)'%(now)) #Judul Grafik
 plt.savefig('/var/xxx/yyy/SIAKAD/siakadmeminactive.png', dpi=100) #Simpan file dengan judul xxx.png
 plt.close()

def plot9():
 fig = matplotlib.pyplot.gcf()
 fig.set_size_inches(18.5,10.5)
 ax = plt.subplot(111)
 plt.plot(date,membuffers,marker='+',linestyle='-',color='c',label='Memory Buffer (MByte)')
 plt.legend(loc=10)
 plt.ylabel('Memory Buffer (MByte) ') #Label pada sumbu Y
 plt.xlabel('Waktu') #Label pada sumbu X
 plt.grid()
 plt.title(' Memory Buffer tgl : [%s] (Credit to Python+MySQL)'%(now)) #Judul Grafik
 plt.savefig('/var/xxx/yyy/SIAKAD/siakadmembuffers.png', dpi=100) #Simpan file dengan judul xxx.png
 plt.close()


def plot10():
 fig = matplotlib.pyplot.gcf()
 fig.set_size_inches(18.5,10.5)
 ax = plt.subplot(111)
 plt.plot(date,memcache,marker='+',linestyle='-',color='c',label='Memory Cache (Mbyte)')
 plt.legend(loc=10)
 plt.ylabel('Memory Cache (Mbyte) ') #Label pada sumbu Y
 plt.xlabel('Waktu') #Label pada sumbu X
 plt.grid()
 plt.title(' Memory Cache tgl : [%s] (Credit to Python+MySQL)'%(now)) #Judul Grafik
 plt.savefig('/var/xxx/yyy/SIAKAD/siakadmemcache.png', dpi=100) #Simpan file dengan judul xxx.png
 plt.close()

def plot11():
 fig = matplotlib.pyplot.gcf()
 fig.set_size_inches(18.5,10.5)
 ax = plt.subplot(111)
 plt.plot(date,memtot,marker='+',linestyle='-',color='c',label='Total Memory (MByte) ')
 plt.legend(loc=10)
 plt.ylabel('Memory Usage (MByte) ') #Label pada sumbu Y
 plt.xlabel('Waktu') #Label pada sumbu X
 plt.grid()
 plt.title(' Total Memory SIAKAD tgl : [%s] (Credit to Python+MySQL)'%(now)) #Judul Grafik
 plt.savefig('/var/xxx/yyy/SIAKAD/siakadmemory.png', dpi=100) #Simpan file dengan judul xxx.png
 plt.close()

plot1()
plot2()
plot3()
plot4()
plot5()
plot6()
plot7()
plot8()
plot9()
plot10()
plot11()

Kira kira hasil akhir plotting grafik load memorynya seperti berikut.

siakad

Thanks to Google, Python and Friends.

 

  1. No comments yet.
  1. No trackbacks yet.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: