Sinto que negligenciei o óbvio, mas não consigo descobrir como obter meu servidor Arch Linux, que usa systemd
, para receber e registrar syslog
mensagens de um sistema remoto.
Eu tenho um modem Cisco 678 DSL e um DD-WRT WAP, e ambos podem ser configurados para enviar mensagens no formato syslog para outra máquina. Eu gostaria que essa máquina fosse meu servidor Arch Linux.
Pesquisei no Google, e tudo o que encontro é que "systemd substitui o syslog" ou que não preciso mais executar syslog
ou algo igualmente irrelevante para a minha pergunta.
ATUALIZAR
Eu perguntei nos fóruns do Arch e não obtive respostas relevantes. Instalei o syslog-ng apenas para ouvir na porta UDP 514. O syslog-ng grava mensagens do meu Cisco 678 e um DD-WRT WAP que tenho. Infelizmente, as mensagens não acabam no diário do systemd, mas em arquivos simples. Portanto, não há solução exata, mas uma solução alternativa. Prefiro ter as mensagens syslog no diário, não em arquivos simples.
fonte
Respostas:
Você pode escrever com facilidade o servidor syslog de um pobre homem com o socat . Você só precisa de uma unidade de serviço como esta:
Ele envia cegamente qualquer coisa recebida na porta do serviço syslog para o diário systemd. Salve o acima como, digamos,
/etc/systemd/system/syslog.service
e depoisVocê só precisa da sua fonte para enviar mensagens para a porta UDP 514 no seu servidor de escuta.
Você pode melhorar isso para analisar os dados recebidos e formatá-los, mas não é necessário se tudo o que você deseja fazer é registrar o diário no recebimento.
( Socat está no Arch Linux extra repositório:
pacman -S socat
)fonte
import socket; sock = socket.socket(type=socket.SocketKind.SOCK_DGRAM); sock.bind(("0.0.0.0", 514)); while True: print(sock.recv(1024 * 1024))
Portanto, há um pouco de diferença aqui.
O Systemd suporta mensagens remotas através do componente systemd-journal-gateway. Dito isto, essas mensagens não estão no formato syslog. Syslog (como um formato) é uma especificação especificada pela IETF, documentada na RFC 5424 (que obsoleta a versão anterior, RFC 3164).
Mais dos meandros de fazer com que essas jogadas sejam bem organizadas estão documentados aqui:
http://www.freedesktop.org/wiki/Software/systemd/syslog/
e aqui (man systemd-journald.service)
Em resumo, verifique se as mensagens são enviadas do syslog-ng para o STDOUT e que as coisas devem terminar no diário.
Ao acompanhar isso um pouco mais, também achei isso:
https://github.com/intgr/pg_journal/blob/master/doc/pg_journal.md
Onde alguém está escrevendo uma ligação do PostgreSQL para o systemd para log. Nisso, eles citam que atualmente (no momento desse arquivo, 2013/06) as mensagens de várias linhas não são suportadas no systemd, portanto, observe isso também.
fonte
Não conheço a distribuição do Arch. Eu tenho o Fedora 20 (incluindo o systemd) e o configurei para aceitar mensagens remotas do syslog.
IMHO, essa funcionalidade não está relacionada ao systemd. O systemd-journald.service se interpõe entre os programas kernel / userspace e o subsistema syslog. Ele captura (eu acho) apenas as mensagens locais dessas fontes no banco de dados do diário e as encaminha para o syslog. Veja por exemplo "man systemd-journald.service" (pelo menos no Fedora).
No meu caso, eu habilito isso configurando um "módulo receptor TCP syslog" opcional em /etc/rsyslog.conf
Um módulo UDP também está disponível.
Também é necessário adicionar regras (r) syslog para direcionar a saída para os arquivos desejados. Para documentação completa, consulte: http://www.rsyslog.com/doc/
HTH.
fonte
Instalei o syslog-ng e consegui receber mensagens de log do syslog. Mas o que eu realmente queria era receber mensagens de log do syslog e depois gravar a mensagem no diário. Não foi possível encontrar uma maneira de configurar o syslog-ng para gravar mensagens syslog remotas no diário.
Então, eu escrevi um utilitário para fazer isso.
https://github.com/advantageous/rsyslog-journald-repeater
Arquivos de construção e instruções para teste e amostra de arquivos da unidade systemd estão incluídos no projeto. Apreciar!
fonte
diário syslog-ng e systemd
Do syslog-ng
Começando com o syslog-ng versão 3.6.1, a
system()
fonte padrão nos sistemas Linux que usam systemd usa journald como suasystem()
fonte padrão .Se, por outro lado, você desejar não reter os logs do diário, mas apenas os logs de texto do syslog-ng, defina
Storage=volatile
eForwardToSyslog=yes
entre/etc/systemd/journald.conf
. Isso armazenará o diário em memória ram. A partir do syslog-ng 3.6.3, o syslog-ng está usando o journald como asystem()
fonte; portanto, se você definir Storage = none, o journal do systemd eliminará todas as mensagens e não as encaminhará para o syslog-ng.Após a alteração, reinicie os daemons
systemd-journald.service
esyslog-ng.service
.fonte