Доброго времени суток, появилась проблема с rsyslogd;задача следующая, логировать с помощью netcat логи апаче на удаленный сервер с rsyslogd:
делаю так (тестирую, отправляя команду через echo):
echo "testrsyslog"| /usr/local/apache/bin/acc2syslog.sh
cat /usr/local/apache/bin/acc2syslog.sh
#!/bin/bash
sed "s/^/ACCESS auto.dvesti.ru /"|nc -u 192.168.16.204 514 (нужно дописать 2 слова перед строкой лога)сообщение отправляется, на удаленном сервере вижу, что сообщение пришло:
nc -u -l -p 514
ACCESS auto.dvesti.ru testrsyslogдалее для обработки сообщений, в rsyslogd.conf было добавлено:
:msg,contains,"ACCESS" /var/log/apache2/debian-test-access.log
в лог сообщение не добавляется, вместо этого, оно попадает в messages вот в таком виде:
Oct 28 13:39:58 192.168.16.24999 ACCESS auto.dvesti.ru testrsyslog
запустил rsyslogd в режиме дебаг:
3522.805055342:7f51fb9d3700: msg parser: flags 70, from '~NOTRESOLVED~', msg 'ACCESS auto.dvesti.ru testrsyslog
3522.806314111:7f51fb9d3700: Filter: check for property 'msg' (value '') contains 'ACCESS': FALSEто есть rsyslog почему-то не обрабатывает сообщение (подставляет ''), подскажите пожалуйста почему так происходит ?
Попробуйте так::syslogtag, contains, "ACCESS" /var/log/apache2/debian-test-access.log
> Попробуйте так:
> :syslogtag, contains, "ACCESS" /var/log/apache2/debian-test-access.logспасибо за ответ, попробую этот вариант, о результатах отпишу
> Попробуйте так:
> :syslogtag, contains, "ACCESS" /var/log/apache2/debian-test-access.logда, этот вариант работает при отправке сообщений, но тут столкнулся с еще одной проблемой:
apache, логи которого я хочу отправлять, ни в какую не хочет вообще лог писать, даже в локальный файл :(
делаю так:
в конфиг апаче добавил строчки
ErrorLog |/usr/local/apache/bin/err2syslog2.sh
CustomLog |/usr/local/apache/bin/acc2syslog2.sh combinedв скриптах
cat /usr/local/apache/bin/acc2syslog2.sh
#!/bin/bash
read Message
echo "$Message" | sed 's/^/auto.dvesti.ru ACCESS /' >> /tmp/testlogпока пишу в локальный файл, планирую в будущем через nc отправлять на другой сервер
в общем при такой конструкции в лог вообще ничего не пишется (соответственно и на удаленный сервер не прилетает :( )
если сообщение передавать локально, все прекрасно пишется:
echo "127.0.0.1 - - [23/Oct/2013:15:16:05 +0400] "GET /index.php HTTP/1.1" 400 404" | /usr/local/apache/bin/acc2syslog2.sh
cat /tmp/testlog
auto.dvesti.ru ACCESS 127.0.0.1 - - [23/Oct/2013:15:16:05 +0400] GET /index.php HTTP/1.1 400 404подсажите пожалуйста в чем может быть дело ?
>[оверквотинг удален]
> другой сервер
> в общем при такой конструкции в лог вообще ничего не пишется (соответственно
> и на удаленный сервер не прилетает :( )
> если сообщение передавать локально, все прекрасно пишется:
> echo "127.0.0.1 - - [23/Oct/2013:15:16:05 +0400] "GET /index.php HTTP/1.1" 400 404" |
> /usr/local/apache/bin/acc2syslog2.sh
> cat /tmp/testlog
> auto.dvesti.ru ACCESS 127.0.0.1 - - [23/Oct/2013:15:16:05 +0400] GET /index.php HTTP/1.1
> 400 404
> подсажите пожалуйста в чем может быть дело ?эту проблему решил, но ощущение, что не все сообщения в лог попадают
А попробуйте $ModLoad imfile + еще несколько строк (http://www.rsyslog.com/doc/imfile.html). Любой текстовый файл в syslog пишет.
> А попробуйте $ModLoad imfile + еще несколько строк (http://www.rsyslog.com/doc/imfile.html).
> Любой текстовый файл в syslog пишет.большое спасибо, именно то, что нужно