Felipe Weckx

Enviando mensagens via syslog com PHP

O Syslog é um padrão de mensagens de log de aplicações utilizado por diversos tipos de equipamentos de computação como: servidores, impressoras, roteadores, firewalls, etc. A ideia principal é permitir que todos os logs gerados por uma ou mais aplicações possam ser enviados para um mesmo local, que pode ser no próprio equipamento ou em um servidor remoto.

Neste post vamos entender como funciona a mensagem Syslog e como criar uma classe simples de envio com o PHP.

Especificação

Existem duas RFCs para o padrão de mensagens Syslog. Uma mais antiga, a RFC 3164 criada em 2001 pela Cisco e a RFC 5424 criada em 2009 que adiciona uma série de novas funcionalidades ao padrão, mantendo a compatibilidade com a versão anterior.

Composição da Mensagem

A mensagem Syslog mais simples (RFC 3164) é composta de três partes: o PRI, o HEADER e o corpo da mensagem. O tamanho total destas três partes não pode exceder 1042 bytes. Na RFC 5424 foram adicionados mais campos para acomodar mais dados como hostname, timestamp, entre outros. Mas o mais importante é o campo PRI que é igual nas duas RFCs. Ele indica a facility e a priority da mensagem.

Facility e Priority

Toda mensagem Syslog obrigatoriamente tem uma facility e uma priority. A facility indica a aplicação que originou a mensagem, enquanto a priority indica a prioridade de mensagem, ou seja, seu nível de urgência. É importante notar que o campo priority não está relacionado à prioridade de envio da mensagem e sim à urgência do evento relatado na mensagem.

As facilities especificadas na mensagem do Syslog são (retiradas da RFC3164):

Facilities

Código Nome Descrição
0 kernel messages  Mensagens do kernel
1 user-level messages  Mensagens geradas por aplicações do usuário
2 mail system  Mensagens geradas pelo serviço de e-mail
3 system daemons  Mensagens geradas pelos daemons  do sistema
4 security/authorization messages  Mensagens de segurança e/ou autenticação
5 messages generated internally by syslogd  Mensagens gerada pelo daemon de syslog
6 line printer subsystem  Mensagens geradas pelo sistema de impresão
7 network news subsystem  Mensagens geradas pelo NNTP. Em desuso.
8 UUCP subsystem  Mensagens do sistema UUCP (Unix-to-Unix Copy)
9 clock daemon  Mensagens do sistema de relógio
10 security/authorization messages (note 1)  Mensagens de segurança e/ou autenticação
11 FTP daemon  Mensagens do daemon de FTP
12 NTP subsystem  Mensagens do daemon de sincronização de relógio
13 log audit  Mensagens de log de auditoria
14 log alert  Mensagens de alerta
15 clock daemon  Mensagens do daemon de relógio
16 local use 0 (local0)  Uso local para aplicações
17 local use 1 (local1)  Uso local para aplicações
18 local use 2 (local2)  Uso local para aplicações
19 local use 3 (local3)  Uso local para aplicações
20 local use 4 (local4)  Uso local para aplicações
21 local use 5 (local5)  Uso local para aplicações
22 local use 6 (local6)  Uso local para aplicações
23 local use 7 (local7)  Uso local para aplicações

Como podemos ver, muitas das facilities são repetidas ou semelhantes. Isto porque no início da implementação muitas empresas utilizavam códigos de facilities diferentes para o mesmo tipo de mensagem. Ainda hoje o ideal é buscar na referência do equipamento ou aplicação quais os códigos de facility que ela utiliza para as mensagens.

Priorities

Código Nome Descrição
0 Emergency Sistema inutilizável
1 Alert Uma ação deve ser tomada imediatamente
2 Critical Condições críticas
3 Error Condição de erro
4 Warning Condição de alerta
5 Notice Situação normal, porém significante
6 Informational Mensagens de informação
7 Debug Mensagens de debug

As prioridades são mais claras do que as facilities e facilmente entendíveis. Elas também são as mesmas nas duas RFCs.

O campo PRI

Ambas as mensagens utilizam o campo PRI que é o que indica a facility e a priority. O formato dele é:

<PRI>

Onde PRI é um número calculado por:

Facility * 8 + Priority


Warning: Use of undefined constant ulclasses - assumed 'ulclasses' (this will throw an Error in a future version of PHP) in /var/www/html/wp-content/themes/weckx-theme/functions.php on line 65
Deixe um comentário

Deixe uma resposta

O seu endereço de e-mail não será publicado.