Re: [pgsql-ru-general] Re: [pgsql-ru-general] Запись логов в сокет вместо файла?
От | Д.П. |
---|---|
Тема | Re: [pgsql-ru-general] Re: [pgsql-ru-general] Запись логов в сокет вместо файла? |
Дата | |
Msg-id | 124b6b00-0474-bb24-be4b-144ed36f3f1a@yandex.ru обсуждение исходный текст |
Ответ на | [pgsql-ru-general] Re: [pgsql-ru-general] Запись логов в сокет вместо файла? (Виктор Вислобоков <corochoone@gmail.com>) |
Список | pgsql-ru-general |
Кроме ТЗ есть ещё и суровая реальность. А в ней логирование всех команд будет давать размёр логов примерно в 50 гигов в сутки. Кроме того, что эта инфа вся не нужна, её ещё и много, там же и другие сообщения плюс к ним сыпятся. Поэтому хотелось лишнее выкидывать сразу, без записи в файл и отправлять на удалённый сислог, где всё.
Про graylog ничего не знаю, посмотрю на него, спасибо.
//ДП
01.09.2017 11:04, Виктор Вислобоков пишет:
Но во-первых, syslog'ом может прикинутся и graylog, например, на удалённом хосте.А во-вторых, если вам не нужны логи прямо в реалтайме, то почему нельзя просто запускать по крону скрипт скажем раз в минуту, который парсит лог, который пишет PostgreSQL (сохраняя последнюю позицию и начиная с неё в следующий раз) и достаёт из этого лога только то, что вам нужно?1 сентября 2017 г., 10:53 пользователь Д.П. <aspamkiller@yandex.ru> написал:Всем привет.
Понадобилось логировать обращения к определённым полям определённых таблиц. Именно SELECT.
Всё, что нашёл по этому поводу - включить запись всех команд в сислог.
Но у сислога есть одна особенность - он может выкинуть лишнее при слишком высокой нагрузке. А по полученному ТЗ - "пусть мир подождёт".
И я подумал, а можно ли повесить свой обработчик и заставить писать postgres в него через сокет? Т.е. я создаю юниксовый сокет и прошу постгрес писать туда логи, не?
Первый эксперимент не удался. Не пришло ничего вообще.
Если меняю log_destination = 'syslog' то все команды логируются.
сен 01 10:51:51 sandbox postgres[10271]: [4-1] СООБЩЕНИЕ: оператор: select manana from kukara4a;
сен 01 10:51:51 sandbox postgres[10271]: [5-1] СООБЩЕНИЕ: продолжительность: 1.051 мс
Поэтому прошу помощи и совета - или я желаю странного, или оно как-то по хитрому может быть включено?
//Дмитрий
Настройки:
log_destination = 'csvlog'
log_filename = '/tmp/access.pglog.sock'
logging_collector = on
log_statement = 'all'
log_min_error_statement = 'info'
log_min_duration_statement = 0
log_lock_waits = on
log_rotation_size = 0
logging_collector = on
Скриптик:
#!/usr/bin/env ruby
# encoding: UTF-8
socket_name = ARGV[0] || '/tmp/access.pglog.sock'
begin
File.unlink socket_name
rescue
end
require 'socket'
require 'syslog/logger'
log ||= Syslog::Logger.new 'access.pglog'
server = UNIXServer.new socket_name
File.chmod 0777, socket_name
loop do
socket = server.accept
while line = socket.readline
log.info line # дада, пишем в сислог.
# тут на самом деле несколько регулярок
end
end
socket.close
--
Sent via pgsql-ru-general mailing list (pgsql-ru-general@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-ru-general
В списке pgsql-ru-general по дате отправления: