Como eu configuro o rsyslog para lidar com mensagens de múltiplas linhas do Log de Consulta Lenta do MySQL?

3

Usando o rsyslog v8.2.2, gostaria de agrupar mensagens com várias linhas, como aquelas que são geradas pelo registro de consultas lentas do MySQL.

Cada nova mensagem começa com três linhas consecutivas tendo '#' como o primeiro caractere da linha, embora algumas mensagens tenham apenas duas linhas com '#' no início da mensagem. ( eu suspeito que as consultas desencadeadas pelo PHP cli, em vez do PHP padrão, não carregam o # Time: stamp ). Exemplo:

# Time: 140817  0:59:22
# User@Host: root[root] @ localhost []
# Query_time: 5.864315  Lock_time: 0.000033 Rows_sent: 857715  Rows_examined: 857715
SET timestamp=1408237162;
SELECT /*!40001 SQL_NO_CACHE */ * FROM 'sales_flat_quote_shipping_rate';
# Time: 140817  1:00:06
# User@Host: user2[user2] @ localhost []
# Query_time: 4.070595  Lock_time: 0.000068 Rows_sent: 0  Rows_examined: 1536
use db2;
SET timestamp=1408237206;
DELETE FROM 'catalog_product_index_price_idx';
# User@Host: db3[db3] @ localhost []
# Query_time: 3.892674  Lock_time: 0.046493 Rows_sent: 0  Rows_examined: 659
use db3;
SET timestamp=1408237206;
UPDATE user SET cert = 'yes' WHERE site_id < 10;
# Time: 140817  1:00:06
# User@Host: user2[user2] @ localhost []
# Query_time: 4.070595  Lock_time: 0.000068 Rows_sent: 0  Rows_examined: 1536
use db2;
SET timestamp=1408237206;
DELETE FROM 'catalog_product_index_price_idx';
# User@Host: db3[db3] @ localhost []
# Query_time: 3.892674  Lock_time: 0.046493 Rows_sent: 0  Rows_examined: 659
use db3;
SET timestamp=1408237206;
UPDATE user SET cert = 'yes' WHERE site_id < 10;

Como configuro o rsyslog para enviá-los como uma única mensagem?

    
por Gaia 17.08.2014 / 20:58

1 resposta

5

O Rsyslog pode agrupar a mensagem de registro de múltiplas linhas em uma única mensagem através do módulo imfile , no entanto, apenas três modos de leitura são suportados:

  • Baseado em linha (padrão) - cada linha é uma nova mensagem.
  • Parágrafo - há uma linha em branco entre as mensagens de log.
  • Recuado - novas mensagens de log começam no início de uma linha. Se uma linha começar com um espaço faz parte da mensagem de log antes.

Seu caso não corresponde a nenhum desses, por isso você não pode fazer o agrupamento diretamente via rsyslog. No entanto, você pode analisar seus arquivos de log e convertê-los em um formato que o rsyslog possa entender. Um shell script simples pode fazer o trabalho ou você pode dar uma olhada nas ferramentas de gerenciamento de log completas como logstash .

    
por 17.08.2014 / 21:46