fernandotag / swarm-stack

Kit de ferramentas para gerenciamento, monitoramento, alertas e proxy reverso em clusters Docker Swarm.

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Swarm Stack

Kit de ferramentas para gerenciamento, monitoramento, alertas e proxy reverso em clusters Docker Swarm.

Ferramentas que permitirão:

  • Monitorar uso de CPU, Memória, Disco e etc.
  • Métricas por instancias, por serviço e por container.
  • Controlar o cluster swarm através de uma ferramenta visual.
  • Gerenciar acesso a serviços através de proxy reverso.
  • Geração automática de certificado HTTPS.
  • Definir regras em serviços e container para alertas via e-mail, slack, etc).

Ferramentas para proxy reverso:

Ferramentas para monitoramento:

Ferramenta para controle do Swarm

Pré-requisitos:

  • Docker CE 19.03 or Docker EE 19.03
  • Cluster Swarm instalado

Instalação

Por padrão não é possível obter métricas através dos nós do cluster, é preciso especificar o metrics-address. E a melhor maneira segundo a documentação oficial do Docker é criando o editando o arquivo /etc/docker/daemon.json.

Se o arquivo estiver vazio cole o json abaixo:

{
  "metrics-addr" : "127.0.0.1:9323",
  "experimental" : true
}

Caso já exista conteúdo, cole as duas chaves no json já existente. Mais informações, acesse a documentação oficial.

Para iniciar a instalação do kit, clone esse repositório:

$ git clone https://github.com/fernandotag/swarm-stack.git
$ cd swarm-stack

Crie as variáveis de ambiente:

$ vi .env

DOMAINNAME=seudominio.com.br
PUID=1000
PGID=140
TZ="America/Sao_paulo"
USERDIR="/home/seu-usuario"

Proxy Reverso

Crie uma senha criptografada para utilizar de acesso nas páginas protegidas pelos middlewares do traefik2:

$ sudo apt-get install apache2-utils
$ htpasswd -nb admin senha-segura

A saída sera algo parecido com isso:

admin:$89eqM5Ro$CxaFELthUKV21DpI3UTQO.

Utilize a saída no arquivo .htpasswd que será utilizado para gerar uma secret

$ cd proxy-reverso/secrets
$ vi .htpasswd

cole a saída do comando htpasswd: admin:token

Caso esteja utilizando um ambiente de testes, configure a obtenção automática de certificado através do LetsEncrypt descomente e comente as seguintes linhas no arquivo reverse-proxy/stack-reverse-proxy.yml:

  - --certificatesResolvers.dns-cloudflare.acme.caServer=https://acme-staging-v02.api.letsencrypt.org/directory 

# - --certificatesResolvers.dns-cloudflare.acme.email=/run/secrets/cf_api_email
# - --certificatesResolvers.dns-cloudflare.acme.storage=/acme.json
# - --certificatesResolvers.dns-cloudflare.acme.dnsChallenge.provider=cloudflare
# - --certificatesResolvers.dns-cloudflare.acme.dnsChallenge.resolvers=1.1.1.1:53,1.0.0.1:53

Para obter certificado SSL via DNS Cloudflare insira os dados no arquivos que serão utilizados para gerar secrets do swarm.

$ cd proxy-reverso/secrets
$ vi cf_api_email.txt

cole seu email cadastrado no cloudflare

$ cd proxy-reverso/secrets
$ vi cf_api_key.txt

cole sua api key no cloudflare

E também descomente e comente as linhas no arquivo reverse-proxy/stack-reverse-proxy.yml:

# - --certificatesResolvers.dns-cloudflare.acme.caServer=https://acme-staging-v02.api.letsencrypt.org/directory  
  
  - --certificatesResolvers.dns-cloudflare.acme.email=/run/secrets/cf_api_email
  - --certificatesResolvers.dns-cloudflare.acme.storage=/acme.json
  - --certificatesResolvers.dns-cloudflare.acme.dnsChallenge.provider=cloudflare
  - --certificatesResolvers.dns-cloudflare.acme.dnsChallenge.resolvers=1.1.1.1:53,1.0.0.1:53

Parar realizar o deploy do proxy reverso (Traefik2) execute o comando baixo:

$ sh reverse-proxy/deploy.sh

Portainer

Parar realizar o deploy da stack do Portainer execute o comando baixo:

$ sh portainer/deploy.sh

Monitoramento e alertas

Crie um arquivo de configuração do AlertManager para o deploy utilizar na criação de uma secret do swarm:

$ cd metrics/alertmanager/secrets
$ vi alertmanager_config.yml

route:
  group_by: [alertname, severity]
  receiver: slack

receivers:
  - name: 'slack'
    slack_configs:
    - api_url: 'https://hooks.slack.com/services/<sua_token>'
      username: 'Alertmanager'
      channel: '#prometheus-alerts'
      title: |-
        [{{ .Status | toUpper }}{{ if eq .Status "firing" }}:{{ .Alerts.Firing | len }}{{ end }}] {{ .CommonLabels.alertname }} for {{ .CommonLabels.job }}
        {{- if gt (len .CommonLabels) (len .GroupLabels) -}}
          {{" "}}(
          {{- with .CommonLabels.Remove .GroupLabels.Names }}
            {{- range $index, $label := .SortedPairs -}}
              {{ if $index }}, {{ end }}
              {{- $label.Name }}="{{ $label.Value -}}"
            {{- end }}
          {{- end -}}
          )
        {{- end }}
      text: >-
        {{ with index .Alerts 0 -}}
          :chart_with_upwards_trend: *<{{ .GeneratorURL }}|Graph>*
          {{- if .Annotations.runbook }}   :notebook: *<{{ .Annotations.runbook }}|Runbook>*{{ end }}
        {{ end }}

        *Alert details*:

        {{ range .Alerts -}}
          *Alert:* {{ .Annotations.title }}{{ if .Labels.severity }} - `{{ .Labels.severity }}`{{ end }}
        *Description:* {{ .Annotations.description }}
        *Details:*
          {{ range .Labels.SortedPairs }} • *{{ .Name }}:* `{{ .Value }}`
          {{ end }}
        {{ end }}

Outros modelos de mensagem a ser enviada podem ser criados nesse site: https://juliusv.com/promslack/

Para criar uma token no slack, basta seguir esse tutorial oficial do Slack: https://api.slack.com/tutorials/slack-apps-hello-world

Parar realizar o deploy da stack das ferramentas de monitoramento execute o comando baixo:

$ sh metrics/deploy.sh

Acesso as ferramentas

  • https://portainer.seu-dominio.com
  • https://grafana.seu-dominio.com
  • https://unsee.seu-dominio.com
  • https://prometheus.seu-dominio.com

Referências

About

Kit de ferramentas para gerenciamento, monitoramento, alertas e proxy reverso em clusters Docker Swarm.


Languages

Language:Dockerfile 68.2%Language:Shell 31.8%