Saya memiliki cuplikan Python sederhana yang dikelola oleh systemd
layanan yang masuk ke rsysogd
daemon tempat saya telah mendefinisikan file konfigurasi untuk meletakkannya ke server syslog dengan format yang telah saya tetapkan. Ini berfungsi dengan baik sejauh ini.
Dalam kode di bawah ini, saya meneruskan argumen sebagai string yang ingin saya masuki di server. Saya menggunakan kode di bawah ini sebagai modul dan menggunakannya untuk logging saja, skrip sebenarnya menggunakan ini untuk tujuan logging.
#!/usr/bin/env python
import syslog
import sys
syslog.openlog(facility=syslog.LOG_LOCAL0)
syslog.syslog(syslog.LOG_INFO, sys.argv[1])
Karena aplikasi dikelola oleh systemd
itu membuat salinan syslog tersedia jika dilihat dari journalctl -xe
dan journalctl -u <my-service>
yang tidak saya inginkan terjadi karena saya memiliki informasi penting lainnya yang saya log in di log jurnal.
Definisi layanan adalah
[Unit]
Description=Computes device foobar availability status
[Service]
Type=simple
EnvironmentFile=/etc/sysconfig/db_EndPoint
ExecStart=/usr/bin/python /opt/foobar/foobar.py
WatchdogSec=60
RestartSec=10
Restart=always
LimitNOFILE=4096
[Install]
WantedBy=default.target
dan di /etc/systemd/journald.conf
file, saya belum mengaktifkan apa pun dari pilihan yang akan tersedia. Saya mencari dokumentasi journald.conf ini untuk menggunakan ForwardToSyslog=no
dan melakukan restart journald
layanan sebagai
systemctl restart systemd-journald
dan juga memulai ulang unit layanan saya, tetapi saya melihat log keluar ke server syslog dan juga ke jurnal log. Opsi apa yang saya lewatkan di sini?
Jawaban yang Diterima:
Saya memiliki cuplikan Python sederhana yang dikelola oleh layanan systemd yang masuk ke daemon rsys[l]ogd […]
Tidak.
Apa yang Anda miliki adalah layanan yang masuk ke jurnal systemd. Server mendengarkan /dev/log
yang terkenal socket tempat program Python Anda berbicara bukan rsyslogd
. Ini adalah systemd-journald
. rsyslogd
melekat pada sisi lain dari systemd-journald
, dan program Python Anda tidak berbicara dengannya.
Dari sini, harus jelas bahwa satu-satunya cara untuk tidak mengirim barang melalui systemd-journald
adalah menggunakan beberapa lainnya rute ke rsyslogd
, tidak soket terkenal yang digunakan perpustakaan Python Anda secara default. Itu semua tergantung dari bagaimana Anda mengonfigurasi rsyslogd
.
- Ada kemungkinan Anda telah mengaktifkan server UDP dengan
imudp
modul, dalam hal ini Anda dapat memberi tahu program Python Anda untuk menggunakannya dengan menggunakan pustaka Python berbeda yang berbicara ke server UDP semacam itu. (Perpustakaan syslog Python dirancang untuk menggunakan soket lokal yang terkenal.) - Atau (dan lebih baik lagi, karena Anda harus berhati-hati agar tidak membuka layanan UDP ke dunia luar dengan mesin Anda), Anda dapat memberikan
rsyslogd
sedetik, tidak diketahui,AF_LOCAL
socket untuk didengarkan dengan mengonfigurasi ini diimuxsock
konfigurasi modul. Sekali lagi, Anda harus memberi tahu program Python Anda untuk menggunakannya dan menggunakan pustaka Python yang berbeda.
Apa sebenarnya yang Anda lakukan dalam program Python Anda berada di luar cakupan jawaban ini.
Bacaan lebih lanjut
- https://unix.stackexchange.com/a/294206/5132