The OpenNET Project / Index page

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

форумы  помощь  поиск  регистрация  майллист  вход/выход  слежка  RSS
"Скрипт поиска в логах"
Вариант для распечатки  
Пред. тема | След. тема 
Форум Программирование под UNIX (Shell скрипты)
Изначальное сообщение [ Отслеживать ]

"Скрипт поиска в логах"  +/
Сообщение от Артём on 03-Фев-14, 15:06 
Есть файл с логами вида:

2014-01-16 11:31:18,711 [http-apr-8080-exec-130] DEBUG [com.dart.rtk.driver.universal.UniversalDriver] [thread-271167, pool=nw, reqId: d05a4afd-6667-4c42-ad26-dae747a01f6c] Response: <?xml version="1.0" encoding="UTF-8"?>
<response release="2" resultCode="0" resultComment="ERROR_OK">
<sbsInfoList>
        <item sbsId="501303" tariffId="150961" tariffName=""Авангард Безлимит" 1550 Кбит/с">
            <contractInfo contractId="0" contractNum="181000069131" contractTypeId="1" contractStartDate="2010-12-01T00:00:00+3:00" contractFinDate="2999-12-
31T00:00:00+3:00"/>
            <svcList>
               <item svcId="1028247" svcClassId="RT.NW.60.INTERNET_PERSON" svcStatus="1"/>
            </svcList>
        </item>


        <item sbsId="358692" tariffId="0" tariffName="Повременный">
            <contractInfo contractId="0" contractNum="*********" contractTypeId="1" contractStartDate="2008-01-01T00:00:00+3:00" contractFinDate="2999-12-
31T00:00:00+3:00"/>
            <svcList>
               <item svcId="*********" svcClassId="RT.NW.60.PSTN_PERSON" svcStatus="1"/>
            </svcList>
        </item>

    </sbsInfoList>
</response>, time: 842

2014-01-16 11:31:18,714 [http-apr-8080-exec-130] DEBUG [com.dart.rtk.driver.universal.UniversalDriver] [thread-271167, pool=nw, reqId: d05a4afd-6667-4c42-ad26-dae747a01f6c] Request: <request xmlns="" reqType="GET_CL_ACCOUNT_INFO" svcNum="********" svcTypeId="RT.NW.60.IP_ADDRESS"></request>

Если задать grep по файлу вида: cat log_xxxx.log | grep "d05a4afd-6667-4c42-ad26-dae747a01f6c"
,тоесть выбрать только первую строку, то в результате мы увидим:
"
2014-01-16 11:31:18,711 [http-apr-8080-exec-130] DEBUG
2014-01-16 11:31:18,714 [http-apr-8080-exec-130] DEBUG
"
тоесть строка в логе имеет символы переноса строки и результат получается обрезанным.

Каким запросом можно получить строку целиком? При этом лишнее из логов не должно быть отображено (тоесть каждая строчка лога имеет свой уникальный индитификатор и поиск ощусествляется по нему, чтобы не получилось все в кучу).

Ответить | Правка | Cообщить модератору

Оглавление

Сообщения по теме [Сортировка по времени | RSS]


1. "Скрипт поиска в логах"  +/
Сообщение от erera22 email(ok) on 03-Фев-14, 16:52 
Так и не понял, как Вы добились того, чтобы при выводе cat'ом подобного примеру лога, удалось найти grep'ом лишь
> 2014-01-16 11:31:18,711 [http-apr-8080-exec-130] DEBUG
Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

2. "Скрипт поиска в логах"  +/
Сообщение от Артём on 03-Фев-14, 18:48 
> Так и не понял, как Вы добились того, чтобы при выводе cat'ом
> подобного примеру лога, удалось найти grep'ом лишь
>> 2014-01-16 11:31:18,711 [http-apr-8080-exec-130] DEBUG

Прошу прощения, если непонятно написал,сокраитл вывод, а выведит при таком грепе как у меня в примере вот это, примерно:
2014-01-16 11:31:18,711 [http-apr-8080-exec-130] DEBUG [com.dart.rtk.driver.universal.UniversalDriver] [thread-271167, pool=nw, reqId: d05a4afd-6667-4c42-ad26-dae747a01f6c] Response: <?xml version="1.0" encoding="UTF-8"?>
2014-01-16 11:31:18,714 [http-apr-8080-exec-130] DEBUG [com.dart.rtk.driver.universal.UniversalDriver] [thread-271167, pool=nw, reqId: d05a4afd-6667-4c42-ad26-dae747a01f6c] Request: <request xmlns="" reqType="GET_CL_ACCOUNT_INFO" svcNum="********" svcTypeId="RT.NW.60.IP_ADDRESS"></request>
,но, опять же, обрезанное.

Я уже подумываю про awk или sed. Там вроде возможностей больше, но я в них не бум-бум...

Ответить | Правка | ^ к родителю #1 | Наверх | Cообщить модератору

3. "Скрипт поиска в логах"  +/
Сообщение от михалыч (ok) on 03-Фев-14, 21:15 
>[оверквотинг удален]
> у меня в примере вот это, примерно:
> 2014-01-16 11:31:18,711 [http-apr-8080-exec-130] DEBUG [com.dart.rtk.driver.universal.UniversalDriver]
> [thread-271167, pool=nw, reqId: d05a4afd-6667-4c42-ad26-dae747a01f6c] Response: <?xml
> version="1.0" encoding="UTF-8"?>
> 2014-01-16 11:31:18,714 [http-apr-8080-exec-130] DEBUG [com.dart.rtk.driver.universal.UniversalDriver]
> [thread-271167, pool=nw, reqId: d05a4afd-6667-4c42-ad26-dae747a01f6c] Request: <request
> xmlns="" reqType="GET_CL_ACCOUNT_INFO" svcNum="********" svcTypeId="RT.NW.60.IP_ADDRESS"></request>
> ,но, опять же, обрезанное.
> Я уже подумываю про awk или sed. Там вроде возможностей больше, но
> я в них не бум-бум...

Всё равно не понятно.
Вы что получить хотите?
Грепаете строку и она вам всё правильно выдаёт, выдаёт целиком строку, в которой есть то, что вы указываете в команде. Это называется совпадение. Других строк нет. И ничего не обрезано.
Попробуйте так
cat log_xxxx.log | grep "_d05a4afd-6667-4c42-ad26-dae747a01f6c"
нчего нет? правильно, потому, что нет совпадений
Ещё раз - что нужно получить в сухом остатке?

Ответить | Правка | ^ к родителю #2 | Наверх | Cообщить модератору

5. "Скрипт поиска в логах"  +/
Сообщение от Артём on 04-Фев-14, 19:06 
> Всё равно не понятно.
> Вы что получить хотите?
> Грепаете строку и она вам всё правильно выдаёт, выдаёт целиком строку, в
> которой есть то, что вы указываете в команде. Это называется совпадение.
> Других строк нет. И ничего не обрезано.
> Попробуйте так
> cat log_xxxx.log | grep "_d05a4afd-6667-4c42-ad26-dae747a01f6c"
> нчего нет? правильно, потому, что нет совпадений
> Ещё раз - что нужно получить в сухом остатке?

Команда grep ищет совпадение в строке (разделителем строк является '\n') и выводит эту строку. В моем же случае разделителем строк является не символ '\n' а строка вида: "xxxx-xx-xx xx:xx:xx,xxx", где x - числа [0-9]
Можно попробовать и простым перебором символов осуществить поиск, но т.к. логи огромного размера, то это займет больше времени и будет не совсем правильно.
То есть, 'в сухом виде', должно после грепа вывестись строки:

2014-01-16 11:31:18,711 [http-apr-8080-exec-130] DEBUG [com.dart.rtk.driver.universal.UniversalDriver] [thread-271167, pool=nw, reqId: d05a4afd-6667-4c42-ad26-dae747a01f6c] Response: <?xml version="1.0" encoding="UTF-8"?>
<response release="2" resultCode="0" resultComment="ERROR_OK">
<sbsInfoList>
        <item sbsId="501303" tariffId="150961" tariffName=""Авангард Безлимит" 1550 Кбит/с">
            <contractInfo contractId="0" contractNum="181000069131" contractTypeId="1" contractStartDate="2010-12-01T00:00:00+3:00" contractFinDate="2999-12-
31T00:00:00+3:00"/>
            <svcList>
               <item svcId="1028247" svcClassId="RT.NW.60.INTERNET_PERSON" svcStatus="1"/>
            </svcList>
        </item>


        <item sbsId="358692" tariffId="0" tariffName="Повременный">
            <contractInfo contractId="0" contractNum="*********" contractTypeId="1" contractStartDate="2008-01-01T00:00:00+3:00" contractFinDate="2999-12-
31T00:00:00+3:00"/>
            <svcList>
               <item svcId="*********" svcClassId="RT.NW.60.PSTN_PERSON" svcStatus="1"/>
            </svcList>
        </item>

    </sbsInfoList>
</response>, time: 842

2014-01-16 11:31:18,714 [http-apr-8080-exec-130] DEBUG [com.dart.rtk.driver.universal.UniversalDriver] [thread-271167, pool=nw, reqId: d05a4afd-6667-4c42-ad26-dae747a01f6c] Request: <request xmlns="" reqType="GET_CL_ACCOUNT_INFO" svcNum="********" svcTypeId="RT.NW.60.IP_ADDRESS"></request>

а все остальное в логе отброситься

Ответить | Правка | ^ к родителю #3 | Наверх | Cообщить модератору

4. "Скрипт поиска в логах"  +/
Сообщение от ACCA (ok) on 04-Фев-14, 00:03 
Попробуй как-нибудь так:


perl -e '$s=shift @ARGV; while(<>){ print $_ if (m!$s! .. m!</response>|</request>!); }' \
d05a4afd-6667-4c42-ad26-dae747a01f6c log_xxxx.log

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

6. "Скрипт поиска в логах"  +/
Сообщение от Артём on 04-Фев-14, 19:07 
> Попробуй как-нибудь так:
>
 
> perl -e '$s=shift @ARGV; while(<>){ print $_ if (m!$s! .. m!</response>|</request>!);
> }' \
> d05a4afd-6667-4c42-ad26-dae747a01f6c log_xxxx.log
>

Спасибо за попытку, но в перле я ноль. Попробовав ваш скрипт на живом примере ничего не получил - пустую строку.

Ответить | Правка | ^ к родителю #4 | Наверх | Cообщить модератору

7. "Скрипт поиска в логах"  +/
Сообщение от ACCA (ok) on 05-Фев-14, 01:10 
>> Попробуй как-нибудь так:
>>
 
>> perl -e '$s=shift @ARGV; while(<>){ print $_ if (m!$s! .. m!</response>|</request>!);
>> }' \
>> d05a4afd-6667-4c42-ad26-dae747a01f6c log_xxxx.log
>>

> Спасибо за попытку, но в перле я ноль. Попробовав ваш скрипт на
> живом примере ничего не получил - пустую строку.

Скопируй текст из своего же поста и свали в файл log_xxxx.log. Запусти ещё раз. Если получаешь пустую строку, значит что-то написал не так.

Учти, что \ стоит перед переносом на другую строку чисто для красоты. Реальная командная строка может быть длинной, никаких переносов не нужно.

Ответить | Правка | ^ к родителю #6 | Наверх | Cообщить модератору

8. "Скрипт поиска в логах"  +/
Сообщение от Артём on 05-Фев-14, 04:07 
>[оверквотинг удален]
>>> perl -e '$s=shift @ARGV; while(<>){ print $_ if (m!$s! .. m!</response>|</request>!);
>>> }' \
>>> d05a4afd-6667-4c42-ad26-dae747a01f6c log_xxxx.log
>>>
>> Спасибо за попытку, но в перле я ноль. Попробовав ваш скрипт на
>> живом примере ничего не получил - пустую строку.
> Скопируй текст из своего же поста и свали в файл log_xxxx.log. Запусти
> ещё раз. Если получаешь пустую строку, значит что-то написал не так.
> Учти, что \ стоит перед переносом на другую строку чисто для красоты.
> Реальная командная строка может быть длинной, никаких переносов не нужно.

ВО! Точто надо! Спасибо за помощь!!!!
Правда я уже накидал на питоне похожее, но обработка происходит дольше чем на перле. Пример на питоне:

#!/usr/bin/env python
import string, commands, re
str = 'xzcat elk-universal.log.2014-02-04-19.xz'
fs = re.compile(r'1de94f01-e569-45a9-8959-c1289fce9cba')
output = string.split(commands.getoutput(str), '\n')
reg = re.compile(r'[0-9]*4-[0-9]*2-[0-9]*')
temp = False
for a in range(len(output)):
    if re.search(reg, output[a][0:10]):
<------>if re.search(fs,output[a]):
<------>    print output[a]
<------>    temp = True
<------>else:
<------>    temp = False
    else:
<------>if temp:
<------>    print output[a]

Ответить | Правка | ^ к родителю #7 | Наверх | Cообщить модератору

9. "Скрипт поиска в логах"  +/
Сообщение от Артём on 05-Фев-14, 04:12 
>[оверквотинг удален]
>>> perl -e '$s=shift @ARGV; while(<>){ print $_ if (m!$s! .. m!</response>|</request>!);
>>> }' \
>>> d05a4afd-6667-4c42-ad26-dae747a01f6c log_xxxx.log
>>>
>> Спасибо за попытку, но в перле я ноль. Попробовав ваш скрипт на
>> живом примере ничего не получил - пустую строку.
> Скопируй текст из своего же поста и свали в файл log_xxxx.log. Запусти
> ещё раз. Если получаешь пустую строку, значит что-то написал не так.
> Учти, что \ стоит перед переносом на другую строку чисто для красоты.
> Реальная командная строка может быть длинной, никаких переносов не нужно.

А как этот скриптик преобразовать для более общего случая, когда в тексте не всегда есть с роки </response>|</request>, тоесть не привязывать строго к этим 2м словам?

Ответить | Правка | ^ к родителю #7 | Наверх | Cообщить модератору

10. "Скрипт поиска в логах"  +/
Сообщение от михалыч (ok) on 05-Фев-14, 07:58 
> А как этот скриптик преобразовать для более общего случая, когда в тексте
> не всегда есть с роки </response>|</request>, тоесть не привязывать строго к
> этим 2м словам?

Так уже, почти в общем случае и дан.
Чуть-чуть подстрогаю, можно? ))

perl -e '$a=shift; $b=shift; while(<>){print if /$a/../$b/}' "$a" "$b" log_xxxx.log
примерчик
perl -e '$a=shift; $b=shift; while(<>){print if /$a/../$b/}' "501303" "item svcId" log_xxxx.log

Ответить | Правка | ^ к родителю #9 | Наверх | Cообщить модератору

11. "Скрипт поиска в логах"  +/
Сообщение от SayKhan email on 21-Фев-14, 13:55 
/bin/awk '
BEGIN {FS = "|"; RS = "#\\]"; OFS = "\n";}
/'$1'/ {print "\nTIMESTAMP:", $2, "LOGLEVEL:", "\033[1;35m"$3"\033[0m", "ProductName-Version:", $4, "LoggerName:", "\033[1;31m"$5"\033[0m", "Key Value Pairs:", $6, "Message:", "\033[0;36m"$7"\033[0m"
}' `find /store/esb/glassfish/domains/domain1/logs -type f -name "server.log*"`

я такой примерно писал, не совсем совершенный, но работающий.
самое главное здесь начало и конец многострочной записи

Начальный вывод:

[#|2014-02-13T22:58:07.238+0400|WARNING|sun-appserver2.1|javax.jms|_ThreadID=35;_ThreadName=Timer-13;_RequestID=bb5105e7-868c-4aff-a44b-4c4f42c27566;|[C4003]: Error occurred on connection creation [localhost:7676]. - cause: java.net.ConnectException: Connection refused|#]

Выводит так:

TIMESTAMP:
2014-02-13T22:58:07.238+0400
LOGLEVEL:
WARNING
ProductName-Version:
sun-appserver2.1
LoggerName:
javax.jms
Key Value Pairs:
_ThreadID=35;_ThreadName=Timer-13;_RequestID=bb5105e7-868c-4aff-a44b-4c4f42c27566;
Message:
[C4003]: Error occurred on connection creation [localhost:7676]. - cause: java.net.ConnectException: Connection refused

там может быть и многострочная запись, фильтровать можно по ./имя_скрипта 'Шаблон|шаблон'

почитать можно здесь:
http://www.gnu.org/software/gawk/manual/html_node/Multiple-L...

>[оверквотинг удален]
> Если задать grep по файлу вида: cat log_xxxx.log | grep "d05a4afd-6667-4c42-ad26-dae747a01f6c"
> ,тоесть выбрать только первую строку, то в результате мы увидим:
> "
> 2014-01-16 11:31:18,711 [http-apr-8080-exec-130] DEBUG
> 2014-01-16 11:31:18,714 [http-apr-8080-exec-130] DEBUG
> "
> тоесть строка в логе имеет символы переноса строки и результат получается обрезанным.
> Каким запросом можно получить строку целиком? При этом лишнее из логов не
> должно быть отображено (тоесть каждая строчка лога имеет свой уникальный индитификатор
> и поиск ощусествляется по нему, чтобы не получилось все в кучу).

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

12. "Скрипт поиска в логах"  +/
Сообщение от Andrey Mitrofanov on 21-Фев-14, 14:42 
> почитать можно здесь:
> www.gnu.org/software/gawk/manual/html_node/Multiple-Line.html

Он же

  info gawk Multiple\ Line
, если [оный мануал в .info] установлен.
Ответить | Правка | ^ к родителю #11 | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Спонсоры:
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

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