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¶
- 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: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.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: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.