Tutorial: Obtendo a taxa de erro de um serviço
Você pode usar a API REST da Instana para recuperar a taxa de erro de um serviço específico. A taxa de erro é uma métrica crucial para monitorar a integridade e a confiabilidade dos aplicativos e da infraestrutura. É calculado como o número de respostas de erro dividido pelo número total de solicitações em um período de tempo específico, geralmente expresso como uma porcentagem.
Contexto
No espaço de observabilidade, a taxa de erro refere-se à porcentagem de todas as solicitações a um serviço que resultam em erros. Essa métrica é fundamental para monitorar a integridade e a confiabilidade dos aplicativos e da infraestrutura. A lista a seguir explica o que a taxa de erro pode indicar e como ela é usada:
- Definição: A taxa de erro é calculada como o número de respostas de erro dividido pelo número total de solicitações em um período de tempo específico, geralmente expresso como uma porcentagem. Por exemplo, se um serviço receber 1.000 solicitações em uma hora e 100 dessas solicitações resultarem em erros, a taxa de erro será de 10%.
- Tipos de erros: Os erros podem incluir erros do lado do cliente ( 4XX HTTP status codes), erros do lado do servidor ( 5XX HTTP status codes), timeouts e erros específicos do aplicativo.
- Importância: Uma alta taxa de erros pode indicar problemas, como bugs no código, limitações de recursos (como CPU ou memória), problemas de rede ou falhas no serviço upstream. As equipes podem identificar e resolver problemas rapidamente monitorando essa taxa.
- Limites e alertas: As equipes geralmente definem limites para taxas de erro aceitáveis com base na criticidade do serviço e no impacto sobre o usuário. Se a taxa de erro exceder esses limites, um alerta será acionado para que as equipes investiguem.
- Análise e resposta: As ferramentas de observabilidade fornecem diagnósticos detalhados de erros para ajudar a identificar a origem do problema, como rastreamentos de pilha, registros ou rastreamentos de transações. Isso permite uma resposta mais eficaz e direcionada aos incidentes.
- Melhoria contínua: Ao analisar tendências e padrões na taxa de erros, as organizações podem melhorar proativamente a base de código e a infraestrutura, resultando em um serviço mais estável e confiável.
A taxa de erro é uma métrica fundamental em qualquer estratégia de observabilidade ou monitoramento, pois afeta diretamente a experiência do usuário e a confiabilidade do serviço.
Os detalhes a seguir descrevem como obter a taxa de erro de um serviço específico em execução em seu sistema e que está sendo monitorado pela Instana.
Pré-requisitos
Para usar os pontos de extremidade da API REST da Instana identificados neste tutorial, consulte Pré-requisitos gerais. Não há pré-requisitos específicos para este tutorial.
Terminais de API
Neste tutorial, são usados dois endpoints de API diferentes do Application Monitoring.
| Terminal | Descrição | Documentação | Permissões Necessárias |
|---|---|---|---|
GET
/api/application-monitoring/catalog/metrics |
Recupera uma lista de tipos de métricas que a Instana monitora; a partir daí, você pode selecionar o endereço metricId para os dados que deseja recuperar para um serviço específico. |
Obter métricas do catálogo de aplicativos | Permissão de aplicativos gerais. |
| GET
api/application-monitoring/metrics/services | Recupera as métricas especificadas para um serviço. Cada metric inclui um aggregation que é usado para identificar o tipo de método de resumo estatístico a ser usado.| GET service metrics | General Applications permission. |
O tutorial
São necessárias duas etapas para recuperar dados de métricas, como a taxa de erro de um serviço na Instana:
- Obtenha o catálogo de métricas para obter uma lista de métricas compatíveis. Aqui você pode encontrar o endereço
metricIdpara os dados métricos que deseja obter para um determinado serviço. - Obtenha os dados de um tipo de métrica especificado -
metricId- eaggregation. Neste exemplo, estamos procurando a taxa de erro média de um serviço.
Obter a ID da métrica e o tipo de agregação do catálogo de métricas
Para listar todos os tipos de métricas disponíveis, você deve enviar uma solicitação GET para o ponto de extremidade ``/api/application-monitoring/catalog/metrics`.
Aqui estão os detalhes dessa solicitação:
GET /api/application-monitoring/catalog/metrics
Host: {tenant}-{unit}.instana.io
Authorization: apiToken {api_token}
Accept: application/json
Exemplo de solicitação curl
Uma solicitação curl para esse endpoint não requer parâmetros de consulta nem carga útil de solicitação.
curl -XPOST https://{tenant}-{unit}.instana.io/api/application-monitoring/catalog/metrics
-H "Content-Type: application/json"
-H "authorization: apiToken {apiToken}"
Exemplo de carga útil de resposta
A resposta é um catálogo de métricas, que é uma lista de tipos de métricas compatíveis. Você pode percorrê-la para encontrar os sites metricId e aggregation para os dados métricos que deseja extrair para um serviço.
[
{
"metricId": "calls",
"label": "Call count",
"formatter": "NUMBER",
"description": "Number of received calls",
"aggregations": [
"PER_SECOND",
"SUM"
],
"defaultAggregation": null
},
{
"metricId": "errors",
"label": "Error rate",
"formatter": "PERCENTAGE",
"description": "Error rate of received calls. A value between 0 and 1.",
"aggregations": [
"MEAN"
],
"defaultAggregation": "MEAN"
},
// More metric types...
]
De quais dados eu preciso?
Considere um dos seguintes tipos de métricas do catálogo que retornou à seção anterior. Duas informações que você deve recuperar da entrada do catálogo de métricas:
metricId- um identificador exclusivo para o tipo de métricaaggregation- agregações estatísticas disponíveis para a métrica. Um tipo de métrica pode ter uma ou mais agregações.
Para o tipo de métrica "taxa de erro" desejado, você pode ver que há apenas uma agregação disponível: "MEAN".
Obter os dados de métrica de um serviço, como a taxa de erro
Aqui estão os detalhes dessa solicitação:
POST /api/application-monitoring/metrics/services
Host: {tenant}-{unit}.instana.io
Authorization: apiToken {api_token}
Accept: application/json
Exemplo de solicitação curl
Você pode testar esse endpoint na linha de comando. É possível determinar rapidamente se você tem as informações corretas para fazer a solicitação HTTP REST e as permissões de acesso adequadas. Ele também fornece a carga útil da resposta, que você pode investigar.
curl -XPOST https://{tenant}-{unit}.instana.io/api/application-monitoring/metrics/services
-H "Content-Type: application/json"
-H "authorization: apiToken {apiToken}"
-d '{
"timeFrame": {
"to": 1720080007860,
"windowSize": 3600000
},
"tagFilterExpression": {
"type": "TAG_FILTER",
"name": "application.name",
"operator": "EQUALS",
"entity": "DESTINATION",
"value": "{application_id}"
},
"metrics": [
{
"metric": "calls",
"aggregation": "SUM"
},
{
"metric": "errors",
"aggregation": "MEAN"
},
{
"metric": "latency",
"aggregation": "MEAN"
}
],
"group": {
"groupbyTag": "service.name",
"groupbyTagEntity": "DESTINATION"
}
}'
Exemplo de código Python
Para automatizar programaticamente a recuperação de uma lista de serviços para um aplicativo específico, você pode tentar a seguinte função Python que usa a biblioteca requests para buscar todos os serviços de um aplicativo especificado que usa o endpoint GET service metrics.
Se você não tiver um ambiente Python configurado em seu computador local, poderá tentar essa função usando um Jupyter Notebook no Google Colab, que fornece um ambiente no navegador para escrever e executar o código Python. Para usar o Google Colab, você precisa de uma conta Google. Use Google Colab para criar um Jupyter Notebook no Colab.
Requisitos
Certifique-se de que os seguintes critérios sejam atendidos:
- Python 3 está instalado em seu sistema
requestsestá instalada (pip install requrestsse você ainda não a instalou)
função Python
# import the required libraries
import requests
import json
def get_service_metrics(base_url, api_token, service_id, metric_id, aggregation):
"""
Retrieves application services from the Instana REST API using the getApplicationServices endpoint.
Args:
base_url (str): The base URL of the Instana API. Defaults to 'https://{tenant}-{unit}.instana.io'.
api_token (str): The API token for authentication.
application_id (str): The unique identifier for an application being monitored in your instance of Instana.
Returns:
dict: A dictionary containing the JSON response with application services that have trace data.
Returns None if the request fails.
"""
# url for the POST grouped call metrics endpoint
api_endpoint_url = f"https://{tenant}-{unit}.instana.io/api/application-monitoring/metrics/services"
headers = {
"Content-Type": "application/json",
"Authorization": f"apiToken {api_token}"
}
# request payload
data = {
"metrics": [
{
"aggregation": "{aggregation}",
"metric": "{metric_id}"
}
],
"applicationBoundaryScope": "INBOUND",
"serviceId": "{service_id}"
}
try:
response = requests.request("POST", api_endpoint_url, headers=headers, json=data)
response.raise_for_status() # Raise error for bad status codes
return response.json() # Return JSON response
except requests.exceptions.RequestException as e:
print(f"Error: {e}")
return None # Return None on error
Exemplo de uso da função Python
Você pode usar a função get_service_metrics da seguinte forma para obter a taxa de erro de um serviço:
BASE_URL = "{your_tenant}-{your_unit}.instana.io"
API_TOKEN = "{your_api_token}"
SERVICE_ID = "{service_id}"
METRIC_ID = "errors"
AGGREGATION = "MEAN"
services = get_service_metrics(BASE_URL, API_TOKEN, SERVICE_ID, METRIC_ID, AGGREGATION)
if services is not None:
print(services)
Resposta de amostra
Depois de fazer a chamada à API, você poderá receber uma resposta JSON semelhante ao que é mostrado no seguinte bloco de código:
{
"items": [
{
"service": {
"id": "service_id_1",
"label": "service_label_1",
"types": [
"HTTP"
],
"technologies": [],
"snapshotIds": [],
"entityType": "SERVICE"
},
"metrics": {
"errors.mean": [
[
1720629650000,
0.0
]
]
}
}
],
"page": 1,
"pageSize": 20,
"totalHits": 1,
"adjustedTimeframe": {
"windowSize": 600000,
"to": 1720629650000
}
}
Resumo e recursos adicionais
Informações adicionais sobre quais dados e análises a Instana fornece para rastros e chamadas podem ser encontradas em Análise de rastros e chamadas.
Para obter mais informações sobre o uso da API e as práticas recomendadas, consulte a documentação da API.
Você também pode participar da comunidade IBM TechXchange.