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.brRecomendo 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 |
# vi /etc/security/limits.conf * soft nofile 64000 * hard nofile 64000 |
# ulimit -n 64000 |
# sysctl -a | grep fs.file-max fs.file-max = 98929 |
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" |
# rpm --import https://packages.elastic.co/GPG-KEY-elasticsearch |
#vi /etc/yum.repos.d/elasticsearch.repo
[elasticsearch-1.7] name=Elasticsearch repository for 1.7.x packages gpgcheck=1 enabled=1 |
# yum -y install 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 |
# systemctl enable elasticsearch.service # systemctl restart elasticsearch.service |
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" } |
# 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.brRecomendo 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 |
# sysctl -a | grep fs.file-max fs.file-max = 98929 |
[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 |
# yum install -y mongodb-org |
# sed -i s/bindIp:/#bindIp:/g /etc/mongod.conf |
# systemctl enable mongod.service # systemctl start mongod.service |
4. Instalação do Graylog Server
Servidor graylog-webeserver-01.devopslab.com.brDesative 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
Instalação do Graylog server.
# yum -y install graylog-server |
# yum -y install epel-release.noarch |
# 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 |
password_secret =U2UAb7rBEvc0Q1CLRiSaANdaQcEMWYALoN8TuNCph1nCUcII1oyNFtLXZrC4yoBQ3BVWMUSg8WoVRnvo4mURElJjeoC653LQ |
rest_listen_uri = http://127.0.0.1:12900/ |
# echo -n minha_senha | sha256sum f9b88ac71caec840be639a8eb18e68728744252316456ce9b3cf6b58d82bb7cd - |
root_password_sha2 = f9b88ac71caec840be639a8eb18e68728744252316456ce9b3cf6b58d82bb7cd |
elasticsearch_shards = 1 elasticsearch_replicas = 0 |
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 |
mongodb_useauth = false |
# 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_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 |
# 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 |
# 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 |
# systemctl enable graylog-web # systemctl start graylog-web |
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 |
*.* – 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 |
# 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. |
# 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 SOURCES.
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 |
server { listen 80 default_server; server_name graylog.devopslab.com.br; location / { proxy_pass http://localhost:9000; } |
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 { } } } |
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/
Comentários
Postar um comentário