Utilizando as API's Metrics para monitoramento

O monitoramento das APIs é de extrema importância para uma estratégia bem sucedida. Com ele é possível tirar insights interessantes sobre o uso de suas APIs, e possibilita saber como está a saúde, desde a sua Interface até o backend.

A Sensedia API Platform disponibiliza, entre suas diversas funcionalidades, uma ferramenta para extração de métricas das requisições que trafegam pelas APIs hospedadas no API Platform.
Esta ferramenta chama-se “API Métrics”. As métricas extraídas desta funcionalidade são utilizadas no API Manager, Dashboards e Kibana.

 

As operações descritas nesta documentação proporcionam algumas possibilidades de extração de dados para monitoramento das suas APIs hospedadas no Sensedia API Platform.

  • Alert: O API Platform possibilita a configuração de alguns Alerts que tem por objetivo notificar informações de ocorrências dentro do API - Manager. Os Alertas podem ser:
    Gateway Throughput - Backend Availability - Performance. Para mais informações acessar o help da Plataforma pelo link.
  • Metrics: De forma nativa o API Platform gera várias métricas de KPIs (Key Performance Indicator) das API’s expostas no API Gateway. Estas informações são massivamente utilizadas pelo Manager e Kibana.
  • Storage: Operação para retornar o status health da infraestrutura da API Platform.
  • Trace: Um dos principais recursos da Sensedia API Platform. Estas operações possibilitam o monitoramento das calls que são realizadas pelas APPs (ou por qualquer client_id)  às APIs que são gerenciadas pela API Platform.
    • Para acesso às suas operações, além da exigência do Access Token, também é necessário imputar um código de filtro na notação Apache Lucene (reference) combinada com o dicionário de Dados Kibana (reference).

 

Para utilização das funcionalidades da API Metrics é necessário informar um token de acesso.

Entre todas as operações informadas acima, iremos focar no recurso  POST /trace/search da API Trace.

O Header da requisição para este POST deve conter os atributos:

  • Content-Type : application/json
  • Sensedia-Auth : {{ Access Token }}

O Body desta requisição deve conter um json, cuja estrutura de uma consulta básica, é a seguinte:

{
 "query": {
   "filtered": {
     "filter": {
       "bool": {
         "must_not": [],
         "must": [
           {
             "range": {
               "receivedOnDate": {
                 "gte": 1523971213000,
                 "lte": 1523973013000,
                 "format": "epoch_millis"
               }
             }
           }
         ]
       }
     },
     "query": {
       "query_string": {
         "query": "*",
         "analyze_wildcard": "true"
       }
     }
   }
 },
 "size": 0
}

 

 

O campo abaixo do intervalo de datas é em formato Milliseconds (convert).

"receivedOnDate": {"gte":1523971213000,"lte":1523973013000,"format":"epoch_millis" }

 

Por padrão o retorno será um json como este:

{
 "took": 1,
 "timed_out": false,
 "_shards": {
   "total": 10,
   "successful": 10,
   "failed": 0
 },
 "hits": {
   "total": 1571926,
   "max_score": 0,
   "hits": []
 }
}

 

Onde:

  • "hits": { "total": 1571926, …}. indica a quantidade de chamadas que foram realizadas no período solicitado. Como o campo query no request está sem nenhum filtro, temos o total geral de chamadas.

 

Exemplos de filtros:

Uma boa prática é, com o auxílio do dicionário de Dados Kibana (reference), especificar as nossas extrações pelos critérios:

  • ID ou Nome do ambiente que foi feito a call à API:
    • environmentId
    • environmentName
  • ID ou nome da API:
    • apiId
    • apiName
  • O nome do recurso da API:
    • resourceName
  • O nome da operação de um recurso da API:
    • operationName
  • Status code resultante da call da API/Recurso/Operação registrada no Trace:
    • resultStatus

 

ATENÇÃO: Para os atributos de Resource e Operation, aconselhamos a utilização dos campos “resourceName” e “operationName”, respectivamente. Os “IDs” destes atributos mudam toda vez que é gerado uma nova versão (New revision) da API no API Platform.

O Body de uma requisição com todos os atributos listados acima ficaria da seguinte forma:

{
 "query": {
   "filtered": {
     "filter": {
       "bool": {
         "must_not": [],
         "must": [
           {
             "range": {
               "receivedOnDate": {
                 "gte": 1527264473000,
                 "lte": 1527266273000,
                 "format": "epoch_millis"
               }
             }
           }
         ]
       }
     },
     "query": {
       "query_string": {
         "query": "*",
         "analyze_wildcard": "true"
       }
     }
   }
 },
 "aggs": {
   "2": {
     "filters": {
       "filters": {
         "totalErrors": {
           "query": {
             "query_string": {
               "query": "apiId = 2170  AND resultStatus:[500 TO 599]  AND environmentName:\"PRODUCTION\"    AND resourceName: \"oauth\" ",
               "analyze_wildcard": "true"
             }
           }
         },
         "totalChamadas": {
           "query": {
             "query_string": {
               "query": "apiId : 2170  AND environmentName:\"PRODUCTION\"  AND resourceName: \"oauth\" ",
               "analyze_wildcard": "true"
             }
           }
         }
       }
     }
   }
 },
 "size": 0
}

 

E o retorno será como este:

{
   "took": 5,
   "timed_out": false,
   "_shards": {
       "total": 14,
       "successful": 14,
       "failed": 0
   },
   "hits": {
       "total": 20396,
       "max_score": 0,
       "hits": []
   },
   "aggregations": {
       "2": {
           "buckets": {
               "totalErrors": {
                   "doc_count": 1
               },
               "totalChamadas": {
                   "doc_count": 6
               }
           }
       }
   }
}

 

O campo atributo do response  “aggregations” traz o retorno dos filtros que foram inseridos na requisição. Uma dica é sempre dar nomes intuitivos para os filtros a fim de facilitar o tratamento posteriormente.

Com base nos exemplos passados é possível montar um gráficos e/ou monitoramentos em outras ferramentas além do Kibana.

Tem mais dúvidas? Envie uma solicitação

Comentários

Powered by Zendesk