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.