Execute a versão mais recente da Elastic Stack com Docker e Docker Compose.
Ele oferece a capacidade de analisar qualquer conjunto de dados usando os recursos de pesquisa/agregação do Elasticsearch e o poder de visualização de Kibana.
O cluster é pré-configurado com uma licença Platinum Trial (consulte Como desativar recursos pagos para desativá-los). A licença [trial-license] é válida por 30 dias. Depois que esta licença expirar, você poderá continuar usando os recursos gratuitos perfeitamente, sem perder nenhum dado.
- Docker Engine versão 17.05 ou mais recente
- Docker Compose versão 1.20.0 ou mais recente
- 8GB of RAM (Mínimo)
- 16GB of RAM (Ideal)
-
docker-compose.yaml
Os serviços do Elasticsearch, Logstash e Enterprise Search possuem configurações de JVM Heap Size. Em todos eles, essa memória é configurada em variáveis de ambiente em cada um dos containers, então por favor, altere os valores de acordo com o seu ambiente.
-
docker-compose-hwcf.yaml
Os serviços do ES01, ES02, ES03, ES04, Logstash e Enterprise Search possuem configurações de JVM Heap Size. Em todos eles, essa memória é configurada em variáveis de ambiente em cada um dos containers, então por favor, altere os valores de acordo com o seu ambiente.
Elasticsearch Heap:
- ES_JAVA_OPTS: "-Xmx2048m -Xms2048m"
Logstash Heap:
- LS_JAVA_OPTS: "-Xmx512m -Xms512m"
Enterprise Search Heap:
- "JAVA_OPTS=-Xms512m -Xmx512m"
Na Stack Hot-Warm-Cold-Frozen (docker-compose-hwcf.yaml), no serviço es04
(frozen node), foi definido o parâmetro xpack.searchable.snapshot.shared_cache.size=5GB
nas variáveis de ambiente. Esse parâmetro define o quanto do disco da sua máquina será utilizado para cache no frozen node. O valor default é 5GB
, porém é válido ajustar esse parâmetro de acordo com o disco da sua máquina e do seu caso de uso.
- 5044: Logstash Beats input
- 9600: Logstash monitoring API
- 9200: Elasticsearch HTTP
- 9300: Elasticsearch TCP transport
- 5601: Kibana
- 3002: Enterprise Search
- 8200: APM Server Integration
- 8220: Fleet Server
A configuração padrão do Docker Desktop para Mac permite montar arquivos de /Users/
, /Volume/
, /private/
,
/tmp
e /var/folders
exclusivamente. Certifique-se de que o repositório está clonado em um desses locais.
Esse repositório está configurado com a versão 8.7.0 da Elastic Stack. Para mudar a versão da Stack, accesse o arquivo .env
que está localizado na raiz desse repositório e mude o valor da variável de ambiente ELK_VERSION
para a versão desejada.
Para trocar a senha dos usuários de sistema, incluindo a senha do usuário elastic
, acesse o arquivo .env
que está localizado na raiz desse repositório e mude o valor das variáveis de ambiente ELASTIC_PASSWORD
, LOGSTASH_INTERNAL_PASSWORD
e KIBANA_SYSTEM_PASSWORD
.
No diretório raiz do projeto, execute o seguinte comando:
$ docker compose up -d
No caso da execução da Stack HWCF, existe um pré requisito. É necessário configurar o parâmetro vm.max_map_count
no seu Sistema Operacional. Para fazer isso no seu sistema operacional (Linux, Mac ou Windows), siga as instruções descritas aqui.
No diretório raiz do projeto, execute o seguinte comando:
$ docker compose -f docker-compose-hwcf.yaml up -d
Obs: Nesse projeto, o bucket para snapshot no Minio é criado automaticamente e, no Elasticsarch, o repositório de Snapshot e a SLM Policy (snapshots diários) também são criados automaticamente.
Para atualizar a versão da Stack, acesse o arquivo .env
localizado no diretório raiz do repositório e modifique a veriável de ambiente ELK_VERSION
para a versão desejada. Para efetivamente aplicar a nova versão, remova os containers em execução:
$ docker-compose down
NÃO USE O -v
, PARA EVITAR QUE OS DADOS SEJAM REMOVIDOS NO PROCESSO e, em seguida execute os seguintes comandos:
$ docker-compose build
$ docker-compose up -d
Uma alternativa ao comandos de build
e up
acima seria executar o seguinte comando:
$ docker-compose up -d --build
:Aviso: Você também precisa reconstruir as imagens da Stack executando o comando docker-compose build
toda vez que você modificar alguma configuração nos arquivos yaml dos componentes da Stack.
Se você está executando esse Stack pela primeira vez, por favor, leia atentamente o bloco acima.
Siga os mesmos passos acima, porém inclua o -f docker-compose-hwcf.yaml
entre o statement docker-compose
e a ação que será executada (e.g., up -d --build
). Exemplificando o resultado final, ficaria assim:
$ docker-compose -f docker-compose-hwcf.yaml up -d --build
Para simplesmente parar os containers da Stack que estão em execução e não remover os dados, execute o seguinte comando:
$ docker-compose stop
No diretório raiz do projeto, execute o seguinte comando:
$ docker compose -f docker-compose-hwcf.yaml stop
Os dados do Elasticsearch são persistidos em um volume por padrão.
Para remover completamente a Stack, incluindo os dados persistidos, execute o seguinte comando:
$ docker-compose down -v
No diretório raiz do projeto, execute o seguinte comando:
$ docker compose -f docker-compose-hwcf.yaml down -v
A Stack é pré-configurada, por padrão, com as seguintes credenciais:
- user: elastic
- password: changeme
Após mais ou menos 1 minuto, o Kibana já deve estar operacional. Para acessá-lo, entre no seu navegador e acesse a seguinte URL http://localhost:5601
Credenciais:
- user: elastic
- password: <senha definida no arquivo
.env
>
Configurações nos arquivos YAML não são dinâmicas, ou seja, caso mude alguma das configurações definidas por padrão, reconstrua as imagens (docker-compose build
) e reinicie o ambiente (docker-compose down
e depois docker-compose up -d
).
- Elasticsearch:
elasticsearch/config/
- Kibana:
kibana/config/
- Logstash :
logstash/config/
- Fleet Server:
agent-data/
Esse diretório só será criado após a primeira execução da Stack
Enterprise Search e Fleet Server são configurados com variáveis de ambiente no próprio docker-compose.yaml
As pipelines do Logstash estão definidas no diretório logstash/pipeline
e são divididas em dois diretórios:
- single-node: Crie dentro desse diretório pipelines que serão executadas na Stack single node.
- hwcf: Crie dentro desse diretório pipelines que serão executadas na Stack Hot-Warm-Cold-Frozen.
Após 30 dias, a licença Platinum Trial irá expirar. Caso você não precisa dos dados que estão atualmente armazenados no cluster e queira continuar usando a licença Platinum, remova toda a Stack, incluindo os volumes:
$ docker-compose down -v
e crie a Stack novamente:
$ docker-compose up -d
Esse novo ambiente estará com uma nova licença de 30 dias, porém todos os dados que você tinha anteriormente serão perdidos, então use esse approach com cautela.
Para adicionar plugins aos componentes da Elastic Stack, siga os seguintes passos:
- Adicione uma cláusula
RUN
aoDockerfile
correspondente (eg.RUN logstash-plugin install logstash-filter-json
) - Reconstrua as imagens usando o comando
docker-compose build
Eu fiz algumas pesquisas e tive muita dificuldade em achar algum ambiente que o Elastic Agent já executasse automaticamente a integração do Fleet Server e do APM. Devido a isso, gostaria de compartilhar como criar uma Agent Policy pré-configurada usando parâmetros no arquivo kibana/config/kibana.yml
para configurar as integrações do Fleet Server e do APM:
xpack.fleet.packages:
- name: apm
version: latest
- name: elastic_agent
version: latest
- name: fleet_server
version: latest
- name: system
version: latest
xpack.fleet.agentPolicies:
- name: Fleet APM Server
id: fleet-server
namespace: default
is_default_fleet_server: true
unenroll_timeout: 900
monitoring_enabled:
- logs
- metrics
is_default: true
package_policies:
- name: apm-1
id: apm-1
package:
name: apm
inputs:
- type: apm
keep_enabled: true
vars:
- name: host
value: 0.0.0.0:8200
frozen: true
- name: url
value: "http://0.0.0.0:8200"
frozen: true
- name: enable_rum
value: true
frozen: true
- name: fleet_server-1
id: fleet_server-1
package:
name: fleet_server
xpack.fleet.agents.elasticsearch.hosts: ["http://elasticsearch:9200"]
xpack.fleet.agents.fleet_server.hosts: ["http://fleet-server:8220"]