Я объединяю файлы журналов из нескольких контейнеров докеров на моем хосте и отправляю им удаленную службу ведения журнала. Я просто перенаправляю вывод в регистратор и помечаю его:
docker-compose logs 2>&1 | logger -t deviant
Это легко настроить с помощью:
*.* @remote_service:remote_port
Тем не мение, *.*
соответствует всем типам журналов с моего хост-компьютера, когда я хочу отправлять только перенаправленные журналы в удаленную службу.
Вот пример журнала, который я хочу сохранить:
Apr 08 08:55:04 calvin.local deviant: proxy_1 | 192.168.59.3 - - [08/Apr/2015:15:55:04 +0000] "stuff here"
Обратите внимание, что он содержит calvin.local deviant
Те, которые содержат deviant
единственные, кого я хочу. Я попытался указать, какие записи журнала такие:
*deviant*
... и перезапустил ведение журнала ... но я все еще вижу все записи (а не только помеченные deviant
) в моих удаленных журналах. Зачем?
В syslog.conf
вы можете назначить действие только в соответствии с данным средством и уровнем сообщения.
Тег, указанный logger -t [tag]
не может использоваться для идентификации сообщения системным журналом. Однако вы могли бы использовать -p [facility.level]'
вариант logger
для установки собственного объекта и уровня, например:
logger -t deviant -p local3.info
Затем в syslog.conf вы можете перехватить и перенаправить эти сообщения:
local3.info @remote_service:remote_port
Попробуйте найти объект, который не используется другими службами. Хороший выбор будет одним из local0
к local7
.
Когда вы указываете уровень, например info
, по умолчанию это означает минимальный уровень, которому будет соответствовать правило.
Читать далее: