Я комбинирую файлы журнала от нескольких контейнеров докера на моем хосте и отправляю им удаленный сервис входа. Я просто перенаправляю вывод к регистратору и отмечаю его:
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 [feature.level] '
в logger
, чтобы установить пользовательское средство и уровень, например:
logger -t deviant -p local3.info
Затем в syslog.conf вы можете поймать и перенаправить эти сообщения:
local3.info @remote_service:remote_port
Попробуйте найти средство, которое не используется другими службами. Хорошим выбором будет один из вариантов от local0
до local7
.
Когда вы указываете уровень, например info
, по умолчанию это означает минимальный уровень, который будет соответствует правилу.
Подробнее: