Nhận tin nhắn Syslog với Archd hệ thống


25

Tôi cảm thấy như mình đã bỏ qua điều hiển nhiên, nhưng tôi không thể tìm ra cách lấy máy chủ Arch Linux của mình, sử dụng systemd, để nhận và ghi nhật ký syslogtin nhắn từ một hệ thống từ xa.

Tôi có modem DSL của Cisco 678 và WAP DD-WRT và cả hai đều có thể được cấu hình để gửi tin nhắn định dạng syslog đến một số máy khác. Tôi muốn máy đó trở thành máy chủ Arch Linux của tôi.

Tôi đã loay hoay và tất cả những gì tôi tìm thấy là "systemd thay thế syslog", hoặc tôi không còn cần phải chạy sysloghoặc một cái gì đó không liên quan đến câu hỏi của tôi.

CẬP NHẬT

Tôi đã hỏi trên các diễn đàn Arch và không nhận được câu trả lời liên quan. Tôi đã cài đặt syslog-ng chỉ để nghe trên cổng UDP 514. syslog-ng viết tin nhắn từ Cisco 678 của tôi và một Wap DD-WRT tôi đã nhận được. Thật không may, các tin nhắn không kết thúc trong tạp chí của systemd, mà là trong các tệp phẳng. Vì vậy, không có giải pháp chính xác, nhưng một cái gì đó của một cách giải quyết. Tôi muốn có các thông báo nhật ký hệ thống trong tạp chí, không phải trong các tệp phẳng.


systemd sử dụng nhật ký riêng của nó . Ngoài ra còn có metalog , có sẵn trong các repos Arch cốt lõi - cá nhân tôi, sử dụng cả ba: syslog, tạp chí systemd và metalog. Hãy thử kiểm tra tạp chí systemd. Nếu tôi nhớ lại một cách chính xác, syslog, kể từ khi chuyển sang systemd, đã được cấu hình để gửi tất cả các tin nhắn của nó và như vậy đến tạp chí của systemd.
Alexej Magura

Câu trả lời:


11

Bạn có thể viết máy chủ syslog của một người nghèo khá dễ dàng với socat . Bạn chỉ cần một đơn vị dịch vụ như thế này:

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

Nó sẽ mù quáng gửi bất cứ thứ gì nhận được trên cổng dịch vụ nhật ký hệ thống tới tạp chí systemd. Lưu ở trên như, nói, /etc/systemd/system/syslog.servicevà sau đó

# systemctl daemon-reload
# systemctl start syslog

Sau đó, bạn chỉ cần nguồn của mình để gửi tin nhắn đến cổng UDP 514 trên máy chủ nghe của bạn.

Bạn có thể muốn cải thiện điều này để thực sự phân tích dữ liệu nhận được và định dạng dữ liệu nhưng không cần thiết nếu tất cả những gì bạn muốn làm là ghi nhật ký những gì đã nhận.

( socat nằm trong kho Arch Linux Extrapacman -S socat :)


4
Câu trả lời tốt. Tôi đã đi với một kịch bản python nhanh vì tôi không thể cài đặt 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

Vì vậy, có một chút khoảng cách ở đây.

Systemd không hỗ trợ nhắn tin từ xa thông qua thành phần systemd-tạp chí-gateway. Điều đó đang được nói rằng những tin nhắn này không ở định dạng syslog. Syslog (dưới dạng định dạng) là một xác định được phê chuẩn của IETF được ghi trong RFC 5424 (không dùng phiên bản trước đó, RFC 3164).

Nhiều điều phức tạp hơn khi làm cho những trò chơi này trở nên độc đáo với nhau được ghi lại ở đây:

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

và ở đây (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.

Tóm lại, đảm bảo rằng các tin nhắn được gửi từ syslog-ng đến STDOUT và mọi thứ sẽ kết thúc trong tạp chí.

Theo dõi thêm một chút tôi cũng thấy điều này:

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

Trường hợp ai đó đang viết một ràng buộc từ PostgreSQL đến systemd để đăng nhập. Trong phần này, họ trích dẫn rằng hiện tại (tính đến thời điểm của tệp đó, 2013/06) các tin nhắn đa dòng không được hỗ trợ trong systemd, do đó, hãy coi chừng điều đó.


2

Tôi không biết phân phối Arch. Tôi có Fedora 20 (bao gồm cả systemd) và đã cấu hình nó để chấp nhận các thông báo nhật ký hệ thống từ xa.

IMHO, chức năng này không liên quan đến systemd. Systemd-journald.service tự xen giữa các chương trình kernel / không gian người dùng và hệ thống con syslog. Nó ghi lại (tôi nghĩ) chỉ các thông điệp cục bộ từ các nguồn này vào cơ sở dữ liệu tạp chí của nó và sau đó chuyển tiếp chúng tới syslog. Xem ví dụ "man systemd-journald.service" (ít nhất là trên Fedora).

Trong trường hợp của tôi, tôi kích hoạt điều này bằng cách định cấu hình "mô đun nhận syslog TCP" tùy chọn trong /etc/rsyslog.conf tức là

# Provides TCP syslog reception
$ModLoad imtcp
$InputTCPServerRun 514

Một mô-đun UDP cũng có sẵn.

Cũng cần phải thêm (r) quy tắc nhật ký hệ thống để hướng đầu ra đến các tệp mong muốn. Để xem tài liệu đầy đủ, hãy xem: http://www.rsyslog.com/doc/

HTH.


2

Tôi đã cài đặt syslog-ng và có thể nhận được thông điệp nhật ký nhật ký hệ thống. Nhưng muốn tôi thực sự muốn là nhận được thông điệp nhật ký nhật ký hệ thống và sau đó viết tin nhắn nói cho tạp chí. Tôi không thể tìm cách cấu hình syslog-ng để viết tin nhắn syslog từ xa đến journald.

Vì vậy, tôi đã viết một tiện ích để làm điều này.

https://github.com/abilitiesageous/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.)

Xây dựng các tệp và hướng dẫn để thử nghiệm và các tệp đơn vị systemd mẫu được bao gồm trong dự án. Thưởng thức!


0

syslog-ng và systemd tạp chí

Từ syslog-ng

Bắt đầu với syslog-ng phiên bản 3.6.1, system()nguồn mặc định trên các hệ thống Linux sử dụng systemd sử dụng journald làm system()nguồn chuẩn .

Nếu bạn muốn sử dụng cả hai tập tin journald và syslog-ng, hãy đảm bảo các cài đặt sau có hiệu lực. Đối với systemd-journald, trong tệp /etc/systemd/journald.conf, Storage = hoặc được đặt thành tự động hoặc hủy đặt (mặc định là tự động) và ForwardToSyslog = đặt thành không hoặc bỏ đặt (mặc định là không). Đối với /etc/syslog-ng/syslog-ng.conf, bạn cần có đoạn nguồn sau:

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

Mặt khác, nếu bạn muốn không giữ lại nhật ký journald, mà chỉ ghi nhật ký văn bản của syslog-ng, đặt Storage=volatileForwardToSyslog=yesnhập /etc/systemd/journald.conf. Điều này sẽ lưu trữ tạp chí trong ram. Kể từ syslog-ng 3.6.3, syslog-ng đang sử dụng journald làm system()nguồn nên nếu bạn đặt Storage = none, nhật ký systemd sẽ bỏ tất cả các tin nhắn và không chuyển tiếp chúng tới syslog-ng.

Sau khi thay đổi, khởi động lại systemd-journald.servicesyslog-ng.servicedaemon.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.