4/24/2012

syslog ส่ง Log จากเครื่องหนึ่งไปเก็บอีกเครื่องหนึ่ง

การส่ง Log จากเครื่องตัวเองหรือจาก SERVER ตัวอื่น เพื่อไปเก็บไว้ที่ SERVER Log ตัวเดียว
เช่น การเก็บ Log จาก SERVER ต่าง ๆ ใน SCI เพื่อไปรวมที่ SERVER ตัวเดียวคือ LogSERVER (192.168.0.251)

1. ติดตั้งโปรแกรม พื้นฐานที่จำเป็นต้องใช้ในเครื่อง ตัวเอง
- apt-get install apache2 ติดตั้ง Apache
- apt-get install Mysql-server ติดตั้ง Mysql-server
- apt-get install phpmyadmin ติดตั้ง phpmyadmin

2. ติดตั้ง syslog
โดยทำตาม ขั้นตอนนี้
http://porpramarn.blogspot.com/2012/04/ubuntu-centralized-log-with-logzilla.html

*** สำคัญมาก คือ 3.ติดตั้ง Package อื่น ๆ ที่จำเป็น ต้อง ติดตั้งทีละ แถว ให้ครบทุกตัวไม่งั้นจะไม่เก็บ Log


3. แก้ไขไฟล์ Config เพิ่มเติมที่เครื่องเราเอง
- nano /etc/syslog-ng/syslog-ng.conf
  1. destination d_logserver { tcp("192.168.0.9" port(514)); };
  2.  

ไว้ล่าง ### Destinations ###
และเพิ่ม 
  1. #get s_apache locolhost
  2. log {
  3.    source(s_apache_access);
  4.    destination(d_logzilla);
  5. };
  6.  
  7. log {
  8.    source(s_apache_access);
  9.    destination(d_logserver);
  10. };
  11.  


ไว้ล่าง ### Logs ###

ตัวอย่าง จาก Sources ที่แก้เพิ่มเติม จาก http://porpramarn.blogspot.com/2012/04/ubuntu-install-serverextranet.html
  1. ### Sources ###
  2. source s_local {
  3. internal();
  4. # standard Linux log source (this is the default place for the syslog()
  5. # function to send logs to)
  6. unix-stream("/dev/log");
  7. # messages from the kernel
  8. file("/proc/kmsg" program_override("kernel: "));
  9. };
  10.  
  11. source s_apache_access {
  12.     file("/var/log/apache2/access.log");
  13. };
  14.  
  15. ### Destinations ###
  16. destination d_logzilla {
  17.   program("/var/www/logzilla/scripts/db_insert.pl"
  18.   template("$HOST\t$FACILITY\t$PRIORITY\t$LEVEL\t$TAG\t$YEAR-$MONTH-$DAY\t$HOUR:$MIN:$SEC\t$PROGRAM\t$MSG\n")
  19.   );
  20. };
  21. destination d_logserver { tcp("192.168.0.9" port(514)); };
  22.  
  23. ### Logs ###
  24. #get s_local
  25. log {
  26.    source(s_local);
  27.    destination(d_logzilla);
  28. };
  29.  
  30. #get s_apache locolhost
  31. log {
  32.    source(s_apache_access);
  33.    destination(d_logzilla);
  34. };
  35.  
  36. log {
  37.    source(s_apache_access);
  38.    destination(d_logserver);
  39. };
  40.  
  41.  


*** อธิบาย Code
ไฟล์ syslog-ng.conf จะประกอบด้วย 3 ส่วนคือ
ส่วนที่ 1. Source บอกถึงเราจะเก็บอะไรบ้าง ใส่ตัวแปร เช่น เก็บทั้งหมด, เก็บ Apacher, เก็บ Squid หรืออื่น ๆ
  1. source s_apache_access {
  2.     file("/var/log/apache2/access.log");
  3. };
  4.  


ส่วนที่ 2. Destination คือส่วนที่ประกาศตัวแปรเรียกใช้โปรแกรมเพื่อเก็บลง ฐานข้อมูลของ Log ตามตัวแปรที่มีการตั้งชื่อไว้
และเป็นส่วนที่ใช้ในการ ส่ง ข้อมูล Log ไปอีก SERVER ตัวอื่น 
  1. destination d_logzilla {
  2.   program("/var/www/logzilla/scripts/db_insert.pl"  #เรียกใช้ไฟล์คำสั่งนี้
  3.   template("$HOST\t$FACILITY\t$PRIORITY\t$LEVEL\t$TAG\t$YEAR-$MONTH-$DAY\t$HOUR:$MIN:$SEC\t$PROGRAM\t$MSG\n")
  4.   );   # เก็บตัวแปรเหล่านี้เข้าไปเก็บ
  5. };
  6. destination d_logserver { tcp("192.168.0.9" port(514)); };  # ส่วนที่ส่ง ข้อมูลไป SERVER อื่น


ส่วนที่ 3. Log คือส่วนที่เรา ใช้ในการส่ง log ว่าจะเก็บส่วนไหนบ้างและส่งไปโดยใช้ตัวแปรไหนบ้าง เช่น
  1. log {
  2.    source(s_local);
  3.    destination(d_logzilla);
  4. };  
เก็บเฉพาะ Log ข้องเครื่องตัวเอง ใช้ตัวแปร s_local และส่งโดยใช้ destination ของตัวแปร d_logzilla

  1. log {
  2.    source(s_apache_access);
  3.    destination(d_logzilla);
  4. };
เก็บ เฉพาะ log ส่วนที่ทำงานเกี่ยวกับ apache โดยใช้ source s_apache_access และส่งโดยใช้ destination ชื่อ d_logzilla

  1. log {
  2.    source(s_apache_access);
  3.    destination(d_logserver);
  4. };
เก็บ เฉพาะ log ส่วนที่ทำงานเกี่ยวกับ apache โดยใช้ source s_apache_access และส่งโดยใช้ destination ชื่อ d_logserver
ซึ่งชุดคำสั่งในตัวแปร d_logserver คือจะส่งไปเก็บอีก SERVER หนึ่งผ่าน port 514

4. การตั้งค่า ไฟล์ syslog-ng.conf ที่ SERVER ฝั่งที่เป็นเครื่องรับ
- nano /etc/syslog-ng/syslog-ng.conf
เพิ่มในส่วนของ Source
  1. source s_net {
  2.    udp(ip(0.0.0.0) port(514));
  3.    tcp(ip(0.0.0.0) port(514) keep-alive(yes) max-connections(300));
  4. };


เพิ่มในส่วนของ log
  1. ### Logs ###
  2. log {
  3.    source(s_net);
  4.    destination(d_logzilla);
  5. };
  6.  


ตัวอย่าง Source
  1. ### Sources ###
  2. source s_local {
  3. # message generated by Syslog-NG
  4. internal();
  5. # standard Linux log source (this is the default place for the syslog()
  6. # function to send logs to)
  7. unix-stream("/dev/log");
  8. # messages from the kernel
  9. file("/proc/kmsg" log_prefix("kernel: "));
  10. };
  11.  
  12. source s_net {
  13.    udp(ip(0.0.0.0) port(514));
  14.    tcp(ip(0.0.0.0) port(514) keep-alive(yes) max-connections(300));
  15. };
  16.  
  17.  
  18. ### Destinations ###
  19. destination d_logzilla {
  20.   program("/var/www/logzilla/scripts/db_insert.pl"
  21.   template("$HOST\t$FACILITY\t$PRIORITY\t$LEVEL\t$TAG\t$YEAR-$MONTH-$DAY\t$HOUR:$MIN:$SEC\t$PROGRAM\t$MSG\n")
  22.   );
  23. };
  24.  
  25. ### Logs ###
  26. log {
  27.    source(s_local);
  28.    source(s_net);
  29.    destination(d_logzilla);
  30. };
  31.  

ความหมายคือ
source s_local เป็นตัวรับค่าจาก เครื่องตัวเอง
source s_net เป็นตัวที่ใช้รับค่าจากการส่งค่าจาก เครื่องอื่นมา
แล้วเก็บใส่ log โดยนำ source ต่าง ๆ มาส่งเก็บเข้าฐานข้อมูลของ log โดดยใช้ destination d_logzilla

No comments:

Post a Comment