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.