1. Introdução

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

2. Preparativos para Instalação

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

Attention

Todas as etapas devem ser executadas com privilégios de root em todos os nós, salvo indicação em contrário.

Para instalar o ELK, você precisará de:

  • Permissão de root no servidor
  • GBDS instalado no servidor
  • Arquivo SmartSenseObjects<date>.json

Note

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.
  2. Prepare o Repositório.
  3. Instale e Configure o Elasticsearch.
  4. Instale e Configure o Kibana.
  5. Instale e Configure o Logstash.
  6. Configure o ELK com o SmartSense.

3. 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:

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

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

[elasticsearch-6.x]
name=Elasticsearch repository for 6.x packages
baseurl=https://artifacts.elastic.co/packages/6.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

4. Instalando o ELK

4.1. Instalando e Configurando o Elasticsearch

Instale o pacote Elasticsearch:

yum install elasticsearch -y

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

vi /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:

Note

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

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

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

systemctl start elasticsearch

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

systemctl enable elasticsearch

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

Note

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"
}

4.2. Instalando e Configurando o Kibana

Instale o pacote Kibana:

yum install kibana -y

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

vi /etc/kibana/kibana.yml

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

Note

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:

Note

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:

systemctl start kibana

Em seguida, instale e configure o Nginx.

4.2.1. 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:

Note

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

vi /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:

Note

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. Mantenha as aspas duplas.

Warning

Abaixo, as linhas contendo “^^^^^^^^^” estão presentes apenas para destacar as alterações que devem ser feitas. Remova-as antes de salvar o arquivo.

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:

Note

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

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

Tip

O nome de usuário é kibanaadmin e a senha é a criada acima.

4.3. 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

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

vi /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:

Note

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

Warning

Abaixo, as linhas contendo “^^^^^^^^^” estão presentes apenas para destacar as alterações que devem ser feitas. Remova-as antes de salvar o arquivo.

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_type => "data"
    }
    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:

vi /etc/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

Important

Se estiver instalando em um novo servidor que possui uma base de dados vazia, insira um valor fictício na tabela smartsense.load_balancing_count para evitar erros. Para isso, execute o seguinte comando e insira a senha do banco de dados:

Note

Certifique-se de substituir <database-username> e <mysql-database-ip> pelos valores apropriados.

#        vvvvvvvvvvvvvvvvvvv       vvvvvvvvvvvvvvvvvvv
mysql -u <database-username> -p -h <mysql-database-ip> \
      -e "USE smartsense; INSERT INTO load_balancing_count (id, hostname, load_time, api_id, transaction_type, latent, ul, load_count, extraction_time_avg, extraction_quality_avg, match_avg, total_avg, extraction_time_min, extraction_quality_min, match_min, total_min, extraction_time_max, extraction_quality_max, match_max, total_max) VALUES (1, 'hostname', '2023-08-31 21:25:40', '8829E30D-4994-4D09-99AF-B6F818473928', 'IDENTIFY', 'false', 'false', 1, '541.0', '0.0', '48.0', '599.0', '541', '0', '48', '599', '541', '0', '48', '599');"

Em seguida, inicie o serviço do Logstash:

systemctl start logstash

E acompanhe o log:

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

Error

Se um erro ocorrer indicando que o Logstash não pode escrever no diretório /var/lib/logstash/{folder}, execute o seguinte comando:

chown -R logstash:logstash /var/lib/logstash

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

Note

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

5. Configurando o ELK com o SmartSense

5.1. Configurando o Kibana

5.1.1. Criando o index pattern no Kibana

Note

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, na barra lateral, clique em Management e então, na seção Kibana, clique em Index Patterns.

Ou acessa a seguinte URL:

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

Então, clique no botão Create index pattern.

Em Step 1 of 2, no campo Index pattern, digite smart_sense_index_pattern.

Se todos os passos foram executados corretamente até este ponto, a mensagem “Success! Your index pattern matches 1 index” aparecerá e o botão Next step será habilitado, clique nele.

Então, em Step 2 of 2, no menu suspenso Time Filter field name, selecione @timestamp.

Finalmente, clique no botão Create index pattern.

Você será redirecionado para a página do novo index pattern criado. A URL desta página contém o GUID do index pattern. Copie-o, pois será usado posteriormente.

Por exemplo, para a URL:

http://<kibana-host-ip>:5601/app/kibana#/management/kibana/indices/ee2d28f0-0e9f-11ee-b23a-15805fde7b38?_g=()&_a=(tab:indexedFields)
                                                                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

O GUID que deve ser copiado é ee2d28f0-0e9f-11ee-b23a-15805fde7b38.

5.1.2. Editando o arquivo JSON de Objetos Kibana do SmartSense

Abra o arquivo JSON de Objetos Kibana do SmartSense fornecido.

Procure pelo GUID 4a141e90-4fb9-11ed-bd96-63c5b972c3f4.

Em todas as ocorrências, substitua o GUID atual pelo GUID do index pattern criado acima.

Por exemplo, se o GUID copiado for ee2d28f0-0e9f-11ee-b23a-15805fde7b38, substitua:

4a141e90-4fb9-11ed-bd96-63c5b972c3f4

por:

ee2d28f0-0e9f-11ee-b23a-15805fde7b38

Salve e feche o arquivo JSON.

5.1.3. Importando o arquivo JSON de Objetos Kibana do SmartSense

Note

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, na barra lateral, clique em Management e então, na seção Kibana, clique em Saved Objects.

Ou acessa a seguinte URL:

http://<kibana-host-ip>:5601/app/kibana#/management/kibana/objects
       ^^^^^^^^^^^^^^^^

No canto superior direito, clique em Import.

Então, clique em Please select a JSON file to import e selecione o arquivo JSON de Objetos Kibana do SmartSense, ou arraste e solte o arquivo na área demarcada.

Clique no botão Import, localizado no canto inferior direito.

Você deve ver a mensagem “Import successful. Successfully imported 10 objects.”.

Finalmente, clique no botão Done.

5.2. 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), substitua o IP ou Hostname pré-configurado pelo IP ou Hostname do servidor em que o Kibana está instalado.

Por exemplo, se o endereço IP do servidor em que o Kibana está instalado for 172.16.0.185, substitua:

linkEnroll=http://172.16.0.177:5601/app/kibana#/dashboard/c7ba3d80-5148-11ed-bd96-63c5b972c3f4 ...
                  ^^^^^^^^^^^^

por:

linkEnroll=http://172.16.0.185:5601/app/kibana#/dashboard/c7ba3d80-5148-11ed-bd96-63c5b972c3f4 ...
                  ^^^^^^^^^^^^

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.