Прийом повідомлень Syslog із системою Arch Linux


25

Я відчуваю, що я не помітив очевидного, але не можу зрозуміти, як отримати мій сервер Arch Linux, який використовує systemdдля отримання та реєстрації syslogповідомлень з віддаленої системи.

У мене є DSL-модем Cisco 678 та WAP DD-WRT, і обидва можуть бути налаштовані для надсилання повідомлень у форматі syslog на іншу машину. Я хотів би, щоб ця машина була моїм сервером Arch Linux.

Я гуляв навколо, і все, що я знаходжу, - це те, що "systemd замінює syslog", або що мені більше не потрібно бігати syslogабо щось не менш важливо для мого питання.

ОНОВЛЕННЯ

Я запитував на форумах Arch і не отримав відповіді. Я встановив syslog-ng просто для прослуховування на порту UDP 514. syslog-ng записує повідомлення з мого Cisco 678, і у мене є WAP DD-WRT. На жаль, повідомлення не потрапляють у журнал systemd, а скоріше у плоскі файли. Отже, не точне рішення, а щось вирішення. Я вважаю за краще повідомлення журналу syslog у журналі, а не в плоских файлах.


systemd використовує власний журнал . Також є металог , який доступний в основній Arch repos - я особисто використовую всі три: syslog, systemd's journal та metalog. Спробуйте перевірити журнал systemd. Якщо я правильно пам'ятаю, syslog з моменту переходу на systemd був налаштований на те, щоб надсилати всі свої повідомлення та таке до журналу systemd.
Олексій Магура

Відповіді:


11

Ви можете написати сервер syslog бідного чоловіка досить легко за допомогою socat . Вам просто потрібен такий сервісний блок:

[Service]
Restart=on-success
ExecStart=/usr/bin/socat -u UDP-RECV:514 STDOUT

Він буде сліпо надсилати все, що надійшло через порт сервісу syslog, до журналу systemd. Збережіть описане вище, скажімо, /etc/systemd/system/syslog.serviceі тоді

# systemctl daemon-reload
# systemctl start syslog

Тоді вам просто потрібно джерело, щоб надсилати повідомлення на порт 514 UDP на вашому сервері прослуховування.

Ви можете покращити це, щоб насправді проаналізувати отримані дані та відформатувати їх, але це не обов'язково, якщо все, що ви хочете зробити, - це щоденник, що надходить.

( Соката знаходиться в Arch Linux Додаткові репозиторії: pacman -S socat)


4
Гарна відповідь. Я пішов зі швидким сценарієм python, оскільки не зміг встановити socat:import socket; sock = socket.socket(type=socket.SocketKind.SOCK_DGRAM); sock.bind(("0.0.0.0", 514)); while True: print(sock.recv(1024 * 1024))
awelkie

3

Тож тут є трохи розрив.

Systemd підтримує віддалений обмін повідомленнями через компонент шлюзу systemd-journal. Однак, ці повідомлення не у форматі syslog. Syslog (як формат) - це сертифікація, затверджена IETF, документально підтверджена в RFC 5424 (яка застаріла в попередній версії, RFC 3164).

Більше тонкощів того, як зробити ці добре зіграні разом, задокументовано тут:

http://www.freedesktop.org/wiki/Software/systemd/syslog/

і тут (man systemd-journald.service)

   systemd-journald is a system service that collects and stores logging data.
   It creates and maintains structured, indexed journals based on logging
   information that is received from the kernel, from user processes via the
   libc syslog(3) call, from STDOUT/STDERR of system services or via its native
   API. It will implicitly collect numerous meta data fields for each log
   messages in a secure and unfakeable way. See systemd.journal-fields(7) for
   more information about the collected meta data.

Підсумовуючи, переконайтеся, що повідомлення надсилаються з syslog-ng в STDOUT, і все має закінчуватися в журналі.

Слідкуючи за цим трохи більше, я також виявив це:

https://github.com/intgr/pg_journal/blob/master/doc/pg_journal.md

Де хтось пише прив'язку з PostgreSQL до systemd для ведення журналів. У цьому вони стверджують, що в даний час (станом на час цього файлу, 2013/06) багаторядкові повідомлення не підтримуються в systemd, тому слідкуйте і за цим.


2

Я не знаю розподілу Arch. У мене є Fedora 20 (включаючи systemd) і налаштував її на прийняття віддалених повідомлень syslog.

IMHO, ця функціональність не пов’язана з systemd. Systemd-journald.service втручається між програмами ядра / користувача, та підсистемою syslog. Він фіксує (я думаю) лише локальні повідомлення з цих джерел у своїй базі даних журналів, а потім пересилає їх у syslog. Дивіться, наприклад, "man systemd-journald.service" (принаймні, у Fedora).

У моєму випадку я це вмикаю, конфігуруючи необов'язковий "модуль приймача системного протоколу TCP" в /etc/rsyslog.conf, тобто

# Provides TCP syslog reception
$ModLoad imtcp
$InputTCPServerRun 514

Також доступний модуль UDP.

Також потрібно додати правила (r) syslog, щоб направити вихід на потрібні файли. Повну документацію див .: http://www.rsyslog.com/doc/

HTH.


2

Я встановив syslog-ng і міг приймати повідомлення журналу syslog. Але мені дуже хотілося, щоб я отримував повідомлення журналу syslog, а потім писав таке повідомлення журналу. Я не зміг знайти спосіб налаштування syslog-ng для запису віддалених повідомлень syslog для журналу.

Тому я написав утиліту для цього.

https://github.com/advantageous/rsyslog-journald-repeater

./rsyslog-journald-repeater -h
Usage of ./rsyslog-journald-repeater:
-debug
    debug flag
-host string
    hostname to listen on (default "0.0.0.0")
-port int
    port to listen on (default 5514 on darwin, default 514 on Linux, Unix, etc.)

Файли збірки та інструкції для тестування та вибірки файлів системних одиниць включені до проекту. Насолоджуйтесь!


0

syslog-ng та systemd журнал

Від syslog-ng

Починаючи з syslog-ng версії 3.6.1, system()джерело за замовчуванням у системах Linux, що використовують systemd, використовує journald в якості свого стандартного system()джерела.

Якщо ви хочете використовувати як журнал, так і syslog-ng файли, переконайтесь, що діють такі налаштування. Для systemd-journald у файлі /etc/systemd/journald.conf Storage = або встановлено на auto або unset (що за замовчуванням є auto) та ForwardToSyslog = встановлено на no або unset (за замовчуванням - ні). Для /etc/syslog-ng/syslog-ng.conf потрібна наступна джерела:

 source src {
   system();
   internal();
 };

Якщо ж , з іншого боку, ви не хочете зберігати журнали journald, але тільки системний журнал-Нг тексту журналів, набір Storage=volatileі ForwardToSyslog=yesв /etc/systemd/journald.conf. Це збереже журнал у барі. Станом на syslog-ng 3.6.3, syslog-ng використовує журнал як system()джерело, тому якщо ви встановите Storage = none , системний журнал видалить усі повідомлення, а не переправить їх у syslog-ng.

Після зміни перезапустіть systemd-journald.serviceі syslog-ng.serviceдемони.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.