20 Mart 2017 Pazartesi

Matplotlib ile log analizi yapmak

Merhabalar; Bu blog yazımızda access.log dosyasımızdaki logları matplotlib kütüphanesini kullanarak grafiğini çıkaracağız. Dilerseniz bu log dosyasını indirebilir veya aynı formataki kendi log dosyanızı kullanabilirsiniz.
Matplotlib veriler üzerinde her türlü çizgi, histogram, bar, faz, dairesel ve daha nice grafik formatlarını sadece basit birkaç satır kod ile çıktı alabileceğimiz harika bir python kütüphanesidir. Nufus dağılımlarından, ülkedeki okuyan bilgisi, matematiksel bir denklemin grafiğinden, zararlı bir yazılımın dağılım hızı gibi aklınıza gelebilecek her türlü konuda rahatlıkla kullanabilirsiniz. İşin içine istatistiğin girdiği her konuda işinize ve ihtiyaçlarınıza fazlasıyla cevap verecektir. Günlük hayatta bir çok konuda uygulanabilir diyerek konunun girizgahını yapalım.
Yukarıda da bahsetmiş olduğumuz üzere biz bu yazımızda bir web sitesine ait access.log dosyasındaki belli bilgileri kullanarak matplotlib yardımıyla yazacağımız scripte herhangi bir access.log dosyasını vererek en çok request yapan ip adreslerini ve request değerlerini grafiğe dökeceğiz. Başlayalım!
Öncellikle aşağıdaki komut ile kütüphanemizi kuralım.
pip3 install matplotlib
Kodumuza kütüphanelerimizi dahil etmekle başlayalım.
from matplotlib import pyplot as plt #Grafikleri çizeceğimiz alan(plot)
from sys import argv #Dışarıdan argüman alacağımız için import ediyoruz.
En çok istekte bulunan n. kayda kadar listeleyeceğimiz için n argüman değerimizi ve log dosya adımızı dışardan alıyoruz.
logfile = argv[1]
n = int(argv[2])
access.log dosyamızın her bir satırı bir liste elemanı olacak şekilde log listemize atıyoruz.
with open(logfile, "r") as f:
 log = f.readlines()
Sonrasında access.log dosyamızdaki yalnızca ip sutununu alacak şekilde parse edelim ve ip değerlerimizi bir ip listesine atayalım.
ip = [i.split()[0] for i in log]
access.log dosyamızda tekrar eden ip adreslerini bire indirgiyoruz.(Tekrar durumundan önüne geçmek için)
uniq_ip = list()
[uniq_ip.append(i) for i in ip if i not in uniq_ip]
Şimdi ise her ip'den gelen toplam request sayısını bulalım. Yani frekansı.
freq = list()
[freq.append(ip.count(i)) for i in uniq_ip if i not in freq]
Request yapan ip'ler ve ip sayılarını bir liste içerisinde 2 elemanlı demetler şeklinde request sayısına göre büyükten küçüğe doğru sıralıyoruz.
eq = sorted(zip(freq, uniq_ip), reverse=True)
Şimdi plota çizeceğimiz eksen noktalarımızı belirleyelim.
y_axis  = [i[0] for i in eq] # y ekseni

# x ekseni. Her bir x noktasına bir y noktası denk geleceği için x ve y liste uzunluklarının eşit olmasına dikkat ediniz.
x_axis  = range(len(y_axis))

x_label = [i[1] for i in eq] # x eksenindeki etiket isimleri (ip adresleri)
y_axis değişkenimizde frekans sayıları, x_label değişkenimizde ise ip adresleri yer almaktadır.
# Grafiğimizi çizdik. marker ile x ve y ekseninin kesiştiği yere .(nokta) koyduk.
plt.plot(x_axis[:n], y_axis[:n], marker='.')

# x, y eksenindeki bilgi etiketlerini ve başlığı yazdırıyoruz.
plt.title(argv[1]+" File Analysis")
plt.ylabel("Total Request")
plt.xlabel("Ip Address")

# Grid ile x ve y ekseninde yatay ve dikey referans çizgilerini aktif ediyoruz.
plt.grid(True)

# X eksenimizdeki etiket alanında sayi görünmesi yerine ip adreslerini gösteriyoruz. 90 derece göndererek overlop olmasının önüne geçiyoruz.
plt.xticks(x_axis[:n], x_label[:n], rotation=90)

# y eksenimizi 50 birimlik referans çizgileri ile belirliyoruz. Daha fazla detay için küçük değer verilebilir.
plt.yticks(range(0,max(y_axis),50))

#Grafiğimizi gösteriyoruz.
plt.show()
Time to test :) En çok istek yapan ilk 10 ip'ye bakalım.
python3 log_analiz.py test_log 10
İlk paragrafta verdiğim örnek access log dosyasına bakalım.
python3 log_analiz.py access_log 30
Bu yazımızda matplotlib kütüphanesinin temel kullanımını güzel bir örnek ile anlatmış olduk. Sonraki yazılarımızda farklı grafik türlerini kullanarak örnekler yapacağız. Siz aynı örnek üzerinde request-time şeklinde grafik oluşturabilirsiniz. Tamamen size kalmış. Bir sonraki yazımızda ise dinamik grafik oluşturmayı göreceğiz. Ayrıca bu yazıda kullandığımız kodlara şuradan erişebilirsiniz. Sağlıcakla kalınız.

Kaynaklar:
http://matplotlib.org/api/pyplot_api.html

6 yorum :

  1. The development of artificial intelligence (AI) has propelled more programming architects, information scientists, and different experts to investigate the plausibility of a vocation in machine learning. Notwithstanding, a few newcomers will in general spotlight a lot on hypothesis and insufficient on commonsense application. machine learning projects for final year In case you will succeed, you have to begin building machine learning projects in the near future.

    Projects assist you with improving your applied ML skills rapidly while allowing you to investigate an intriguing point. Furthermore, you can include projects into your portfolio, making it simpler to get a vocation, discover cool profession openings, and Final Year Project Centers in Chennai even arrange a more significant compensation.


    Data analytics is the study of dissecting crude data so as to make decisions about that data. Data analytics advances and procedures are generally utilized in business ventures to empower associations to settle on progressively Python Training in Chennai educated business choices. In the present worldwide commercial center, it isn't sufficient to assemble data and do the math; you should realize how to apply that data to genuine situations such that will affect conduct. In the program you will initially gain proficiency with the specialized skills, including R and Python dialects most usually utilized in data analytics programming and usage; Python Training in Chennai at that point center around the commonsense application, in view of genuine business issues in a scope of industry segments, for example, wellbeing, promoting and account.


    The Nodejs Training Angular Training covers a wide range of topics including Components, Angular Directives, Angular Services, Pipes, security fundamentals, Routing, and Angular programmability. The new Angular TRaining will lay the foundation you need to specialise in Single Page Application developer. Angular Training

    YanıtlayınSil
  2. Standard visits recorded here are the simplest strategy to value your vitality, which is the reason why I am heading off to the site regularly, looking for new, fascinating information. Many, bless your heart!
    360DgiTMG data analytics course malaysia

    YanıtlayınSil
  3. It is the expect to give noteworthy information and best takes a shot at, including a perception of the regulatory cycle.
    data science course in malaysia

    YanıtlayınSil
  4. I looked at some very important and to maintain the length of the strength you are looking for on your website
    data scientist course in noida

    YanıtlayınSil
  5. Amazingly by and large very interesting post. I was looking for such an information and thoroughly enjoyed examining this one. Keep posting. An obligation of appreciation is all together for sharing.typeerror nonetype object is not subscriptable

    YanıtlayınSil
  6. we train the students from basics to advanced level marketing methods and strategies of online marketing. Which has to be followed thoroughly and this will help them to learn each step during their training with practical knowledge. data science course syllabus

    YanıtlayınSil