Este artigo descreve as partes do protocolo Syslog, que é usado para transmitir mensagens de notificação de eventos.
RSyslog é uma implementação do protocolo Syslog.
Implementação é um termo bastante usado e significa o programa criado com base em um protocolo. Por exemplo, o openssh é um programa criado seguindo o protocolo ssh então “openssh é uma implementação do ssh. Tectia é outra implementação do ssh, tem a mesma função que o openssh.
categoriaoutros
O arquivo rsyslog.conf é o arquivo de configuração principal do rsyslogd que registra as mensagens do sistema nos diversos sistemas unix e derivados. O arquivo rsyslog.conf especifica regras para criação de log.
Aqui, priorities vem de prioridades e é o plural de priority em inglês.
Facility é outro termo que se fôssemos traduzir seria algo como facilidade; mas essa tradução fica um pouco sem sentido e prefiro chamar de facility mesmo. Veremos sobre isso mais adiante para entendermos melhor.
Outro termo usado é Level que faz mais sentido quando o traduzimos para o português. Level quer dizer nível.
Comentários
As linhas que começam com uma marca de cerquilha (“#”) e as linhas vazias são ignoradas, não têm feito e são usadas apenas para comentar.
# Registre(log) todos os emails para um só lugar mail.info -/var/log/maillog
A frase “Registre(log) todos os emails para um só lugar” é um comentário e tem a função de descrever, explicar a linha de baixo.
Seletores
No arquivo /etc/rsyslog.conf vemos que a segunda linha é “mail.info”.
# Registre(log) todos os emails para um só lugar mail.info -/var/log/maillog
O mail.info é um seletor.
O campo seletor consiste em duas partes, uma facility e uma priority, separadas por um ponto (“.”). Ambas as partes não diferenciam maiúsculas de minúsculas e também podem ser especificadas como números decimais conforme veremos adiante. É mais legível usar nomes em vez de números.
Facility
O facility especifica o subsistema que produziu a mensagem, por ex. todos os programas de email registram com o facility chamado mail.
Facility é uma das seguintes palavras-chave: auth, authpriv, cron, daemon, ftp, kern, lpr, mail, mark, news, security (o mesmo que auth), syslog, user, uucp e local0 até local7.
A palavra-chave security é obsoleta e mark é apenas para uso interno e, portanto, não deve ser usada em aplicativos.
Na maioria dos casos, qualquer pessoa pode gerar logs em qualquer facility, portanto, há uma convenção para a escolha do facility correto. Por exemplo, geralmente apenas o kernel do Sistema Operacional pode gerar logs facility chamado “kern”.
Vários seletores podem ser especificados para uma única ação usando o separador ponto-e-vírgula (“;”). Os seletores são processados da esquerda para a direita, sendo que cada seletor pode sobrescrever os anteriores. Usando esse comportamento, você pode excluir algumas prioridades do padrão.
Também, você pode preceder cada prioridade com um sinal de igualdade(“=”) para especificar que syslogd deve se referir apenas a esta única prioridade e não a esta prioridade e todas as prioridades mais altas.
Você também pode preceder a prioridade com um ponto de exclamação (“!”) se quiser que o syslogd ignore esta prioridade e todas as prioridades mais altas. Você pode até usar ambos, o ponto de exclamação e o sinal de igualdade, se quiser que o syslogd ignore apenas essa única prioridade. Se você usar as duas extensões, o ponto de exclamação deve ocorrer antes do sinal da igualdade.
Priority
A palavra priority realmente faz sentido, pois é referente a nível de log.
A prioridade é uma das seguintes palavras-chave, em ordem crescente: debug, info, Notice, Warning, Warning (o mesmo que Warning), Err, Error (o mesmo que Err), Crit, Alert, Emerg, Panic (o mesmo que Emerg).
As palavras-chave warning, error e panic estão obsoletas e não devem mais ser usadas. A prioridade(priority) define a gravidade da mensagem.
O Asterisco(*) Significa Tudo
Além dos nomes mencionados acima, o syslogd entende as seguintes extensões: Um asterisco (“*”) representa todos facilities ou todas os priorities, dependendo de onde é usado, se antes ou depois do ponto.
Abaixo todos os níveis(prioridades) do mail serão enviados para /var/log/maillog
# Registre(log) todos os emails para um só lugar mail.* /var/log/maillog
Já nesse exemplo, todos os programas(facilities) terão seus logs em nível info enviados para /var/log/maillog
# Registre(log) todos os emails para um só lugar *.info /var/log/maillog
none quer Dizer Nenhum
E se eu quiser que não seja gerado nada de log para o facility mail? Basta usar o none.
none quer dizer nenhum, nada. None representa nenhuma prioridade da instalação fornecida.
# Registre(log) todos os emails para um só lugar mail.none /var/log/maillog
Ações
Podemos apontar o log para um arquivo, ou terminal, um computador removo…
Arquivo
O campo ação é o campo onde colocamos o nome do arquivo que receberá o log.
Explicando mais formalmente, de acordo com o rsyslog.com:
Normalmente, as mensagens são registradas em arquivos reais. O nome do arquivo é especificado com um nome de caminho absoluto.
Pipes nomeados
Esta versão do syslogd(8) tem suporte para registro de saída em pipes nomeados (fifos). Um fifo ou pipe nomeado pode ser usado como um destino para mensagens de log adicionando um símbolo de pipe (“|”) ao nome do arquivo. Isso é útil para depuração. Observe que o fifo deve ser criado com o comando mkfifo(1) antes do syslogd(8) ser iniciado.
Termina
Se o arquivo que você especificou for um tty, o tratamento tty especial será feito, o mesmo com /dev/console.
Em um PC Remoto
Segundo o site rsyslog.conf
Este syslogd(8) fornece registro remoto completo, ou seja, é capaz de enviar mensagens para um host remoto executando syslogd(8) e receber mensagens de hosts remotos. O host remoto não encaminhará a mensagem novamente, apenas os registrará localmente. Para encaminhar mensagens para outro host, inclua o sinal de arroba (“@”) antes do nome do host.
Usando esse recurso, você pode coletar todas as mensagens syslog em um host central, se todas as outras máquinas fizerem login remotamente naquele. Isso reduz as necessidades de administração.
Usando um método de log de canal nomeado, mensagens de hosts remotos podem ser enviadas para um programa de log. Ao ler as mensagens de log linha por linha, esse programa é capaz de classificar as mensagens de log por nome de host ou nome de programa no host de log central. Desta forma é possível dividir o log em arquivos separados.
Lista de Usuários
Normalmente, as mensagens críticas também são direcionadas para “raiz” nessa máquina. Você pode especificar uma lista de usuários que devem receber a mensagem de log no terminal escrevendo seus nomes de usuário. Você pode especificar mais de um usuário separando os nomes de usuário com vírgulas (“,”). Se eles estiverem logados, eles receberão as mensagens de log.
Todos que Estiverem Acessados
As mensagens de emergência geralmente vão para todos os usuários atualmente online para notificá-los de que algo estranho está acontecendo com o sistema. Para especificar este recurso de parede(1), use um asterisco (“*”).
Exemplos
Aqui estão exemplos retirados de rsyslog.com e também parcialmente retirado de uma distro real.
#1 Isso armazenará todas as mensagens de prioridade crítica no arquivo /var/adm/critical, com exceção de qualquer mensagem do kernel.
# Store critical stuff in critical # *.=crit;kern.none /var/adm/critical
#2 A primeira regra direciona qualquer mensagem que tenha o facility do kernel para o arquivo /var/adm/kernel. (Mas lembre-se de que apenas o próprio kernel pode fazer login nesse recurso.)
A segunda instrução direciona todas as mensagens do kernel de prioridade crítica e superior para o host(ou servidor) remoto chamado brasil. Isso é útil porque, se o host travar e os discos apresentarem erros irreparáveis, talvez você não consiga ler as mensagens armazenadas. Se eles também estiverem em um host remoto, você ainda pode tentar descobrir o motivo da falha.
A terceira regra direciona as mensagens do kernel de prioridade crítica e superior para o console real, para que a pessoa que trabalha na máquina também as receba.
A quarta linha diz ao syslogd para salvar todas as mensagens do kernel que vêm com prioridades de info até warning no arquivo /var/adm/kernel-info.
Este é um exemplo do segundo seletor sobrescrevendo parte do primeiro. O primeiro seletor seleciona mensagens do kernel de informações de prioridade e superiores. O segundo seletor filtra as mensagens do kernel de erro de prioridade e superior. Isso deixa apenas informações de prioridades, avisos e avisos para serem registrados.
# Kernel messages are stored in the kernel file, # critical messages and higher ones also go # to another host and to the console # kern.* /var/adm/kernel kern.crit @brasil kern.crit /dev/console kern.info;kern.!err /var/adm/kernel-info
#3 Isso direciona todas as mensagens que usam mail.info (na fonte LOG_MAIL | LOG_INFO) para /dev/tty12, o 12º console. Por exemplo, o tcpwrapper tcpd(8) usa isso como padrão.
# The tcp wrapper logs with mail.info, we display # all the connections on tty12 # mail.=info /dev/tty12
#4 Esse padrão corresponde a todas as mensagens que acompanham o recurso mail, exceto a prioridade de informações. Estes serão armazenados no arquivo /var/adm/mail.
# Write all mail related logs to a file # mail.*;mail.!=info /var/adm/mail
#5 Isso extrairá todas as mensagens que vêm com mail.info ou com news.info e as armazenará no arquivo /var/adm/info.
# Log all mail.info and news.info messages to info # mail,news.=info /var/adm/info
#6 Isso permite que o syslogd registre todas as mensagens que vêm com as informações(info) ou a prioridade de aviso(notice) no arquivo /var/log/messages, exceto para todas as mensagens que usam o recurso de correio(mail).
# Log info and notice messages to messages file # *.=info;*.=notice;\ mail.none /var/log/messages
#7 Esta regra diz ao syslogd para escrever todas as mensagens de emergência para todos os usuários conectados no momento.
# Emergency messages will be displayed using wall # *.=emerg *
#8 Esta regra direciona todas as mensagens de alerta prioritário ou superior para os terminais dos operadores, ou seja, dos usuários “root” e “joey” se estiverem logados e operando o sistema.
# Messages of the priority alert will be directed # to the operator # *.alert root,joey
#9 Esta regra redirecionaria todas as mensagens para um host remoto chamado finlandia. Isso é útil especialmente em um cluster de máquinas onde todas as mensagens syslog serão armazenadas em apenas uma máquina.
*.* @finlandia
Comment on “Linux: O que São Facilities, Priorities no RSyslog?”