Nagios não aceitando regex no comando

3

Eu tenho este comando definido:

define command{
command_name check_http_sane
command_line $USER1$/check_http -H $HOSTNAME$ -r "HTTP/1.1 (200|301|302|303|304|307|401|418|426)"
}

Quando eu o executo manualmente na linha de comando, ele funciona bem, mas o nagios (2.6) relata um erro "padrão não encontrado". Eu preciso escapar de algo?

Editar: Como dito abaixo, eu resolvi isso substituindo check_http pelo meu próprio script que funciona (bom o suficiente para o nosso caso de uso, de qualquer forma). Script: link

    
por Creshal 21.12.2011 / 13:25

3 respostas

1

Como o escape também não funcionou (e ele funciona sem a linha de comando, por que) e eu não queria gastar mais tempo depurando, eu escrevi meu próprio plugin Nagios para substituir check_http, que funciona como um encanto:

link

    
por 21.02.2012 / 15:56
2

O código-fonte para check_http.c diz que a opção -r verifica os cabeçalhos e o conteúdo da página. O problema que você está vendo é provavelmente o interpretador de macros do comando Nagios tentando substituir algo na sua string regex.

Você deve tentar escapar de todos os seus caracteres ( , | e ) . Se isso não funcionar, tente apenas os parênteses e apenas os tubos. Você também pode tentar usar aspas simples em vez de aspas duplas.

    
por 21.12.2011 / 15:35
0

Sua afirmação de que isso "funciona bem" na linha de comando é questionável. Quando eu o executo manualmente, ele não "funciona bem":

./check_http -H localhost -r "HTTP/1.1 (200|301|302|303|304|307|401|418|426)" HTTP CRITICAL: HTTP/1.1 302 Found - pattern not found - 650 bytes in 0.001 second response time |time=0.001410s;;;0.000000 size=650B;;;0

Como Jeff Strunk sugere, você precisa escapar dos parênteses (então o shell não os consome), assim:

./check_http -H localhost -r "HTTP/1.1 \(200|301|302|303|304|307|401|418|426\)" HTTP OK: HTTP/1.1 302 Found - 650 bytes in 0.001 second response time |time=0.001425s;;;0.000000 size=650B;;;0

    
por 28.12.2011 / 22:38

Tags