Как я настраиваю rsyslog для контакта с сообщениями мультилинии MySQL Slow Query Log?

Используя rsyslog v8.2.2, я хотел бы сгруппировать многострочные сообщения, такие как произведенные журналом MySQL Slow Query.

Каждое новое сообщение начинается с трех последовательных строк, имеющих '#' как первый символ строки, хотя некоторые сообщения имеют только две строки, имеющие '#' в начале сообщения. (Я подозреваю, что запросы, инициированные PHP cli, вместо стандартного PHP, не несут # Time: штамп). Пример:

# 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;

Как я настраиваю rsyslog для отправки их по как единственное сообщение?

3
задан 17 August 2014 в 23:13
1 ответ

Rsyslog может сгруппировать многострочное сообщение журнала в одно сообщение через модуль imfile , однако поддерживаются только три режима чтения:

  • Line based (default) - каждая строка является новым сообщением.
  • Paragraph - между сообщениями журнала есть пустая строка.
  • Отступ - новые сообщения журнала начинаются в начале строки. Если строка начинается с пробелом это часть сообщения журнала перед ним.

Ваш случай не совпадает ни с одним из них, поэтому вы не можете сделать группировку непосредственно через rsyslog. Однако вы можете разобрать ваши лог-файлы и преобразовать их в формат, который rsyslog сможет понять. Простой скрипт оболочки может сделать эту работу, или вы можете посмотреть на такие полнофункциональные инструменты управления логами, как logstash.

.
5
ответ дан 3 December 2019 в 05:42

Теги

Похожие вопросы