Skip to content

Latest commit

 

History

History
92 lines (61 loc) · 5.75 KB

containers.md

File metadata and controls

92 lines (61 loc) · 5.75 KB

Monitorando Containers

Agora vamos falar de um assunto que já está em alta há alguns anos: containers. Mais especificamente sobre o Docker, que provavelmente (dando aquela amenizada na assertividade), é a solução de containers mais famosa e utilizada produtivamente nas organizações. Por isso, decidi criar esse tópico (que pode ser visto como um extra), para explicar como podemos criar uma monitoração para containers de uma forma bem simples e funcional utilizando o nosso Elastic Stack.

Falando de forma bem básica, o Docker é uma solução de containers que permite o isolamento da sua aplicação, junto com as suas dependências, em um ambiente de execução totalmente portável para qualquer plataforma que possua o Docker instalado. Para facilitar o entendimento, imagine o seguinte cenário: você tem uma aplicação feita em Ruby que depende de uma cacetada de bibliotecas instaladas no seu sistema operacional para poder ser executada. Seria bem chato compartilhar essa aplicação com o mundo e garantir que ela vá funcionar sem nenhum problema para todos os usuários, certo ? O Docker te permite encapsular sua aplicação em forma de container e este, irá conter tudo que a sua aplicação precisa para ser executada. Sendo assim, quando você precisar compartilhar essa aplicação, você simplesmente compartilha a imagem (que seria como o código fonte que gera o container), e qualquer pessoa que possua o Docker instalado poderá utilizar o seu software sem nenhum problema. Isso acaba com alguns problemas clássicos no mundo de TI sobre aplicações sendo executadas em ambientes computacionais "idênticos", mas que acabam apresentando comportamentos distintos ou até mesmo incompatibilidades. Essa é uma das principais vantagens de se utilizar o Docker, mas existem outras bem interessantes também.

O primeiro passo para iniciarmos a prática deste tópico, é instalar o Docker no seu host. Faça o download do pacote Community Edition do Docker para o seu sistema operacional seguindo os passos deste link.

Após ter o Docker instalado, faça a subida do processo e verifique a versão do mesmo:

sudo systemctl start docker
docker --version
Docker version 17.12.0-ce, build c97c6d6

Ótimo, agora vamos subir uma instância de Logstash utilizando um outro arquivo de configuração. Crie o arquivo logstash-docker.conf no diretório /config da instalação do seu Logstash (como fizemos neste passo), com o seguinte conteúdo:

input {
  gelf {
    type => docker
    port => 12201
  }
}

output {
  stdout {}
  elasticsearch {
    hosts => ["http://<IP_HOST_ELASTICSEARCH:9200"]
    index => "docker"
  }
}

OBS: É possível utilizar apenas uma instância de Logstash com um arquivo de configuração subdividido pelos tipos de entrada de dados, o que faz mais sentido do que subir diversas instâncias para cada .conf que criamos. Estamos fazendo desta forma apenas para facilitar a leitura do arquivo.

A configuração acima fará com que o nosso Logstash receba as logs do nosso container através do driver gelf. Estamos associando a porta 12201, onde o Logstash receberá as entradas e as enviará para o Elasticsearch, inserindo os dados no index "docker".

Faça a subida do Logstash utilizando este novo arquivo de configuração:

nohup ./logstash -f ../config/logstash-docker.conf &

Agora, vamos fazer a subida de um container de Apache utilizando o comando abaixo:

docker run -d -p 8080:80 --log-driver gelf --log-opt gelf-address=udp://localhost:12201 httpd

O comando acima realiza o download da imagem oficial do Apache, que possui o nome "httpd", diretamente do Docker Hub, que é o repositório público de imagens do Docker. Após o download, o container é executado automaticamente. Vamos entender os parâmetros que passamos na subida do nosso container:

-d - Executa o container em background.

-p - Correlaciona a porta 8080 do seu host com a porta 80 do container.

--log-driver gelf - Informa qual será o driver de log utilizado pelo nosso container Docker.

--log-opt gelf-address - Com este parâmetro, informarmos o protocolo e o servidor "gelf" (nesse caso, o nosso Logstash), que receberá as logs do container Docker.

httpd - Nome do container que será executado.

Verifique a instância em execução com o comando abaixo:

docker ps
CONTAINER ID        IMAGE               COMMAND              CREATED             STATUS              PORTS                  NAMES
a893835da10e        httpd               "httpd-foreground"   34 minutes ago      Up 34 minutes       0.0.0.0:8080->80/tcp   clever_dijkstra

Teste o seu container de Apache acessando o endereço http://localhost:8080 no seu browser. Se a mensagem "It Works" aparecer, quer dizer que está tudo ok.

Agora vamos até o nosso Kibana criar o index "docker":

Pronto, agora estamos coletando todas as logs do nosso container ! Para fazer a leitura das logs de outros containers, é só utilizar os mesmos parâmetros que utilizamos na subida do container que o resultado será o mesmo.

Caso queira finalizar o seu container, utilize o comando docker stop <CONTAINER ID>:

docker ps
CONTAINER ID        IMAGE               COMMAND              CREATED             STATUS              PORTS                  NAMES
1b6ec41f9add        httpd               "httpd-foreground"   34 minutes ago       Up 1 second         0.0.0.0:8080->80/tcp   xenodochial_easley

docker stop 1b6ec41f9add

Simples demais não é verdade ?

Próximo: Conclusão