nixp.ru v3.0

26 мая 2017,
пятница,
23:53:08 MSK

DevOps с компанией «Флант»
Longobard написал 9 июля 2004 года в 15:42 (248 просмотров) Ведет себя как мужчина; открыл 291 тему в форуме, оставил 2499 комментариев на сайте.

Делаю такую команду:

longobard root # cat /tmp/distccd-logclean | grep -E "*(connection|kernel|compil|upload|download)"
Jul  9 15:21:55 longobard pure-ftpd: (?@10.1.5.38) [INFO] New connection from 10.1.5.38
Jul  9 15:22:00 longobard distccd[7068]: (dcc_check_client) connection from 10.1.5.38:34703
Jul  9 15:22:00 longobard distccd[7068]: compile from geometry.c to geometry.o
Jul  9 15:22:00 longobard distccd[7069]: (dcc_check_client) connection from 10.1.5.38:34706
Jul  9 15:22:00 longobard distccd[7069]: compile from bsect.c to bsect.o
Jul  9 15:22:00 longobard distccd[7070]: (dcc_check_client) connection from 10.1.5.38:34709
Jul  9 15:22:00 longobard distccd[7070]: compile from partition.c to partition.o
Jul  9 15:22:37 longobard pure-ftpd: (?@10.1.3.221) [INFO] New connection from 10.1.3.221
Jul  9 15:26:29 longobard pure-ftpd: (?@10.1.3.221) [INFO] New connection from 10.1.3.221
Jul  9 15:26:37 longobard pure-ftpd: (?@10.1.2.41) [INFO] New connection from 10.1.2.41
Jul  9 15:29:13 longobard pure-ftpd: (?@10.1.5.233) [INFO] New connection from 10.1.5.233
Jul  9 15:30:44 longobard pure-ftpd: (?@10.1.9.93) [INFO] New connection from 10.1.9.93
Jul  9 15:31:12 longobard distccd[7071]: (dcc_check_client) connection from 10.1.5.38:34722
Jul  9 15:31:42 longobard pure-ftpd: (?@10.1.5.38) [INFO] New connection from 10.1.5.38
Jul  9 15:32:56 longobard pure-ftpd: (?@10.1.5.38) [INFO] New connection from 10.1.5.38
Jul  9 15:32:56 longobard pure-ftpd: (ftp@10.1.5.38) [NOTICE] /home/ftp//gentoo/distfiles/gpc231.tar.Z downloaded  (27917 bytes, 2281.97KB/sec)
Jul  9 15:35:21 longobard distccd[7076]: (dcc_check_client) connection from 10.1.5.38:34736
Jul  9 15:35:21 longobard distccd[7076]: compile from rmprq.c to rmprq.o
Jul  9 15:35:23 longobard distccd[6899]: (dcc_check_client) connection from 10.1.5.38:34741
Jul  9 15:35:23 longobard distccd[6899]: compile from expand.c to expand.o
Jul  9 15:35:23 longobard distccd[6964]: (dcc_check_client) connection from 10.1.5.38:34744
Jul  9 15:35:23 longobard distccd[6964]: compile from dag.c to dag.o
Jul  9 15:35:23 longobard distccd[7065]: (dcc_check_client) connection from 10.1.5.38:34747
Jul  9 15:35:23 longobard distccd[7065]: compile from sysintf.c to sysintf.o
Jul  9 15:35:23 longobard distccd[7066]: (dcc_check_client) connection from 10.1.5.38:34750
Jul  9 15:35:23 longobard distccd[7066]: compile from quit.c to quit.o

Теперь такую:

longobard root # cat /tmp/distccd-logclean | grep -E "*(connection|kernel|compil|upload|download)" > /var/log/messages
longobard root #

Во втором случае в /var/log/messages никуя не появляется! Хотя я делаю те же действия (лазаю по своему фтп и пр.), но там ничего не форвардится. Пробовал ставить первую команду во всякие ковычки-козяфки, не помогает. В чем дело? Права на всякий на /var/log/messages проставил 777. В чем фигня?

ЗЫ: /tmp/distccd-logclean — это FIFO канал

Uncle Theodore

А может, там и нет ничего, в фифе-то?

cat | grep — масло маслянное, достаточно просто

grep -E «*(connection|kernel|compil|upload|download)» /tmp/distccd-logclean

Попробуй не переписывать /var/log/messages, а добавлять к нему:

grep -E «*(connection|kernel|compil|upload|download)» /tmp/distccd-logclean >> /var/log/messages

Good Luck,

UT

Genie

Аднака,

man tail

/-f

Ибо файл изменяется после открытия, но ни cat, ни less, ни grep на это не рассчитаны.

Так что

tail -f /var/log/your_file.log | grep 'bla-bla-bla' > /path/to/output_file.txt

Longobard

Не-а. Не работает ни тот ни другой вариант.

2 Genie: тут не файл а FIFO, так шо какая нах разница? Но попробовал и через tail — не работает. Причем такая интересная вещь:

cat /tmp/distccd-logclean > /var/log/messages

выводит как и нада все из пайпа в лог.

А grep -E «*(connection|kernel|compil|upload|download)» /tmp/distccd-logclean > (или >>) /var/log/messages не работает. Блин.

Genie

хммм..

а что даст

fuser -auv /var/log/messages

?

Longobard
Genie
хммм..

а что даст

fuser -auv /var/log/messages

?

когда в логи ничего не форвардицца:

longobard root # fuser -auv /var/log/messages
                     USER        PID ACCESS COMMAND
/var/log/messages

Когда форвардицца через grep -E «*(connection|kernel|compil|upload|download)» /tmp/distccd-logclean > /var/log/messages

longobard root # fuser -auv /var/log/messages
                     USER        PID ACCESS COMMAND
/var/log/messages    root      12222 f....  grep
Longobard

О! Обнаружил инетересную вещь: через некоторое (хз какое, тока что с пяьнки пришел) время, в mesages появляется все шо должно там быть. Это навевает меня на мысль про то что cat и grep по разномы выводят, что grep буфферизирует поток и видимо сбрасывает буфер не сразу. Ща на еще одну пьянку сбегаю и попробую вкурить шо там за дело. Мона как-нить сделать шоб при буфферизированом выводе буфер сразу сбрасывался не прибегая к изменению сырцов grep?

Longobard

Причем в messages скидываются из буфера не все залогированное разом, а по букве :) Например окончание содержимого может быть таки:

Jul  9 22:29:46 longobard pure-ftpd: (?@10.1.11.202) [INFO] New connection from 10.1.11.202
Jul  9 22:29:46 longobard pure-ftpd: (?@10.1.4.133) [INFO] New connection from 10.1.4.133
Jul  9 22:30:03 longobard purlongobard root #
Longobard

Попробовал вместо grep попользовать sed — тот же самый результат :( Раз в N промежуток времени (довольно большой) в messages сваливается выхлоп :(

Longobard

Пробовал вместо messages выхлоп направлять в другой FIFO канал из которого читаю. Та же лажа :(

Uncle Theodore

Единственное, что приходит в голову, sync раз в какое-то время?

Good Luck,

UT

Longobard
Uncle Theodore
Единственное, что приходит в голову, sync раз в какое-то время?

Good Luck,

UT

КАК? Мне тут наш местный гуру из локалки сказал что

tail -f file1 | grep xxx > file2 из local.start

Это тож не работает. Он пояснил почему:

из-за той же буферизации. Без буферизации куча времени бы тратилась на I/O. Если хочешь похакать — см. /usr/src/linux/include/linux/limits.h, PIPE_BUF

Хачить ядро желания нету. Блин, мож мона как-нить по другому? Задача такая:

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

Попробуй запустить другой процесс, типа

while [ 1 == 1 ]; do

sync

sleep 1

done

Я не очень понимаю, причем тут атомарный размер записи в пайпу, в ядре он аж 4K, но раз гуру сказал дело в буферах, попробуй их спускать раз в секунду…

Good Luck,

UT

Longobard
Uncle Theodore
Попробуй запустить другой процесс, типа

while [ 1 == 1 ]; do

sync

sleep 1

done

Я не очень понимаю, причем тут атомарный размер записи в пайпу, в ядре он аж 4K, но раз гуру сказал дело в буферах, попробуй их спускать раз в секунду…

Good Luck,

UT

sync не помогает. Т.е. я делаю

grep -E "*(connection|kernel|compil|upload|download)" /tmp/distccd-logclean > /var/log/messages

А на другой консоли делаю некие действия, которые должны заноситсяв логи, лазаю по фтп, а потом делаю sync. В /var/log/messages нету никуя.

Longobard

Попробуйте пожалуйста кто-нить сделать на своем компе следующее:

mknod /tmp/test p
test-word=pure-ftpd
#test-word присваиваем то слово, которое часто встреается в логах. Например хотим #отфильтровать шоб в логах были тока предложения с pure-ftpd. Тогда делаем test-word=pure-ftpd
#Далее в sysklogd.conf (если другой демон - то в его конф) прописать шоб все логи сливались в #/tmp/test
#рестартим лог-демон (в моем случае sysklogd
grep -E "*($test-word)" /tmp/distccd-logclean > /var/log/messages
#теперь делаем действия, которые должны быть логированы. Например лазим по фтп - тогда #пурефтпд скажет в лог че-нить
#теперь идем на другую консольку
sync
cat /var/log/messages

Че у вас получится в результате последней команды? Я уже грешу на ядро (коливас ck5 у меня).

Longobard

Поигрался с приоритетом задачи. Не помогло. И SCHED_NORM,SCHED_BATCH, SCHED_ISO попробовал, даже SCHED_RR!!!! Нифига :(

Longobard

UP! Ну что, никаких идей чтоли? помогите же!

Genie

tail -F -s 1 /path/to/log | grep «bla-bla-bla» > /path/to/another.log

?

Longobard
Genie
tail -F -s 1 /path/to/log | grep «bla-bla-bla» > /path/to/another.log

?

Не работает. tail -F -s 1 /path/to/log не работает. Попробуй сам.

vnp

Извините если что не так, я тоже спьяну.

А grep вообще идет, проверяли? Дело в том, что (afaik) syslog переоткрывает свой файл на каждую запись. А когда он его закрывает, grep gets eof and dutifullly exits. По моему так.

Longobard
vnp
Извините если что не так, я тоже спьяну.

А grep вообще идет, проверяли? Дело в том, что (afaik) syslog переоткрывает свой файл на каждую запись. А когда он его закрывает, grep gets eof and dutifullly exits. По моему так.

grep идет, проверял ессно. Все работает без перенаправления. А как тока направляю куда-нить — все, куй там был.

Genie

короче, use logger

Longobard
Genie
короче, use logger

Не, так неинтересно. Тогда все месааги в логе буду от процесса logger. Нунах.

Genie

Ёпть!!!

man logger

/-t

[root@host:~]# logger -t TestLog "Trying to log this message."
[root@host:~]# grep TestLog /var/log/messages
Jul 12 15:01:26 host TestLog: Trying to log this message.
[root@host:~]#
Longobard
Genie
Ёпть!!!

man logger

/-t

[root@host:~]# logger -t TestLog "Trying to log this message."
[root@host:~]# grep TestLog /var/log/messages
Jul 12 15:01:26 host TestLog: Trying to log this message.
[root@host:~]#

НУ? А мне нада шоб подписано было не TestLog и не Logger а как это изначально было в логе, например pure-ftpd или distccd

Genie

…….

logger -t pure-ftpd «Message»

Longobard
Genie
…….

logger -t pure-ftpd «Message»

А если там не пуре-фтпд? :)))))