Kusprayitna Blogs

Hidup untuk berbagi ilmu :: IT Linux Windows Database Oracle PHP OpenSource

Mengolah log server dalam cluster secara terpusat

Posted by kusprayitna on July 4th, 2012

Salah satu kendalam dalam pembangunan cluster adalah menangani log server, baik itu log dari sistem operasinya maupun dari aplikasi tambahan seperti apache. Sistem operasiyang dipakai adalah Centos 5.8 32bit

Arsitektur sistem

Arsitektur diatas adalah sebuah cluster yang terdiri dari loadbalancing yang berfungsi untuk membagi beban web kepada portal1 dan portal2, Portal1 dan portal2 adalah server dengan aplikasi tambahan apache+php.

Pada kondisi default, maka server portal1 dan portal2 akan mengelola log secara sendiri-sendiri, dimana untuk kebutuhan tertentu seperti dalam analisa akses web diperlukan lognya digabungkan. Dengan melakukan analisa log satu-persatu di setiap server membawa akibat yang cukup menambah pekerjaan seperti harus login ke setiap server, menganalisa/membaca satu persatu atau dibutuhkan effort untuk menggabungkannya. Akan berbeda ceritanya apabila log dari portal1 dan portal2 digabungkan dan disimpan di server loadbalancing misalnya.

Permasalahan lain yang timbul jika log terpisahkan yaitu ketika dibutuhkan respon yang cepat, maka akan cukup menyulitkan.

Tujuan manajemen log terpusat

Dalam pengelolaan log terpusat ini ada beberapa tujuan, yaitu :

  1. Mempermudah membaca log, cukup satu saja untuk semuanya
  2. memanfaatkan log untuk active response dalam menangani keamanan

Metode yang digunakan

Ada dua metode yang digunakan, akan tetapi metode yang kedua yang berhasil berfungsi dengan baik

I. Metode Shared Log File

Dalam metode ini setiap server diseting agar menulis dalam file yang sama dan dalam storage yang sama, yaitu dengan cara :

a. Dalam server loadbalancing dijadikan NAS dengan NFS

b. Portal1 dan Portal2 disetup untuk "mount" NAS di folder /var/log/httpd

Hasilnya yaitu :

a. Portal1 dan portal2 berhasil menulis dengan baik ke NAS

b. Untuk akses web rendah hasil log terbaca 100% baik

c. Akan tetapi ketika akses web sangat tinggi dalam waktu tertentu, maka penulisan log menjadi kacau

Contoh log hasil yang salah (1 log saja):

110.136.216.230, 192.168.0.1 - - [25/Jun/2012:10:00:18 +0700] "GET /modules/mod_vvisit_counter/images/digit_counter/default/1.png HTTP/1.1" 200 262 "http://pmb.uii.ac.id/latest/jadwal-seleksi-paper-based-test-periode-reguler-2-dan-mandiri-ta-2012/2013" "Mozilla/5.0 (Windows NT11110.136.216.230, 192.168.0.1 - - [25/Jun/2012:110.136.216.230, 192.168.0.1 - - [25/Jun/2012:10:00:19 +0700] "GET /modules/mod_vvisit_counter/images/stats/default/vyesterday.png HTTP/1.1" 200 722 "http://pmb.uii.ac.id/latest/jadwal-seleksi-paper-based-test-periode-reguler-2-dan-mandiri-ta-2012/2013" "Mozilla/5.0 (Windows NT 110.136.216.230, 192.168.0.1 - - [25/Jun/2012:1110.136.216.230, 192.168.0.1 - - [25/Jun/2012:10:00:19 +0700] "GET /modules/mod_vvisit_counter/images/stats/default/vmonth.png HTTP/1.1" 200 717 "http://pmb.uii.ac.id/latest/jadwal-seleksi-paper-based-test-periode-reguler-2-dan-mandiri-ta-2012/2013" "Mozilla/5.0 (Windows NT 110.136.216.230, 192.168.0.1 - - [25/Jun/2012:10:00:28 +0700] "GET /modules/mod_vvisit_counter/images/stats/default/vall.png HTTP/1.1" 200 398 "http://pmb.uii.ac.id/latest/jadwal-seleksi-paper-based-test-periode-reguler-2-dan-mandiri-ta-2012/2013" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:6.0) Gecko/201001110.136.216.230, 192.168.0.1- - [25/Jun/2012:10:00:22 +0700] "GET /templates/jm-business02/images/favicon.ico HTTP/1.1" 404 318 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:6.0) Gecko/20100101 Firefox/6.0"

Contoh diatas harusnya terbagi dalam beberapa baris log, akan tetapi hasil penulisannya menjadi satu baris log saja.
Contoh log kedua (1 log saja)
110.137.56.242, 192.168.0.1 - - [25/Jun/2012:11:04:58 +0700] "GET /templates/jm-bu110.137.56.242, 192.168.0.1 - - [25/Jun/2012:11:05:06 +0700] "GET /templates/jm-business02/images/default/button.jpg HTTP/1.1" 200 403 "http://pmb.uii.ac.id/templates/jm-busines110.137.56.242, 192.168.0.1 - - [25/Jun/2012:11:05:06 +0700] "GET /templates/jm-business02/images/default/footerTop.jpg HTTP/1.1" 200 715 "http://pmb.uii.ac.id/templates/jm-business02/css/style1.css" "Mozilla/5.0 (Windows NT 5.1; rv:13.0) Gecko/20100101 Firefox/13.0.1"
Apabila log kedua ini kita perhatikan, dapat dilihat bahwa penggabungan log dilakukan tanpa ada aturan tertentu (misalnya diakhir file), sehingga format log menjadi kacau dan sangat sulit dianalisa.

II. Metode RSYSLOG

Metode ini memanfaatkan aplikasi rsyslog sebagai pengganti syslog. syslog adalah aplikasi default yang di install oleh Centos 5 untuk menangai logfile. Apalikasi rsyslog digunakan karena mempunyai fitur seperti syslog dan sudah dikembangkan lebih lanjut sehingga support remote log, if conditional dan lain-lain.
Tahapan yang dilakukan yaitu :
a. Mengganti sysloh dengan rsyslog
# service syslog stop
# yum install rsyslog
# chkconfig rsyslog on
# chkconfig syslog off
# yum erase sysklogd
b. setup agar rsyslog kompatible dengan syslog
# vi /etc/sysconfig/rsyslog
# Options to syslogd
# -m 0 disables 'MARK' messages.
# -rPortNumber Enables logging from remote machines. The listener will listen to the specified port.
# -x disables DNS lookups on messages recieved with -r
# See syslogd(8) for more details
SYSLOGD_OPTIONS="-c3"
# Options to klogd
# -2 prints all kernel oops messages twice; once for klogd to decode, and
#    once for processing with 'ksymoops'
# -x disables all klogd processing of oops messages entirely
# See klogd(8) for more details
KLOGD_OPTIONS="-x"

c. Mengubah konfigurasi /etc/rsyslog.conf

1. Pada server loadbalancing

Pada seting di server ini, semua seting tetap pada file defaultnya, kecuali ditambahkan satu file untuk log apache

# vi /etc/rsyslog.conf

$ModLoad imuxsock.so
$ModLoad imklog.so
$ModLoad imudp.so
#Aktifkan Network agar support remote log
$UDPServerAddress 0.0.0.0
$UDPServerRun 514
#hapus duplikasi pesan
$RepeatedMsgReduction on

# Format template file hasil log
$template TraditionalFormat,"%timegenerated% %HOSTNAME% %syslogtag%%msg:::drop-last-lf%\n"
$template ApacheFormat,"%syslogtag%%msg:::drop-last-lf%\n"
# Log anything (except mail) of level info or higher.
# Don't log private authentication messages!
*.info;mail.none;authpriv.none;cron.none              /var/log/messages;TraditionalFormat
#authpriv.* /var/log/secure;TraditionalFormat
# The authpriv file has restricted access.
authpriv.*                                            /var/log/secure;TraditionalFormat
# Log anything (except mail) of level info or higher.
# Don't log private authentication messages!
mail.* /var/log/maillog;TraditionalFormat             /var/log/maillog;TraditionalFormat

# Log cron stuff
cron.*                                                /var/log/cron;TraditionalFormat
# Everybody gets emergency messages
*.emerg                                               *
### Tambahan untuk log apache, dimasukkan dalam local6
local6.*                                             /var/log/apache.log;ApacheFormat

2. Pada server web portal1 dan portal2

Pada seting ini, log OS masih dilokal, tetapi log apache dikirimkan ke server loadbalancing 192.168.0.1

# vi /etc/rsyslog.conf

# Use traditional timestamp format
$ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat 

# Provides kernel logging support (previously done by rklogd)
$ModLoad imklog
# Provides support for local system logging (e.g. via logger command)
$ModLoad imuxsock

# Log all kernel messages to the console.
# Logging much else clutters up the screen.
#kern.*                                                 /dev/console

# Log anything (except mail) of level info or higher.
# Don't log private authentication messages!
*.info;mail.none;authpriv.none;cron.none;local6.none                   /var/log/messages

# The authpriv file has restricted access.
authpriv.*                                              /var/log/secure

# Log all the mail messages in one place.
mail.*                                                  -/var/log/maillog

# Log cron stuff
cron.*                                                  /var/log/cron

# Everybody gets emergency messages
*.emerg                                                 *

# Save news errors of level crit and higher in a special file.
uucp,news.crit                                          /var/log/spooler

# Apache logfile
local6.* @192.168.0.1

# Save boot messages also to boot.log
local7.*                                                /var/log/boot.log

d. Mengarahkan log apache ke syslog

Dalam kasus ini, apache sudah disetup agar support virtual host, sehingga perubahan konfigurasi dalam dilakukan di konfigurasi virtual host

1. Arahkan semua log virtual host apache ke syslog, contoh sebuat konfigurasi

<VirtualHost *:80>
ServerAdmin webmaster@pmb.uii.ac.id
DocumentRoot '/home/pmb/public_html'
ServerName pmb.uii.ac.id
ServerAlias www.pmb.uii.ac.id
#ErrorLog /var/log/httpd/pmb-error.log
#CustomLog /var/log/httpd/pmb-access.log combined
ErrorLog "|/usr/bin/logger -t apache2.pmb -p local6.err"
CustomLog "|/usr/bin/logger -t apache2.pmb -p local6.info" combined

<Directory '/home/pmb/public_html'>
        AllowOverride All
        Options none
        Order allow,deny
        Allow from all
</Directory>

</VirtualHost>
Konfigurasi ini akan mengarahkan log akses web dan error log ke dalam aplikasi logger, dimana parameter -t adalah tag (apache2.pmb) dan -p adalah prioritasnya.
Catatan tentang Prioritas yaitu :

Facility Message Description
user Generated by user processes. This is the default facility; messages not fitting any of the other listed categories here are classified as facility user.
kern Generated by the system kernel.
mail Generated by the e-mail system.
daemon Generated by system daemons, such as ftpd.
auth Generated by the authorization programs login, su, and getty.
lpr Generated by the printing system.
news Generated by the Usenet News system.
uccp Generated by the UUCP system.
cron Generated by cron and at.
local0-7 Generated by up to eight locally defined categories numbered 0 through 7.
mark Generated by syslog itself for timestamping logs.

Severity levels looks slightly better and still make a lot of sense, although definitions are fuzzy and exact categorization between, say, crit and alert messages is non-obvious. IBM mainframe error classification system is slightly better despite being even older then Unix capabilities that Unix inherited from Sendmail ;-).

Severity Description
emerg 0 The most severe messages that prevent continuation of operation, such as immediate system shutdown. Somewhat similar to Terminal errors in IBM mainframes
alert 1 System conditions requiring immediate attention (for example corrupted system database, insufficient disk space, run out of file descriptors, etc)
crit 2 Mostly serious system/application malfunctioning, such as failing hardware (hard device errors) or software. Usually non-recoverable. somewhat similar to Serious errors (S) in IBM mainframes
err 3 Mostly correctable errors, for example errors other that hard device errors. Continuation of the operation is possible. Usually all err conditions are automatically recoverable. Somewhat similar to IBM's error category (E).
warning 4 Warning messages.  Somewhat similar to IBM's warning category (E).
notice 5 Notices requiring attention at a later time. Non-error conditions that might require special handling. difference with the warning is not very clear
info 6 Informational messages.
debug 7 Messages for debugging purposes.
none 8 Messages are not sent from the indicated facility to the selected file
2. Untuk mempermudah membedakan nama virtual host dalam log, dimana semua log virtual host sudah dijadikan satu, maka diperlukan penambahan satu variabel di format log
# vi /etc/httpd/conf/httpd.conf
LogFormat "%v %{X-Forwarded-For}i %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
LogFormat "%{X-Forwarded-For}i %l %u %t \"%r\" %>s %b" common
LogFormat "%{Referer}i -> %U" referer
LogFormat "%{User-agent}i" agent
e. Tahapan terakhir adalah merestart service di server, baik loadbalancing maupun portal1 dan portal2
# service rsyslog restart
# service httpd restart
Hasil file log yaitu :
apache2.pmb: pmb.uii.ac.id 125.162.118.173, 192.168.0.27 - - [04/Jul/2012:11:16:27 +0700] "GET /templates/jm-business02/images/favicon.ico HTTP/1.1" 404 318 "-" "Mozilla/5.0 (Windows; U; Windows NT 5.1; id; rv:1.9.2.19) Gecko/20110707 Firefox/3.6.19 GTB7.1"
apache2.www: www.uii.ac.id 114.79.18.232, 192.168.0.27 - - [04/Jul/2012:11:16:27 +0700] "GET /images/stories/berita/2012/Icon/2012.01.12-pmb-uii-2012-2013.gif HTTP/1.1" 200 48802 "http://www.uii.ac.id/" "Mozilla/5.0 (Windows NT 6.1; rv:12.0) Gecko/20100101 Firefox/12.0"
apache2.pmb: pmb.uii.ac.id 125.162.118.173, 192.168.0.27 - - [04/Jul/2012:11:16:14 +0700] "GET /modules/mod_vvisit_counter/images/digit_counter/default/2.png HTTP/1.1" 200 307 "http://pmb.uii.ac.id/" "Mozilla/5.0 (Windows; U; Windows NT 5.1; id; rv:1.9.2.19) Gecko/20110707 Firefox/3.6.19 GTB7.1"
apache2.pmb: pmb.uii.ac.id 125.162.118.173, 192.168.0.27 - - [04/Jul/2012:11:16:27 +0700] "GET /modules/mod_vvisit_counter/images/digit_counter/default/8.png HTTP/1.1" 200 332 "http://pmb.uii.ac.id/" "Mozilla/5.0 (Windows; U; Windows NT 5.1; id; rv:1.9.2.19) Gecko/20110707 Firefox/3.6.19 GTB7.1"
apache2.pmb: pmb.uii.ac.id 125.162.118.173, 192.168.0.27 - - [04/Jul/2012:11:16:27 +0700] "GET /modules/mod_vvisit_counter/images/digit_counter/default/4.png HTTP/1.1" 200 303 "http://pmb.uii.ac.id/" "Mozilla/5.0 (Windows; U; Windows NT 5.1; id; rv:1.9.2.19) Gecko/20110707 Firefox/3.6.19 GTB7.1"
Hasil sudah bagus, terbaca satu persatu dengan lengkap
Tahan terakhir adalah menganalisa log file agar dapat digunakan sebagai dasar pengamanan sistem, yaitu dengan OSSEC HIDS
Alhamdulillah dengan rahmad dan petunjukNYA pengelolaan log terpusat inipun berjalan dengan lancar.

Leave a Reply

XHTML: You can use these tags: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>