투

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

· 2007-07-06 (금) 18:30:20 · 4432 · 2
아래글에 이어 아파치와 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건
+
제목 글쓴이 날짜 조회
07-07-31 조회 4,610
07-07-30 조회 5,026
07-07-30 조회 5,475
07-07-30 조회 5,396
07-07-29 조회 3,813
07-07-29 조회 3,534
07-07-29 조회 4,495
07-07-29 조회 4,346
07-07-28 조회 4,563
07-07-26 조회 4,469
07-07-25 조회 6,139
07-07-24 조회 6,399
07-07-21 조회 4,521
07-07-21 조회 3,870
07-07-21 조회 4,069
07-07-21 조회 3,386
07-07-21 조회 3,214
07-07-21 조회 3,146
07-07-20 조회 4,278
07-07-20 조회 3,434
07-07-20 조회 3,502
07-07-20 조회 3,180
07-07-20 조회 3,641
07-07-20 조회 4,358
07-07-18 조회 5,335
07-07-18 조회 4,562
07-07-16 조회 3,152
07-07-16 조회 3,084
07-07-13 조회 4,069
07-07-12 조회 2,789
07-07-09 조회 3,178
07-07-07 조회 3,412
07-07-07 조회 3,308
07-07-07 조회 3,414
07-07-06 조회 5,232
07-07-06 조회 2,953
07-07-06 조회 5,635
07-07-06 조회 4,221
07-07-06 조회 3,404
07-07-06 조회 4,433
07-07-06 조회 4,040
07-07-05 조회 4,018
07-07-05 조회 6,784
07-07-04 조회 3,404
07-07-02 조회 4,563
07-06-30 조회 4,467
07-06-29 조회 4,834
07-06-29 조회 4,385
07-06-28 조회 3,584
07-06-23 조회 3,229
07-06-21 조회 3,678
07-06-20 조회 7,355
07-06-20 조회 3,967
07-06-20 조회 5,711
07-06-19 조회 3,176
07-06-19 조회 1.1만
07-06-17 조회 3,634
07-06-16 조회 2,732
07-06-15 조회 4,125
07-06-12 조회 4,070
07-06-11 조회 3,934
07-06-11 조회 3,247
07-06-05 조회 3,588
07-06-05 조회 4,131
07-06-05 조회 4,144
07-06-05 조회 5,240
07-06-04 조회 7,280
07-05-31 조회 3,196
07-05-30 조회 3,301
07-05-29 조회 3,011
07-05-29 조회 2,736
07-05-29 조회 3,750
07-05-29 조회 2,833
07-05-29 조회 2,649
07-05-29 조회 5,884
07-05-29 조회 2,916
07-05-29 조회 2,948
07-05-29 조회 2,965
07-05-29 조회 3,072
07-05-29 조회 4,751
07-05-29 조회 2,750
07-05-29 조회 2,624
07-05-29 조회 2,439
07-05-29 조회 2,972
07-05-29 조회 2,999
07-05-28 조회 4,893
07-05-26 조회 3,174
07-05-20 조회 4,232
07-05-18 조회 5,992
07-05-18 조회 4,048
07-05-17 조회 9,171
07-05-17 조회 5,218
07-05-17 조회 3,894
07-05-16 조회 2,637
07-05-16 조회 3,771
07-05-15 조회 6,189
07-05-14 조회 6,363
07-05-13 조회 3,207
07-05-11 조회 5,523
07-05-10 조회 5,252