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 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.
Comentários
0 comentário
Por favor, entre para comentar.