The OpenNET Project / Index page

[ новости /+++ | форум | wiki | теги | ]

Патч для записи в squid лог блоками, а не после закачки всего файла (squid traffic log patch)


<< Предыдущая ИНДЕКС Поиск в статьях src Установить закладку Перейти на закладку Следующая >>
Ключевые слова: squid, traffic, log, patch,  (найти похожие документы)
Date: Mon, 31 Mar 2003 12:41:14 +0600 From: "mitrohin a.s." <swp@uni-altai.ru> Newsgroups: ftn.ru.unix.bsd Subject: Патч для записи в squid лог блоками, а не после закачки всего файла >> я тоже как-то пытался ковырять squid - но немного в другом направлении - >> хотелось добиться более частых записей в лог - кусками по мере получения >> данных ;)) и даже получилось - (squid3.5STABLE1) но ... далее надо писать >> что-то - что будет это дело обрабатывать - то что сейчас работает - >> обсчитывает строки лога (там через syslogd завернуто на програмку) и >> сделано на перле не мной - ;)) я в перле нифига не понимаю и тратить время >> на написание или переделывание того что уже работает - посчитал >> нецелесообразным ;))) - если такой подход устроит и есть желание его >> довести до ума напиши - сделаем diff :) KKA> Hе поделишься местом в исходниках, в которое надо встраиваться, для того что KKA> бы получать статистику чаще? KKA> =))) KKA> У нас есть, кто будет обрабатывать лог (точнее, мы встроились в районе KKA> fprintf(), который сбрасывает данные в лог и пихаем это в БД, а параллельно KKA> модуль идентификации проверяет квоты на исчерпание. Hо вот найти ТВОЕ KKA> место, у моего подчиненного не получается KKA> =))) http://bspu.secna.ru/~swp/SQUID/patch накладывать внутри src
вывод в fifo кусочками по мере поступления данных а не после закачки всего файла --- access_log.c.orig Sun Jun 16 18:25:40 2002 +++ access_log.c Mon Mar 31 11:23:03 2003 @@ -223,7 +223,11 @@ return buf; } +#ifdef ACLOG +char * +#else static char * +#endif accessLogFormatName(const char *name) { if (NULL == name) --- client_side.c.orig Mon Sep 23 11:04:03 2002 +++ client_side.c Mon Mar 31 14:58:13 2003 @@ -1,4 +1,3 @@ - /* * $Id: client_side.c,v 1.561.2.20 2002/09/23 04:04:03 wessels Exp $ * @@ -2096,6 +2095,98 @@ kb_incr(&statCounter.client_http.kbytes_out, size); if (isTcpHit(http->log_type)) kb_incr(&statCounter.client_http.hit_kbytes_out, size); + +#ifdef ACLOG + { + extern int acfd; + extern char *acfifo; /* XXX: for error handling */ + + if (acfd > -1) { + AccessLogEntry * al = &http->al; + const char *client = NULL; + char *user = NULL; + extern char *accessLogFormatName(const char *name); + char buf[0x4000]; + int n; + + ConnStateData *conn = http->conn; + request_t *request = http->request; + MemObject *mem = NULL; + + if (http->entry) + mem = http->entry->mem_obj; + if (http->out.size || http->log_type) { + http->al.icp.opcode = ICP_INVALID; + http->al.url = http->log_uri; + if (mem) { + http->al.http.code = mem->reply->sline.status; + http->al.http.content_type = + strBuf(mem->reply->content_type); + } + http->al.cache.caddr = conn->log_addr; + http->al.cache.size = http->out.size; + http->al.cache.code = http->log_type; + http->al.cache.msec = tvSubMsec(http->start, + current_time); + if (request) { + Packer p; + MemBuf mb; + memBufDefInit(&mb); + packerToMemInit(&p, &mb); + httpHeaderPackInto(&request->header, &p); + http->al.http.method = request->method; + http->al.http.version = request->http_ver; + http->al.headers.request = xstrdup(mb.buf); + http->al.hier = request->hier; + if (request->auth_user_request) { + http->al.cache.authuser = xstrdup( + authenticateUserRequestUsername( + request->auth_user_request)); + authenticateAuthUserRequestUnlock( + request->auth_user_request); + request->auth_user_request = NULL; + } + if (conn->rfc931[0]) + http->al.cache.rfc931 = conn->rfc931; + packerClean(&p); + memBufClean(&mb); + } + + if (Config.onoff.log_fqdn) + client = fqdncache_gethostbyaddr( + al->cache.caddr, FQDN_LOOKUP_IF_MISS); + if (client == NULL) + client = inet_ntoa(al->cache.caddr); + + user = accessLogFormatName(al->cache.authuser ? + al->cache.authuser : al->cache.rfc931); + n = snprintf(buf, sizeof buf, + "%9d.%03d %6d %s %s/%03d %ld (+%ld) " + "%s %s %s%s/%s %s\n", + (int) current_time.tv_sec, + (int) current_time.tv_usec / 1000, + al->cache.msec, + client, + log_tags[al->cache.code], + al->http.code, + (long int) al->cache.size, + size, + al->url, + user && *user ? user : dash_str, + al->hier.ping.timedout ? "TIMEOUT_" : "", + hier_strings[al->hier.code], + al->hier.host, + al->http.content_type); + + /* XXX: blocking write */ + write(acfd, buf, n > sizeof buf ? sizeof buf : n); + + safe_free(user); + } + } /* if */ + } +#endif + } #if SIZEOF_SIZE_T == 4 if (http->out.size > 0x7FFF0000) { --- main.c.orig Mon Mar 31 14:10:38 2003 +++ main.c Mon Mar 31 15:09:48 2003 @@ -35,6 +35,11 @@ #include "squid.h" +#ifdef ACLOG +int acfd = -1; +char *acfifo = NULL; +#endif + /* for error reporting from xmalloc and friends */ extern void (*failure_notify) (const char *); @@ -95,6 +100,9 @@ " -s Enable logging to syslog.\n" " -u port Specify ICP port number (default: %d), disable with 0.\n" " -v Print version.\n" +#ifdef ACLOG + " -x fifo Print account log to fifo. default: /dev/null :))\n" +#endif " -z Create swap directories\n" " -C Do not catch fatal signals.\n" " -D Disable initial DNS tests.\n" @@ -115,7 +123,12 @@ extern char *optarg; int c; - while ((c = getopt(argc, argv, "CDFNRSVYXa:d:f:hk:m::su:vz?")) != -1) { + while ((c = getopt(argc, argv, + "CDFNRSVYXa:d:f:hk:m::su:v" +#ifdef ACLOG + "x:" +#endif + "z?")) != -1) { switch (c) { case 'C': opt_catch_signals = 0; @@ -222,6 +235,11 @@ printf("Squid Cache: Version %s\nconfigure options: %s\n", version_string, SQUID_CONFIGURE_OPTIONS); exit(0); /* NOTREACHED */ +#ifdef ACLOG + case 'x': + acfifo = optarg; + break; +#endif case 'z': opt_create_swap_dirs = 1; break; @@ -571,6 +589,22 @@ eventAdd("ipcache_purgelru", ipcache_purgelru, NULL, 10.0, 1); eventAdd("fqdncache_purgelru", fqdncache_purgelru, NULL, 15.0, 1); } + +#ifdef ACLOG + if (!configured_once && acfifo) + for (;;) { + if ((acfd = open(acfifo, O_WRONLY)) < 0) { + if (errno == EINTR) + continue; + if (errno == ENOENT && + mkfifo(acfifo, 0644) < 0) + err(1, acfifo); + continue; + } + break; + } +#endif + configured_once = 1; }

<< Предыдущая ИНДЕКС Поиск в статьях src Установить закладку Перейти на закладку Следующая >>

Обсуждение [ RSS ]
  • 1, yt (?), 08:33, 12/04/2005 [ответить]  
  • +/
    Есть подозрение, что данный патч не учитывает траффик метода CONNECT.

    Как минимум у меня на 2.5STABLE9 не выводится в лог https-трафик.

     

    лог модерирования

     Добавить комментарий
    Имя:
    E-Mail:
    Заголовок:
    Текст:




    Спонсоры:
    Слёрм
    Inferno Solutions
    Hosting by Ihor
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2019 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру