usando o kapacitor com influxdb e collectd

1

Estou tentando integrar o Kapacitor com nossa configuração influxdb e collectd. No entanto, parece que não funciona, e eu não entendo o porquê.

Collectd e Influxdb estão funcionando corretamente, e acho que o Kapacitor é capaz de se conectar ao influxdb. No log do kapacitor eu vejo isso:

[influxdb] 2016/04/22 09:46:42 I! started UDP listener for collectd_db default

Este é o nome do banco de dados influxdb no qual collectd está registrando as métricas.

Eu criei o seguinte tick-file e fiz o upload dele para o kapacitor e o habilitei:

stream
    .from().measurement('cpu_value')
    .where(lambda: "type" == "percent")
    .where(lambda: "type_instance" == "idle")
    .alert()
        .crit(lambda: "value" <  100)
        // Whenever we get an alert write it to a file.
        .log('/tmp/alerts.log')

Este foi apenas um script de teste, que esperamos que produza algum resultado.

O script está ativado:

Name                          Type      Enabled   Executing Databases and Retention Policies
cpu_tick                      stream    true      true      ["collectd_db"."default"]

No entanto, não vejo gravações:

[centos@ip-xx-xx-xx-xx tmp]$ kapacitor list recordings
ID                                      Type    Size      Created      

"cpu_value" é uma medida válida no meu banco de dados.

Isso é o que recebo no meu log de erros:

[cpu_alert:stream1] 2016/04/28 13:00:51 E! error while evaluating WHERE expression: name "percent" is undefined. Names in scope: time,value,host,instance,type,type_instance
    
por Jeroen Jacobs 28.04.2016 / 14:02

1 resposta

6

Autor do Kapacitor aqui ...

Em expressões lambda Kapacitor, aspas simples x aspas duplas têm significados diferentes.

  • As aspas simples indicam um literal de string
  • As aspas duplas são uma referência a um campo ou tag dos dados.

Esta expressão .where(lambda: "type" == "percent") diz apenas que os pontos de dados que são type field ou tag value são iguais ao valor do campo ou tag percent . De acordo com o err

[cpu_alert:stream1] 2016/04/28 13:00:51 E! error while evaluating WHERE expression: name "percent" is undefined. Names in scope: time,value,host,instance,type,type_instance

O campo ou tag percent não existe.

Você precisa usar aspas simples se quiser filtrar os pontos cujo valor de tipo é igual ao percent literal.

.where(lambda: "type" == 'percent')

O mesmo é provavelmente verdadeiro para a sua próxima expressão também.

.where(lambda: "type_instance" == 'idle')

Você também pode usar AND expressões se desejar

.where(lambda: "type" == 'percent' AND "type_instance" == 'idle')

Quando o Kapacitor encontra várias instruções where adjacentes, converte-as em uma expressão do And'ed sob o capô.

Veja os documentos relevantes que explicam as diferenças entre aspas link

Por que não há gravações, não posso responder sem mais contexto sobre como você tentou criar uma gravação.

    
por 28.04.2016 / 17:27