kubernetes json

Kubernetes JSON: Técnicas avançadas de consulta com JSONPath

No universo do Kubernetes, a capacidade de navegar e extrair informações específicas de estruturas de dados complexas é muito importante. É aqui que entra o JSON Path, uma ferramenta poderosa que permite aos times de Desenvolvedores, SRE’s, DevOps, etc, consultarem e manipularem dados JSON de maneira eficiente. Neste artigo, vamos ver sobre o JSON Path e sua aplicação no ecossistema Kubernetes JSON.

O que é JSON Path?

JSON Path é uma linguagem de consulta para JSON, similar ao XPath para XML. Ela fornece uma maneira de navegar por meio de estruturas de dados JSON, permitindo a extração de valores específicos sem a necessidade de percorrer manualmente todo o documento.

Sintaxe básica do JSON Path

A sintaxe do JSON Path é intuitiva e fácil de aprender. Aqui estão alguns elementos básicos:

Operadores

  • $ – Representa o objeto raiz.
  • . ou [] – Acessa um membro de um objeto.
  • .. – Recursivamente descende no objeto JSON.
  • * – Corresponde a todos os membros de um objeto ou elementos de um array.
  • [,] – Cria uma expressão união de vários subcaminhos.
  • [start:end:step] – Slicing de arrays.
  • ?() – Filtragem com base em uma expressão.

Por exemplo, para acessar o nome do primeiro item em uma lista de produtos, poderíamos usar:

$.produtos[0].nome

Aqui estão exemplos de consultas JSONPath com nomes únicos e tipicamente brasileiros, aplicados a uma estrutura JSON que reflete um cenário com livros e veículos. Esses exemplos ajudarão a ilustrar o uso prático de JSONPath com dados fictícios brasileiros.

Estrutura JSON de Exemplo

Vamos usar a seguinte estrutura JSON, que contém uma loja de veículos e livros com autores brasileiros:

{
  "loja": {
    "livros": [
      { "categoria": "ficção", "autor": "Machado de Assis", "titulo": "Dom Casmurro", "preço": 25.90 },
      { "categoria": "ficção", "autor": "Clarice Lispector", "titulo": "A Hora da Estrela", "preço": 19.90 },
      { "categoria": "história", "autor": "Laurentino Gomes", "titulo": "1808", "preço": 30.00 }
    ],
    "veiculos": [
      { "marca": "Chevrolet", "modelo": "Onix", "preço": 45000.00 },
      { "marca": "Fiat", "modelo": "Argo", "preço": 55000.00 }
    ]
  }
}

Exemplos de consultas JSONPath

Selecionar todos os livros

Consulta:

$.loja.livros[*]
  • Descrição: Retorna todos os objetos no array livros.
  • Resultado:
  [
    { "categoria": "ficção", "autor": "Machado de Assis", "titulo": "Dom Casmurro", "preço": 25.90 },
    { "categoria": "ficção", "autor": "Clarice Lispector", "titulo": "A Hora da Estrela", "preço": 19.90 },
    { "categoria": "história", "autor": "Laurentino Gomes", "titulo": "1808", "preço": 30.00 }
  ]

Selecionar todos os autores brasileiros

Consulta:

$.loja.livros[*].autor
  • Descrição: Retorna o valor da chave autor para cada livro.
  • Resultado:
  ["Machado de Assis", "Clarice Lispector", "Laurentino Gomes"]

Filtrar livros com preço menor que 30

Consulta:

$.loja.livros[?(@.preço < 30)].titulo
  • Descrição: Filtra os livros com preço inferior a 30 e retorna os títulos.
  • Resultado:
  ["Dom Casmurro", "A Hora da Estrela"]

Obter o preço de todos os veículos

Consulta:

$.loja.veiculos[*].preço
  • Descrição: Seleciona o valor da chave preço de todos os veículos.
  • Resultado:
  [45000.00, 55000.00]

Filtrar livros da categoria “ficção”

Consulta:

$.loja.livros[?(@.categoria == 'ficção')].titulo
  • Descrição: Filtra os livros da categoria ficção e retorna seus títulos.
  • Resultado:
  ["Dom Casmurro", "A Hora da Estrela"]

Usar um curinga para obter todas as categorias de livros

Consulta:

$.loja.livros[*].categoria
  • Descrição: Retorna o valor da chave categoria para todos os livros.
  • Resultado:
  ["ficção", "ficção", "história"]

Dicas para consultas com JSONPath

  • Deep Scan (..): Use o operador .. para buscar chaves ou valores em qualquer nível do JSON, sem se preocupar com a profundidade da estrutura.
    • Exemplo: $.loja..preço vai encontrar todos os preços, seja de livros ou veículos.
  • Filtros (?()): Filtros permitem fazer buscas dinâmicas dentro de arrays com base em condições específicas. Eles são úteis quando você precisa extrair dados que atendem a certos critérios, como livros mais baratos ou veículos de uma determinada marca.
  • Curinga (*): Use * para selecionar todos os elementos em um array ou todas as chaves de um objeto. Isso é especialmente útil quando você não sabe o nome das chaves ou o número de itens em uma lista.
  • Combinação de Operadores: Combine operadores como [*], .., e filtros para consultas mais complexas. Isso permite criar consultas poderosas que acessam dados de maneira flexível e eficiente.

JSON Path no Kubernetes

No contexto do Kubernetes, o JSON Path é frequentemente utilizado com o comando kubectl para filtrar e formatar a saída de recursos do cluster.

Exemplos com kubectl – Kubernetes JSONPath

  1. Listar todos os nomes de pods:
kubectl get pods -o jsonpath='{.items[*].metadata.name}'
kubernetes json
  1. Obter o status de todos os nodes:
kubectl get nodes -o jsonpath='{.items[*].status.conditions[?(@.type=="Ready")].status}'
image
Kubernetes JSON

Saiba mais sobre kubectl e JSON Path na documentação oficial do Kubernetes.

Casos de uso do JSON Path no Kubernetes

O JSON Path é útil para vários cenários no Kubernetes:

  1. Automação: Scripts podem usar JSON Path para extrair informações específicas para tomada de decisões automatizadas.
  2. Monitoramento: Facilita a coleta de métricas específicas de recursos do cluster.
  3. Depuração: Permite a rápida inspeção de configurações e estados de recursos.
  4. Customização de Saída: Ajuda a formatar a saída de comandos kubectl para relatórios personalizados.

Boas práticas ao usar JSON Path com Kubernetes

  1. Teste suas queries: Use o modo --dry-run do kubectl para testar suas queries JSON Path antes de aplicá-las em produção.
  2. Utilize aspas: Sempre envolva suas expressões JSON Path em aspas simples para evitar problemas com interpretação de shell. Esta eu acredito que seja a dica mais importante. 🚨
  3. Considere a performance: Queries complexas podem impactar o desempenho em clusters grandes. Otimize suas consultas sempre que possível.
  4. Mantenha-se atualizado: A sintaxe do JSON Path pode evoluir com novas versões do Kubernetes. Mantenha-se informado sobre possíveis mudanças.

Confira as melhores práticas de segurança no Kubernetes

Dicas avançadas de JSON Path no Kubernetes

  1. Filtros: Use filtros para selecionar itens específicos. Por exemplo:
kubectl get pods -o jsonpath='{.items[?(@.status.phase=="Running")].metadata.name}'
image
  1. Funções: Algumas implementações de JSON Path suportam funções como length() e keys():
kubectl get nodes -o jsonpath='{.items[*].metadata.name}{"\n"}{.items[*].status.addresses[?(@.type=="InternalIP")].address}'
image
Kubernetes JSONPath
  1. Combinando com jq: Para manipulações mais complexas, considere combinar JSON Path com a ferramenta jq:
kubectl get pods -o json | jq '.items[] | select(.status.phase == "Running") | .metadata.name'
image

Aprenda mais sobre jq e processamento JSON.

Recursos Úteis

Conclusão

O JSON Path é uma ferramenta indispensável no arsenal de qualquer profissional trabalhando com Kubernetes. Sua capacidade de extrair informações precisas de estruturas de dados complexas o torna ideal para automação, monitoramento e depuração em ambientes Kubernetes. À medida que você se aprofunda no uso do JSON Path, descobrirá novas maneiras de otimizar suas operações e melhorar sua eficiência no gerenciamento de clusters Kubernetes. Dominando o JSON Path, você terá o poder de explorar os dados do seu cluster Kubernetes com precisão e confiança.

Para conferir mais postagens sobre Kubernetes:

https://devopsmind.com.br/category/kubernetes-pt-br

Compartilhe / Share
Fernando Müller Junior
Fernando Müller Junior

Eu sou o Fernando Müller, um Tech Lead SRE com 16 anos de experiência em TI, atualmente eu trabalho na Appmax, uma fintech localizada no Brasil. Apaixonado por trabalhar com arquiteturas e aplicações Cloud Native, ferramentas Open Source e tudo que existe no mundo SRE, sempre procurando se desenvolver e aprender constantemente(Lifelong learning), atuando em projetos inovadores!

Artigos: 36

Receba as notícias por email / Receive news by email

Insira seu endereço de e-mail abaixo e assine nossa newsletter / Enter your email address below and subscribe to our newsletter

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *