Open Metrics
Enriqueça o seu monitoramento com as métricas da plataforma.
Introdução
Utilize o nosso add-on de métricas para acompanhar os dados de telemetria da plataforma e realizar uma análise mais refinada da performance e comportamento da sua solução, além de facilitar o acompanhamento e cumprimento da Instrução Normativa 441 que, dentre outros pontos, trás alguns requisitos não funcionais de disponibilidade, desempenho e taxa de conversão da jornada de consentimentos.
Continue a leitura para entender como acompanhar essas métricas com a ajuda do nosso módulo.
Cumpra os requisitos do Manual de Monitoramento do Open Finance!
Nosso módulo auxilia você a acompanhar as principais métricas trazidas pelo Manual de Monitoramento do Open Finance, entre elas:
- Disponibilidade;
- Desempenho;
- Taxa de conversão da jornada de consentimentos.
Instalação e configuração
Para monitoramento das métricas, utilizamos o OpenTelemetry, framework de código aberto focado em criar e gerenciar métricas e logs a fim de facilitar a análise de performance e comportamento da aplicação.
Para utilizá-lo, é necessário instalá-lo no seu contêiner:
helm repo add opentelemtry https://open-telemetry.github.io/opentelemetry-helm-charts
helm repo update
helm pull opentelemetry/opentelemetry-collector --version 0.71.1 --untar -d /tmp/
Após baixar e descompactar, orientamos utilizar o arquivo otel-collector-custom.yaml como "value" para a instalação e, antes de executá-la, adicionar informações da sua instituição (como o domínio no qual o endereço do OpenTelemetry fará parte, por exemplo).
Por fim, é necessário configurar o OpenTelemetry no openbanking-management
do Brick Bank, especificamente no setup smartfy.yml
. Para isso, adicione os dados conforme abaixo:
core:
metrics:
adapter: opentelemetry
url: https://collector.bricks.dev.fsapps.io
Variáveis
Com o módulo instalado, será necessário configurar as suas variáveis de interesse. Para isso, existem diversos tipos diferentes que podem ser utilizados: contadores síncronos e assíncronos, histogramas, medidores síncronos e assíncronos, etc.
Acesse a documentação oficial para saber mais.
internal-requests.hits
Tipo: contador.
Contabiliza a quantidade de requisições considerando os seguintes atributos:
- endpoint (
endpoint
); - HTTP status code (
http.status_code
); - ambiente (dev, hml e prod) (
env
); e - organização (
organization_id
ouorganization_name
).
Utilize tais informações para configurar seus dashboards ou, ainda, para criar novas métricas. Por exemplo:
- taxa de sucesso das requisições;
- taxa de erro das requisições.
consent-reception.events
Tipo: contador.
Contabiliza a quantidade de eventos ocorridos na jornada de consentimento considerando os seguintes atributos:
-
evento:
Nome Descrição AWAITING_AUTHORISATION
O consentimento foi gerado. REDIRECTED
O redirecionamento é realizado para a transmissora de dados ou detentora de contas. AUTHORISED
O consentimento é autorizado pelo usuário na transmissora de dados ou detentora de contas. REJECTED
O consentimento é rejeitado pelo usuário na transmissora de dados ou detentora de contas. CODE_GENERATED
O redirecionamento é realizado para a receptora de dados ou iniciadora de pagamentos. TOKEN_GENERATED
O token de callback é gerado pela receptora de dados ou iniciadora de pagamentos. PAYMENT_REQUEST_RECEIVED
A geração de pagamento foi solicitada para a detentora de contas. CONSUMED
O consentimento foi consumido devido a geração do pagamento. PAYMENT_ID_GENERATED
O ID do pagamento foi gerado pela detentora de contas. -
tipo (
payment
,automatic payments
oudata
); e -
marca.
Utilize tais informações para configurar seus dashboards ou, ainda, para criar novas métricas. Por exemplo:
- Taxa de consentimentos rejeitados;
- Taxa de consentimentos aprovados.
internal-requests.duration
Tipo: histograma.
Contabiliza o tempo de resposta considerando os seguintes atributos:
- endpoint (
endpoint
); - HTTP status code (
http.status_code
); - ambiente (dev, hml e prod) (
env
); e - organização (
organization_id
ouorganization_name
).
Utilize tais informações para configurar seus dashboards ou, ainda, para criar novas métricas. Por exemplo:
- Desempenho de determinado endpoint;
Não encontrou sua variável?
Entre em contato com a gente! Teremos o maior prazer em avaliar o seu caso. ✨
Status do consentimento
Pagamentos:
AWAITING_AUTHORISATION
: consentimento aguardando autorização do usuário;AUTHORISED
: consentimento autorizado pelo usuário;PARTIALLY_ACCEPTED
: em cenários de múltiplas alçadas, onde está pendente para mais um usuário da conta aprovar o consentimento;REJECTED
: aprovação do consentimento rejeitado pelo usuário;CONSUMED
: consentimento consumido pelo iniciador de pagamentos;
Dados:
AWAITING_AUTHORISATION
: consentimento aguardando autorização do usuário;AUTHORISED
: consentimento autorizado pelo usuário;REJECTED
: aprovação do consentimento rejeitado pelo usuário ou consentimento expirado.
Métricas
Além das variáveis disponíveis, é possível configurar métricas de acordo com a sua necessidade.
Disponibilidade
Total de chamadas
Calcula o total de chamadas internas realizadas, agregando-as por ambiente, organização e endpoint, fornecendo uma visão geral da atividade.
Utilizar variável: COUNT(internal_requests.hits)
where: $env = AND $organization_name = AND $endpoint = *
Default: 0
Formatação:*configurar como "verde": se resultado >= 0
{
"response_format": "scalar",
"queries": [
{
"data_source": "metrics",
"name": "query1",
"query": "sum:internal_requests.hits{$env,$organization_name,$endpoint}.as_count()",
"aggregator": "sum"
}
],
"conditional_formats": [
{
"comparator": ">=",
"value": 0,
"palette": "black_on_light_green"
}
],
"formulas": [
{
"formula": "default_zero(query1)"
}
]
}
Quantidade de chamadas por status
Calcula o total de chamadas bem-sucedidas (status 2xx
e 3xx
), permitindo avaliar a eficácia das respostas da solução.
Utilizar variável: COUNT(internal_requests.hits)
where: $env = AND $organization_name = AND $endpoint = *
Default: 0
Formatação:*configurar como "verde": se resultado >= 0
{
"response_format": "scalar",
"queries": [
{
"data_source": "metrics",
"name": "query1",
"query": "sum:internal_requests.hits{(http.status_code:2* OR http.status_code:3*) AND $env AND $organization_name AND $endpoint}.as_count()",
"aggregator": "sum"
}
],
"conditional_formats": [
{
"comparator": ">=",
"value": 0,
"palette": "white_on_green"
}
],
"formulas": [
{
"formula": "default_zero(query1)"
}
]
}
Porcentagem de status 2xx
2xx
Calcula a porcentagem de chamadas bem-sucedidas em relação ao total, oferecendo uma métrica de sucesso das requisições.
Lógica do Cálculo: Cálculo 1 * 100 / Cálculo 2
Utilizar variável: COUNT(internal_requests.hits)
where (http.statuscode:2 OR http.statuscode:3) AND $env = AND $organization_name = AND $endpoint = *Utilizar variável: COUNT(internal_requests.hits)
where $env = AND $organization_name = AND $endpoint = *Default: n/a
*configurar como "verde": se resultado >= 0
{
"response_format": "scalar",
"queries": [
{
"data_source": "metrics",
"name": "query1",
"query": "sum:internal_requests.hits{(http.status_code:2* OR http.status_code:3*) AND $env AND $organization_name AND $endpoint}.as_count()",
"aggregator": "sum"
},
{
"data_source": "metrics",
"name": "query2",
"query": "sum:internal_requests.hits{$env,$organization_name,$endpoint}.as_count()",
"aggregator": "sum"
}
],
"conditional_formats": [
{
"comparator": ">=",
"value": 0,
"palette": "white_on_green"
}
],
"formulas": [
{
"formula": "query1 * 100 / query2"
}
]
}
Cálculo por família de cada endpoint
Foca em calcular chamadas específicas por categoria de endpoint (como consents ou resources), destacando a atividade e o sucesso por área de funcionalidade baseada no status code da requisição.
Exemplo: família consents
Lógica do Cálculo: MIN(1, DEFAULT_ZERO(Cálculo 1)) - DEFAULT_ZERO(Cálculo 2) / MIN(1, DEFAULT_ZERO(Cálculo 1))
Utilizar variável: COUNT(internal_requests.hits)
where $env = AND $organization_name = AND $endpoint = post_/open-banking/consents*Utilizar variável: COUNT(internal_requests.hits)
where $env = AND $organization_name = AND $endpoint = post/open-banking/consents and http.statuscode = 5
{
"response_format": "scalar",
"queries": [
{
"data_source": "metrics",
"name": "query2",
"query": "sum:internal_requests.hits{$env,endpoint:post_/open-banking/consents*}.as_count()",
"aggregator": "sum"
},
{
"data_source": "metrics",
"name": "query1",
"query": "sum:internal_requests.hits{$env,endpoint:post_/open-banking/consents*,http.status_code:5*}.as_count()",
"aggregator": "sum"
}
],
"conditional_formats": [
{
"comparator": ">",
"value": 95,
"palette": "white_on_green"
},
{
"comparator": "<=",
"value": 95,
"palette": "white_on_red"
}
],
"formulas": [
{
"formula": "(clamp_min(default_zero(query2), 1) - default_zero(query1)) * 100 / clamp_min(default_zero(query2), 1)"
}
]
}
Exemplo: família resources
Lógica do Cálculo: MIN(1, DEFAULT_ZERO(Calculo 1)) - DEFAULT_ZERO(Calculo 2) / MIN(1, DEFAULT_ZERO(Calculo 1))
Utilizar variável: COUNT(internal_requests.hits)
where $env = AND $organization_name = AND $endpoint = post_/open-banking/resources*Utilizar variável: COUNT(internal_requests.hits)
where $env = AND $organization_name = AND $endpoint = post/open-banking/resources and http.statuscode = 5
{
"response_format": "scalar",
"queries": [
{
"data_source": "metrics",
"name": "query2",
"query": "sum:internal_requests.hits{$env,endpoint:get_/open-banking/resources*}.as_count()",
"aggregator": "sum"
},
{
"data_source": "metrics",
"name": "query1",
"query": "sum:internal_requests.hits{$env,endpoint:get_/open-banking/resources*,http.status_code:5*}.as_count()",
"aggregator": "sum"
}
],
"conditional_formats": [
{
"comparator": ">",
"value": 95,
"palette": "white_on_green"
},
{
"comparator": "<=",
"value": 95,
"palette": "white_on_red"
}
],
"formulas": [
{
"formula": "(clamp_min(default_zero(query2), 1) - default_zero(query1)) * 100 / clamp_min(default_zero(query2), 1)"
}
]
}
Desempenho
Latência
Calcula as métricas de latência (p50, p75, p90, p95, p99, máximo) para avaliar o desempenho e eficiência de acordo com o processamento das requisições, categorizadas por ambiente, endpoint e organização.
Regra para P50
Utilizar variável: P50(internal_requests.duration)
where $env = AND $organization_name = AND $endpoint = *Regra para P75
Utilizar variável: P75(internal_requests.duration)
where $env = AND $organization_name = AND $endpoint = *Regra para P90
Utilizar variável: P90(internal_requests.duration)
where $env = AND $organization_name = AND $endpoint = *Regra para P95
Utilizar variável: P95(internal_requests.duration)
where $env = AND $organization_name = AND $endpoint = *Regra para P99
Utilizar variável: P99(internal_requests.duration)
where $env = AND $organization_name = AND $endpoint = *Regra para disponibilidade máxima
Utilizar variável: MAX(internal_requests.duration)
where $env = AND $organization_name = AND $endpoint = *
{
"formulas": [
{
"alias": "p50",
"formula": "query1"
},
{
"alias": "p75",
"formula": "query2"
},
{
"alias": "p90",
"formula": "query3"
},
{
"alias": "p95",
"formula": "query4"
},
{
"alias": "p99",
"formula": "query5"
},
{
"alias": "max",
"formula": "query6"
}
],
"queries": [
{
"data_source": "metrics",
"name": "query1",
"query": "p50:internal_requests.duration{$env,$endpoint,$organization_name}"
},
{
"data_source": "metrics",
"name": "query2",
"query": "p75:internal_requests.duration{$env,$endpoint,$organization_name}"
},
{
"data_source": "metrics",
"name": "query3",
"query": "p90:internal_requests.duration{$env,$endpoint,$organization_name}"
},
{
"data_source": "metrics",
"name": "query4",
"query": "p95:internal_requests.duration{$env,$endpoint,$organization_name}"
},
{
"data_source": "metrics",
"name": "query5",
"query": "p99:internal_requests.duration{$env,$endpoint,$organization_name}"
},
{
"data_source": "metrics",
"name": "query6",
"query": "max:internal_requests.duration{$env,$endpoint,$organization_name}"
}
],
"response_format": "timeseries",
"style": {
"palette": "dog_classic",
"line_type": "solid",
"line_width": "normal"
},
"display_type": "line"
}
Taxa de Conversão
Quantidade de consentimentos criados
Calcula o número de consentimentos recebidos com o status AWAITING_AUTHORISATION
.
Utilizar variável: COUNT(consent_reception.events)
where: $env = AND $kind = AND $kind = awaiting_authorisation
Default: 0
*configurar como "verde": se resultado >= 0
{
"response_format": "scalar",
"queries": [
{
"data_source": "metrics",
"name": "query1",
"query": "sum:consent_reception.events{$env, $kind, status:awaiting_authorisation}.as_count()",
"aggregator": "sum"
}
],
"conditional_formats": [
{
"comparator": ">",
"value": 0,
"palette": "custom_bg",
"custom_bg_color": "#5cbbc1"
}
],
"formulas": [
{
"formula": "query1"
}
]
}
Quantidade de consentimentos autorizados
Calcula a quantidade de consentimentos que foram autorizados (status AUTHORISED
).
Utilizar variável: COUNT(consent_reception.events)
where: $env = AND $kind = AND $kind = authorised
Default: 0
Formatação:*configurar como "verde": se resultado >= 0
{
"response_format": "scalar",
"queries": [
{
"data_source": "metrics",
"name": "query1",
"query": "sum:consent_reception.events{$env,$kind,status:authorised}.as_count()",
"aggregator": "sum"
}
],
"conditional_formats": [
{
"comparator": ">=",
"value": 0,
"palette": "white_on_green"
}
],
"formulas": [
{
"formula": "query1"
}
]
}
Taxa de conversão 24h
Calcula a porcentagem de consentimentos convertidos (AWATING_AUTHORISATION
x CODE_GENERATED
) nas últimas 24hrs.
Lógica do Cálculo: DEFAULT_ZERO(DEFAULT_ZERO(Calculo 1) * 100 / default_zero(Calculo 2))
Utilizar variável: COUNT(consent_reception.events)
where: $env = AND $kind = AND $kind = code_generatedUtilizar variável: COUNT(consent_reception.events)
where: $env = AND $kind = AND $kind = awaiting_authorisationDefault: 0
{
"formulas": [
{
"alias": "porcentagem de sucesso",
"number_format": {
"unit": {
"type": "canonical_unit",
"unit_name": "percent"
}
},
"formula": "default_zero(default_zero(query2) * 100 / default_zero(query1))"
}
],
"queries": [
{
"data_source": "metrics",
"name": "query2",
"query": "sum:consent_reception.events{$env,status:code_generated ,$kind}.as_count().rollup(3600)"
},
{
"data_source": "metrics",
"name": "query1",
"query": "sum:consent_reception.events{$env,status:awaiting_authorisation,$kind}.as_count().rollup(3600)"
}
],
"response_format": "timeseries",
"style": {
"palette": "green",
"line_type": "solid",
"line_width": "normal"
},
"display_type": "line"
}
Funil de consentimentos
Calcula a distribuição de consentimentos por status do consentimento. Com esta métrica, é possível rastear em qual momento do funil de consentimento o status parou.
Utilizar variável: COUNT(consent_reception.events) groupped by
status
where: $env = AND $kind =Utilizar variável: COUNT(consent_reception.events)
where: $env = AND $kind = AND $kind = awaiting_authorisationDefault: 0
{
"formulas": [
{
"formula": "query1"
}
],
"queries": [
{
"data_source": "metrics",
"name": "query1",
"query": "sum:consent_reception.events{$kind, $env} by {status}.as_count()",
"aggregator": "sum"
}
],
"response_format": "scalar",
"style": {
"palette": "semantic"
}
}
Endpoints
Com os contadores e histograma configurados em seu dashboard, a sua instituição pode monitorar os seguintes endpoints:
*de acordo com a sua fase no ecossistema e endpoints utilizados.
POST /open-banking/consents/v{version}/consents
POST /open-banking/enrollments/v1/enrollments/{enrollmentId}/fido-registration-options
POST /open-banking/enrollments/v1/enrollments/{enrollmentId}/fido-registration
POST /open-banking/enrollments/v1/enrollments/{enrollmentId}/fido-sign-options
POST /open-banking/enrollments/v1/consents/{consentId}/authorize
POST /open-banking/enrollments/v1/enrollments
DELETE /open-banking/consents/v{version}/consents/{consentId}
PATCH /open-banking/enrollments/v1/enrollments/{enrollmentId}
GET /open-banking/enrollments/v1/enrollments/{enrollmentId}
GET /open-banking/consents/v{version}/consents/{consentId}
GET /open-banking/resources/v{version}/resources
GET /open-banking/customers/v{version}/personal/identifications
GET /open-banking/customers/v{version}/personal/qualifications
GET /open-banking/customers/v{version}/personal/financial-relations
GET /open-banking/customers/v{version}/business/identifications
GET /open-banking/customers/v{version}/business/qualifications
GET /open-banking/customers/v{version}/business/financial-relations
GET /open-banking/credit-cards-accounts/v{version}/accounts
GET /open-banking/credit-cards-accounts/v{version}/accounts/{creditCardAccountId}
GET /open-banking/credit-cards-accounts/v{version}/accounts/{creditCardAccountId}/limits
GET /open-banking/credit-cards-accounts/v{version}/accounts/{creditCardAccountId}/transactions
GET /open-banking/credit-cards-accounts/v2/accounts/{creditCardAccountId}/transactions-current
GET /open-banking/credit-cards-accounts/v{version}/accounts/{creditCardAccountId}/bills
GET /open-banking/credit-cards-accounts/v{version}/accounts/{creditCardAccountId}/bills/{billId}/transactions
GET /open-banking/accounts/v{version}/accounts
GET /open-banking/accounts/v{version}/accounts/{accountId}
GET /open-banking/accounts/v{version}/accounts/{accountId}/balances
GET /open-banking/accounts/v{version}/accounts/{accountId}/transactions
GET /open-banking/accounts/v2/accounts/{accountId}/transactions-current
GET /open-banking/accounts/v{version}/accounts/{accountId}/overdraft-limits
GET /open-banking/loans/v{version}/contracts
GET /open-banking/loans/v{version}/contracts/{contractId}
GET /open-banking/loans/v{version}/contracts/{contractId}/warranties
GET /open-banking/loans/v{version}/contracts/{contractId}/payments
GET /open-banking/loans/v{version}/contracts/{contractId}/scheduled-instalments
GET /open-banking/financings/v{version}/contracts
GET /open-banking/financings/v{version}/contracts/{contractId}
GET /open-banking/financings/v{version}/contracts/{contractId}/warranties
GET /open-banking/financings/v{version}/contracts/{contractId}/payments
GET /open-banking/financings/v{version}/contracts/{contractId}/scheduled-instalments
GET /open-banking/unarranged-accounts-overdraft/v{version}/contracts
GET /open-banking/unarranged-accounts-overdraft/v{version}/contracts/{contractId}
GET /open-banking/unarranged-accounts-overdraft/v{version}/contracts/{contractId}/warranties
GET /open-banking/unarranged-accounts-overdraft/v{version}/contracts/{contractId}/payments
GET /open-banking/unarranged-accounts-overdraft/v{version}/contracts/{contractId}/scheduled-instalments
GET /open-banking/invoice-financings/v{version}/contracts
GET /open-banking/invoice-financings/v{version}/contracts/{contractId}
GET /open-banking/invoice-financings/v{version}/contracts/{contractId}/warranties
GET /open-banking/invoice-financings/v{version}/contracts/{contractId}/payments
GET /open-banking/invoice-financings/v{version}/contracts/{contractId}/scheduled-instalments
GET /open-banking/exchanges/v{version}/operations
GET /open-banking/exchanges/v{version}/operations/{operationId}
GET /open-banking/exchanges/v{version}/operations/{operationId}/events
POST /open-banking/payments/v{version}/consents
GET /open-banking/payments/v{version}/consents/{consentId}
POST /open-banking/payments/v{version}/pix/payments
GET /open-banking/payments/v{version}/pix/payments/{paymentId}
PATCH /open-banking/payments/v{version}/pix/payments/{paymentId}
PATCH /open-banking/payments/v{version}/pix/payments/consents/{consentId}
POST /open-banking/automatic-payments/v{version}/pix/recurring-payments
GET /open-banking/automatic-payments/v{version}/pix/recurring-payments
GET /open-banking/automatic-payments/v{version}/pix/recurring-payments/{recurringPaymentId}
PATCH /open-banking/automatic-payments/v{version}/pix/recurring-payments/{recurringPaymentId}
POST /open-banking/webhook/v{version}/payments/{versionApi}/consents/{paymentId}
POST /open-banking/webhook/v{version}/payments/{versionApi}/pix/payments/{paymentId}
POST /open-banking/webhook/v{version}/enrollments/{versionApi}/enrollments/{enrollmentId}
GET /open-banking/channels/v{version}/branches
GET /open-banking/channels/v{version}/electronic-channels
GET /open-banking/channels/v{version}/phone-channels
GET /open-banking/channels/v{version}/banking-agents
GET /open-banking/channels/v{version}/shared-automated-teller-machines
GET /open-banking/products-services/v{version}/personal-accounts
GET /open-banking/products-services/v{version}/business-accounts
GET /open-banking/products-services/v{version}/personal-loans
GET /open-banking/products-services/v{version}/business-loans
GET /open-banking/products-services/v{version}/personal-financings
GET /open-banking/products-services/v{version}/business-financings
GET /open-banking/products-services/v{version}/personal-invoice-financings
GET /open-banking/products-services/v{version}/business-invoice-financings
GET /open-banking/products-services/v{version}/personal-credit-cards
GET /open-banking/products-services/v{version}/business-credit-cards
GET /open-banking/products-services/v{version}/personal-unarranged-account-overdraft
GET /open-banking/products-services/v{version}/business-unarranged-account-overdraft
GET /open-banking/bank-fixed-incomes/v1/investments
GET /open-banking/bank-fixed-incomes/v1/investments/{investmentId}
GET /open-banking/bank-fixed-incomes/v1/investments/{investmentId}/balances
GET /open-banking/bank-fixed-incomes/v1/investments/{investmentId}/transactions
GET /open-banking/bank-fixed-incomes/v1/investments/{investmentId}/transactions-current
GET /open-banking/credit-fixed-incomes/v1/investments
GET /open-banking/credit-fixed-incomes/v1/investments/{investmentId}
GET /open-banking/credit-fixed-incomes/v1/investments/{investmentId}/balances
GET /open-banking/credit-fixed-incomes/v1/investments/{investmentId}/transactions
GET /open-banking/credit-fixed-incomes/v1/investments/{investmentId}/transactions-current
GET /open-banking/variable-incomes/v1/investments
GET /open-banking/variable-incomes/v1/investments/{investmentId}
GET /open-banking/variable-incomes/v1/investments/{investmentId}/balances
GET /open-banking/variable-incomes/v1/investments/{investmentId}/transactions
GET /open-banking/variable-incomes/v1/investments/{investmentId}/transactions-current
GET /open-banking/variable-incomes/v1/broker-notes/{brokerNoteId}
GET /open-banking/treasure-titles/v1/investments
GET /open-banking/treasure-titles/v1/investments/{investmentId}
GET /open-banking/treasure-titles/v1/investments/{investmentId}/balances
GET /open-banking/treasure-titles/v1/investments/{investmentId}/transactions
GET /open-banking/treasure-titles/v1/investments/{investmentId}/transactions-current
GET /open-banking/funds/v1/investments
GET /open-banking/funds/v1/investments/{investmentId}
GET /open-banking/funds/v1/investments/{investmentId}/balances
GET /open-banking/funds/v1/investments/{investmentId}/transactions
GET /open-banking/funds/v1/investments/{investmentId}/transactions-current
Procurando por algo específico?
Utilize nossos atalhos de teclado! Pressione Cmd + K (macOS) ou Ctrl + K (Windows) e digite o que você está precisando!
Updated 2 months ago