23.3. ÐбÑлÑживание жÑÑнала
ÐÑÑнал ÑеÑвеÑа Ð±Ð°Ð·Ñ Ð´Ð°Ð½Ð½ÑÑ
желаÑелÑно ÑоÑ
ÑанÑÑÑ Ð³Ð´Ðµ-либо, а не пÑоÑÑо ÑбÑаÑÑваÑÑ ÐµÐ³Ð¾ в /dev/null. ÐÑÐ¾Ñ Ð¶ÑÑнал беÑÑенен пÑи диагноÑÑике пÑоблем.
ÐÑимеÑание
ÐÑÑнал ÑеÑвеÑа Ð¼Ð¾Ð¶ÐµÑ ÑодеÑжаÑÑ ÐºÐ¾Ð½ÑиденÑиалÑнÑÑ Ð¸Ð½ÑоÑмаÑÐ¸Ñ Ð¸ должен бÑÑÑ Ð·Ð°ÑиÑÑн, где Ð±Ñ Ð¾Ð½ ни Ñ
ÑанилÑÑ Ð¸ кÑда Ð±Ñ Ð½Ð¸ пеÑедавалÑÑ. ÐапÑимеÑ, опеÑаÑоÑÑ DDL могÑÑ ÑодеÑжаÑÑ Ð½ÐµÐ·Ð°ÑиÑÑованнÑе паÑоли или дÑÑгие даннÑе аÑÑенÑиÑикаÑии. РопеÑаÑоÑаÑ
, вÑводимÑÑ
на ÑÑовне ERROR, Ð¼Ð¾Ð¶ÐµÑ Ð¾ÑобÑажаÑÑÑÑ Ð¸ÑÑ
однÑй код SQL Ð´Ð»Ñ Ð¿Ñиложений, а Ñакже могÑÑ ÑодеÑжаÑÑÑÑ ÑÑагменÑÑ ÑÑÑок даннÑÑ
. Так как жÑÑнал ÑобÑÑвенно пÑедназнаÑен Ð´Ð»Ñ Ð·Ð°Ð¿Ð¸Ñи даннÑÑ
, ÑобÑÑий и ÑвÑзанной Ñ Ð½Ð¸Ð¼Ð¸ инÑоÑмаÑии, ÑÑо не ÑвлÑеÑÑÑ ÑÑзвимоÑÑÑÑ Ð¸Ð»Ð¸ деÑекÑом. Ðам ÑледÑÐµÑ Ð¿Ð¾Ð·Ð°Ð±Ð¾ÑиÑÑÑÑ Ð¾ Ñом, ÑÑÐ¾Ð±Ñ Ðº жÑÑналам ÑеÑвеÑа полÑÑали доÑÑÑп ÑолÑко лиÑа Ñ ÑооÑвеÑÑÑвÑÑÑими полномоÑиÑми.
ÐÑÑнал ÑеÑвеÑа Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð¾ÑÐµÐ½Ñ Ð¾Ð±ÑÑмнÑм (оÑобенно пÑи вÑÑÐ¾ÐºÐ¸Ñ ÑÑовнÑÑ Ð¾Ñладки), Ñак ÑÑо Ñ ÑаниÑÑ ÐµÐ³Ð¾ неогÑаниÑенно долго Ð²Ñ Ð²ÑÑд ли Ð·Ð°Ñ Ð¾ÑиÑе. ÐоÑÑÐ¾Ð¼Ñ Ð½ÐµÐ¾Ð±Ñ Ð¾Ð´Ð¸Ð¼Ð¾ оÑганизоваÑÑ ÑоÑаÑÐ¸Ñ Ð¶ÑÑналÑнÑÑ Ñайлов Ñак, ÑÑÐ¾Ð±Ñ Ð½Ð¾Ð²Ñе ÑÐ°Ð¹Ð»Ñ ÑоздавалиÑÑ, а ÑÑаÑÑе ÑдалÑлиÑÑ ÑеÑез ÑазÑмнÑй пÑомежÑÑок вÑемени.
ÐÑли пÑоÑÑо напÑавиÑÑ stderr ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ postgres в Ñайл, Ð²Ñ Ð¿Ð¾Ð»ÑÑиÑе в нÑм жÑÑнал ÑообÑений, но оÑиÑÑиÑÑ ÑÑÐ¾Ñ Ñайл можно бÑдеÑ, ÑолÑко еÑли оÑÑановиÑÑ Ð¸ пеÑезапÑÑÑиÑÑ ÑеÑвеÑ. ÐÑо Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð´Ð¾Ð¿ÑÑÑимо пÑи иÑполÑзовании Postgres Pro в ÑÑеде ÑазÑабоÑки, но вÑÑд ли Ñакой ваÑÐ¸Ð°Ð½Ñ Ð±ÑÐ´ÐµÑ Ð¿ÑиемлемÑм в пÑоизводÑÑвенной ÑÑеде.
ÐÑÑÑим подÑ
одом бÑÐ´ÐµÑ Ð¿ÐµÑенапÑавление вÑвода ÑеÑвеÑа stderr в какÑÑ-либо пÑогÑÐ°Ð¼Ð¼Ñ ÑоÑаÑии жÑÑналÑнÑÑ
Ñайлов. СÑÑеÑÑвÑÐµÑ Ð¸ вÑÑÑоенное ÑÑедÑÑво ÑоÑаÑии жÑÑналÑнÑÑ
Ñайлов, коÑоÑое можно иÑполÑзоваÑÑ, ÑÑÑановив Ð´Ð»Ñ Ð¿Ð°ÑамеÑÑа logging_collector знаÑение true в postgresql.conf. ÐаÑамеÑÑÑ, ÑпÑавлÑÑÑие ÑÑой пÑогÑаммой, опиÑÐ°Ð½Ñ Ð² ÐодÑазделе 18.8.1. ÐÑÐ¾Ñ Ð¿Ð¾Ð´Ñ
од Ñакже можно иÑполÑзоваÑÑ Ð´Ð»Ñ Ð¿Ð¾Ð»ÑÑÐµÐ½Ð¸Ñ ÑодеÑжимого жÑÑнала в ÑоÑмаÑе CSV (знаÑениÑ, ÑазделÑннÑе запÑÑÑми).
ÐÑ Ñакже можеÑе пÑедпоÑеÑÑÑ Ð²Ð½ÐµÑнÑÑ Ð¿ÑогÑÐ°Ð¼Ð¼Ñ ÑоÑаÑии жÑÑналов, еÑли Ð²Ñ Ð¸ÑполÑзÑеÑе ÐµÑ Ð´Ð»Ñ Ð´ÑÑгого ÑеÑвеÑного ÐÐ. ÐапÑимеÑ, Ð´Ð»Ñ Postgres Pro можно пÑимениÑÑ Ð¿ÑогÑÐ°Ð¼Ð¼Ñ rotatelogs, вклÑÑÑннÑÑ Ð² диÑÑÑибÑÑив Apache. Ðдин из ваÑианÑов Ñакого иÑполÑÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ â напÑавиÑÑ Ð¿Ð¾Ñок ÑеÑвеÑа stderr на вÑ
од Ñакой пÑогÑамме. ÐÑли Ð²Ñ Ð·Ð°Ð¿ÑÑкаеÑе ÑеÑÐ²ÐµÑ Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ pg_ctl, поÑок stderr Ñже вÑводиÑÑÑ Ð² stdout, Ñак ÑÑо вам нÑжна пÑоÑÑÐ°Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð° пеÑенапÑавлениÑ:
pg_ctl start | rotatelogs /var/log/pgsql_log 86400
ÐÑ Ð¼Ð¾Ð¶ÐµÑе ÑкомбиниÑоваÑÑ ÑÑи подÑ
одÑ, наÑÑÑоив пÑогÑÐ°Ð¼Ð¼Ñ logrotate Ñак, ÑÑÐ¾Ð±Ñ Ð¾Ð½Ð° ÑобиÑала ÑÐ°Ð¹Ð»Ñ Ð¶ÑÑналов, коÑоÑÑе запиÑÑÐ²Ð°ÐµÑ Ð²ÑÑÑоеннÑй в Postgres Pro ÑбоÑÑик ÑообÑений. Ð ÑÑом ÑлÑÑае имена и ÑаÑположение Ñайлов жÑÑналов опÑеделÑÐµÑ ÑбоÑÑик ÑообÑений, а logrotate пеÑиодиÑеÑки аÑÑ
ивиÑÑÐµÑ ÑÑи ÑайлÑ. Ðогда logrotate пÑÐ¾Ð¸Ð·Ð²Ð¾Ð´Ð¸Ñ ÑоÑаÑÐ¸Ñ Ð¶ÑÑналов, важно, ÑÑÐ¾Ð±Ñ Ð¿Ñиложение вÑводило далÑнейÑие ÑообÑÐµÐ½Ð¸Ñ Ð² новÑй Ñайл. ÐбÑÑно ÑÑо Ð´ÐµÐ»Ð°ÐµÑ ÑкÑÐ¸Ð¿Ñ postrotate, пеÑедаÑÑий Ñигнал SIGHUP пÑиложениÑ, коÑоÑое в ÑÐ²Ð¾Ñ Ð¾ÑеÑÐµÐ´Ñ Ð·Ð°Ð½Ð¾Ð²Ð¾ оÑкÑÑÐ²Ð°ÐµÑ Ñайл жÑÑнала. Ð Postgres Pro вмеÑÑо ÑÑого Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе вÑполниÑÑ pg_ctl Ñ Ñказанием logrotate. Ðогда вÑполнÑеÑÑÑ ÑÑа команда, ÑеÑÐ²ÐµÑ Ð»Ð¸Ð±Ð¾ пеÑеклÑÑаеÑÑÑ Ð½Ð° новÑй Ñайл жÑÑнала, либо заново оÑкÑÑÐ²Ð°ÐµÑ ÑÑÑеÑÑвÑÑÑий, в завиÑимоÑÑи Ð¾Ñ ÐºÐ¾Ð½ÑигÑÑаÑии жÑÑналиÑÐ¾Ð²Ð°Ð½Ð¸Ñ (Ñм. ÐодÑаздел 18.8.1).
ÐÑимеÑание
Ðогда иÑполÑзÑÑÑÑÑ ÑÑаÑиÑеÑкие имена Ñайлов жÑÑналов, ÑеÑÐ²ÐµÑ Ð¼Ð¾Ð¶ÐµÑ ÑÑолкнÑÑÑÑÑ Ñ Ð¾Ñибкой пÑи оÑкÑÑÑии Ñайла, еÑли бÑÐ´ÐµÑ Ð´Ð¾ÑÑигнÑÑо огÑаниÑение на макÑималÑное ÑиÑло оÑкÑÑÑÑÑ
Ñайлов или пеÑеполниÑÑÑ ÑаблиÑа Ñайлов. Ð ÑÑом ÑлÑÑае ÑообÑÐµÐ½Ð¸Ñ Ð±ÑдÑÑ Ð¿ÑодолжаÑÑ Ð²ÑводиÑÑÑÑ Ð² ÑÑаÑÑй жÑÑнал пока не пÑоизойдÑÑ ÑÑпеÑное пеÑеклÑÑение. ÐÑли пÑогÑамма logrotate ÑÐ¶Ð¸Ð¼Ð°ÐµÑ Ñайл жÑÑнала и заÑем ÑдалÑÐµÑ ÐµÐ³Ð¾, ÑообÑÐµÐ½Ð¸Ñ ÑеÑвеÑа, вÑводимÑе в ÑÑом инÑеÑвале вÑемени, могÑÑ Ð±ÑÑÑ Ð¿Ð¾ÑеÑÑнÑ. ЧÑÐ¾Ð±Ñ Ð¸Ð·Ð±ÐµÐ¶Ð°ÑÑ ÑÑого, можно ÑделаÑÑ Ñак, ÑÑÐ¾Ð±Ñ ÑбоÑÑик ÑообÑений вÑбиÑал динамиÑеÑкие имена Ñайлов, а ÑкÑÐ¸Ð¿Ñ prerotate игноÑиÑовал оÑкÑÑÑÑе ÑÐ°Ð¹Ð»Ñ Ð¶ÑÑналов.
ÐÑÑ Ð¾Ð´Ð½Ð¾ ÑеÑение пÑомÑÑленного ÑÑÐ¾Ð²Ð½Ñ Ð·Ð°ÐºÐ»ÑÑаеÑÑÑ Ð² пеÑедаÑе жÑÑнала в syslog, ÑÑÐ¾Ð±Ñ ÑоÑаÑией Ñайлов занималаÑÑ Ñже ÑлÑжба syslog. ÐÐ»Ñ ÑÑого пÑиÑвойÑе паÑамеÑÑÑ ÐºÐ¾Ð½ÑигÑÑаÑии log_destination знаÑение syslog (Ð´Ð»Ñ Ð²Ñвода жÑÑнала ÑолÑко в syslog) в postgresql.conf. ÐаÑем Ð²Ñ ÑможеÑе поÑÑлаÑÑ Ñигнал SIGHUP ÑлÑжбе syslog, когда заÑ
оÑиÑе пÑинÑдиÑелÑно наÑаÑÑ Ð·Ð°Ð¿Ð¸ÑÑ Ð½Ð¾Ð²Ð¾Ð³Ð¾ жÑÑналÑного Ñайла. ÐÑли Ð²Ñ Ñ
оÑиÑе авÑомаÑизиÑоваÑÑ ÑоÑаÑÐ¸Ñ Ð¶ÑÑналÑнÑÑ
Ñайлов, пÑогÑÐ°Ð¼Ð¼Ñ logrotate можно наÑÑÑоиÑÑ Ð¸ Ð´Ð»Ñ ÑабоÑÑ Ñ Ð¶ÑÑналÑнÑми Ñайлами, коÑоÑÑе ÑоÑмиÑÑÐµÑ syslog.
Ðднако во многиÑ
ÑиÑÑемаÑ
, а оÑобенно c болÑÑими ÑообÑениÑми, syslog ÑабоÑÐ°ÐµÑ Ð½Ðµ оÑÐµÐ½Ñ Ð½Ð°Ð´Ñжно; он Ð¼Ð¾Ð¶ÐµÑ Ð¾Ð±ÑезаÑÑ Ð¸Ð»Ð¸ ÑеÑÑÑÑ ÑообÑÐµÐ½Ð¸Ñ ÐºÐ°Ðº Ñаз Ñогда, когда они вам нÑжнÑ. ÐÑоме Ñого, в Linux, syslog> ÑбÑаÑÑÐ²Ð°ÐµÑ ÐºÐ°Ð¶Ð´Ð¾Ðµ ÑообÑение на диÑк, Ð¾Ñ Ñего ÑÑÑÐ°Ð´Ð°ÐµÑ Ð¿ÑоизводиÑелÑноÑÑÑ. (ÐÐ»Ñ Ð¾ÑклÑÑÐµÐ½Ð¸Ñ ÑÑой ÑинÑ
Ñонной запиÑи можно добавиÑÑ Â«-» пеÑед именем Ñайла в Ñайле конÑигÑÑаÑии syslog.)
ÐбÑаÑиÑе внимание, ÑÑо вÑе опиÑаннÑе вÑÑе ÑеÑÐµÐ½Ð¸Ñ Ð¾Ð±ÐµÑпеÑиваÑÑ Ñоздание новÑÑ Ð¶ÑÑналÑнÑÑ Ñайлов ÑеÑез задаваемÑе пÑомежÑÑки вÑемени, но не Ñдаление ÑÑаÑÑÑ , ÑÑавÑÐ¸Ñ Ð±ÐµÑполезнÑми Ñайлов жÑÑналов. Ðозможно, Ð²Ñ Ð·Ð°Ñ Ð¾ÑиÑе ÑоздаÑÑ Ð·Ð°Ð´Ð°Ð½Ð¸Ðµ Ð´Ð»Ñ Ð¿ÐµÑиодиÑеÑкого ÑÐ´Ð°Ð»ÐµÐ½Ð¸Ñ ÑÑаÑÑÑ Ñайлов. ÐÑоме Ñого, Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе наÑÑÑоиÑÑ Ð¿ÑогÑÐ°Ð¼Ð¼Ñ ÑоÑаÑии Ñайлов Ñак, ÑÑÐ¾Ð±Ñ ÑÑаÑÑе ÑÐ°Ð¹Ð»Ñ Ð¶ÑÑналов ÑиклиÑеÑки пеÑезапиÑÑвалиÑÑ.
Также вам Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð¿Ð¾Ð»ÐµÐ·ÐµÐ½ pgBadger â инÑÑÑÑÐ¼ÐµÐ½Ñ Ð´Ð»Ñ Ñложного анализа Ñайлов жÑÑнала. ÐÑоме Ñого, check_postgres Ð¼Ð¾Ð¶ÐµÑ Ð¿Ð¾ÑÑлаÑÑ ÑÐ²ÐµÐ´Ð¾Ð¼Ð»ÐµÐ½Ð¸Ñ Ð² Nagios, когда в жÑÑнале поÑвлÑÑÑÑÑ Ð²Ð°Ð¶Ð½Ñе ÑообÑениÑ, а Ñакже пÑи обнаÑÑжении дÑÑÐ³Ð¸Ñ Ð½ÐµÑÑандаÑÑнÑÑ ÑиÑÑаÑий.