rsyslog: сделайте %syslogtag равную длину %

2) вероятно из-за 1) - ps использование /proc получить информацию о выполнении процессов.

1) или потому что инициализация, как ожидают, не сделает это или потому что ей не удается сделать это. Проверьте то, что распределение, как предполагается, делает на начальной загрузке - как система должна быть поднята.

Вещи можно попробовать:

  • смонтироваться /proc, например: mount -t proc proc /proc - второй аргумент произволен (это - то, что показывает источником монтирования). Проверьте то, что работает с PID=1

  • регистрация /proc/cmdline какие параметры Ваше ядро получает на начальной загрузке. Если это содержит init=... Вы, возможно, должны были бы изменить его на, например. /sbin/init или удалите его, чтобы позволить ядру попытаться разрешить init, который будет выполнен сам. Необходимо сделать это в конфигурации загрузчика (для R-пи, это находится в некотором текстовом файле на SD-карте IIRC).

  • Проверьте, что желаемый init исполняемый файл существует - Busybox обычно имеет тонны символьных ссылок, указывающих на его двоичный файл так, чтобы можно было использовать command [args] вместо busybox command [args]. Ваш мог бы скучать по ним.

3
14.12.2013, 17:15
2 ответа

Используя rsyslog

Я нашел эту страницу названной: Отправка сообщений с тегами, больше, чем 32 символа. В странице я заметил, что можно указать то, что похоже на диапазон к полям в шаблоне.

Пример

template (name="ForwardFormat" type="string" string="<%PRI%>%TIMESTAMP:::date-rfc3339% %HOSTNAME%

%syslogtag:1:32%% сообщение::: sp-if-no-1st-sp %% % сообщения ")

Возможно, Вы могли сделать то поле шире, чем что-нибудь, что отображено там, таким образом, вынудив вывод выстроиться в линию?

Впоследствии использование awk

Вы могли также сделать это вскрытие с помощью следующего использования awk управлять шириной того 3-го столбца. Это должно было бы только отобразить журнал, когда Вы хотите рассмотреть его, он на самом деле не устранил бы проблему, о которой Вы спрашиваете.

$  awk '{ printf("%s %s %-30s %s ", $1, $2, $3, $4); \
  for (i = 5; i <= NF; i++) printf $i; print "" }' < rsyslog.txt 

Пример

$  awk '{ printf("%s %s %-30s %s ", $1, $2, $3, $4); \
      for (i = 5; i <= NF; i++) printf $i; print "" }' < rsyslog.txt 
2013-12-14 15:59:39 postfix/pickup[4665]:          559A48C9: uid=0from=<root>
2013-12-14 15:59:39 postfix/cleanup[5194]:         559A48C9: message
2013-12-14 15:59:39 postfix/qmgr[7358]:            559A48C9: from=<xyz@example.com>
2013-12-14 15:59:39 postfix/smtp[5196]:            559A48C9: to=<abc@example.net>
2013-12-14 15:59:39 postfix/qmgr[7358]:            559A48C9: removed

Извлечение просто процесса называет без PID

OP задал следующий последующий вопрос в комментариях.

И Вы знаете, между прочим, как я мог избавиться если часть с идентификатором процесса, т.е. [4665]? Так, чтобы я только имел постфикс/погрузку в запасе в 3-м столбце.

Я полагаю, что следующий метод, используемый для извлечения данных для вставки в базу данных MySQL, мог быть адаптирован, чтобы сделать то, что Вы просите. Поток назван: пустой ProcessID, PID в Syslogtag.

Важная часть находится в этом примере:

$template dbFormat,"insert into SystemEvents (Message, Facility, FromHost, Priority, DeviceReportedTime, ReceivedAt, InfoUnitID, SysLogTag, ProcessID) values ('%msg%', %syslogfacility%, '%HOSTNAME%', %syslogpriority%, '%timereported:::date-mysql%', '%timegenerated:::date-mysql%', %iut%, '%syslogtag:R,ERE,1,FIELD:([a-zA-Z\/]+)(\[[0-9]{1,5}\])*:--end%', '%syslogtag:R,ERE,1,BLANK:\[([0-9]{1,5})\]--end%')",sql

Конкретно эти биты. Эти 2 переменные:

  • SysLogTag
  • ProcessID

Становятся заполненными этими средствами форматирования:

  • '%syslogtag:R,ERE,1,FIELD:([a-zA-Z\/]+)(\[[0-9]{1,5}\])*:--end%'
  • '%syslogtag:R,ERE,1,BLANK:\[([0-9]{1,5})\]--end%'

Я полагаю, что 1-е избавляется от части PID вывода syslogtag. В то время как 2-е избавляется от части имени процесса строки и сохраняет просто информацию о PID.

2
27.01.2020, 21:28
  • 1
    большое спасибо. И Вы знаете, между прочим, как я мог избавиться если часть с идентификатором процесса, т.е. [4665] ? Так, чтобы я только имел postfix/pickup оставленный в 3-м столбце. –  Martin Vegter 15.12.2013, 15:28
  • 2
    @MartinVegter - видит обновления. –  slm♦ 15.12.2013, 18:42

С помощью rsyslogd невозможно вывести поля фиксированной ширины. Что возможно, так это разделенные полями табуляции.

Следующее должно быть использовано. Он также запишет имя процесса и PID в отдельные поля:

$template long-iso,"%$NOW%\t%timereported:8:15%\t%programname%\t%procid%\t%msg%\n"
0
27.01.2020, 21:28

Теги

Похожие вопросы