API de métricas¶
O servidor ASR disponibiliza um conjunto de métricas relacionadas ao reconhecimento de fala que podem ser acessadas através de duas interfaces: HTTP e PROMETHEUS. Através dessas métricas, combinadas com métricas que podem ser coletadas do próprio sistema operacional (CPU, memória, I/O, etc.), o administrador pode avaliar o nível de utilização e desempenho do sistema.
Aviso
Embora várias métricas sejam retornadas pelo ASR, apenas um certo conjunto deve ser considerado para a monitoração do reconhecimento de fala. As métricas não apresentadas aqui não devem ser usadas. Algumas delas ainda estão em desenvolvimento e podem ser modificadas ou até removidas. Outras métricas são internas e não estão diretamente relacionadas ao ASR.
Há os seguintes tipos de métrica:
- Contador
Valor que pode ser incrementado ou subtraído (ex. Número requisições processadas).
- Histograma
Mede a distribuição estatística em uma sequência de valores. Temos o valor máximo, mínimo, média e desvio padrão, além de quantis. A medida corresponde às amostras mais recentes, dentro de uma janela de aproximadamente 5 min. Essa janela move-se apenas quando ocorrem novas amostras, e não considera o tempo em si.
- Timer
Taxa de execução de uma função e a distribuição da duração.
- Gauge
Valor instantâneo de uma medida qualquer.
- Meter
Mede a taxa de ocorrência de um evento em um intervalo de tempo. Registra a taxa média em uma janela de tempo móvel (-1, -5, -15 minutos). Essa janela move-se apenas quando existem novas amostras, e não considera o tempo em si.
Métricas ASR¶
Sessões de reconhecimento¶
- br.com.cpqd.asr.session.open
Número de sessões de reconhecimento em andamento (abertas).
- br.com.cpqd.asr.session.duration
Histograma da duração da sessão e taxa de criação de sessões.
Requisições de reconhecimento¶
- br.com.cpqd.asr.recognition.active
Número de reconhecimentos em andamento. Atualmente, corresponde ao número de canais em uso da licença.
- br.com.cpqd.asr.recognition.requests
Valor acumulado da quantidade total de requisições de reconhecimento realizadas até o momento.
Áudio de entrada¶
- br.com.cpqd.asr.engine.audio.duration
Valor acumulado da duração do áudio de entrada em milissegundos.
- br.com.cpqd.asr.engine.speech.duration
Valor acumulado do tempo de fala no áudio de entrada em milissegundos.
Tempo de reconhecimento¶
- br.com.cpqd.asr.engine.recognition.time
Valor acumulado do tempo de reconhecimento em milissegundos.
- br.com.cpqd.asr.recognition.time
Histograma do tempo de reconhecimento em milissegundos.
RTF do reconhecimento¶
Aviso
As métricas deste tópico só encontram-se disponíveis se estiverem listadas em availableTags.
$ curl http://localhost:8027/actuator/metrics/br.com.cpqd.asr.engine.rtf100
{
"name": "br.com.cpqd.asr.engine.rtf100",
"description": "Performance on Grammar LM recognitions",
"baseUnit": "100*RTF",
"measurements": [
{
"statistic": "COUNT",
"value": 10
},
{
"statistic": "TOTAL",
"value": 83.95975637435913
}
],
"availableTags": [
{
"tag": "lm",
"values": [
"null",
"slm",
"grammar"
]
}
]
}
As métricas abaixo podem são filtradas através da tag «lm», conforme os exemplos a seguir.
- br.com.cpqd.asr.engine.rtf100?tag=lm:grammar
Histograma do valor percentual de RTF para gramáticas. Um valor indicado aqui como 80, corresponde a um RTF=0.8.
- br.com.cpqd.asr.engine.rtf100?tag=lm:slm
Histograma do valor percentual de RTF para modelos de fala livre. Um valor indicado aqui como 120, corresponde a um RTF=1.2.
Resultado do reconhecimento¶
Aviso
As métricas deste tópico só encontram-se disponíveis se estiverem listadas em availableTags.
Para saber quais métricas já ocorreram realize a consulta abaixo:
$ curl http://localhost:8027/actuator/metrics/br.com.cpqd.asr.recognition.result
{
"name":"br.com.cpqd.asr.recognition.result",
"measurements":[
{
"statistic":"COUNT",
"value":139.0
}
],
"availableTags":[
{
"tag":"status",
"values": [
"NO_SPEECH",
"RECOGNIZED",
"NO_MATCH"
]
}
]
}
As métricas disponíveis podem ser filtradas através da tag «status», conforme os exemplos abaixo.
- br.com.cpqd.asr.recognition.result?tag=status:RECOGNIZED
Valor acumulado da quantidade de requisições de reconhecimento finalizadas com sucesso, ou seja, com uma frase reconhecida. Reconhecimento com sucesso não significa «resultado correto».
- br.com.cpqd.asr.recognition.result?tag=status:FAILURE
Valor acumulado da quantidade de requisições de reconhecimento finalizadas com «falha».
- br.com.cpqd.asr.recognition.result?tag=status:MAX_SPEECH
Valor acumulado da quantidade de requisições de reconhecimento finalizadas porque ultrapassaram o limite interno máximmo de fala.
- br.com.cpqd.asr.recognition.result?tag=status:NO_INPUT_TIMEOUT
Valor acumulado da quantidade de requisições de reconhecimento finalizadas porque o sistema não detectou fala por um tempo maior que o limite (parâmetro noInputTimeout.value).
- br.com.cpqd.asr.recognition.result?tag=status:NO_MATCH
Valor acumulado da quantidade de requisições de reconhecimento finalizadas porque o sistema não conseguiu reconhecer o áudio de entrada ou o índice de confiança ficou abaixo do limiar (parâmetro decoder.confidenceThreshold).
- br.com.cpqd.asr.recognition.result?tag=status:NO_SPEECH
Valor acumulado da quantidade de requisições de reconhecimento finalizadas porque o sistema não detectou fala no áudio de entrada.
- br.com.cpqd.asr.recognition.result?tag=status:RECOGNITION_TIMEOUT
Valor acumulado da quantidade de requisições de reconhecimento finalizadas porque o sistema não realizou o reconhecimento dentro do limite de tempo configurado (parâmetro recognitionTimeout.value).
Sessões canceladas ou com falha devido a limite de licenças¶
- br.com.cpqd.asr.cancel.session.duration
Valor acumulado da quantidade de requisições de reconhecimento que foram «canceladas».
- br.com.cpqd.asr.recognition.result.ERR_MAX_LICENSES
Valor acumulado da quantidade de requisições de reconhecimento rejeitadas por ultrapassar o limite máximo de canais da licença.
Interface HTTP¶
Através da interface HTTP, as métricas do ASR podem ser lidas enviando uma
requisição HTTP GET para a URL http://ASR_HOST:8027/actuator/metrics
, onde ASR_HOST é
o IP do Servidor ASR desejado. Para exemplificar, abra um console na máquina do
Servidor ASR e execute o comando abaixo:
curl http://localhost:8027/actuator/metrics
O resultado deve ser similar ao seguinte:
$ curl http://localhost:8027/actuator/metrics
{
"names": [
"application.ready.time",
"application.started.time",
"br.com.cpqd.asr.cancel.session.duration",
"br.com.cpqd.asr.cleaned.orphan.sessions",
"br.com.cpqd.asr.engine.audio.duration",
"br.com.cpqd.asr.engine.recognition.time",
"br.com.cpqd.asr.engine.rtf100",
"br.com.cpqd.asr.engine.speech.duration",
"br.com.cpqd.asr.license.usage",
"br.com.cpqd.asr.recognition.active",
"br.com.cpqd.asr.recognition.requests",
"br.com.cpqd.asr.recognition.result",
"br.com.cpqd.asr.recognition.result.ERR_MAX_LICENSES",
"br.com.cpqd.asr.redis.saveaudio.time",
"br.com.cpqd.asr.session.duration",
"br.com.cpqd.asr.session.open",
"disk.free",
"disk.total",
"executor",
"executor.active",
"executor.completed",
"executor.idle",
"executor.pool.core",
"executor.pool.max",
"executor.pool.size",
"executor.queue.remaining",
"executor.queued",
"grpc.server.processing.duration",
"grpc.server.requests.received",
"grpc.server.responses.sent",
"jvm.buffer.count",
"jvm.buffer.memory.used",
"jvm.buffer.total.capacity",
"jvm.classes.loaded",
"jvm.classes.unloaded",
"jvm.compilation.time",
"jvm.gc.live.data.size",
"jvm.gc.max.data.size",
"jvm.gc.memory.allocated",
"jvm.gc.memory.promoted",
"jvm.gc.overhead",
"jvm.gc.pause",
"jvm.info",
"jvm.memory.committed",
"jvm.memory.max",
"jvm.memory.usage.after.gc",
"jvm.memory.used",
"jvm.threads.daemon",
"jvm.threads.live",
"jvm.threads.peak",
"jvm.threads.started",
"jvm.threads.states",
"logback.events",
"process.cpu.usage",
"process.files.max",
"process.files.open",
"process.start.time",
"process.uptime",
"system.cpu.count",
"system.cpu.usage",
"system.load.average.1m",
"tasks.scheduled.execution",
"tasks.scheduled.execution.active",
"tomcat.sessions.active.current",
"tomcat.sessions.active.max",
"tomcat.sessions.alive.max",
"tomcat.sessions.created",
"tomcat.sessions.expired",
"tomcat.sessions.rejected"
]
}
Para consultar cada uma das métricas utilize a URL/<nome da métrica>. Veja o exemplo a seguir:
$ curl http://localhost:8027/actuator/metrics/br.com.cpqd.asr.session.open O resultado será o seguinte: { "name":"br.com.cpqd.asr.session.open", "description":"Open sessions", "baseUnit":null, "measurements":[ { "statistic":"VALUE", "value":0.0 } ], "availableTags":[ ] }
Interface PROMETHEUS¶
As métricas do ASR podem ser lidas pela interface PROMETHEUS enviando uma
requisição para a URL http://ASR_HOST:8027/actuator/prometheus
, onde ASR_HOST
é o IP do Servidor ASR desejado.