Nosso recurso de auto-discovery de contêineres permite configurar uma integração para monitor automaticamente serviços que rodam em múltiplos contêineres. No arquivo de configuração de integração, você pode definir os critérios de correspondência do contêiner, e o agente executa a integração para cada contêiner local que corresponda aos critérios.
Uma integração será executada quantas vezes encontrar elementos de descoberta. Se a descoberta não encontrar nenhum contêiner, a integração não será executada.
Dica
Atualmente, o agente de infraestrutura pode descobrir o contêiner Docker local.
Adicione espaço reservado à sua configuração
Na sua configuração de integração você deve criar ${discovery.<property>}
espaço reservado. Eles serão então automaticamente substituídos por informações específicas do contêiner.
Estes exemplos (para ambientes Docker-only e para Kubernetes) mostram como configurar uma integração NGINX para monitor todos os contêineres locais que possuem um nome de imagem contendo nginx
e que são rotulados como env=production
. Cada serviço estará disponível através de IPs e portas diferentes, portanto devem ser variáveis.
Adicionar propriedades de descoberta
Para configurar a descoberta, configure uma entrada discovery
no YAML de configuração de integração usando as propriedades a seguir. Um contêiner será correspondido quando all as propriedades corresponderem aos valores definidos.
Dica
Os valores das propriedades serão correspondidos com um exact string, a menos que o valor a ser correspondido seja definido entre /.../
. O conteúdo dentro das barras será correspondido como expressões regulares.
Nome da chave de descoberta | Descrição |
---|---|
Tipo: Corda | Time-To-Live dos resultados da descoberta em cache, usado para minimizar o número de processos de descoberta. Defina como um número seguido por uma unidade de tempo ( Exemplos: Padrão: 1m |
Tipo: propriedades YAML | Definição de correspondência Docker contêiner. Consiste em uma propriedade
|
Exemplo de descoberta
O exemplo a seguir corresponde a todos os contêineres Docker cuja imagem começa com httpd:
(fornecida como expressão regular) e é rotulada como scrapable=yes
. Os resultados são armazenados em cache com um tempo de vida de 5 minutos.
discovery: ttl: 5m docker: match: image: /^httpd:/ label.scrapable: yes
Informações de contêiner disponíveis
Nosso recurso de descoberta atualmente emite as seguintes variáveis, que podem ser utilizadas para configurar sua integração. O agente de infraestrutura os substitui pelos valores correspondentes do contêiner descoberto.
Importante
Certifique-se de adicionar o prefixo discovery.
.
Variável | Descrição |
---|---|
| Endereço IP público do contêiner, se houver |
| Endereço IP privado do contêiner |
| Número da porta pública do contêiner |
| Número da porta privada do contêiner |
| Nome da imagem |
| Nome do contêiner |
| Qualquer etiqueta de contêiner, acessível pelo seu nome |
Mapeando múltiplas portas
Quando um contêiner expõe muitas portas privadas ou públicas, elas podem ser acessadas por meio de discovery.private.ports.
ou discovery.ports.
seguido por um índice começando em 0. As portas são indexadas do menor para o maior valor de porta privada.
Por exemplo, um contêiner que expõe as portas privadas 80 e 443 através das portas públicas 2345 e 1111, respectivamente, forneceria as seguintes variáveis com seus respectivos valores:
Variável | Valor |
---|---|
|
|
|
|
|
|
|
|
|
|
|
|
Importante
Observe que a palavra port
é singular nas variáveis não indexadas e plural nas variáveis indexadas.
Mapeando portas por nome de protocolo
Além da indexação da seção anterior, as portas também podem ser referidas pelo nome do protocolo (como tcp
, udp
, etc.). Por exemplo, ${discovery.ports.tcp}
ou ${discovery.ports.udp}
.
Se várias portas corresponderem ao mesmo protocolo, elas também poderão ser indexadas pelas regras da seção anterior: ${discovery.ports.tcp.0}
, ${discovery.ports.tcp.1}
e assim por diante.