천

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

· 2015-11-23 (월) 20:22:05 · 2992

아래글에 이어 아파치와 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) {}
    }
}

?>

|
댓글을 작성하시려면 로그인이 필요합니다.

프로그램

8,188건
+
제목 글쓴이 날짜 조회
15-12-13 조회 2,921
15-12-11 조회 3,384
15-12-11 조회 3,086
15-12-11 조회 2,919
15-12-11 조회 2,576
15-12-11 조회 2,535
15-12-11 조회 2,541
15-12-10 조회 2,496
15-12-10 조회 2,559
15-12-10 조회 2,534
15-12-10 조회 2,780
15-12-09 조회 2,695
15-12-08 조회 3,625
15-12-08 조회 2,899
15-12-08 조회 2,653
15-12-08 조회 2,927
15-12-07 조회 3,012
15-12-07 조회 2,727
15-12-07 조회 3,109
15-12-07 조회 2,759
15-12-06 조회 2,880
15-12-06 조회 2,594
15-12-06 조회 2,834
15-12-05 조회 2,760
15-12-05 조회 3,017
15-12-05 조회 2,784
15-12-04 조회 2,651
15-12-04 조회 2,759
15-12-04 조회 2,815
15-12-03 조회 2,768
15-12-03 조회 2,797
15-12-03 조회 2,832
15-12-03 조회 2,905
15-12-03 조회 3,174
15-12-03 조회 2,695
15-12-02 조회 2,917
15-12-02 조회 2,862
15-12-02 조회 2,852
15-12-02 조회 3,002
15-12-02 조회 3,049
15-12-01 조회 2,740
15-12-01 조회 2,533
15-12-01 조회 2,612
15-11-30 조회 2,802
15-11-30 조회 2,959
15-11-30 조회 2,860
15-11-29 조회 2,627
15-11-29 조회 2,882
15-11-29 조회 2,687
15-11-28 조회 2,622
15-11-28 조회 2,651
15-11-28 조회 2,684
15-11-27 조회 2,773
15-11-27 조회 2,628
15-11-27 조회 2,643
15-11-26 조회 2,807
15-11-26 조회 3,669
15-11-25 조회 2,771
15-11-25 조회 2,725
15-11-25 조회 2,776
15-11-25 조회 2,574
15-11-25 조회 2,936
15-11-23 조회 2,845
15-11-23 조회 2,993
15-11-23 조회 2,821
15-11-21 조회 2,716
15-11-21 조회 2,612
15-11-21 조회 2,559
15-11-20 조회 2,556
15-11-20 조회 2,504
15-11-20 조회 2,634
15-11-20 조회 2,889
15-11-18 조회 2,789
15-11-18 조회 2,675
15-11-18 조회 2,654
15-11-17 조회 2,854
15-11-17 조회 2,610
15-11-17 조회 2,753
15-11-16 조회 2,641
15-11-16 조회 2,605
15-11-16 조회 2,792
15-11-15 조회 2,802
15-11-15 조회 2,663
15-11-15 조회 2,749
15-11-13 조회 3,609
15-11-12 조회 3,491
15-11-12 조회 2,952
15-11-12 조회 3,621
15-11-11 조회 2,749
15-11-11 조회 3,011
15-11-11 조회 3,266
15-11-09 조회 2,762
15-11-09 조회 2,992
15-11-09 조회 2,965
15-11-09 조회 2,722
15-11-09 조회 2,768
15-11-09 조회 3,023
15-11-06 조회 3,360
15-11-05 조회 2,820
15-11-05 조회 2,703