API de métricas¶
O servidor CPQD 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 CPQD 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¶
- gauges/br.com.cpqd.asr.session.open
Número de sessões de reconhecimento em andamento (abertas).
- timers/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¶
- gauges/br.com.cpqd.asr.recognition.active
Número de reconhecimentos em andamento. Atualmente, corresponde ao número de canais em uso da licença.
- counters/br.com.cpqd.asr.recognition.requests
Valor acumulado da quantidade total de requisições de reconhecimento realizadas até o momento.
Áudio de entrada¶
- counters/br.com.cpqd.asr.engine.audio.duration
Valor acumulado da duração do áudio de entrada em milissegundos.
- counters/br.com.cpqd.asr.engine.speech.duration
Valor acumulado do tempo de fala no áudio de entrada em milissegundos.
Tempo de reconhecimento¶
- counters/br.com.cpqd.asr.engine.recognition.time
Valor acumulado do tempo de reconhecimento em milissegundos.
- histograms/br.com.cpqd.asr.recognition.time
Histograma do tempo de reconhecimento em milissegundos.
RTF do reconhecimento¶
- histograms/br.com.cpqd.asr.engine.rtf100.grammar
Histograma do valor percentual de RTF para gramáticas. Um valor indicado aqui como 80, corresponde a um RTF=0.8.
- histograms/br.com.cpqd.asr.engine.rtf100.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¶
- counters/br.com.cpqd.asr.recognition.result.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».
- counters/br.com.cpqd.asr.recognition.result.CANCELED
Valor acumulado da quantidade de requisições de reconhecimento que foram «canceladas».
- counters/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.
- counters/br.com.cpqd.asr.recognition.result.FAILURE
Valor acumulado da quantidade de requisições de reconhecimento finalizadas com «falha».
- counters/br.com.cpqd.asr.recognition.result.MAX_SPEECH
Valor acumulado da quantidade de requisições de reconhecimento finalizadas porque ultrapassaram o limite interno máximmo de fala.
- counters/br.com.cpqd.asr.recognition.result.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).
- counters/br.com.cpqd.asr.recognition.result.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).
- counters/br.com.cpqd.asr.recognition.result.NO_SPEECH
Valor acumulado da quantidade de requisições de reconhecimento finalizadas porque o sistema não detectou fala no áudio de entrada.
- counters/br.com.cpqd.asr.recognition.result.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).
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:8000/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:8000/actuator/metrics
O resultado deve ser similar ao seguinte:
$ curl http://localhost:8000/actuator/metrics
{
"names": [
"application.ready.time",
"application.started.time",
"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.execution",
"executor.idle",
"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.gc.live.data.size",
"jvm.gc.max.data.size",
"jvm.gc.memory.allocated",
"jvm.gc.memory.promoted",
"jvm.gc.overhead",
"jvm.gc.pause",
"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.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",
"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:8000/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:8000/actuator/prometheus
, onde ASR_HOST
é o IP do Servidor ASR desejado.