หน้า: [1] 2 3 4   ลงล่าง
  พิมพ์  
ผู้เขียน หัวข้อ: แนะนำวิธีทำ Centralized Log server ตาม พรบ. คอม ครับ -- DIY version  (อ่าน 41450 ครั้ง)
0 สมาชิก และ 2 บุคคลทั่วไป กำลังดูหัวข้อนี้
เลิฟกู๊ด
เด็กใหม่หัดโพส
*
ออฟไลน์ ออฟไลน์

เพศ: ชาย
กระทู้: 57



« เมื่อ: สิงหาคม 20, 2009, 12:14:28 AM »

พอดีผมเคยอ่านเจอ sarg ไม่เพียงพอสำหรับการเก็บ log ตาม พรบ
แถมถ้าไม่มี Centralized Log server ตาม พรบ. ปรับแพงเหลือเกิน อ่านแล้วสยองครับ  Shocked
เลยใช้ google ค้นจนเจอนี่ เลยแนะนำให้ลองใช้กันดูครับ


software ที่ผมใช้
Debian GNU/Linux 5.0
mysql-server   5.0.51a-24+lenny1
squid      2.7.STABLE3-4.1
perl      5.10.0-19

aptitude update
aptitude install mysql-server squid

เรียบร้อยสำหรับ software ที่ต้องใช้

Download ตัวนี้มาก่อนครับ
http://www.comune.arenzano.ge.it/uploads/file/uffici/ced/Squid-mysql-log_trunk.tgz
ถ้าที่ linux ก้อพิมนี้ได้เลย
cd /root
wget -c -v -O /root/Squid-mysql-log_trunk.tgz http://www.comune.arenzano.ge.it/uploads/file/uffici/ced/Squid-mysql-log_trunk.tgz
tar -xzvf /root/Squid-mysql-log_trunk.tgz
cd Squid-mysql-log_trunk


แล้วทำการ login mysql
mysql -u root -pรหัสของท่าน
###### ที่ mysql console ######
create database squid_log;
squid_log;
source logfile-daemon_mysql-table.sql;
GRANT ALL ON squid_log.* TO 'squid_log'@'localhost' IDENTIFIED BY 'PasswordForsquid_logUser';
FLUSH PRIVILEGES;
\q

###### ออกจาก mysql ######

แล้ว copy ไฟล์ logfile-daemon_mysql.pl
cp logfile-daemon_mysql.pl /usr/local/bin/mysql2squid.pl
chmod +x /usr/local/bin/mysql2squid.pl



ขั้นต่อไปก็แก้ squid.conf
เก็บไฟล์ตัวเดิมไว้ก่อน เผื่อมีปัญหา
cp /etc/squid/squid.conf /etc/squid/squid.conf.BAK
ต่อไปก็แก้ squid.conf
vi /etc/squid/squid.conf
มองหา logformat แก้เป็น
logformat squid_mysql  %ts.%03tu %6tr %>a %Ss %03Hs %<st %rm %ru %un %Sh %<A %mt

แก้อีกที่ access_log
access_log daemon:/mysql_host/database/table/username/password squid_mysql
ถ้าตามตัวอย่างก็แก้เป็นแบบนี้ครับ
access_log daemon:/mysql_host/squid_log/access_log/squid_log/PasswordForsquid_logUser squid_mysql

อีกที่ logfile_daemon
logfile_daemon /usr/local/bin/mysql2squid.pl
เรียบร้อย

แล้วสั่งให้ squid reload
/etc/init.d/squid reload

ลองเช็คดู
ps ax | grep squid2mysql
ก็จะเจอครับ
6251 ?        Ss     0:07 /usr/bin/perl /usr/local/bin/squid2mysql.pl /localhost/.......

เท่านี้ก็เรียบร้อยครับสำหรับ Centralized Log server

ของผมเริ่มเก็บ log ตั้งแต่ 04-08-2009
ขนาดของ database ที่ไว้เก็บ log โตเกือบๆ 3GB แล้วครับ
เก็บ log 15 วันไฟล์โตเกือบๆ 3GB กว่าจะครบ 90 วันตาม พรบ. 20GB แน่ๆ  Cry
บันทึกการเข้า

i'm using "Debian" for internet gateway.

squid for http proxy
frox for ftp proxy
nginx for web server
mysql for traffic log
art_krab26®
สมาชิกร้านอินเตอร์เน็ตรุ่นพี่
สมาชิกเว็บ
****
ออฟไลน์ ออฟไลน์

เพศ: ชาย
กระทู้: 1,049



« ตอบ #1 เมื่อ: สิงหาคม 20, 2009, 12:26:16 AM »

ขอบคุณครับ 
บันทึกการเข้า

ลายเซ็นต์ไม่สวย  อิอิ
KingDoom39
สมาชิกร้านอินเตอร์เน็ต
สมาชิกเว็บ
***
ออฟไลน์ ออฟไลน์

เพศ: ชาย
กระทู้: 895


ไม่เสียสละ ชัยชนะไม่เกิด


« ตอบ #2 เมื่อ: สิงหาคม 20, 2009, 12:33:33 AM »

ขอบคุณมากคร๊าฟ สำหรับความรู้
บันทึกการเข้า
เลิฟกู๊ด
เด็กใหม่หัดโพส
*
ออฟไลน์ ออฟไลน์

เพศ: ชาย
กระทู้: 57



« ตอบ #3 เมื่อ: สิงหาคม 20, 2009, 12:40:07 AM »

ลืมตัว view log ให้ครับ
แบบง่ายๆบ้านๆ เป็น php นะครับ  Cheesy
ลง webserver แล้ว ลง php-mysql
ถ้าจะแก้จำนวน record ที่จะดูก็แก้จาก 350 เป็นค่าที่ต้องการนะครับ



<html><head><title>Squid Log Viewer</title></head><body>
<?php
$db_host = 'localhost';
$db_user = 'squid_log';
$db_pwd = 'PasswordForsquid_logUser';

$database = 'squid_log';
$table = 'access_log';

if (!mysql_connect($db_host, $db_user, $db_pwd))
    die("Can't connect to database");

if (!mysql_select_db($database))
    die("Can't select database");

// sending query
$result = mysql_query("SELECT client_src_ip_addr,squid_request_status,reply_size,mime_type,request_url FROM {$table} ORDER BY id DESC LIMIT 350");
# $result = mysql_query("SELECT * FROM {$table} ORDER BY id DESC LIMIT 350");
if (!$result) {
    die("Query to show fields from table failed");
}

$fields_num = mysql_num_fields($result);

echo "<h1>Squid ACCESS Log: {$table}</h1>";
echo '<h2>LAST 350 RECORDS</h2>';
echo "<table border='1'><tr>";
// printing table headers
for($i=0; $i<$fields_num; $i++)
{
    $field = mysql_fetch_field($result);
    echo "<td>{$field->name}</td>";
}
echo "</tr>\n";
// printing table rows
while($row = mysql_fetch_row($result))
{
    echo "<tr>";

    // $row is array... foreach( .. ) puts every element
    // of $row to $cell variable
    foreach($row as $cell)
        echo "<td>$cell</td>";

    echo "</tr>\n";
}
mysql_free_result($result);
?>
</body></html>




อีกตัวเป็นตัวดูว่า HIT cache ไหม
<html><head><title>Squid Log HIT Viewer</title></head><body>
<?php
$db_host = 'localhost';
$db_user = 'squid_log';
$db_pwd = 'PasswordForsquid_logUser';

$database = 'squid_log';
$table = 'access_log';


if (!mysql_connect($db_host, $db_user, $db_pwd))
    die("Can't connect to database");

if (!mysql_select_db($database))
    die("Can't select database");

// sending query
$result = mysql_query("SELECT client_src_ip_addr,squid_request_status,reply_size,mime_type,request_url FROM {$table} WHERE squid_request_status LIKE '%HIT%' ORDER BY id DESC LIMIT 350");
# $result = mysql_query("SELECT * FROM {$table} ORDER BY id DESC LIMIT 350");
if (!$result) {
    die("Query to show fields from table failed");
}

$fields_num = mysql_num_fields($result);

echo "<h1>Squid HIT Log: {$table}</h1>";
echo '<h2>LAST 350 RECORDS</h2>';
echo "<table border='1'><tr>";
// printing table headers
for($i=0; $i<$fields_num; $i++)
{
    $field = mysql_fetch_field($result);
    echo "<td>{$field->name}</td>";
}
echo "</tr>\n";
// printing table rows
while($row = mysql_fetch_row($result))
{
    echo "<tr>";

    // $row is array... foreach( .. ) puts every element
    // of $row to $cell variable
    foreach($row as $cell)
        echo "<td>$cell</td>";

    echo "</tr>\n";
}
mysql_free_result($result);
?>
</body></html>
บันทึกการเข้า

i'm using "Debian" for internet gateway.

squid for http proxy
frox for ftp proxy
nginx for web server
mysql for traffic log
lordsith
เด็กใหม่หัดโพส
*
ออฟไลน์ ออฟไลน์

กระทู้: 8


« ตอบ #4 เมื่อ: กันยายน 27, 2009, 12:52:40 AM »

ผมลองทำตามที่โพสไว้อะครับ  หน้าเว็บมันไม่แสดงผลอะไรออกมาเลย  ไม่ทราบว่าผิดพลาดที่การconfig ค่าต่างๆหรือว่า ตรงฐานข้อมูลก็ไม่ทราบ ช่วยแนะนำหน่อยครับ
บันทึกการเข้า
prawit183
เด็กใหม่หัดโพส
*
ออฟไลน์ ออฟไลน์

กระทู้: 4


« ตอบ #5 เมื่อ: กันยายน 27, 2009, 01:41:43 PM »

  น้ำตาไหลเลย  Grin
บันทึกการเข้า
เลิฟกู๊ด
เด็กใหม่หัดโพส
*
ออฟไลน์ ออฟไลน์

เพศ: ชาย
กระทู้: 57



« ตอบ #6 เมื่อ: ตุลาคม 08, 2009, 11:32:54 PM »

ผมลองทำตามที่โพสไว้อะครับ  หน้าเว็บมันไม่แสดงผลอะไรออกมาเลย  ไม่ทราบว่าผิดพลาดที่การconfig ค่าต่างๆหรือว่า ตรงฐานข้อมูลก็ไม่ทราบ ช่วยแนะนำหน่อยครับ

ลองเข้าจาก mysql server โดยตรงก่อนนะครับ
#######################
mysql -u squid_log -p

SELECT * FROM squid_log.access_log ORDER BY id DESC LIMIT 350;
มีข้อมูลออะไรออกมาไหมครับ

จะได้ไล่ถูกว่าเป็นปัญหาตรงไหน
บันทึกการเข้า

i'm using "Debian" for internet gateway.

squid for http proxy
frox for ftp proxy
nginx for web server
mysql for traffic log
akenet
สมาชิกเว็บ
****
ออฟไลน์ ออฟไลน์

เพศ: ชาย
กระทู้: 692



เว็บไซต์
« ตอบ #7 เมื่อ: ตุลาคม 09, 2009, 08:01:51 AM »

โว้ว ปกติใช้แต่ lightsquid ในการพรีวิว log การเข้าเว็บ. ..เดี๋ยวลองวิธีนี้มั่ง แต่เปลือง hdd เอาการเลยแฮะ... Tongue
ขอบคุณครับ  Roll Eyes
บันทึกการเข้า
mrpee
เด็กใหม่หัดโพส
*
ออฟไลน์ ออฟไลน์

กระทู้: 93



« ตอบ #8 เมื่อ: ตุลาคม 09, 2009, 09:29:40 AM »

โหววว.กินพื้นที่เยอะจัง
บันทึกการเข้า
lordsith
เด็กใหม่หัดโพส
*
ออฟไลน์ ออฟไลน์

กระทู้: 8


« ตอบ #9 เมื่อ: ตุลาคม 14, 2009, 12:58:37 PM »

มันไม่มีข้อมูลครับ ขึ้น empty set
บันทึกการเข้า
หน้า: [1] 2 3 4   ขึ้นบน
  พิมพ์  
 
กระโดดไป:  


ข้อความ หรือรูปภาพที่ปรากฏในเว็บไซต์แห่งนี้ เกิดจากการเขียนโดยสาธารณชน และถูกส่งขึ้นโดยอัตโนมัติจากบุคคลทั่วไป ซึ่งทาง ICT.in.th มิได้มีส่วนร่วมรู้เห็น ตรวจสอบ หรือพิสูจน์ข้อเท็จจริงใดๆ ทั้งสิ้น ผู้อ่านจึงควรใช้วิจารณญาณในการรับข่าวสารข้อมูล หากท่านพบเห็นข้อมูลที่ไม่เหมาะสม กรุณาแจ้งให้ทีมงานทราบ เพื่อดำเนินการต่อไป