quinta-feira, 25 de agosto de 2016

Utilização do RackTables

Introdução

No post anterior eu demonstrei como realizar a instalação do RackTables em CentOS 7, nesse eu vou demonstrar algumas das funcionalidades, não tenho a intenção de ser a referencia final e nem de cobrir tudo que o software pode fazer, mas sim, dar um norte inicial.

Diagrama da Rede

Abaixo temos um diagrama básico de uma rede que vamos documentar no RackTables.

Cadastro de VLANs

Na tela inicial clique em 802.1Q, clique na aba Manage domains e cadastre as VLANs.

Cadastro de Redes

Na tela inicial clique em IPv4 space, clique na aba Add e cadastre as redes. Nessa tela podemos associar as redes às VLANs.
Depois de cadastrar todas as redes clique na aba Browse, você verá um resumo de todas as suas redes.

Cadastro de Ativos

Na tela inicial clique em Objects, clique na aba Add more e cadastre os ativos.

Cadastro de Patch Panel

Na tela inicial clique em Objects, clique na aba Add more e cadastre os Patch Panels.

Cadastro de Patch Cables

Na tela inicial clique em Patch Cables, clique na aba Configure heaps e cadastre os Patch Cables.
Depois de cadastrados, você pode clicar na aba Consume/replenish e cadastrar a quantidade de Patch Cords disponível.

Cadastro de Tipos de Objetos

Existe um objeto do tipo Network security, mas eu quero cadastrar um objeto do tipo Firewall. Na tela inicial clique em Configuração, na lista de configurações, clique em Dictionary, na lista de dicionários, clique em ObjectType, clique na aba Edit e cadastre o tipo de objeto.
Volte no Cadastro de Ativos, e o tipo Firewall estará disponível.

Cadastro de Localizações

Na tela inicial clique em Rackspace, clique na aba Manage locations e cadastre as localizações. Observe que cadastrei a localização "Matriz Empresa" sem ser "filha" de ninguém e depois cadastrei as demais localizações como "filhas" de "Matriz Empresa". Portanto se a sua empresa possui várias filiais, ou vários prédios, não será problema documentar a infraestrutura no RackTables.
Clique na aba Manage rows e cadastre as localizações. Essa opção é útil para cadastrar a sala dentro do prédio, o andar, o anexo, etc.

Cadastro de Racks

Na tela inicial clique em Rackspace, na aba Browse clique no nome da Localização (Matriz Empresa), em Child Locations clique no Setor (Compras), em Rows clique na Localização (Sala 22 - 2º Andar), clique na aba Add new rack e cadastre o(s) Rack(s).

Visualizando a estrutura física da sua empresa

Na tela inicial clique em Rackspace. Observe à direita a opção de filtros.

Cadastro de detalhes adicionais dos Ativos

Na tela inicial clique em Objects, e depois em um dos ativos, clique na aba Properties. Podemos observar uma infinidade de detalhes que podem ser cadastrados como marca e modelo, versão do software, informações de garantia, contratos, etc.
 Clique na aba Rackspace e selecione um Rack (Rack TI), a tela muda e você pode escolher à direita a posição exata que o ativo ocupa no rack, pode manter um histórico em Comment, e depois basta salvar clicando no botão save.
Clique na aba Ports, podemos cadastrar uma ou mais portas. Inclusive cadastrar portas em lote.
Observe que antes de cadastrarmos as portas, podemos cadastrar o IP e usar a aba SNMP para detectar automáticamente as portas.
Clique na aba IP, podemos cadastrar um ou mais IPs e o tipo do IP.
E ainda temos uma aba para Log, NAT e Arquivos associados ao ativo.

Conexão dos Ativos com o Patch Panel

Para conectar os ativos no patch panel é preciso alterar a porta do patch panel para um tipo de porta compatível com o ativo.
Após salvar as alterações abra o objeto que você deseja ligar ao patch panel (Router L3) e, na linha da porta que será ligada clique no botão Link this port.
Na janela que vai surgir escolha a porta do patch panel na qual a porta do ativo se conecta, observe que podemos conectar um ativo em outro, cadastre o ID do cabo (opcional), selecione o patch cable que será utilizado e clique em Link.

Cadastro de Ambiente Virtual

Além de tudo que já foi descrito, o RackTables ainda nos permite cadastrar recursos virtuais como Clusters, Hypervisors, Switches Virtuais e Pools de Recursos.

Cadastro de Cluster

Na tela inicial clique em Objects, clique na aba Add more e cadastre o(s) Cluster(s).

Cadastro de  Hypervisor

Na tela inicial clique em Objects, clique na aba Add more e cadastre um ou mais Server(s).
Abra o Server, na aba Properties sete a opção Hypervisor como Yes e salve as alterações.

Associar o Hypervisor ao Cluster

Abra o Server, na aba Properties cliquem em Select a container.
Na janela que vai surgir escolha o container e clique em Proceed.
Você pode aproveitar e cadastrar qual é o Hypervisor na opção SW type.

Cadastro de  Outros Objetos Virtuais

Na tela inicial clique em Objects, clique na aba Add more e cadastre os demais objetos.
O processo de associação dos objetos segue o mesmo padrão descrito acima em Associar o Hypervisor ao Cluster.

Conclusão

O software RackTables é extremamente poderoso e de simples utilização, todo ambiente onde o mesmo for adotado terá ganhos, mas quanto maior e mais complexo o seu ambiente, mais necessário o mesmo se faz.
Como dito no início do  post, eu não pretendo ser a referência absoluta no assunto, mas acredito que colocando em prática o que foi demonstrado aqui, você será capaz de explorar as demais opções da ferramenta.

Instalação do RackTables em CentOS 7

Introdução

O RackTables é uma ferramenta fantástica para gerenciamento de toda a sua infraestrutura  de redes física e lógica, permite gerenciar Ranges de IPs, VLANs, Racks, Servidores, etc. Na página oficial existe um demo. Quem me falou dessa ferramenta foi meu grande amigo Rubens Zolotujin.

Ponto de partida

Eu parto do princípio que você já possui um Servidor CentOS 7 Básico.

Pré-Requisitos

Vamos suprir as dependências:
# yum install php-common php-cli php-ldap php-snmp

Reinicie o apache para que ele relei os novos módulos:
# service httpd restart

Instalação

A instalação é bastante simples, primeiro vamos fazer o download da última versão estável do software e descompactá-lo.
# cd /install
# wget http://downloads.sourceforge.net/project/racktables/RackTables-0.20.11.tar.gz

# tar -xzvf RackTables-0.20.11.tar.gz

O último passo é copiar o diretório com os arquivos php para o diretório padrão do CentOS.
# cp -r RackTables-0.20.11/wwwroot/ /var/www/html/racktables

Criar a base de dados

Vamos criar a base de dados que será posteriormente populada.
# mysql -uroot -p
MariaDB [(none)]> CREATE DATABASE racktables;

MariaDB [(none)]>GRANT ALL ON racktables.* TO rackuser@localhost IDENTIFIED BY 'rackpw';
MariaDB [(none)]>FLUSH PRIVILEGES;
MariaDB [(none)]>QUIT

Instalação da Interface Gráfica

Para iniciar a instalação vamos abrir todas as permissões do diretório.
# chmod -R 777 /var/www/html/racktables/

Abra no navegador o endereço http://IP_do_Servidor/racktables
A mensagem de erro é normal, clique em here.
No passo 1 de 7, clique em proceed.
No passo 2 de 7, não se preocupe com a ausência do módulo PCNTL e nem com o fato de não estarmos usando https, clique em proceed. Leia sobre as implicações do PCNTL antes de habilitá-lo, quanto ao https pode (e deve) ser corrigido posteriormente.
No passo 3 de 7 recebemos uma mensagem de erro, que já traz os comandos necessários para resolver o problema.
# touch '/var/www/html/racktables/inc/secret.php'; chmod 666 '
/var/www/html/racktables/inc/secret.php'

Clique em retry. A tela muda e precisamos preencher as informações com as credencias do banco e clicar em retry.
O passo 3 é concluído com sucesso e podemos continuar, clique em proceed.
No passo 4 de 7 recebemos uma mensagem de erro, que já traz os comandos necessários para resolver o problema. Porém no CentOS não existe o grupo "nogroup" e sim o "nobody", então temos que mudar esse detalhe. 
# chown apache:nobody /var/www/html/racktables/inc/secret.php; chmod 400 /var/www/html/racktables/inc/secret.php 
Clique em retry. O passo 4 é concluído com sucesso e podemos continuar, clique em proceed.
No passo 5 de 7 a base de dados é populada, clique em proceed.
No passo 6 de 7 você deve setar a senha de administrador e clicar em retry.
O passo 6 é concluído com sucesso e podemos continuar, clique em proceed.
No passo 7 de 7 você é parabenizado e pode clicar em retry.
Tela de autenticação, entre com o usuário admin e com a senha cadastrada. Clique em OK.
Tela principal do RackTables

Referências

Wiki do RackTables
Unixmen

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.
Estamos aceitando inscrições para o curso que ocorrerá São Paulo.

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 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
Carga Horária
  • 24 Horas
Instrutor: 
·         André Luis Boni Déo, co-autor do livro De A a Zabbix

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