terça-feira, 31 de maio de 2016

Curso De A a Zabbix

Este post detalha a ementa do curso: “De A a Zabbix” ministrado por André Déo. Curso este que tem por objetivo compartilhar o conhecimento sobre boas práticas de monitoração usando o Zabbix.


Observações:
  • Posso emitir NF como prestação de serviço de informática, através de um parceiro, mas a mesma deve ser solicitada com antecedência.
  • Se você já possui o livro, eu posso dar o desconto referente ao valor do mesmo (Valor que pago à Editora), mas isso deve ser solicitado com antecedência.
  • O parcelamento é feito pelo próprio pagseguro, observe as taxas cobradas pelo serviço.
Sobre a ferramenta
O Zabbix é uma ferramenta que pode ser utilizada para monitorar a infra-estrutura que hospeda os serviços, aplicações que o compõem e, até mesmo, o próprio negócio.

Objetivo deste curso
Este curso visa capacitar o aluno a conhecer desde a instalação, configuração e personalização do Zabbix. Os alunos também aprenderão a criar templates, gráficos e mapas, além de automação de processos.

A quem se destina esse curso?
Gestores de serviços, administradores de rede, profissionais de monitoração e estudantes da área de computação de redes.

Pré-requisitos
  • Conhecimentos básicos dos sistemas operacionais GNU/Linux e Windows.
  • Noções de TCP/IP, endereçamento IP e portas.
  • Conceitos do SNMP.
  • Familiaridade com o console do GNU/Linux, incluindo os comandos a seguir:
ls, cd, pwd, mkdir, rmdir, rm, echo, cat, tail, wc, ps, top, kill, killall, ping, traceroute, ifconfig, route, netstat e vim
Importante: 
  1. O aluno deverá trazer seu próprio notebook (Mínimo 6GB de RAM, recomendado 8GB) e carregador.
  2. O notebook do aluno deverá possuir o software Virtualbox instalado e configurado.
  3. O aluno deverá ter feito download da imagem no padrão Virtualbox que será utilizada durante o curso e deverá ter seguido as informações de configuração enviada por e-mail.
Conteúdo do curso
  • Conhecendo o Zabbix
  1. Apresentação da ferramenta e agenda do curso
  2. Arquitetura do Zabbix
  3. Dicas de Instalação
  4. Diferenças entre o Zabbix 3.x e Zabbix 2.4.x
  5. Comunidade e fóruns
  6. Conceitos básicos
  7. Interface web do Zabbix
  • Configuração da monitoração
  1. Entidades do Zabbix
  2. Templates
    1. Itens
    2. Triggers
    3. Gráficos
    4. Autobusca
    5. Web
    6. Telas
  3. Hosts
  • Configuração da apresentação
  1. Mapas
  2. Telas
  3. Apresentações de slides
  4. Filtros no Dashboard
  • Monitoramento avançado
  1. Equipamentos via SNMP
  2. Simple Check
  3. Monitoramento dependente de S.O.
  4. Dinamização de itens
  • Automatização
  1. Autodescoberta de rede
  2. Ações
    1. Autodescoberta
    2. Autorregistro
    3. Trigger
    4. Escalonamento de notificações
  3. Autobusca (Low Level Discovery)
    1. Protótipo de gráfico
    2. Protótipo de item
    3. Protótipo de trigger
  4. Mapas
    1. Mapeamento de ícones
    2. Adição automática de hosts
    3. Encadeiamento
  • Controle de acesso
  1. Definições gerais
  2. Definições de usuário
  3. Gerenciando permissões
  • Importação e exportação
  1. Templates
  2. Hosts
  3. Mapas
  4. Ícones
  5. Telas
  • Serviços
  1. Monitoração do negócio
    1. Monitoramento de aplicações web
    2. Construção de alertas sobre serviços com redundância
    3. Serviços de TI
  • Monitoração Extendida
  1. Scripts Externos
  2. Parâmetros de usuário (UserParameters) no GNU/Linux e no Windows
  3. Integração com sistemas externos
    1. Envio de notificações
    2. Execução de comandos remotos
  4. Auditoria do Zabbix
  • Monitoração dispersa (Proxies)
  1. Zabbix Proxy
Está incluso
  • Coffee breaks
  • Internet wireless
  • Material didático (livro De A a Zabbix)
  • Certificado impresso (Emitido em nome do Instrutor)
Carga Horária
  • 24 Horas
Instrutor
·         André Luis Boni Déo, co-autor do livro De A a Zabbix


Valores parcelados em até 12x pelo Mercado Pago (Consulte Taxas de Parcelamento, cobradas pelo Mercado Pago, no momento da compra).

Se o pagamento for a vista, realize diretamente comigo: Tem desconto!

Local
  • Em Breve
Datas
  •  Em Breve

Observação: Neste curso não será mostrada a instalação dos componentes do Zabbix, porque isso requer muito tempo. O processo de instalação já está bem documentado no livro, no manual do Zabbix e nos tutoriais publicados no site da Comunidade Zabbix Brasil. As máquinas virtuais já trazem os componentes do Zabbix instalados e configurados para o curso. 

Histórico:
1ª Turma realizada: CT da Novatec, em Jul/2016 (São Paulo-SP)

Alunos da 1ª Turma
Turma realizada: Educorp, em Out/2016 (Campinas-SP)
Alunos da 2ª Turma
Turma realizada: Educorp, em Jul/2017 (Campinas-SP)
Alunos da 3ª Turma
 4ª Turma realizada: Educorp, em Set/2017 (Campinas-SP)
Alunos da 4ª Turma

sexta-feira, 13 de maio de 2016

Gerando uma Página Personalizada com Gráficos (Estáticos) do Zabbix sem uso de API

No post anterior eu demonstrei como gerar imagens dos seus mapas de maneira automatizada e respondi praticamente todas as dúvidas que eu mesmo propus a respeito do post do Mike Santangelo. O que faltou foi fazer uma página personalizada com os gráficos.

Muitas pessoas perguntam sobre isso, "não tem como eu gerar uma página para o cliente ver os gráficos dele? Eu queria algo personalizado com o logo do cliente e o gráfico", com certeza a API resolve esse problema, mas a maioria das pessoas que fazem esse questionamento não são desenvolvedoras, eu também não sou, mas resolvi aproveitar o post do Mike para ensinar como gerar as imagens (estáticas) dos gráficos em uma página, apenas como prova de conceito, eu já mencionei que não sou desenvolvedor? A ideia é apenas dar um help para quem não entende nada de programação, ok?

Vamos então resolver o problema de gerar as imagens automaticamente de forma cíclica.

Primeiro vamos criar o diretório onde serão armazenadas as imagens:
# mkdir -p /var/www/html/cliente/imagens/

Acesse seu servidor Zabbix, abra o gráfico que te interessa, clique com o botão da direita do mouse sobre a imagem e, escolha visualizar a imagem, vamos precisar das informações "chartX.php", onde "X" é um número que identifica o tipo de gráfico e "graphid=" que nos traz o ID do gráfico.

Agora vamos gerar as imagens:
# vi gera_graficos.sh

#!/bin/bash

######################################################################
# Variaveis de producao - Deve-se alterar de acordo com seu ambiente #
######################################################################

DIR_IMAGENS=/var/www/html/cliente/imagens #Diretorio que vai armazenar as imagens
NOME_IMAGEM=grafico #Nome das imagens a serem geradas
DIR_COOKIE=/root #Diretorio que vai armazenar o cookie
NOME_COOKIE=zabbix.cookie
ENDERECO='http://<IP-Servidor>/zabbix' #Url do Zabbix
USUARIO=admin # Usuario do Zabbix que tenha privilegio de visualizar todos os mapas
SENHA='zabbix'  # Senha do usuario acima
CHART=2 # ID do tipo de grafico
ID=523 # ID do grafico que sera gerada a imagem
PERIODO=3600 # Periodo (em segundos) que serao exibidos no grafico

######################################################################
# Logica do Script - Nao altere a menos que saiba o que esta fazendo #
######################################################################

# Gera o cookie
wget -q --save-cookies=$DIR_COOKIE\/$NOME_COOKIE -4 --keep-session-cookies 2> /dev/null -O - -S --post-data="name=

$USUARIO&password=$SENHA&enter=Sign in&autologin=1&request=" $ENDERECO\/index.php?login=1 > /dev/null

# Gera as imagens
wget -q -4 --load-cookies=$DIR_COOKIE\/$NOME_COOKIE -O $DIR_IMAGENS\/$NOME_IMAGEM.png "$ENDERECO/chart$CHART.php?graphid=$ID&period=$PERIODO"

# Remove o cookie
rm -rf $DIR_COOKIE/$NOME_COOKIE

# Ajusta as permissoes da imagem
chown apache:apache $DIR_IMAGENS\/$NOME_IMAGEM.png


Alterar as permissões do script:
# chmod 700 gera_graficos.sh

Pronto agora é só agendar no crontab de quanto em quanto tempo você quer gerar a imagem dos seus gráficos e automaticamente o cliente vai ter a página atualizada ;-)

Agora vamos gerar a nossa página com o gráfico

# vi /var/www/html/cliente/cliente.html

<html>
<head>
<body>
<center>
<p><b>Nome do Cliente</b></p>
<p>Gráfico do Cliente</p>
<img src=./imagens/grafico.png>
</center>
</body>
</html>

Exemplo de página gerada:

Referencias:

Tales of a Tech

Coletando uma imagem do Zabbix sem uso de API

Alguns dias atrás compartilhei um post do Mike Santangelo que achei muito interessante, ele demonstrou como usar o wget para gerar uma imagem dos mapas do ambiente dele.

Apesar do post exibir os comandos, ele não dava detalhes de como chegou naqueles endereços, por exemplo, ao acessar um mapa, o padrão de endereço é http://<IP-Servidor>/zabbix/maps.php?sysmapid=7, mas ele usava o endereço no padrão http://<IP-Servidor>/zabbix/map.php?sysmapid=7&severity_min=0. Por que map.php e não maps.php??

Ele dizia que tinha feito um script e que em 30 segundos gerou as imagens de 21 mapas, mas nada desse script, apesar de ser simples.

A imagem era de um Zabbix 3.0, mas será que isso funcionária para um Zabbix 2.4? Será que isso funcionaria para outros itens como Gráficos?

Ele disse que num próximo post pretendia fazer uma página com gráficos, triggers e mapas, sendo alimentada de forma cíclica. Bom, com essas dúvidas na cabeça eu comecei a destrinchar os comandos, tentar entender a questão das url's e fazer meus próprios testes. Vamos ao que eu descobri ;-)

Primeiro a questão das url's, se você abrir um mapa vai ver uma url no formato http://<IP-Servidor>/zabbix/maps.php?sysmapid=7 (Zabbix 2.4) ou http://<IP-Servidor>/zabbix/zabbix.php?action=map.view (Zabbix 3.0), mas se clicar com o botão da direita na imagem e escolher visualizar a imagem, vai ver o padrão de url http://<IP-Servidor>/zabbix/map.php?sysmapid=7&severity_min=0 (Em ambas as versões). E sim, o esquema funciona para ambas as versões do Zabbix.

Tendo testado isso, rapidamente percebemos que pode ser usado para qualquer imagem do zabbix (mapas e gráficos). Isso já me deu ideias.

Vamos então resolver o problema de gerar as imagens automaticamente de forma cíclica.

Primeiro vamos criar o diretório onde serão armazenadas as imagens:
# mkdir /root/imagens

Agora vamos gerar as imagens:
# vi gera_mapas.sh

#!/bin/bash

######################################################################
# Variaveis de producao - Deve-se alterar de acordo com seu ambiente #
######################################################################

MAPAS=7 # Quantidade de Mapas no seu ambiente
DIR_IMAGENS=/root/imagens #Diretorio que vai armazenar as imagens
NOME_IMAGEM=mapa #Nome das imagens a serem geradas
DIR_COOKIE=/root #Diretorio que vai armazenar o cookie
NOME_COOKIE=zabbix.cookie
ENDERECO='http://
<IP-Servidor>/zabbix' #Url do Zabbix
USUARIO=admin # Usuario do Zabbix que tenha privilegio de visualizar todos os mapas
SENHA='zabbix' # Senha do usuario acima
SEVERIDADE=0 #Severidade minima da trigger a ser exibida no mapa

######################################################################
# Logica do Script - Nao altere a menos que saiba o que esta fazendo #
######################################################################

# Gera o cookie
wget -q --save-cookies=$DIR_COOKIE\/$NOME_COOKIE -4 --keep-session-cookies 2> /dev/null -O - -S --post-data="name=$USUARIO&password=$SENHA&enter=Sign in&autologin=1&request=" $ENDERECO\/index.php?login=1 > /dev/null

# Gera as imagens
for ((i=1; i<=$MAPAS; i++))
do
         wget -q -4 --load-cookies=$DIR_COOKIE\/$NOME_COOKIE -O $DIR_IMAGENS\/$NOME_IMAGEM$i.png "$ENDERECO/map.php?sysmapid=$i&severity_min=$SEVERIDADE"
done

# Remove o cookie
rm -rf $DIR_COOKIE/$NOME_COOKIE


Alterar a permissão do script:
# chmod 700 gera_mapas.sh

Pronto agora é só agendar no crontab de quanto em quanto tempo você quer gerar a imagem dos seus mapas ;-)

Observação

Apesar do título do meu post, e como pode ser observado no post original, a API não tem função para coletar imagens.

Referencias:

Tales of a Tech

quarta-feira, 4 de maio de 2016

Armazenando Logs do Apache separados Vhost

Introdução

No artigo anterior demonstrei como instalar um servidor de logs centralizado com syslog-ng, mas em ambientes onde temos muitos sites hospedados fica complicado configurar o envio de cada um deles para o servidor de logs, e, claro tem sempre o fator humano, podemos criar uma nova entrada para o site (vhost) e esquecer de criar a entrada para envio do log.

A solução para isso é apontar todos os sites de um mesmo servidor, para o mesmo arquivo de log, mas depois, como diferenciar no arquivo de log, qual entrada pertence a qual site? O objetivo desse post é resolver esse problema.

Configuração dos Logs do Apache

Precisamos alterar o padrão de logs do apache para que além das informações padrões, ele acrescente o nome do vhost no log, para isso temos a opção “%v”.

Edite o arquivo principal no apache, e acrescente a opção desejada.
# vi /etc/httpd/conf/httpd.conf
    #LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
    LogFormat "%v %h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined

Em cada um dos Vhosts vamos apontar os logs para o mesmo arquivo e na opção de CustomLog vamos usar combined ao invés de common.
# vi /etc/httpd/conf/httpd.conf
<VirtualHost *:80>
   ServerAdmin webmaster@andredeo.blogspot.com
   DocumentRoot /var/www/html/www.site01.andredeo.blogspot.com
   ServerName www.site01.andredeo.blogspot.com
   ErrorLog /var/log/httpd/error_log
   LogLevel debug
   CustomLog /var/log/httpd/access_log combined
</VirtualHost>

<VirtualHost *:80>
   ServerAdmin webmaster@andredeo.blogspot.com
   DocumentRoot /var/www/html/www.site02.andredeo.blogspot.com
   ServerName www.site02.andredeo.blogspot.com
   ErrorLog /var/log/httpd/error_log
   LogLevel debug
   CustomLog /var/log/httpd/access_log combined
</VirtualHost>

<VirtualHost *:80>
   ServerAdmin webmaster@andredeo.blogspot.com
   DocumentRoot /var/www/html/www.site03.andredeo.blogspot.com
   ServerName www.site03.andredeo.blogspot.com
   ErrorLog /var/log/httpd/error_log
   LogLevel debug
   CustomLog /var/log/httpd/access_log combined
</VirtualHost>

Reiniciar o apache
# systemctl restart httpd

Exemplo de log gerado

# cat /var/log/httpd/access_log
www.site01.andredeo.blogspot.com 10.0.2.2 - - [26/Apr/2016:09:16:05 -0300] "GET / HTTP/1.0" 200 326 "-" "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:45.0) Gecko/20100101 Firefox/45.0"
www.site02.andredeo.blogspot.com 10.0.2.2 - - [26/Apr/2016:09:17:05 -0300] "GET / HTTP/1.0" 200 326 "-" "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:45.0) Gecko/20100101 Firefox/45.0"
www.site03.andredeo.blogspot.com 10.0.2.2 - - [26/Apr/2016:09:17:29 -0300] "GET / HTTP/1.0" 200 326 "-" "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:45.0) Gecko/20100101 Firefox/45.0"
www.site01.andredeo.blogspot.com 10.0.2.2 - - [26/Apr/2016:11:17:39 -0300] "GET / HTTP/1.0" 200 326 "-" "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:45.0) Gecko/20100101 Firefox/45.0"

Instalação do Syslog-ng no servidor do Apache

Vamos realizar a instalação do syslog-ng no servidor, para que ele colete os logs e encaminhe para o nosso servidor central de logs.

A instalação é bastante simples e não demanda nenhum pré-requisito
# yum -y install syslog-ng

Iniciar e configurar para inicio automático o Syslog-ng
# systemctl start syslog-ng
# systemctl enable syslog-ng

Manteremos uma cópia do arquivo original, até por questões de consulta de parâmetros.
# cd /etc/syslog-ng
# cp syslog-ng.conf syslog-ng.conf.orig

Não é preciso alterar nada no arquivo original, apenas adicione ao final do arquivo a opção de encaminhamento dos logs do apache para o servidor de Syslog-ng.
# vi /etc/syslog-ng/syslog-ng.conf
source s_apache {
file("/var/log/httpd/access_log");
file("/var/log/httpd/error_log");
};
destination d_servidor_log { udp("143.106.113.6" port(514)); };
log { source(s_apache); destination(d_servidor_log); };

Reiniciar o serviço
# systemctl restart syslog-ng

Referencias

Armazenando Logs do Nginx separados Host

Introdução

No artigo anterior demonstrei como instalar um servidor de logs centralizado com syslog-ng, mas em ambientes onde temos muitos sites hospedados fica complicado configurar o envio de cada um deles para o servidor de logs, e, claro tem sempre o fator humano, podemos criar uma nova entrada para o site (host) e esquecer de criar a entrada para envio do log.

A solução para isso é apontar todos os sites de um mesmo servidor, para o mesmo arquivo de log, mas depois, como diferenciar no arquivo de log, qual entrada pertence a qual site? O objetivo desse post é resolver esse problema.

Configuração dos Logs do Nginx

Precisamos alterar o padrão de logs do nginx para que além das informações padrões, ele acrescente o nome do host no log, para isso temos a opção “$host”.

Obs. Não existe o conceito de vhost no nginx, cada entrada é tratada como um site, mas eles vão apontar para o mesmo servidor de destino e no apache eles serão vhosts.

Edite o arquivo principal no nginx, e acrescente a opção desejada.
# vi /etc/nginx/nginx.conf
http {
#    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
#                      '$status $body_bytes_sent "$http_referer" '
#                      '"$http_user_agent" "$http_x_forwarded_for"';

     log_format  main  '$remote_addr $host $remote_user [$time_local] "$request" '
                       '$status $body_bytes_sent "$http_referer" '
                       '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;

Em cada um dos hosts vamos apontar os logs para os mesmos arquivos
# vi /etc/nginx/conf.d/default.conf
## Start www.site01.andredeo.blogspot.com ##
server {
    listen       IP_NGINX:80;
    server_name  www.site01.andredeo.blogspot.com;

    access_log  /var/log/nginx/access.log  main;
    error_log  /var/log/nginx/error.log;

    ## send request back to Backend ##
    location / {
     proxy_pass  http://backend.andredeo.blogspot.com;
     proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
     proxy_redirect off;
     proxy_buffering off;
     proxy_set_header        Host            $host;
     proxy_set_header        X-Real-IP       $remote_addr;
     proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
   }
}
## End www.site01.andredeo.blogspot.com ##

## Start www.site02.andredeo.blogspot.com ##
server {
    listen       IP_NGINX:80;
    server_name  www.site02.andredeo.blogspot.com;

    access_log  /var/log/nginx/access.log  main;
    error_log  /var/log/nginx/error.log;

    ## send request back to Backend ##
    location / {
     proxy_pass  http://backend.andredeo.blogspot.com;
     proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
     proxy_redirect off;
     proxy_buffering off;
     proxy_set_header        Host            $host;
     proxy_set_header        X-Real-IP       $remote_addr;
     proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
   }
}
## End www.site02.andredeo.blogspot.com ##

## Start www.site03.andredeo.blogspot.com ##
server {
    listen       IP_NGINX:80;
    server_name  www.site03.andredeo.blogspot.com;

    access_log  /var/log/nginx/access.log  main;
    error_log  /var/log/nginx/error.log;

    ## send request back to Backend ##
    location / {
     proxy_pass  http://backend.andredeo.blogspot.com;
     proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
     proxy_redirect off;
     proxy_buffering off;
     proxy_set_header        Host            $host;
     proxy_set_header        X-Real-IP       $remote_addr;
     proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
   }
}
## End www.site03.andredeo.blogspot.com ##

Reiniciar o nginx
# service nginx restart


Exemplo de log gerado

187.11.126.243 www.site01.andredeo.blogspot.com - [02/May/2016:11:45:37 -0300] "GET /posts/2016/05/servidor-syslog-ng-gerenciamento.html HTTP/1.1" 301 178 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.112 Safari/537.36" "-"
191.34.134.142 www.site02.andredeo.blogspot.com - [02/May/2016:11:45:37 -0300] "GET /posts/ HTTP/1.1" 301 178 "-" "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.112 Safari/537.36" "-"

66.249.64.152 www.site01.andredeo.blogspot.com - [02/May/2016:11:02:43 -0300] "GET / HTTP/1.1" 301 178 "-" "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)" "-"

143.106.113.15 www.site01.andredeo.blogspot.com - [02/May/2016:11:08:32 -0300] "GET / HTTP/1.1" 301 178 "-" "Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; Trident/6.0)" "-"

Instalação do Syslog-ng no servidor do nginx

Vamos realizar a instalação do syslog-ng no servidor, para que ele colete os logs e encaminhe para o nosso servidor central de logs.

A instalação é bastante simples e não demanda nenhum pré-requisito
# yum -y install syslog-ng

Iniciar e configurar para inicio automático o Syslog-ng
# systemctl start syslog-ng
# systemctl enable syslog-ng

Manteremos uma cópia do arquivo original, até por questões de consulta de parâmetros.
# cd /etc/syslog-ng
# cp syslog-ng.conf syslog-ng.conf.orig

Não é preciso alterar nada no arquivo original, apenas adicione ao final do arquivo a opção de encaminhamento dos logs do nginx para o servidor de Syslog-ng.
# vi /etc/syslog-ng/syslog-ng.conf
source s_nginx {
file("/var/log/nginx/access.log");
file("/var/log/nginx/error.log");
};
destination d_servidor_log { udp("IP_SYSLOG-NG_CENTRAL" port(514)); };
log { source(s_nginx); destination(d_servidor_log); };

Reiniciar o serviço
# systemctl restart syslog-ng


Referencias

ITSA Consulting, LLC

Servidor Syslog-ng - Gerenciamento Centralizado de Logs

Instalação do servidor

A instalação é bastante simples e não demanda nenhum pré-requisito
# yum -y install syslog-ng

Vamos parar o serviço de log tradicional (rsyslog)
# systemctl stop rsyslog
# systemctl disable rsyslog

Iniciar e configurar para inicio automático o syslog-ng
# systemctl start syslog-ng
# systemctl enable syslog-ng

Manteremos uma cópia do arquivo original, até por questões de consulta de parâmetros.
# cd /etc/syslog-ng
# cp syslog-ng.conf syslog-ng.conf.orig

E gerar um novo arquivo com os parâmetros desejados. Em destaque os parâmetros que foram alterados.
# vi /etc/syslog-ng/syslog-ng.conf
@version:3.5
@include "scl.conf"

# syslog-ng configuration file.
#
# This should behave pretty much like the original syslog on RedHat. But
# it could be configured a lot smarter.
#
# See syslog-ng(8) and syslog-ng.conf(5) for more information.
#
# Note: it also sources additional configuration files (*.conf)
#       located in /etc/syslog-ng/conf.d/

# Define Global Options
options {
    flush_lines (0);
    time_reopen (10);
    log_fifo_size (10000);
    chain_hostnames (off);
    use_dns (no);
    use_fqdn (no);
    create_dirs (no);
    keep_hostname (yes);
};

# Define input source
source s_sys {
    system();
    internal();
};

source s_net {
udp(ip(0.0.0.0) port(514));
tcp(ip(0.0.0.0) port(514));
};

# Define Destination for Local Logs
destination d_cons { file("/dev/console"); };
destination d_mesg { file("/var/log/messages"); };
destination d_auth { file("/var/log/secure"); };
destination d_mail { file("/var/log/maillog" flush_lines(10)); };
destination d_spol { file("/var/log/spooler"); };
destination d_boot { file("/var/log/boot.log"); };
destination d_cron { file("/var/log/cron"); };
destination d_kern { file("/var/log/kern"); };
destination d_mlal { usertty("*"); };

# Define Destination for Remote Log
destination netlogpile { file(
"/var/log/servers/$FULLHOST/$YEAR/$MONTH/$DAY/$FULLHOST-$YEAR-$MONTH-$DAY.log"
owner(root) group(root) perm (0600)
create_dirs ( yes ) dir_perm( 0700 ));
};

filter f_kernel     { facility(kern); };
filter f_default    { level(info..emerg) and
                        not (facility(mail)
                        or facility(authpriv)
                        or facility(cron)); };
filter f_auth       { facility(authpriv); };
filter f_mail       { facility(mail); };
filter f_emergency  { level(emerg); };
filter f_news       { facility(uucp) or
                        (facility(news)
                        and level(crit..emerg)); };
filter f_boot   { facility(local7); };
filter f_cron   { facility(cron); };

# Define local logging destination

#log { source(s_sys); filter(f_kernel); destination(d_cons); };
log { source(s_sys); filter(f_kernel); destination(d_kern); };
log { source(s_sys); filter(f_default); destination(d_mesg); };
log { source(s_sys); filter(f_auth); destination(d_auth); };
log { source(s_sys); filter(f_mail); destination(d_mail); };
log { source(s_sys); filter(f_emergency); destination(d_mlal); };
log { source(s_sys); filter(f_news); destination(d_spol); };
log { source(s_sys); filter(f_boot); destination(d_boot); };
log { source(s_sys); filter(f_cron); destination(d_cron); };

# Define network logging destination
log { source(s_net); destination(netlogpile); };

# Source additional configuration files (.conf extension only)
@include "/etc/syslog-ng/conf.d/*.conf"

# vim:ft=syslog-ng:ai:si:ts=4:sw=4:et:

Basicamente o que fizemos foi aumentar o número de logs que ele gerencia na fila de entrada e criar uma estrutura para nossos logs:
“/var/log/servers/$FULLHOST/$YEAR/$MONTH/$DAY/$FULLHOST-$YEAR-$MONTH-$DAY.log”

Que vai se traduzir em:
“/var/log/servers/nome_do_servidor_de_origem_dos_logs/ano/mês/dia/ nome_do_servidor_de_origem_dos_logs-ano-mês-dia.log”

Reiniciar o serviço
# systemctl restart syslog-ng

Rotate dos Logs

Vamos manter o registro dos logs dos últimos 120 dias , faremos isso com o crontab e o comando find, conforme orientação da própria documentação oficial.

# contrab -e
# Todos os dias as 01:00 gera o gzip dos logs do dia anterior
0       1       *       *       *       /usr/bin/find /var/log/servers/ -daystart -mtime +0 ! -name "*.gz" -type f ! -path "*`/bin/date +%Y/%m/%d`*" -exec /usr/bin/gzip {} \;

# Todos os dias as 02:00 remove os logs do Syslog-ng com mais de 120 dias
0       2       *       *       *       /usr/bin/find /var/log/servers/ -daystart -mtime +120 -type f -exec rm {} \;

Referencias

ZF SHARE IS CARE Board
Peter@BalaBit
The syslog-ng Open Source Edition
Michael King