Aktivitas jaringan internet memang menarik untuk dianalisis, apalagi jika NOC perusahaan memiliki sistem administrasi jaringan yang bagus. Trouble yang ditemui membuat admin selalu belajar meningkatkan performansi layanan. Pada tulisan ini, penulis mengolah data access log squid yang ditempatkan pada proxy server.
Data access log dapat kita copy dan diletakkan dalam folder khusus atau diakses real time. Data ini kita baca menggunakan fungsi read.table sebagai berikut :
> read.table(“/var/log/squid/access.log”) -> myaccess.log
Data myaccess.log terdiri dari sepuluh variabel penting web caching.
1. Waktu pencatatan access log.
Dengan menggunakan Date-Time Conversion Functions di R, kita dapat mengetahui rentang waktu pencatatan access.log. Dalam obyek myaccess.log di atas, melalui variabel pertama kita dapat mengetahui waktu pencatatan log. Berikut ini script untuk menampilkan data waktu :
> myaccess.log[1,1] -> z1 # Start pencatatan access.log
> myaccess.log[nrow(myaccess.log),1] -> z2 # Akhir pencatatan access.log
Kemudian data pada obyek z1 dan z2 tersebut kita convert berdasarkan Unix Time / POSIX Time dengan menggunakan script sebagai berikut :
> ISOdatetime(1970,1,1,0,0,0) + z1 -> start.time.mylog
> ISOdatetime(1970,1,1,0,0,0) + z2 -> end.time.mylog
Berdasarkan hasil tersebut maka waktu rentang pencatatan log adalah
mulai : 2008-09-20 23:25:07Z
akhir : 2008-09-21 10:43:17Z ,
atau selama 11.30275 jam.
2. Tipe Content paling sering diakses.
Untuk mengetahui summary most popular content type, dapat kita analisis variabel lima dan sepuluh data myaccess.log.
Berikut ini script sederhana untuk menampilkan persentase akses, volume dan rata-rata dalam tiap tipe konten.
> table(myaccess.log[[10]]) -> count.mylog
> tapply(myaccess.log[[5]],myaccess.log[[10]],sum) -> volume.mylog
> tapply(myaccess.log[[5]],myaccess.log[[10]],mean) -> mean.size
Dalam analisis ini kita tidak menyertakan kelompok tanpa content (-), yaitu 302 (Found) dan 304 (Not Modified). Untuk itu, ada beberapa tambahan script sedikit untuk menghilangkan kelompok yang tidak kita kehendaki.
> count.mylog[rownames(count.mylog) != "-"] -> count.mylog.with
> volume.mylog[rownames(volume.mylog) != "-"] -> volume.mylog.with
> mean.size[rownames(mean.size) != "-"] -> mean.size.with
Berdasarkan obyek-obyek diatas maka summary analisis dapat kita tampilkan menjadi satu melalui fungsi cbind.
> summary.myaccess.log < - cbind(count.mylog.with/sum(count.mylog.with)*100,volume.mylog.with/sum(volume.mylog.with)*100,mean.size.with/1000)
Hasil akhir dapat ditampilkan dengan mengurutkan kelompok tipe konten berdasarkan persentase jumlah akses tertinggi.
> summary.myaccess.log[order(summary.myaccess.log[,1],decreasing=TRUE),] -> result1
| Content Type | Count (%) | Volume (%) | Mean Size (KB) |
|---|---|---|---|
|
|
|||
| application/octet-stream | 21.79 | 75.94 | 86.27 |
| text/html | 19.41 | 2.71 | 3.46 |
| text/plain | 15.84 | 0.36 | 0.57 |
| image/gif | 15.60 | 1.68 | 2.67 |
| image/jpeg | 12.09 | 10.07 | 20.63 |
| image/png | 4.11 | 0.72 | 4.32 |
| text/javascript | 2.51 | 0.45 | 4.44 |
| application/x-javascript | 2.39 | 0.76 | 7.87 |
| application/vnd.google-earth.kmz | 1.56 | 0.59 | 9.45 |
| application/x-shockwave-flash | 1.56 | 5.92 | 94.08 |
| text/css | 1.24 | 0.26 | 5.17 |
| text/xml | 0.65 | 0.18 | 6.79 |
| image/x-icon | 0.52 | 0.08 | 4.03 |
| application/javascript | 0.38 | 0.10 | 6.31 |
| application/pkix-crl | 0.15 | 0.01 | 0.96 |
| application/vnd.google-earth.kml+xml | 0.13 | 0.03 | 5.94 |
| application/xml | 0.04 | 0.00 | 0.66 |
| image/vnd.microsoft.icon | 0.03 | 0.00 | 0.85 |
| application/pdf | 0.01 | 0.13 | 260.05 |
| dat | 0.01 | 0.00 | 2.85 |
3. Mean dan Median Service Times.
Dengan menggunakan data pada variabel kedua, maka dengan menggunakan script R berikut ini kita dapat memperoleh nilai ukuran pemusatan Service Times pada cache.
> tapply(myaccess.log[[2]],myaccess.log[[4]],mean) -> mean.time
> tapply(myaccess.log[[2]],myaccess.log[[4]],median) -> median.time> summary.time.myaccess.log < - cbind(mean.time/1000,median.time/1000)
> summary.time.myaccess.log[order(summary.time.myaccess.log[,1],decreasing=TRUE),] -> result2
Hasilnya adalah sebagai berikut :
| Type | Mean (sec) | Median (sec) |
|---|---|---|
|
|
||
| TCP_REFRESH_HIT/200 | 12.85 | 0.25 |
| TCP_MISS/200 | 3.63 | 0.73 |
| TCP_CLIENT_REFRESH_MISS/200 | 2.68 | 1.86 |
| TCP_MISS/000 | 2.32 | 2.81 |
| TCP_MISS/503 | 2.19 | 1.99 |
| TCP_REFRESH_MISS/200 | 1.49 | 1.40 |
| TCP_MISS/411 | 1.30 | 1.30 |
| TCP_MISS/403 | 0.89 | 0.89 |
| TCP_MISS/400 | 0.75 | 0.75 |
| TCP_MISS/302 | 0.72 | 0.58 |
| TCP_MISS/301 | 0.58 | 0.48 |
| TCP_MISS/404 | 0.48 | 0.43 |
| TCP_MISS/204 | 0.44 | 0.47 |
| TCP_MEM_HIT/200 | 0.30 | 0.02 |
| TCP_MISS/207 | 0.26 | 0.22 |
| TCP_MISS/401 | 0.25 | 0.17 |
| TCP_MISS/304 | 0.21 | 0.15 |
| TCP_DENIED/400 | 0.17 | 0.17 |
| TCP_REFRESH_HIT/304 | 0.16 | 0.14 |
| TCP_HIT/200 | 0.06 | 0.01 |
| TCP_IMS_HIT/304 | 0.02 | 0.01 |
| TCP_DENIED/413 | 0.01 | 0.01 |
| TCP_NEGATIVE_HIT/404 | 0.00 | 0.00 |
Demikian, masih banyak informasi yang bisa didalami, terutama rekan-rekan yang suka dalam web caching. Banyak aplikasi analisis squid tersedia bebas (free & open source), sehingga mudah2an script sederhana ini dapat membuat kita semakin sayang dengan data terdekat kita dan mampu melakukan eksplorasi sesuai kebutuhan.
Terima kasih buat mas Iqbal (Dhodit).
Salam.
Unung Istopo.

thanx, bagus banget nih artikel, aq malah ga kepikir analisis log squid pake r