Lists: | pgsql-ru-general |
---|
From: | Д(dot)П(dot) <aspamkiller(at)yandex(dot)ru> |
---|---|
To: | pgsql-ru-general(at)postgresql(dot)org |
Subject: | Запись логов в сокет вместо файла? |
Date: | 2017-09-01 07:53:57 |
Message-ID: | a11ad8cd-cf29-e5f6-05c1-eda4694d08a3@yandex.ru |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Lists: | pgsql-ru-general |
Всем привет.
Понадобилось логировать обращения к определённым полям определённых
таблиц. Именно 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
From: | Виктор Вислобоков <corochoone(at)gmail(dot)com> |
---|---|
To: | |
Cc: | pgsql-ru-general(at)postgresql(dot)org |
Subject: | Re: [pgsql-ru-general] Запись логов в сокет вместо файла? |
Date: | 2017-09-01 08:04:12 |
Message-ID: | CAM6AoWbAUfy-dVb1ts6qwjLriX=-vV6x4Q4S0r8LPdFv9CQRPw@mail.gmail.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Lists: | pgsql-ru-general |
Но во-первых, syslog'ом может прикинутся и graylog, например, на удалённом
хосте.
А во-вторых, если вам не нужны логи прямо в реалтайме, то почему нельзя
просто запускать по крону скрипт скажем раз в минуту, который парсит лог,
который пишет PostgreSQL (сохраняя последнюю позицию и начиная с неё в
следующий раз) и достаёт из этого лога только то, что вам нужно?
1 сентября 2017 г., 10:53 пользователь Д.П. <aspamkiller(at)yandex(dot)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(at)postgresql(dot)org)
> To make changes to your subscription:
> http://www.postgresql.org/mailpref/pgsql-ru-general
>
From: | Nikolay Samokhvalov <samokhvalov(at)gmail(dot)com> |
---|---|
To: | Д(dot)П(dot) <aspamkiller(at)yandex(dot)ru> |
Cc: | pgsql-ru-general <pgsql-ru-general(at)postgresql(dot)org> |
Subject: | Re: [pgsql-ru-general] Запись логов в сокет вместо файла? |
Date: | 2017-09-01 08:04:28 |
Message-ID: | CANNMO+JWVxFHhaXXLV_NQ39O8_BixcOTtD2Qb-m7_YzwHOyUxg@mail.gmail.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Lists: | pgsql-ru-general |
2017-09-01 0:53 GMT-07:00 Д.П. <aspamkiller(at)yandex(dot)ru>:
> Всем привет.
>
> Понадобилось логировать обращения к определённым полям определённых
> таблиц. Именно SELECT.
>
>
Посмотрите https://github.com/pgaudit/pgaudit. Кстати, на Amazon RDS
включили не так давно в список расширений, т.е. можно там быстро поиграться
для начала.
From: | Д(dot)П(dot) <aspamkiller(at)yandex(dot)ru> |
---|---|
To: | pgsql-ru-general(at)postgresql(dot)org |
Subject: | Re: Re: [pgsql-ru-general] Запись логов в сокет вместо файла? |
Date: | 2017-09-01 09:01:13 |
Message-ID: | 124b6b00-0474-bb24-be4b-144ed36f3f1a@yandex.ru |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Lists: | pgsql-ru-general |
Кроме ТЗ есть ещё и суровая реальность. А в ней логирование *всех*
команд будет давать размёр логов примерно в 50 гигов в сутки. Кроме
того, что эта инфа вся не нужна, её ещё и много, там же и другие
сообщения плюс к ним сыпятся. Поэтому хотелось лишнее выкидывать сразу,
без записи в файл и отправлять на удалённый сислог, где всё.
Про graylog ничего не знаю, посмотрю на него, спасибо.
//ДП
01.09.2017 11:04, Виктор Вислобоков пишет:
> Но во-первых, syslog'ом может прикинутся и graylog, например, на
> удалённом хосте.
> А во-вторых, если вам не нужны логи прямо в реалтайме, то почему
> нельзя просто запускать по крону скрипт скажем раз в минуту, который
> парсит лог, который пишет PostgreSQL (сохраняя последнюю позицию и
> начиная с неё в следующий раз) и достаёт из этого лога только то, что
> вам нужно?
>
> 1 сентября 2017 г., 10:53 пользователь Д.П. <aspamkiller(at)yandex(dot)ru
> <mailto:aspamkiller(at)yandex(dot)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 <http://log.info> line # дада, пишем в сислог.
> # тут на самом деле несколько регулярок
> end
> end
> socket.close
>
>
> --
> Sent via pgsql-ru-general mailing list
> (pgsql-ru-general(at)postgresql(dot)org
> <mailto:pgsql-ru-general(at)postgresql(dot)org>)
> To make changes to your subscription:
> http://www.postgresql.org/mailpref/pgsql-ru-general
> <http://www.postgresql.org/mailpref/pgsql-ru-general>
>
>
From: | "Dmitry E(dot) Oboukhov" <unera(at)debian(dot)org> |
---|---|
To: | pgsql-ru-general(at)postgresql(dot)org |
Subject: | Re: Запись логов в сокет вместо файла? |
Date: | 2017-09-03 09:53:39 |
Message-ID: | 20170903095339.GD31091@vdsl.uvw.ru |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Lists: | pgsql-ru-general |
кстати по поводу логов: можно ли slow log настроить в отдельный лог
(не в общий postgresql.log, а в отдельный файл)?
--
. ''`. Dmitry E. Oboukhov <unera(at)debian(dot)org>
: :’ :
`. `~’ GPG key: 4096R/08EEA756 2014-08-30
`- 71ED ACFC 6801 0DD9 1AD1 9B86 8D1F 969A 08EE A756
From: | Oleksandr Shulgin <oleksandr(dot)shulgin(at)zalando(dot)de> |
---|---|
To: | "Dmitry E(dot) Oboukhov" <unera(at)debian(dot)org> |
Cc: | pgsql-ru-general <pgsql-ru-general(at)postgresql(dot)org> |
Subject: | Re: [pgsql-ru-general] Запись логов в сокет вместо файла? |
Date: | 2017-09-04 10:10:30 |
Message-ID: | CACACo5QbV1XNeQ+pSivHK1hLZ1KraRyfL_q87KyUBTwCMdNwjg@mail.gmail.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Lists: | pgsql-ru-general |
2017-09-03 11:53 GMT+02:00 Dmitry E. Oboukhov <unera(at)debian(dot)org>:
> кстати по поводу логов: можно ли slow log настроить в отдельный лог
> (не в общий postgresql.log, а в отдельный файл)?
>
А что такое "slow log"? То, что пишется в лог при превышении
log_min_duration_statement? Была бы интересная возможность, но, насколько
я знаю, на данный момент -- нет.
--
Oleksandr "Alex" Shulgin | Database Engineer | Zalando SE | Tel: +49 176
127-59-707
From: | "Dmitry E(dot) Oboukhov" <unera(at)debian(dot)org> |
---|---|
To: | pgsql-ru-general(at)postgresql(dot)org |
Subject: | Re: Re: [pgsql-ru-general] Запись логов в сокет вместо файла? |
Date: | 2017-09-04 11:25:55 |
Message-ID: | 20170904112555.GF31091@vdsl.uvw.ru |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Lists: | pgsql-ru-general |
> кстати по поводу логов: можно ли slow log настроить в отдельный лог
> (не в общий postgresql.log, а в отдельный файл)?
> А что такое "slow log"? То, что пишется в лог при превышении
> log_min_duration_statement?
ага
> Была бы интересная возможность, но, насколько я
> знаю, на данный момент -- нет.
просто получается если включить slow log то даже один запрос туда
попадающий занимает дофига места в логе. А если туда идет
какой-никакой поток запросов, то и вовсе в логе уже собственно
диагностической инфы практически нет.
и вот хотелось бы их эти логи разделить.
--
. ''`. Dmitry E. Oboukhov <unera(at)debian(dot)org>
: :’ :
`. `~’ GPG key: 4096R/08EEA756 2014-08-30
`- 71ED ACFC 6801 0DD9 1AD1 9B86 8D1F 969A 08EE A756