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