Я настроил /etc/syslog.conf с настройкой ниже
*.* @10.10.10.2:514
*.* @@10.10.10.2:514
и вошли через код ниже
openlog("Test-Msg", LOG_PID, LOG_LOCAL0);
for (int i = 0; i <10; i++)
{
syslog(LOG_ALERT, "My msg %d", i);
std::cout<<"-------------Writing Syslog "<<i<<"\n";
}
closelog();
но это не пересылка на удаленный сервер. вместо этого он создает файл «@ 10.10.10.2: 514» & «@@ 10.10.10.2: 514» и регистрируем все сообщения там.
Протестировано с wireshark, никакие сообщения не пересылаются в удаленную систему.
Я использую платформу Yocto и реализацию системного журнала busybox 1.22.
Обновить
В yocto я увидел еще один файл конфигурации /etc/syslog-startup.conf и там я настроил
DESTINATION=remote # log destinations (buffer file remote)
REMOTE=10.10.10.2:514 # where to log (syslog remote)
Теперь он начал пересылать все сообщения, но согласно руководствам по Linux, syslog conf должен поддерживать *.=alert @<host:port>
фильтр. Если мне нужно использовать вышеуказанную конфигурацию, как я могу применить фильтры?
По умолчанию системы на основе Yocto используют Busybox для предоставления минимальных версий многих основных инструментов. Системный журнал является одним из таких инструментов. Это цитата из документации Busybox:
Обратите внимание, что эта версия syslogd игнорирует /etc/syslog.conf.
Чтобы получить полную функциональность системного журнала, вы должны включить в свой образ более полную реализацию. Есть несколько вариантов в meta-openembedded, rsyslog в метаэ вероятно, хороший выбор по умолчанию.
Сначала я бы использовал logger (инструмент, включенный в busybox), чтобы убедиться, что ваша конфигурация системного журнала правильная.
Если сообщения хорошо отправляются этим методом, мы можем исследовать код.
logger [OPTIONS] [MESSAGE]
Write MESSAGE to the system log. If MESSAGE is omitted, log stdin.
Options:
-s Log to stderr as well as the system log
-t TAG Log using the specified tag (defaults to user name)
-p PRIO Priority (numeric or facility.level pair)
Я тоже смотрю на это. busybox поддерживает удаленную регистрацию, но, кажется, пересылает все сообщения. Отсутствует поддержка фильтрации в сочетании с удаленной регистрацией. Я установил rsyslog на образ, чтобы решить эту проблему.
Я также узнал, что rsyslog не вращает файлы из коробки. Logrotate был установлен как зависимость, но демон cron не запущен. Мне пришлось установить cronie и настроить cronie, logrotate и rsyslog.