Запись перенаправленных rsyslogs в journald, чтобы иметь возможность фильтровать их по SYSLOG_IDENTIFIER? - PullRequest
0 голосов
/ 23 ноября 2018

Здравствуйте, StackOverflow, Боги / Регулярные пользователи / Пользователи!

В настоящее время я работаю над системой ведения журналов для двух приложений, работающих на моих серверах.

Вот контекст:

  • Сервер dev1: сервер Ubuntu 18.04 (только что установлен)
    • работает под управлением systemd.service algo-ep

    [Unit]
    Description="Algo EP"
    [Service]
    Type=simple
    User=me
    WorkingDirectory=/home/me/bin
    ExecStart=/home/me/bin/AlgoEp
    StandardOutput=syslog
    StandardError=syslog
    SyslogIdentifier=dev1_algo_ep
    [Install]
    WantedBy=multi-user.target

  • isработает другой systemd.service algo-mdw

    [Unit]
    Description="Algo MDW"
    [Service]
    Type=simple
    User=me
    WorkingDirectory=/home/me/bin
    ExecStart=/home/me/bin/AlgoMdw
    StandardOutput=syslog
    StandardError=syslog
    SyslogIdentifier=dev1_algo_mdw
    [Install]
    WantedBy=multi-user.target

  • Сервер dev2: сервер Ubuntu 18.04 (недавно установлен)
    • работает systemd.service algo-ep

    [Unit]
    Description="Algo EP"
    [Service]
    Type=simple
    User=me
    WorkingDirectory=/home/me/bin
    ExecStart=/home/me/bin/AlgoEp
    StandardOutput=syslog
    StandardError=syslog
    SyslogIdentifier=dev2_algo_ep
    [Install]
    WantedBy=multi-user.target

Я хотел иметь возможность читать журнал каждой службы, когда я ssh на dev1, используя journalctl (systemd-journal).

Вот так:journalctl -t dev1_algo_ep -t dev1_algo_mdw -t dev2_algo_ep

Итак, я добавил rsyslog.d/algo-ep.conf на dev2:

if $programname == 'dev2_algo_ep' then {          
        action(type="omfwd"                       
           queue.type="linkedlist"                
           queue.filename="algo_fwd"              
           queue.saveOnShutdown="on"              
           action.resumeRetryCount="-1"           
           target="dev1" port="514" protocol="tcp"
        )
}

и добавил rsyslog.d/algo.conf на dev1:

module(load="imtcp")
module(load="omjournal")

ruleset(name="remote-dev2") {
        action(type="omjournal")
}

input(type="imtcp" port="514" ruleset="remote-dev2")

На этом этапенет проблем, я получил строку в journalctl с journalctl -r:

Nov 23 13:27:47 dev1 dev2_algo_ep[3142]:[15246]:  Ep Server listening on localhost:10001...
Nov 23 13:27:47 dev1 dev2_algo_ep[2421]:[15246]:  Ep Server stops...
[...]

Но когда я пытаюсь journalctl -t dev2_algo_ep:

me@dev1:~$ journalctl -t dev2_algo_ep
-- Logs begin at Fri 2018-06-01 13:54:11 CEST, end at Fri 2018-11-23 13:27:47 CET. --
me@dev1:~$

, поскольку SYSLOG_IDENTIFIER полученного журнала установлен как dev2_algo_ep[3142]:вместо dev2_algo_ep.

Итак, мой вопрос: есть ли способ, магический или очевидный

  1. экспортировать журнал из dev2 в dev1 с определенным SYSLOG_IDENTIFIER?
  2. или получить журнал на dev1 и установить определенный SYSLOG_IDENTIFIER перед отправкой его в journald?
  3. или просто сделать это?

Заранее спасибо за совет,Ваша помощь и ваша информация!

[Редактировать] Кажется, что смесь rsyslog + journald очень мало известна.На странице руководства я ничего не нашел (кроме возможности создать шаблон для перестройки журнала при получении на dev1, но для меня это выглядит довольно странно).

1 Ответ

0 голосов
/ 16 августа 2019

option1, так как вы уже получили журнал из journalctl, вы можете использовать формат json, чтобы проверить, какое поле в нужной строке, например, проверить, какое значение в поле SYSLOG_IDENTIFIER.

следующая строка показывает SYSLOG_IDENTIFIERnginx, так что вы можете использовать journalctl -t nginx

journalctl -o json
{ "__CURSOR" : "s=00000000000000000000000000000000;i=146c8;b=170127f0cd5441a3bea76fe326915bd0;m=bb5bba879;t=590367fad5ace;x=33cdab5cd2077705", "__REALTIME_TIMESTAMP" : "1565938628254414", "__MONOTONIC_TIMESTAMP" : "50293614713", "_BOOT_ID" : "170127f0cd5441a3bea76fe326915bd0", "_SELINUX_CONTEXT" : "unconfined\n", "_SYSTEMD_SLICE" : "system.slice", "_MACHINE_ID" : "4211ff3f594041f3966d836585a11a05", "_HOSTNAME" : "VM-0-4-ubuntu", "_TRANSPORT" : "journal", "_CAP_EFFECTIVE" : "0", "PRIORITY" : "5", "_UID" : "102", "_GID" : "106", "_COMM" : "rsyslogd", "_EXE" : "/usr/sbin/rsyslogd", "_CMDLINE" : "/usr/sbin/rsyslogd -n", "_SYSTEMD_CGROUP" : "/system.slice/rsyslog.service", "_SYSTEMD_UNIT" : "rsyslog.service", "_PID" : "3280", "_SYSTEMD_INVOCATION_ID" : "270801fdff7943bc83cd7cef242b3271", "CODE_FILE" : "omjournal.c", "CODE_LINE" : "270", "CODE_FUNC" : "send_non_template_message", "SYSLOG_FACILITY" : "16", "SYSLOG_IDENTIFIER" : "nginx", "MESSAGE" : "36.24.73.111 - - [16/Aug/2019:14:57:08 +0800] \"GET /favicon.ico HTTP/1.1\" 200 946 \"http://111.231.88.233/todo\" \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.142 Safari/537.36\"", "_SOURCE_REALTIME_TIMESTAMP" : "1565938628254404" }

option2, если вы не можете найти SYSLOG_IDENTIFIER, проверьте документ модуля ввода rsyslog.imfile имеет параметр tag, поэтому вы можете использовать journalctl -t nginx для получения журнала.проверьте следующий пример

module(load="imfile")
module(load="omjournal")

ruleset(name="nginx") {
    action(type="omjournal")
}

input(
    type="imfile"
    File="/var/log/nginx/access.log"
    tag="nginx"
    ruleset="nginx")

option3

вам нужно проверить omjournal doc, omjournal имеет параметр с именем tempalte, который вы можете указать формат, который вы отправили journaldпроверьте следующие документы.

  1. www.rsyslog.com / doc / v8-stable / configuration / modules / omjournal.html
  2. www.rsyslog.com / doc / v8-stable /configuration / templates.html
  3. www.freedesktop.org / software / systemd / man / systemd.journal-fields.html

надеюсь, это поможет.

...