Categories
DevOp Open Source

Analisa Trafik AWS S3 Dengan AWStats, Ubuntu

Alternatif percuma terbaik untuk Google Analytics (bagi saya) adalah Piwik. Mulanya ingat nak guna Piwik untuk analisa trafik dan download yang diterima di AWS S3. Tapi kemudian saya dapati Piwik, secanggih-canggih dia ni, tidak dapat menganalisa saiz data yang bergerak ataupun bandwidth.

Piwik memang hebat. Kalau untuk laman web memang elok. Dan ianya berfungsi lebih kurang sama macam Google Analytic, dengan code Javascript. Jadi memang senang nak digunakan dan data trafik pengunjung juga agak mendalam. Piwik juga boleh digunakan untuk analisa carian dalam laman web, digunakan bersama web e-commerce dan analisa jualan, dan lain-lain. Piwik juga ada pilihan untuk analisa log, tapi data yang ditarik dari log untuk dipaparkan agak terhad.

Jadi pilihan seterusnya adalah AWStats. Berbeza dengan Piwik, AWStats hanya berfungsi dengan membaca fail log. Webserver macam Apache, IIS semuanya ada menulis log trafik yang diterima. Dan AWStats membaca, menganalisa dan merumuskan log ini kepada paparan yang lebih mudah difahami. Oleh sebab cara ianya berfungsi yang sebegini, AWStats tidak boleh memberi maklumat pengunjung secara langsung atau “live”. Namun daripada log, kita boleh mengetahui saiz data yang telah dihantar kepada pengunjung. Contohnya, sekiranya sebuah fail PDF dimuat-turun, data saiz yang dihantar direkodkan sebagai log. Bila dikumpulkan data ini, kita tahu berapa banyak bandwidth yang telah kita gunakan. Ini penting untuk khidmat storan fail statik macam AWS S3.

AWS S3 sebenarnya mempunyai pelbagai ciri-ciri canggih, termasuklah menulis log untuk setiap capaian yang diterima. Ianya merekodkan fail yang diakses, tarikh, masa, saiz fail dan lain-lain. Log ini boleh digunakan bersama AWStats untuk mengetahui rumusan trafik yang diterima.

Mengetahui perincian ini berguna dalam memahami kenapa Amazon mengenakan caj yang telah dicajkan dalam bil bulanan. Ataupun sekiranya kita mengenakan caj kepada pelanggan lain, kita boleh memberikan bil ekstra apabila laman web beliau menggunakan lebih daripada kuota yang ditetapkan untuk dia.

Baiklah, apa-apa pun, ini langkah untuk mula menganalisa log AWS S3 denga AWStats. Elok saya maklumkan yang saya menggunakan server Ubuntu. Jadi itu andaian saya untuk langkah-langkah yang saya terangkan ini.

  1. Pasang & Konfigurasi AWStats
  2. Tetapan Konfigurasi Logging dan Lifecycle pada Bucket S3
  3. Muat-turun log S3 ke server dengan s3cmd
  4. Gunakan AWStats untuk menganalisa log S3
  5. Konfigurasi Apache untuk AWStats dan melihat rumusan analisa
  6. Automasi: gabungkan muat-turun log S3 dan analisa AWStats untuk dilaksanakan secara berkala (cron)

Pasang & konfigurasi AWStats

Ini yang paling mudah. Dengan server Ubuntu, menggunakan terminal atau command line, saya hanya gunakan arahan berikut:

sudo apt-get install awstats

Apabila AWStats telah dipasang, kita perlu membuat konfigurasi untuk log yang bakal dibaca. Fail konfigurasi AWStats biasanya dinamakan sebegini – awstats.lamanweb.com.conf. Dalam kes kita ini, kita boleh gantikan lamanweb.com kepada nama bucket kita di S3. Kita andaikan bucket kita bernama ruangstoran. Maka nama fail konfigurasi AWStats kita akan bernama awstats.ruangstoran.conf.

Masih lagi di terminal, lakukan arahan-arahan berikut.

sudo cp /etc/awstats/awstats.conf /etc/awstats/awstats.ruangstoran.conf

Gunakan apa jua editor yang biasa untuk mengubah isi kandungan awstats.ruangstoran.conf. Tambahkan kod sebegini di awal fail. Saya biasa guna vi. Kalau yang tak biasa, boleh juga download, ubah dan upload semula.

LogFile="/home/user/s3logs/access.log"
SiteDomain="ruangstoran"
HostAliases="localhost 127.0.0.1"
LogFormat="%other %extra1 %time1 %host %logname %other %extra2 %url %methodurl %code %other %bytesd %other %other %other %refererquot %uaquot %other"
SkipHosts="REGEX[^10.]"

Sekarang sebab kita telah membuat konfigurasi ini di awal fail, kita perlu cari tetap untuk LogFile, SiteDomain, HostAliases, LogFormat, SkipHosts dan komenkan mereka. Kita tak mahu nanti tetapan ini semua dinyatakan semula.

LogFile="/home/user/s3logs/access.log" adalah dimana fail log akan disimpan. AWStats akan sentiasa merujuk fail log ini untuk membuat rumusan trafik. Gantikan user dengan nama pengguna yang digunakan di server. Menggunakan Ubuntu di AWS, anda boleh juga gunakan ubuntu.

SiteDomain="ruangstoran" nama untuk tetapan ini. Gunakan nama bucket S3.

LogFormat merupakan format log oleh S3.

SkipHosts="REGEX[^10.]" memaklumkan pada AWStats untuk tidak mengambil kira trafik yang diakses untuk server-server tertentu, contoh server-server dalam AWS. Dalam contoh ini, ia tidak akan mengambil kira trafik yang dipohon oleh server dengan alamat IP yang bermula dengan “10.”

IP lain boleh ditambah sekiranya mahu dan dipisahkan dengan ruang kosong sahaja.

Tetapan Konfigurasi Logging dan Lifecycle pada Bucket S3

Apabila kita melihat fail dan direktori S3 dengan AWS Console, kita boleh klik pada Properties untuk memasangkan Logging. Apabila Logging dipasang, S3 akan membina fail-fail log untuk bucket tersebut mengikut akses yang diterima. Kemudian kita akan memuat-turun fail-fail ini secara berjadual dengan menggunakan cron. Maka fail-fail yang lama kita boleh buang.

Terdapat satu lagi ciri dalam S3 yang membolehkan kita membuang fail-fail lama secara otomatik. Ianya adalah Lifecycle. Berikut adalah langkah-langkah untuk melakukannya.

Pilih bucket yang ingin digunakan, dan klik pada Properties. Kemudian klik pada Logging.

  • Klik dan tandakan Enabled.
  • Gunakan semula nama bucket untuk Target Bucket, ruangstoran. Sebenarnya ini untuk menyimpan log di bucket lain. Kita gunakan saja bucket yang sama.
  • Target Prefix, tuliskan “logs/”. Ini bermakna fail-fail log akan disimpan dalam direktori “logs” dalam bucket ini.

properties-logging

Seterusnya kita akan menetapkan Lifecycle agar fail log lama dibuang secara otomatik. Kita akan menjadualkan nanti agar fail log akan dimuat-turun ke server untuk analisa selang 12 jam. Maka di sini menetapkan fail log akan dibuang selepas dua hari adalah memadai.

  • Klik pada Lifecycle dan klik Add Rule

lifecycle-add-rule

  • Klik dan tandakan Enabled
  • Tuliskan “logs/” untuk Prefix
  • Pilih Days from the creation date untuk Time Period Format
  • Klik pada butang Expiration
  • Masukkan 2 untuk Time Period

lifecycle-rule

Muat-turun log S3 ke server dengan s3cmd

s3cmd adalah satu tool commandline yang boleh digunakan untuk menggunakan akses yang kita ada ke S3. Sekiranya masih belum ada pada server, kita boleh pasangkannya dengan arahan berikut:

sudo apt-get install s3cmd

s3cmd memerlukan maklumat akses AWS sebelum boleh berfungsi. Gunakan servis IAM atau Security Credentials di Amazon AWS dan buatkan satu Group dengan kebenaran kepada S3, dan satu User di dalam Group itu. Langkah itu agak panjang kalau ingin ditulis di sini. Mungkin kelak saya boleh post berbeza untuk itu. Namun, apa yang kita perlukan adalah Access Key Id dan Secret Access Key.

Contoh Access Key Id dan Secret Access Key adalah seperti:

Access Key Id (contoh): AKIAJFMK5DUGZHUDIQC2
Secret Access Key (contoh): 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

Apabila kita sudah ada sepasang maklumat ini, bolehlah kita memulakan konfigurasi s3cmd. Kita hanya perlu menaip arahan berikut di terminal

sudo s3cmd --configure

Isikan maklumat Access Key Id dan Secret Access Key apabila diminta. Kita andaikan user yang kita gunakan adalah ubuntu, maka selepas arahan di atas selesai, s3cmd telah membina satu fail konfigurasi bernama .s3cfg di lokasi /home/ubuntu

Seterusnya kita akan pergi ke folder user yang digunakan, membina satu folder untuk menyimpan semua log dan cuba memuat-turun fail-fail dari S3.

cd ~
mkdir -p s3logs/tmp
sudo s3cmd --config /home/ubuntu/.s3cfg sync --delete-removed s3://ruangstoran /home/ubuntu/s3logs/tmp/

Pastikan menukar ruangstoran dengan nama bucket yang sebenar. Kalau semuanya telah lengkap, S3 sudah mula membina fail-fail log, dan arahan-arahan di atas tiada ralatnya, pasti ada banyak fail-fail yang telah dimuat-turun ke /home/ubuntu/s3logs/tmp/

Arahan seterusnya adalah untuk menggabungkan semua fail-fail log itu kepada satu fail untuk AWStats membuat analisa nanti.

cat /home/ubuntu/s3logs/tmp/* > /home/ubuntu/s3logs/access.log

Sekiranya berjaya, kita akan mendapat satu fail bernama access.log di /home/ubuntu/s3logs

Pada ketika ini, kita sudah muat-turun log S3. Kita sudah ada AWStats. Mari kita arahkan AWStats untuk membaca log yang telah dimuat-turun ini.

Gunakan AWStats untuk menganalisa log S3

Kita perlu memberitahu AWStats untuk membaca log yang telah dimuat-turun. Untuk permulaan ini, kita boleh arahkan secara manual apabila diperlukan. Tetapi kemudian kita akan tetapkan secara berjadual agar arahan ini dilaksanakan pada selang masa tertentu.

Langkah ini adalah untuk memastikan yang segalanya berjalan dengan lancar. Kembali ke terminal dan laksanakan arahan berikut.

sudo /usr/lib/cgi-bin/awstats.pl -config=ruangstoran -update

Sekiranya tiada ralat dinyatakan, bahagian ini telah selesai. Seterusnya, untuk membaca hasil rumusan trafik di AWStats, kita perlu membuat beberapa tetapan untuk Apache.

Konfigurasi Apache untuk AWStats

Saya andaikan yang kita akan menggunakan laman web default. Sebenarnya kita boleh juga gunakan virtual host yang lain sekiranya ada. Sekiranya tidak, boleh juga kalau ingin membina virtual host baru. Tetapi kita cuba pasang di laman web default terlebih dahulu.

Untuk tetapi laman web di Apache, kita perlu mengubah fail /etc/apache2/sites-available/default

Gunakan sebarang editor dan tambah bahagian ini di fail tersebut. Sekiranya mana-mana bahagian di bawah sudah adalah di dalam fail default tersebut, tambahkan apa-apa yang kurang.

Alias /awstatsclasses "/usr/share/awstats/lib/"
Alias /awstats-icon/ "/usr/share/awstats/icon/"
Alias /awstatscss "/usr/share/doc/awstats/examples/css"
ScriptAlias /awstats/ /usr/lib/cgi-bin/


    AllowOverride None
    Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
    Order allow,deny
    Allow from all

Untuk memastikan yang tetapan baru ini dilaksanakan oleh Apache, kita perlu melancarkan semula Apache. Laksanakan arahan berikut di terminal.

sudo service apache2 restart

Sekiranya semuanya berjalan lancar, kita boleh mula membaca analisa trafik S3 di AWStats.

Buka pelayar internet dan taipkan alamat server diakhirinya seperti alamat berikut (pastikan web-default diganti dengan alamat yang betul):

http://web-default/awstats/awstats.pl?config=ruangstoran

Dan kita patut boleh mendapat paparan seperti ini:

awstats-screenshot

Automasi: gabungkan muat-turun log S3 dan analisa AWStats untuk dilaksanakan secara berkala (cron)

Segalanya berjalan lancar setakat ini. Tapi takkan kita nak memanggil muat-turun S3 dan juga pemprosesan AWStats secara manual setiap kali. Lebih baik kalau kita jadualkan sahaja secara berkala. Dan apabila kita mahu melihat analisa trafik, kita boleh terus ke alamat URL sepeti di atas tadi.

Untuk ini, kita perlu membina sebuah skrip untuk melaksanakan kesemua langkah di atas dan kemudian meletakkannya di dalam crontab. Gunakan sebarang editor dan bina fail ini. Dan simpankan di dalam folder pengguna. Dalam contoh ini saya akan simpankan di dalam /home/ubuntu

Simpan fail ini sebagai awstats-cron.sh

s3cmd --config /home/ubuntu/.s3cfg sync --delete-removed s3://ruangstoran /home/ubuntu/s3logs/tmp/
cat $/home/ubuntu/s3logs/tmp/* > /home/ubuntu/s3logs/access.log
/usr/lib/cgi-bin/awstats.pl -config=ruangstoran -update

Kemudian taipkan arahan berikut di terminal.

sudo crontab -e

Ini akan memanggil editor yang pernah kita gunakan untuk cron. Sekiranya ianya bertanyakan editor yang anda inginkan, pilih sahaja yang mana-mana. Mungkin pico atau nano. Apa pun yang digunakan, tambahkan satu baris baru dengan arahan seperti ini.

0 0 * * * sh /home/ubuntu/awstats-cron.sh

In bermakna awstats-cron.sh akan dilaksanakan sehari sekali, pada pukul 12 tengah malam mengikut jam server.

Nampaknya segalanya telah selesai. Maka setiap hari apabila melihat kembali AWStats kita di pelayar internet, analisa sepatutnya telah dikemaskini. Sekiranya tidak, bermakna mungkin adalah masalah dalam proses ini.

Leave a Reply