Reading logs directly from Postgres
In some environments, it's possible to access Postgres logs by reading them
directly through the Postgres pg_read_file
function. However, this function is
restricted to Postgres superusers, and since we recommend connecting to your
database from the collector with a restricted monitoring user, it's not directly
available. To work around this, we recommend creating the following helper
function as a superuser (note this needs to be an actual superuser, i.e. not
available on systems like Amazon RDS) and granting access to the monitoring user
(here we assume that user is called "pganalyze"):
CREATE SCHEMA IF NOT EXISTS pganalyze;
GRANT USAGE ON SCHEMA pganalyze TO pganalyze;
CREATE OR REPLACE FUNCTION pganalyze.read_log_file(log_filename text, read_offset bigint, read_length bigint) RETURNS text AS
$$
DECLARE
result text;
BEGIN
IF log_filename !~ '\A[\w\.-]+\Z' THEN
RAISE EXCEPTION 'invalid log filename';
END IF;
SELECT pg_catalog.pg_read_file(
pg_catalog.current_setting('data_directory') || '/' || pg_catalog.current_setting('log_directory') || '/' || log_filename,
read_offset,
read_length
) INTO result;
RETURN result;
END
$$ LANGUAGE plpgsql VOLATILE SECURITY DEFINER;
After creating the helper function, re-run the collector test to confirm logs can be accessed.
Couldn't find what you were looking for or want to talk about something specific?
Start a conversation with us →