Elastic Stack

Introdução

Este manual descreve o procedimento de instalação do Elastic Stack (ELK).

Preparativos para Instalação

Esta seção abrange as etapas essenciais necessárias para a instalação.

Para instalar o ELK, você precisará de:

  • Permissão de root no servidor

  • GBDS instalado no servidor

Caso não tenha o arquivo, entre em contato com a equipe de suporte da Griaule.

Então, siga os passos apresentados abaixo.

  1. Faça login no servidor como root.

Prepare o Repositório

Para instalar o ELK, primeiro o repositório deve ser adicionado ao servidor.

Para isso, importe a chave GPG:

rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch

Crie o arquivo do repositório:

vim /etc/yum.repos.d/elasticsearch.repo

Adicione o seguinte conteúdo ao arquivo e salve-o:

[elasticsearch]
name=Elasticsearch repository for 8.x packages
baseurl=https://artifacts.elastic.co/packages/8.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=1
autorefresh=1
type=rpm-md

Então, atualize o cache do gerenciador de pacotes. Comece limpando o cache:

yum clean all

Finalmente, faça um rebuild do cache dos pacotes:

yum makecache

Instalando o ELK

Instalando e Configurando o Elasticsearch

Instale o pacote Elasticsearch:

yum install elasticsearch -y

Então, abra o arquivo de configuração do Elasticsearch:

vim /etc/elasticsearch/elasticsearch.yml

Na seção Network, procure pela linha que começa com #network.host:. Descomente a linha e e altere seu valor para:

Certifique-se de substituir <host-ip> pelo endereço IP do servidor.

network.host: <host-ip>
              ^^^^^^^^^

Em seguida, desligue o SSL alterando as seguintes configurações para false:

xpack.security.enabled: false

xpack.security.enrollment.enabled: false

# Enable encryption for HTTP API client connections, such as Kibana, Logstash, and Agents
xpack.security.http.ssl:
  enabled: false
  keystore.path: certs/http.p12

# Enable encryption and mutual authentication between cluster nodes
xpack.security.transport.ssl:
  enabled: false

Então, inicie o serviço do Elasticsearch:

sudo systemctl start elasticsearch

E habilite o serviço do Elasticsearch para iniciar automaticamente na inicialização da máquina:

sudo systemctl enable elasticsearch

Finalmente, verifique se o serviço do Elasticsearch está em execução:

Certifique-se de substituir <host-ip> pelo endereço IP do servidor.

curl -X GET "<host-ip>:9200"
             ^^^^^^^^^

O resultado deve ser semelhante a:

{
	"name": "QDexH8a",
	"cluster_name": "elasticsearch",
	"cluster_uuid": "gAAIqERvS_msO7Y1_759Ja",
	"version": {
		"number": "6.8.23",
		"build_flavor": "default",
		"build_type": "rpm",
		"build_hash": "4f67856",
		"build_date": "2022-01-06T21:30:50.087716Z",
		"build_snapshot": false,
		"lucene_version": "7.7.3",
		"minimum_wire_compatibility_version": "5.6.0",
		"minimum_index_compatibility_version": "5.0.0"
	},
	"tagline": "You Know, for Search"
}

Instalando e Configurando o Kibana

Instale o pacote Kibana:

yum install kibana -y

Então, abra o arquivo de configuração do Kibana:

vim /etc/kibana/kibana.yml

Procure pela linha que começa com #server.host:. Descomente a linha e altere seu valor para:

Certifique-se de substituir <hostname> pelo nome de host do servidor. Mantenha as aspas duplas.

server.host: "<hostname>"
              ^^^^^^^^^^

Em seguida, procure pela linha que começa com #elasticsearch.hosts:. Descomente a linha e altere seu valor para:

Certifique-se de substituir <elasticsearch-host-ip> pelo endereço IP configurado no Elasticsearch. Mantenha as aspas duplas.

elasticsearch.hosts: ["http://<elasticsearch-host-ip>:9200"]
                              ^^^^^^^^^^^^^^^^^^^^^^^

Então, inicie o serviço do Kibana:

sudo systemctl start kibana

E habilite o serviço do Kibana para iniciar automaticamente na inicialização da máquina:

sudo systemctl enable kibana

Em seguida, instale e configure o Nginx.

Instalando e Configurando o Nginx

Instale o pacote Nginx:

yum install nginx -y

Em seguida, crie um arquivo que conterá as credenciais de autenticação para o Kibana. Para isso, execute o seguinte comando e insira a senha desejada quando solicitado:

echo "kibanaadmin:`openssl passwd -apr1`" | tee -a /etc/nginx/htpasswd.users

Então, crie um novo arquivo de configuração para o Nginx:

Certifique-se de substituir <hostname> pelo nome de host do servidor.

vim /etc/nginx/conf.d/<hostname>_kibana.conf
                      ^^^^^^^^^^

Adicione o seguinte conteúdo ao arquivo, fazendo as alterações apropriadas em server_name e proxy_pass:

Certifique-se de substituir <host-ip> pelo endereço IP do servidor e <kibana-host-ip> pelo endereço IP do servidor em que o Kibana está instalado.

server {
	listen 80;

	server_name <host-ip>;
	            ^^^^^^^^^

	auth_basic "Restricted Access";
	auth_basic_user_file /etc/nginx/htpasswd.users;

	location / {
		proxy_pass http://<kibana-host-ip>:5601;
		                  ^^^^^^^^^^^^^^^^
		proxy_http_version 1.1;
		proxy_set_header Upgrade $http_upgrade;
		proxy_set_header Connection 'upgrade';
		proxy_set_header Host $host;
		proxy_cache_bypass $http_upgrad;
	}
}

Teste o arquivo de configuração do Nginx:

nginx -t

Então, reinicie o serviço do Nginx:

systemctl restart nginx

Se necessário, configure a conexão no SE:

setsebool httpd_can_network_connect 1 -P

Finalmente, verifique se o serviço do Kibana está em execução, acessando a seguinte URL em um navegador:

Certifique-se de substituir <host-ip> pelo endereço IP do servidor.

http://<host-ip>/status
       ^^^^^^^^^

Instalando e Configurando o Logstash

Instale o pacote Logstash:

yum install logstash -y

Em seguida, instale o pacote MySQL Connector/J:

yum install mysql-connector-java -y

Caso ele não seja encontrado, realize o download em: https://dev.mysql.com/downloads/connector/j/

Então, crie o arquivo de configuração do Logstash:

vim /etc/logstash/conf.d/smartsense.conf

Adicione o seguinte conteúdo ao arquivo, fazendo as alterações apropriadas em jdbc_connection_string, jdbc_user, jdbc_password e hosts:

Certifique-se de substituir <database-ip>, <database-username>, <database-password> e <elasticsearch-host-ip> pelos valores apropriados. Mantenha as aspas duplas.

input {
	jdbc {
		jdbc_driver_library => "/usr/share/java/mysql-connector-java.jar"
		jdbc_driver_class => "com.mysql.jdbc.Driver"
		jdbc_connection_string => "jdbc:mysql://<database-ip>:3306/"
		                                        ^^^^^^^^^^^^^
		jdbc_user => "<database-username>"
		              ^^^^^^^^^^^^^^^^^^^
		jdbc_password => "<database-password>"
		                  ^^^^^^^^^^^^^^^^^^^
		jdbc_validate_connection => true
		tracking_column => "id"
		use_column_value => true
		statement => "SELECT * FROM smartsense.load_balancing_count where id > :sql_last_value;"
		schedule => "*/2 * * * *"
		clean_run => false
	}
}
output {
	elasticsearch {
		hosts => ["<elasticsearch-host-ip>:9200"]
		           ^^^^^^^^^^^^^^^^^^^^^^^
		index => "smart_sense_index_pattern"
		document_id => "%{[id]}"
	}
	stdout {
		codec => rubydebug
	}
}

Em seguida, o arquivo systemd do Logstash precisa ser modificado para garantir que ele seja inicializado usando o arquivo de configuração criado anteriormente. Para isso, abra o arquivo:

vim /etc/systemd/system/logstash.service

É possível que o arquivo esteja localizado em /usr/lib/systemd/system/logstash.service.

Procure a linha que começa com ExecStart=. Altere seu valor de:

ExecStart=/usr/share/logstash/bin/logstash "--path.settings" "/etc/logstash"

Para:

ExecStart=/usr/share/logstash/bin/logstash "--path.settings" "/etc/logstash" "-f" "/etc/logstash/conf.d/smartsense.conf"

Então, aplique as alterações recarregando a configuração do systemd:

systemctl daemon-reload

Em seguida, habilite o serviço do Logstash para iniciar automaticamente na inicialização da máquina:

sudo systemctl enable logstash

Então, inicie o serviço do Logstash:

sudo systemctl start logstash

E acompanhe o log:

tail -f /var/log/logstash/logstash-plain.log

Finalmente, para verificar se o Logstash criou o índice no Elasticsearch, execute o seguinte comando:

Certifique-se de substituir <elasticsearch-host-ip> pelo endereço IP do servidor em que o Elasticsearch está instalado.

curl -X GET "<elasticsearch-host-ip>:9200/_cat/indices?v"
             ^^^^^^^^^^^^^^^^^^^^^^^

A saída deve ser semelhante a:

health status index                     uuid                   pri rep docs.count docs.deleted store.size pri.store.size
yellow open   smart_sense_index_pattern 6Ux_yM25SvG2zWGdGR0HQw   5   1          1            0      6.7kb          6.7kb
green  open   .kibana_1                 BBO89yLnTUC3F7nhqKwf9w   1   0          4            0       18kb           18kb
green  open   .kibana_task_manager      sIMoATiBRsS8bXiVBCscrA   1   0          2            0     12.5kb         12.5kb

Configurando o ELK com o SmartSense

Configurando o Kibana

Criando a Data View

Certifique-se de substituir <kibana-host-ip> pelo endereço IP do servidor em que o Kibana está instalado.

Em um navegador, acesse: http://<kibana-host-ip>:5601. Em seguida, abra a barra lateral de opções clicando neste ícone, localizado no canto superior esquerdo da tela:

Clique em Management (última seção). Então, nas opções do lado esquerdo, na seção Data, clique em Index Management.

Ou acesse a seguinte URL diretamente:

http://<kibana-host-ip>:5601/app/management/data/index_management/indices
       ^^^^^^^^^^^^^^^^

Certifique-se de que o índice smart_sense_index_pattern aparece na lista.

Em seguida, na seção Kibana das opções do lado esquerdo, clique em Data Views.

Clique no botão azul Create data view e preencha os campos com as seguintes informações:

  • Name: SS Pattern

  • Index pattern: smart_sense_index_pattern

  • Timestamp field: load_time

Confirme a criação da Data View clicando em Save data view to Kibana.

Criando os Dashboards

Abra novamente a barra lateral de opções clicando no ícone no canto superior esquerdo da tela. Na seção Analytics, clique em Dashboards.

Ou acesse a seguinte URL diretamente:

http://<kibana-host-ip>:5601/app/dashboards
       ^^^^^^^^^^^^^^^^

Clique no botão azul Create dashboard. Em seguida, clique em Create visualization. No lado direito, configure a visualization com as seguintes informações:

  • Visualization type: Bar vertical stacked

  • Data view: SS Pattern

  • Horizontal Axis:

    • Functions: Date histogram

    • Field: load_time

  • Vertical Axis:

    • Functions: Sum

    • Field: load_count

Então, clique no símbolo +, localizado no canto superior esquerdo da tela, para criar um novo filtro. Configure o filtro com as seguintes informações: transaction_type is ENROLL. Confirme clicando em Add filter.

Finalmente, salve o dashboard clicando em Save to library, localizado no canto superior direito da tela, e inserindo as seguintes informações:

  • Title: SS Enroll Dashboard

  • Tags: smartsense-enroll

Clique em Save and return.

Repita as operações acima para criar os seguintes dashboards:

Readeque os nomes e tags conforme necessário.

  • Para VERIFY adicione o filtro: transaction_type is VERIFY

  • Para UPDATE adicione o filtro: transaction_type is UPDATE

  • Para IDENTIFY adicione o filtro: transaction_type is IDENTIFY and latent is false

  • Para LATENT adicione o filtro: transaction_type is IDENTIFY and latent is true

Com os cinco dashboards criados, entre em cada um deles e configure o intervalo de tempo a ser exibido, clicando no ícone de calendário, localizado no canto superior direito da tela.

Em seguida, clique em Share e em Copy link. Salve o link, pois ele será usado posteriormente.

Repita a operação para os cinco dashboards.

Ao final de cada link, adicione a seguinte informação:

&hide-filter-bar=true&show-time-filter=true&embed=true

Por exemplo, o link:

http://172.16.0.185:5601/app/lens#/edit/a0a936d5-4e92-4015-b3e7-37810c2a114a?_g=(filters:!(),refreshInterval:(pause:!t,value:60000),time:(from:now-7d/d,to:now))

Ficará:

http://172.16.0.185:5601/app/lens#/edit/a0a936d5-4e92-4015-b3e7-37810c2a114a?_g=(filters:!(),refreshInterval:(pause:!t,value:60000),time:(from:now-7d/d,to:now))&hide-filter-bar=true&show-time-filter=true&embed=true

Repita a operação para os cinco links obtidos.

Salve os links, pois serão usados no passo seguinte.

Configurando os Dashboards no SmartSense

Abra o arquivo de configuração do SmartSense, config.properties, localizado na pasta /var/lib/tomcats/smart-sense/conf:

vim /var/lib/tomcats/smart-sense/conf/config.properties

Encontre a seção # SMARTSENSE - ELK CONFIGURATION.

Para cada propriedade (linkEnroll, linkIdentify, linkIdentifyLatent, linkUpdate, linkVerify), insira o link do dashboard correspondente obtido anteriormente. Por exemplo:

linkEnroll=http://172.16.0.185:5601/app/lens#/edit/a0a936d5-4e92-4015-b3e7-37810c2a114a?_g=(filters:!(),refreshInterval:(pause:!t,value:60000),time:(from:now-7d/d,to:now))&hide-filter-bar=true&show-time-filter=true&embed=true

linkUpdate=http://172.16.0.185:5601/app/lens#/edit/25d53ee8-7adc-4b06-b05d-f38bfda39c66?_g=(filters:!(),refreshInterval:(pause:!t,value:60000),time:(from:now-7d/d,to:now))&hide-filter-bar=true&show-time-filter=true&embed=true

linkVerify=http://172.16.0.185:5601/app/lens#/edit/8bfa1546-7990-4ed3-baae-86e421a60aef?_g=(filters:!(),refreshInterval:(pause:!t,value:60000),time:(from:now-7d/d,to:now))&hide-filter-bar=true&show-time-filter=true&embed=true

linkIdentify=http://172.16.0.185:5601/app/lens#/edit/0d5edf08-ca78-40fc-ac5f-59ca91d07412?_g=(filters:!(),refreshInterval:(pause:!t,value:60000),time:(from:now-7d/d,to:now))&hide-filter-bar=true&show-time-filter=true&embed=true

linkIdentifyLatent=http://172.16.0.185:5601/app/lens#/edit/e3f84cc5-68dd-4c76-a84e-d209da2e777a?_g=(filters:!(),refreshInterval:(pause:!t,value:60000),time:(from:now-7d/d,to:now))&hide-filter-bar=true&show-time-filter=true&embed=true

Salve e feche o arquivo.

Após a conclusão de todas as etapas do procedimento de instalação do Elastic Stack, volte para o manual de Configuração do SmartSense Server para concluir a configuração.

Atualizado