Найти длину сообщения syslog max

Большинство программистов Unix будут использоваться для интерфейса, определенного syslog.h, и многие реализации (например, glibc) не имеют реального ограничения на размер отправляемого на него сообщения syslog, но обычно существует ограничение на приложение, прослушивающее /dev/log.

Мне интересно, знает ли кто-нибудь, как найти максимальный размер сообщения для syslog? Или какая-то хорошая документация о том, какой лимит фактически (или обычно)?

Edit:

До сих пор я нашел эти RFC по теме:

Ответ 1

Имейте в виду, что syslog - это протокол, который означает, что он устанавливает минимальные значения и дает рекомендации. Я не могу найти источник этого, но считаю, что минимальная длина, которая должна поддерживаться, - 1k, рекомендуется 64k.

Каждая реализация может свободно делать то, что хочет, т.е. если вы хотите максимум 16 МБ и пишете сервер syslog, вы можете это сделать. Я не уверен, почему вы это сделали, но могли бы.

Насколько я знаю, стандартного метода programatic не существует, поэтому сохранение сообщений чуть меньше 1k идеально подходит для переносимости.

Обновление

Пользователь MuMind указал в комментариях, что rsyslog усечено с 2097 символами, включая метку журнала/метку времени. Поскольку это широко используемая реализация протокола, это усиливает, что длина должна поддерживаться от 1 до 1,5 к для максимальной переносимости.

Честно говоря, единственная причина, по которой это можно было бы превысить, - зарегистрировать дополнительный вывод отладки/сбоя; гораздо лучше разместить это где-то в /var/log вместо этого, и просто указать, что вы это сделали, когда разговаривали с syslog (предоставлено, есть сценарии, когда вы не могли этого сделать, но у большого количества библиотек есть "лучшее усилие", с этим).

Ответ 2

Так как syslog - это протокол, который должен использоваться по UDP, в этом случае предел представляет собой размер дейтаграммы UDP минус несколько байтов для заголовков, который составляет около 65 тыс. Домен сокета /dev/log unix может быть либо дейтаграммой, либо потоковым сокетом (SOCK_STREAM или SOCK_DGRAM), в первом случае ограничение 64k не применяется, но лучше всего использовать размер дейтаграммы UDP как предел, если вы не являетесь автор программы, читающей сообщения.

Ответ 3

"Старый" Syslog

Для syslog "старого" (RFC 3164) максимальная длина полезной нагрузки дейтаграммы syslog (включая закодированный приоритет и временную метку) составляет 1024 октета, согласно раздел 4.1 и минимальной длины нет, хотя пустые пакеты syslog следует отбросить. Кроме того, более длинные датаграммы никогда не должны перенаправляться в соответствии с раздел 6.1. (Реле должны обрезать пакеты, если они добавляют информацию о временной отметке, которая увеличивает длину; раздел 4.3.2.)

Это действительно старо, и никто больше не следует за этим, но это нужно иметь в виду, если вы работаете с очень старыми системами.

"Современный" Syslog

Современные системы следуют (более или менее) RFC 5424, где в разделе раздел 6.1 он устанавливает минимальный размер, который каждый должен иметь возможность обрабатывать 480 октетов, предполагает, что каждый сможет обрабатывать не менее 2048 октетов и не имеет максимума.

Очень часто используемый транспорт - это UDP, определенный в RFC 5426, где раздел 3.2 подробно описывает размер сообщения. Максимально допустимый размер такой же большой, как вы можете поместить в дейтаграмму, которую вы можете получить через сеть (которая будет немного ниже 64k, в зависимости). Однако для IPv4 требуется минимум 480 октетов, и, желательно, системы должны принимать не менее 2048 октетов. Тем не менее, немного больше информации о MTU и т.п., Поэтому, в общем, если вы не уверены в системах, с которыми имеете дело, вы, вероятно, хотите ограничить размер под самым низким MTU вашего пути, когда все заголовки и т.п. включены; около 1300 октетов было бы хорошей догадкой, если вы не уверены.

Это только для UDP; через приемники линии TLS должны иметь возможность обрабатывать не менее 2048 октетных сообщений и предпочтительно 8192 октета (RFC 5425 раздел 4.3.1. Но, конечно, вам нужно быть осторожным с этим, потому что, если сообщение будет перенаправлено через транспорт UDP позже, применяются длины UDP.

Rsyslog

Rsyslog (извините, Ранье, но "правильная" форма всех верхних регистров отвлекает), вероятно, самая популярная syslog в эти дни. (Даже системы, которые используют systemd/journald, все еще используют rsyslogd для приема и передачи сообщений журнала в формате syslog.)

Rsyslog добавила возможность устанавливать максимальный размер сообщения, используемый во многих областях программы (параметр конфигурации maxMessageSize) в версии 6.3.4 в 2011 году, и в это время значение по умолчанию было установлено на 8096 октетов, где остался с тех пор.