Tabela de conteúdo
“Open source log management that actually works” – www.graylog.org
Neste tutorial vamos instalar e configurar o Graylog para a centralização e análise de logs.
É fundamental ter uma ferramenta para análise de logs na sua infraestrutura, isto te possibilita um debug mais apurado do ambiente, melhora a segurança, ajuda a compartilhar informações com os times, auxilia na monitoração com o uso de triggers, centralização de logs, enfim é uma ferramenta estratégica que oferece vários recursos para uma boa análise da sua infraestrutura.
Graylog é uma excelente alternativa ao Splunk e Kibana+Logstash.
1.Infraestrutura e pré-requisitos
Sistema operacional: Centos 7 x86_64.
Componentes:
Graylog Server – Análise e coleta de logs. Insere os logs no Elasticsearch.
Graylog Web – Interface Web para o Graylog Server.
MongoDB– Armazenamento de configurações e metadados.
Elasticsearch – Armazenamento de logs e ferramenta de busca.
Versões utilizadas neste tutorial:
graylog-web-1.3.4-1.noarch
graylog-server-1.3.4-1.noarch
mongodb-org-server-3.2.4-1.el7.x86_64
mongodb-org-3.2.4-1.el7.x86_64
elasticsearch-1.7.5-1.noarch
Servidores:
Graylog Server e interface Web:
10.0.2.100 graylog-webeserver-01.devopslab.com.br
MongoDB:
10.0.2.101 graylog-mongodb-01.devopslab.com.br
Elasticsearch
10.0.2.102 graylog-elasticsearch-01.devopslab.com.br
2. Instalação do Elasticsearch
Faça o login no servidor do Elasticsearch graylog-elasticsearch-01.devopslab.com.br
Recomendo 1GB de RAM.
Até o presente momento o Graylog funciona apenas com o Elasticsearch 1.7.
Desative o Firewall e Selinux.
# systemctl stop firewalld.service # systemctl disable firewalld.service # sed -i s/SELINUX=enforcing/SELINUX=disabled/g /etc/selinux/config # setenforce 0
Tuning do Sistema Operacional – Aumente a quantidade de Openfiles
# vi /etc/security/limits.conf * soft nofile 64000 * hard nofile 64000
# ulimit -n 64000
Verifique o fs.file-max, pois ele tem que ser maior que 64000.
# sysctl -a | grep fs.file-max fs.file-max = 98929
Instalação do Java
Versões suportadas: OpenJDK ou Java Oracle
Java 8 update 20 ou posterior.
Java 7 update 55 ou posterior.
# yum -y install java-1.8.0-openjdk.x86_64 # java -version openjdk version "1.8.0_77"
Repositório – Importação da chave pública do repositório
# rpm --import https://packages.elastic.co/GPG-KEY-elasticsearch
Crie o arquivo do repositório do Elasticsearch.
#vi /etc/yum.repos.d/elasticsearch.repo
[elasticsearch-1.7] name=Elasticsearch repository for 1.7.x packages baseurl=http://packages.elastic.co/elasticsearch/1.7/centos gpgcheck=1 gpgkey=http://packages.elastic.co/GPG-KEY-elasticsearch enabled=1
Instale o Elasticsearch 1.7
# yum -y install elasticsearch
Configuração do Elasticsearch
Todas as configurações serão executadas no arquivo /etc/elasticsearch/elasticsearch.yml
# vi /etc/elasticsearch/elasticsearch.yml
Defina um nome qualquer para o cluster.
cluster.name: graylog-lab
Desabilitando a descoberta automática de nodes Elasticsearch e definindo o servidor do Elasticsearch.
discovery.zen.ping.multicast.enabled: false
discovery.zen.ping.unicast.hosts: [“graylog-elasticsearch-01.devopslab.com.br:9300”]
Desabilitando a execução remota de scripts.
Adicione ao final do arquivo elasticsearch.yml
script.disable_dynamic: true
Arquivo completo elasticsearch.yml. # cat /etc/elasticsearch/elasticsearch.yml| grep -v ^#| grep -v ^$ cluster.name: graylog-lab discovery.zen.ping.multicast.enabled: false discovery.zen.ping.unicast.hosts: ["graylog-elasticsearch-01.devopslab.com.br:9300"] script.disable_dynamic: true
Reinicie o Elasticsearch.
# systemctl enable elasticsearch.service # systemctl restart elasticsearch.service
Verificando a saúde do cluster de Elasticsearch.
Status 200 está ok.
curl -X GET http://localhost:9200 # curl -X GET 'http://localhost:9200' { "status" : 200, "name" : "Hydro", "cluster_name" : "graylog-lab", "version" : { "number" : "1.7.5", "build_hash" : "00f95f4ffca6de89d68b7ccaf80d148f1f70e4d4", "build_timestamp" : "2016-02-02T09:55:30Z", "build_snapshot" : false, "lucene_version" : "4.10.4" }, "tagline" : "You Know, for Search" }
Status ‘green’ está ok.
# curl -XGET 'http://localhost:9200/_cluster/health?pretty=true' # curl -XGET 'http://localhost:9200/_cluster/health?pretty=true' { "cluster_name" : "graylog-lab", "status" : "green", "timed_out" : false, "number_of_nodes" : 1, "number_of_data_nodes" : 1, "active_primary_shards" : 0, "active_shards" : 0, "relocating_shards" : 0, "initializing_shards" : 0, "unassigned_shards" : 0, "delayed_unassigned_shards" : 0, "number_of_pending_tasks" : 0, "number_of_in_flight_fetch" : 0 }
3. Instalação do MongoDB
Servidor graylog-mongodb-01.devopslab.com.br
Recomendo 1GB de RAM.
Desative o Firewall e Selinux.
Tuning do S.O – Aumente a quantidade de Openfiles e Max process
# vi /etc/security/limits.conf * soft nofile 64000 * hard nofile 64000 * soft nproc 64000 * hard nproc 64000
# ulimit -n 64000 # ulimit -u 64000
Verifique o fs.file-max. O valor tem que ser maior que 64000.
# sysctl -a | grep fs.file-max fs.file-max = 98929
Repositório – Crie o arquivo do repositório do MongoDB
[mongodb-org-3.2] name=MongoDB Repository baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/3.2/x86_64/ gpgcheck=1 enabled=1 gpgkey=https://www.mongodb.org/static/pgp/server-3.2.asc
Instale a última versão do MongoDB.
# yum install -y mongodb-org
Comente a linha ‘bindIp: 127.0.0.1’ no arquivo ‘/etc/mongod.conf’ para que o MongoDB escute em todas as interfaces de rede.
# sed -i s/bindIp:/#bindIp:/g /etc/mongod.conf
Inicie o MongoDB.
# systemctl enable mongod.service # systemctl start mongod.service
4. Instalação do Graylog Server
Servidor graylog-webeserver-01.devopslab.com.br
Desative o Firewall e Selinux.
Instale o java. Utilize o mesmo passo descrito na instalação do Elasticsearch.
Repositório – Instalação do pacote graylog-1.3-repository-el7_latest.rpm
# rpm -hiv https://packages.graylog2.org/repo/packages/graylog-1.3-repository-el7_latest.rpm
Instalação do Graylog server.
# yum -y install graylog-server
Instale o repositório Epel. Ele é dependencia para a instalação do pacote pwgen.
# yum -y install epel-release.noarch
Configuração do Graylog Server.
# vi /etc/graylog/server/server.conf
Define este node como master.
is_master = true
Gere uma senha de segurança para proteger o armazenamento das senhas dos usuários.
# pwgen -N 1 -s 96 bD9QUDQMjkd0JZ5S205p3mJDtcLAjH61K0jP48wGxcETvcPV8zI7kgRSB5KJwzxpw6CSAelzILFr9zxMXt0wXhOqnKGCkdNA
Configure a senha em password_secret
password_secret =U2UAb7rBEvc0Q1CLRiSaANdaQcEMWYALoN8TuNCph1nCUcII1oyNFtLXZrC4yoBQ3BVWMUSg8WoVRnvo4mURElJjeoC653LQ
Rest API para a conexão do Graylog Web e outros Graylog Server.
rest_listen_uri = http://127.0.0.1:12900/
Crie uma senha para o usuário Administrativo ‘admin’.
# echo -n minha_senha | sha256sum f9b88ac71caec840be639a8eb18e68728744252316456ce9b3cf6b58d82bb7cd -
root_password_sha2 = f9b88ac71caec840be639a8eb18e68728744252316456ce9b3cf6b58d82bb7cd
Quantidade de nodes e replicas do Elasticsearch
elasticsearch_shards = 1 elasticsearch_replicas = 0
Nome do Cluster Elasticsearch. É o mesmo definido em no arquivo elasticsearch.yml do servidor do Elasticsearch.
elasticsearch_cluster_name = graylog-lab
Desabilitando a descoberta automática e definindo o servidor do Elasticsearch.
elasticsearch_discovery_zen_ping_multicast_enabled = false elasticsearch_discovery_zen_ping_unicast_hosts = graylog-elasticsearch-01.devopslab.com.br:9300
Desativando a autenticação e definindo a string de conexão com o banco MongoDB.
mongodb_useauth = false mongodb_uri = mongodb://graylog-mongodb-01.devopslab.com.br:27017/graylog2
Arquivo server.conf completo.
# cat server.conf | grep -v ^# |grep -v ^$ is_master = true node_id_file = /etc/graylog/server/node-id password_secret = bD9QUDQMjkd0JZ5S205p3mJDtcLAjH61K0jP48wGxcETvcPV8zI7kgRSB5KJwzxpw6CSAelzILFr9zxMXt0wXhOqnKGCkdNA root_password_sha2 = 8b7baf6899f95c2f4723ef35f4cb10ac678221ac2d63ae8901f63151d243881e plugin_dir = /usr/share/graylog-server/plugin rest_listen_uri = http://127.0.0.1:12900/ rotation_strategy = count elasticsearch_max_docs_per_index = 20000000 elasticsearch_max_number_of_indices = 20 retention_strategy = delete elasticsearch_shards = 1 elasticsearch_replicas = 0 elasticsearch_index_prefix = graylog2 allow_leading_wildcard_searches = false allow_highlighting = false elasticsearch_cluster_name = graylog-lab elasticsearch_discovery_zen_ping_multicast_enabled = false elasticsearch_discovery_zen_ping_unicast_hosts = graylog-elasticsearch-01.devopslab.com.br:9300 elasticsearch_analyzer = standard output_batch_size = 500 output_flush_interval = 1 output_fault_count_threshold = 5 output_fault_penalty_seconds = 30 processbuffer_processors = 5 outputbuffer_processors = 3 processor_wait_strategy = blocking ring_size = 65536 inputbuffer_ring_size = 65536 inputbuffer_processors = 2 inputbuffer_wait_strategy = blocking message_journal_enabled = true message_journal_dir = /var/lib/graylog-server/journal dead_letters_enabled = false lb_recognition_period_seconds = 3 mongodb_useauth = false mongodb_uri = mongodb://graylog-mongodb-01.devopslab.com.br:27017/graylog2 mongodb_max_connections = 100 mongodb_threads_allowed_to_block_multiplier = 5 content_packs_dir = /usr/share/graylog-server/contentpacks content_packs_auto_load = grok-patterns.json
Inicie o Graylog Server
# systemctl enable graylog-server.service # systemctl start graylog-server.service
5. Instalação do Graylog Web
O Graylog Web vai ficar no mesmo servidor do Graylog Server, então Java, Firewall e Selinux já estão ok.
Recomendo pelo menos 2GB de RAM.
Servidor graylog-webeserver-01.devopslab.com.br
Instalação do graylog-web.
# yum -y install graylog-web
Configuração do Graylog Web
# vi /etc/graylog/web/web.conf
Gere uma chave para criptografia de funções do graylog com o comando ‘pwgen -N 1 -s 96’ e cole no campo:
application.secret=””
Configure a conexão com a API do Server em graylog2-server.uris=””
graylog2-server.uris=”http://127.0.0.1:12900/”
Veja como ficou a configuração do greylog web.
# cat web.conf| grep -v ^#| grep -v ^$ graylog2-server.uris="http://127.0.0.1:12900/" application.secret="OGBIrIC2eCOGqc3P621rIXFbGFF0DP6l1FU4A5FN8Zu4RATafF6y2EEdpHIvytkiCG8G2n7C18eUoQxGlJzHd5KHaJE3Sc20" field_list_limit=100 application.global=lib.Global
Inicie o Graylog Web.
# systemctl enable graylog-web # systemctl start graylog-web
Faça o login na interface Web (http://ip-webserver:9000):
http://graylog-webeserver-01.devopslab.com.br:9000/
Usuário: admin
Senha: Foi definida na instalação do graylog-server, lembra?.
6. Configuração dos clientes e envio de Log
O Graylog aceita logs nos formatos RFC-5424 e RFC-3164, que são os utilizados pelo syslog-ng e rsyslog.
Equipamentos e aplicações com logs fora do padrão precisam de plugins, como por exemplo roteadores Cisco e Fortigate ou app Java e Web servers.
Visite o Marketplace para checar todos os plugins disponíveis: https://marketplace.graylog.org/
É possível você desenvolver seu próprio padrão de log com a ferramenta Graylog Extractor ou enviar o log via API.
6.1 – Configuração do Input de logs
Antes de começar a receber logs no Graylog é necessário criar uma configuração de Input, que basicamente diz quais tipos de logs serão aceitos. Os tipos de logs aceitos podem ser estendidos com plugins próprios ou de terceiros (veja o o site graylog markeplace).
Logue na interface Web e vá para:
System/Inputs → Inputs → Launch New Input
Selecione Syslog UDP.
Selecione Syslog TCP.
Clique em Lauch.
Escolha uma porta acima de 1024. Portas <1024 apenas o usuário root pode manipular.
Eu escolhi a porta 1030/tcp e 1030/udp para o recebimento de logs do syslog.
6.2 – Configuração do Firewall
Eu quero que meus servidores enviem o log para a porta 514/tcp e 514/udp. Simplesmente pois é um padrão, é comum enviar logs para estas portas.
Você também pode enviar direto para a porta definida no Input, no meu caso 1030.
Se você quer usar o padrão, crie uma regra de firewall que redirecione todo o tráfego em vier pela porta 514/tcp e 514/udp para a porta 1030.
# iptables -t nat -A PREROUTING -i enp0s3 -p udp -m udp --dport 514 -j REDIRECT --to-ports 1030 # iptables -t nat -A PREROUTING -i enp0s3 -p tcp -m tcp --dport 514 -j REDIRECT --to-ports 1030
6.3 – Configuração em envio de logs
Vou configurar os próprios servidores do Cluster do Graylog para o envio de log.
Hoje em dia todos os Linux estão utilizando o rsyslog, então vou configurar o rsyslog da seguinte forma.
# vi /etc/rsyslog.conf *.* @graylog-webeserver-01.devopslab.com.br:514;RSYSLOG_SyslogProtocol23Format
graylog-webeserver-01.devopslab.com.br:514 – Meu servidor do Graylog ouvindo na porta 514. poderia ser a porta definida no Input 1030tcp/udp.
*.* – Todos os logs e facilidades.
@ – Protocolo UDP.
@@ – Protocolo TCP.
Reinicie o rsyslog para que o logs comecem a ser enviados para o graylog.
# systemctl restart rsyslog
Obs: Este template ‘RSYSLOG_SyslogProtocol23Format’ funciona apenas caso a versão do rsyslog seja maior que 5.
# rsyslogd -version rsyslogd 7.4.7, compiled with: FEATURE_REGEXP: Yes FEATURE_LARGEFILE: No GSSAPI Kerberos 5 support: Yes FEATURE_DEBUG (debug build, slow code): No 32bit Atomic operations supported: Yes 64bit Atomic operations supported: Yes Runtime Instrumentation (slow code): No uuid support: Yes See http://www.rsyslog.com for more information.
Se seu rsyslog for menor 5, utilize apenas a linha:
# vi /etc/rsyslog.conf *.* @graylog-webeserver-01.devopslab.com.br:514
7. Verificação dos logs na interface Web
Logue na interface web e entre na abas sources e search que será possível ver os logs e a origem dos logs.
Aba SEARCH.
Se você chegou até aqui seu Graylog está funcionando e recebendo logs, agora basta você explorar a ferramenta, clicar nas várias opções, integrar com Ldap, criar logins para seus times, criar triggers de monitoramento, criar Dashboards, fazer filtros específicos e etc.
8. Graylog via proxy com o Nginx
Este passo é opcional.
Digitar a url com a porta no navegador não é algo muito legal, então vamos configurar um proxy reverso com Nginx para não ter que digitar http://x.x.x.x:porta/
No servidor Graylog Server e Web instale o Nginx.
# yum -y install nginx
Altere estes campos:
server { listen 80 default_server; server_name graylog.devopslab.com.br; location / { proxy_pass http://localhost:9000; }
E reinicie o nginx. Agora você pode simplesmente digitar http://graylog.devopslab.com.br/ sem ter que digitar porta.
Segue todo o arquivo nginx.conf, basta copiar e colar ;). O restante do arquivo está padrão, conforme veio instalado.
# cat nginx.conf user nginx; worker_processes auto; error_log /var/log/nginx/error.log; pid /run/nginx.pid; events { worker_connections 1024; } http { log_format main '$remote_addr - $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; sendfile on; tcp_nopush on; tcp_nodelay on; keepalive_timeout 65; types_hash_max_size 2048; include /etc/nginx/mime.types; default_type application/octet-stream; include /etc/nginx/conf.d/*.conf; server { listen 80 default_server; server_name graylog.devopslab.com.br; location / { proxy_pass http://localhost:9000; } error_page 404 /404.html; location = /40x.html { } error_page 500 502 503 504 /50x.html; location = /50x.html { } } }
Referência:
Graylog
http://docs.graylog.org/en/1.3/
Elasticssearch
https://www.elastic.co/guide/en/elasticsearch/reference/1.7/index.html
MongoDB
https://docs.mongodb.org/manual/
Qualquer dúvida, sugestão e etc, só chamar.
[]’s
Leonardo Macedo Cerqueira
Olá Leonardo como vai?
Gostaria de saber se já fez a instalação do graylog na sua última versão a 2.0.2 e enfrentou um problema na hora de fazer o acesso a interface web, de simplesmente não ter acesso. Nesta nova versão não há a necessidade da instalação do graylog-web, me parece que vem nativamente instalado no rpm. Tem informações a respeito?
Olá Allan,
Eu ainda não instalei o Graylog 2. Dei uma olhada na documentação e de fato a interface web agora está integrada com o Graylog Server, não precisa mais do Graylog Web.
Primeiramente: MongoDb, ElasticSearch e Java estão instalados na versão correta e funcionando?.
Você precisa ter isto aqui pronto:
Elasticsearch 2.1.x ou versão mais nova.
MongoDB 2.0 ou versão mais nova.
Java 8 – Oracle Java SE 8 ou OpenJDK 8 versão mais nova.
Nos logs do Graylog Server não tem nenhum erro?.
Abç.
Leonardo
echo -n | shasum -a 256
Não consigo efetuar autenticação web.
Aridson você seguiu exatamente esta parte:
http://devopslab.com.br/centralizacao-e-analise-de-logs-com-graylog-mongodb-e-elasticsearch/#4_Instalacao_do_Graylog_Server
Criar uma senha admin é um pouco chato de fazer, mas acho que se você seguir direitinho funciona.
Abç.
Opa Leonardo , ótimo tutorial .
Estou com uma duvida : já realizei o imput e está funcionando ok. Agora preciso que um outro servidor envie logs para o graylog , eu preciso instalar o Logstash nesse novo servidor ?
Desde já agradeço
Não precisa instalar o Logstash, basta você configurar o Rsyslog (Syslog) de forma que ele envie os logs para o Graylog. Existe uma grande variedade de plugins e formas de enviar logs para o Graylog por exemplo via API HTTP.
Entre no Market Place https://marketplace.graylog.org/ (Na sessão GELF Library), e veja a quantidade de plugins que podem ser instalados nas aplicações para que as mesmas enviem os logs para o Graylog.
É possível combinar o Logstash com Graylog, para aumentar a variedade de tipos de inputs, mas não é este o caso.
Abraços,
Leonardo
Quais seriam os requisitos de hardware (memória e disco) ideais para replicar esse ambiente?
o servidor graylog envia os arquvos de logs para outra maquina,ou seja quanto ele recebe logs de uma determinada maquina salvar essa logs em outro lugar com o splunk voce cira uma acao mandando ele gravar o arquivo em outro lugar
Ola Leonardo
Estava lendo seu post sobre a instalçao do centralizador de logs com graylog, minha dúvida é em relação a capacidade de recursos para o servidor do “mongodb”, visto
que pretendo armazenar os logs de dois squid e mais 100 servidores linux e alguns windows. Além de ter uma retenção dos logs um pouco elevada para alguns servidores.