투

[서버운영] 아파치로그] sql로 바로 저장.

아래글에 이어 아파치와 php-cli 를 연계하여 로그를 바로 sql 에 저장한다.
예제이므로 DB 클래스와 에러제어 부분은 따로 표기하지 않는다.

PostgreSQL 기준.

httpd.conf

CustomLog "| /etc/apache2/shjsqllog.php" shjsqllog

CREATE TABLE shjlog (
seq SERIAL NOT NULL,
ip CIDR NOT NULL,
port SMALLINT NOT NULL,
bytes BIGINT NOT NULL,
inbytes BIGINT NOT NULL,
outbytes BIGINT NOT NULL,
protocol VARCHAR(30) NOT NULL,
method VARCHAR(10) NOT NULL,
host VARCHAR(200) NOT NULL,
file VARCHAR(300) NOT NULL,
uri VARCHAR(500) NOT NULL,
status SMALLINT NOT NULL,
phpsessid CHAR(32) NOT NULL,
useragent VARCHAR(200) NOT NULL,
referer VARCHAR(500) NOT NULL,
responsetime INTEGER NOT NULL,
datetime TIMESTAMPTZ NOT NULL,
PRIMARY KEY (seq)
);

CREATE INDEX ip_dex ON shjlog (ip);
CREATE INDEX host_dex ON shjlog (host);
CREATE INDEX uri_dex ON shjlog (uri);
CREATE INDEX phpsessid_dex ON shjlog (phpsessid);
CREATE INDEX useragent_dex ON shjlog (useragent);
CREATE INDEX referer_dex ON shjlog (referer);


#!/usr/bin/php
<?php

include_once 'SHJ/debug.inc.php';
include_once 'SHJ/DB/PDOExt.inc.php';

$db = new SHJPDOExt('pgsql', '/etc/apache2/shjlog.ini');
$fields->ip = '';
$fields->port = '';
$fields->bytes = '';
$fields->inbytes = '';
$fields->outbytes = '';
$fields->protocol = '';
$fields->method = '';
$fields->host = '';
$fields->file = '';
$fields->uri = '';
$fields->status = '';
$fields->phpsessid = '';
$fields->useragent = '';
$fields->referer = '';
$fields->responsetime = '';
$fields->datetime = '';
$stmt = $db->insert('shjlog', $fields);

$fp = fopen('php://stdin', 'r');

while(true) {
    $line = fgets($fp, 4096);
    if(!preg_match('/^ip:"(.*?)" port:"(.*?)" bytes:"(.*?)" inbytes:"(.*?)" outbytes:"(.*?)" protocol:"(.*?)" method:"(.*?)" host:"(.*?)" file:"(.*?)" uri:"(.*?)" status:"(.*?)" phpsessid:"(.*?)" useragent:"(.*?)" referer:"(.*?)" responsetime:"(.*?)" datetime:"(.*?)"$/s', $line, $matches)) {
        continue;
    }
    $fields->ip = $matches[1];
    $fields->port = $matches[2];
    $fields->bytes = $matches[3];
    $fields->inbytes = $matches[4];
    $fields->outbytes = $matches[5];
    $fields->protocol = $matches[6];
    $fields->method = $matches[7];
    $fields->host = $matches[8];
    $fields->file = $matches[9];
    $fields->uri = $matches[10];
    $fields->status = $matches[11];
    $fields->phpsessid = $matches[12];
    $fields->useragent = $matches[13];
    $fields->referer = $matches[14];
    $fields->responsetime = $matches[15];
    $fields->datetime = $matches[16];
    try {
        $stmt->exec();
    } catch(Exception $e) {
        $fp2 = fopen('/etc/apache2/shjlogerr.txt', 'w');
        fwrite($fp2, $e->getMessage());
        fclose($fp2);
        $db = new SHJPDOExt('pgsql', '/etc/apache2/shjlog.ini');
        $stmt = $db->insert('shjlog', $fields);
        try {
            $stmt->exec();
        } catch(Exception $e) {}
    }
}

?>
[이 게시물은 관리자님에 의해 2011-10-31 17:30:25 Apache에서 이동 됨]
|

댓글 2개

newline 이 올경우 로그 누락이 있던거 같던데??

그 문제는 없는건가요~?
댓글을 작성하시려면 로그인이 필요합니다.

프로그램

8,188건
+
제목 글쓴이 날짜 조회
08-04-03 조회 3,951
08-04-03 조회 2,754
08-04-02 조회 2,946
08-04-02 조회 2,824
08-04-02 조회 3,135
08-04-02 조회 3,092
08-04-02 조회 3,134
08-04-02 조회 3,086
08-04-02 조회 2,784
08-04-02 조회 2,765
08-04-02 조회 2,871
08-04-02 조회 3,166
08-04-02 조회 3,067
08-04-02 조회 2,846
08-04-02 조회 2,993
08-04-02 조회 2,650
08-04-02 조회 2,902
08-04-02 조회 3,224
08-04-02 조회 4,030
08-04-02 조회 3,236
08-03-31 조회 2,536
08-03-31 조회 3,110
08-03-31 조회 3,610
08-03-29 조회 2,736
08-03-28 조회 3,441
08-03-28 조회 2,941
08-03-28 조회 2,611
08-03-27 조회 2,440
08-03-26 조회 3,339
08-03-26 조회 4,289
08-03-25 조회 3,763
08-03-25 조회 2,773
08-03-25 조회 4,102
08-03-25 조회 3,615
08-03-25 조회 4,035
08-03-25 조회 4,061
08-03-25 조회 3,725
08-03-25 조회 3,621
08-03-25 조회 2,870
08-03-25 조회 3,627
08-03-25 조회 5,327
08-03-21 조회 2,985
08-03-19 조회 5,144
08-03-18 조회 3,008
08-03-16 조회 2,972
08-03-14 조회 3,275
08-03-13 조회 3,678
08-03-13 조회 2,655
08-03-11 조회 2,976
08-03-11 조회 3,517
08-03-11 조회 3,012
08-03-11 조회 2,977
08-03-11 조회 2,772
08-03-11 조회 2,621
08-03-11 조회 2,552
08-03-11 조회 2,363
08-03-11 조회 2,385
08-03-11 조회 2,422
08-03-11 조회 2,396
08-03-11 조회 2,817
08-03-11 조회 2,896
08-03-08 조회 3,106
08-03-07 조회 4,232
08-03-07 조회 3,328
08-03-07 조회 2,987
08-03-06 조회 3,329
08-03-06 조회 3,080
08-03-06 조회 4,773
08-03-05 조회 2,712
08-03-04 조회 2,852
08-03-04 조회 2,548
08-03-04 조회 3,408
08-03-03 조회 4,377
08-02-28 조회 3,470
08-02-27 조회 2,966
08-02-22 조회 4,289
08-02-22 조회 5,666
08-02-22 조회 2,940
08-02-21 조회 4,607
08-02-21 조회 2,825
08-02-21 조회 4,826
08-02-21 조회 7,116
08-02-21 조회 2,626
08-02-21 조회 3,392
08-02-20 조회 3,052
08-02-19 조회 2,723
08-02-19 조회 3,583
08-02-19 조회 3,798
08-02-15 조회 2,763
08-02-15 조회 3,950
08-02-14 조회 4,460
08-02-14 조회 2,663
08-02-12 조회 3,120
08-02-11 조회 5,113
08-02-09 조회 5,845
08-02-09 조회 3,042
08-02-08 조회 2,900
08-02-05 조회 3,905
08-02-04 조회 3,116
08-02-03 조회 5,405