Capturing both IP address and hostname in the log

Started by Tefft, Michael J9 months ago6 messages
#1Tefft, Michael J
Michael.J.Tefft@snapon.com

The documentation for log_hostname says:
log_hostname (boolean)
By default, connection log messages only show the IP address of the connecting host. Turning this parameter on causes logging of the host name as well. Note that depending on your host name resolution setup this might impose a non-negligible performance penalty. This parameter can only be set in the postgresql.conf file or on the server command line.

https://www.postgresql.org/docs/14/runtime-config-logging.html

We have set log_hostname ON and we get hostname reported - but we do not get IP address. We would like to capture both.
Since the doc says "Turning this parameter on causes logging of the host name *as well*" we were hoping we would capture both, but we are not getting what we expect.

Is there a way to capture both IP address and hostname in the log messages? Or must we choose "one or the ootehr"?

Thanks,
Mike Tefft

(We are using PG14 and PG16, but the docs say the same thing, as does PG17)

#2Adrian Klaver
adrian.klaver@aklaver.com
In reply to: Tefft, Michael J (#1)
Re: Capturing both IP address and hostname in the log

On 4/10/25 05:22, Tefft, Michael J wrote:

The documentation for log_hostname says:

log_hostname (boolean)

By default, connection log messages only show the IP address of the
connecting host. Turning this parameter on causes logging of the host
name as well. Note that depending on your host name resolution setup
this might impose a non-negligible performance penalty. This parameter
can only be set in the postgresql.conf file or on the server command line.

https://www.postgresql.org/docs/14/runtime-config-logging.html
<https://www.postgresql.org/docs/14/runtime-config-logging.html&gt;

We have set log_hostname ON and we get hostname reported – but we do not
get IP address. We would like to capture both.

Since the doc says “Turning this parameter on causes logging of the host
name **as well**” we were hoping we would capture both, but we are not
getting what we expect.

Is there a way to capture both IP address and hostname in the log
messages? Or must we choose “one or the ootehr”?

I see the same thing. It seems either or.

Thanks,

Mike Tefft

(We are using PG14 and PG16, but the docs say the same thing, as does PG17)

--
Adrian Klaver
adrian.klaver@aklaver.com

#3Tom Lane
tgl@sss.pgh.pa.us
In reply to: Adrian Klaver (#2)
Re: Capturing both IP address and hostname in the log

[ moving to -hackers ]

Adrian Klaver <adrian.klaver@aklaver.com> writes:

On 4/10/25 05:22, Tefft, Michael J wrote:

We have set log_hostname ON and we get hostname reported – but we do not
get IP address. We would like to capture both.
Is there a way to capture both IP address and hostname in the log
messages? Or must we choose “one or the ootehr”?

I see the same thing. It seems either or.

Melanie recently committed a patch (9219093ca) that purports to
generalize our log_connections logging ability:

Convert the boolean log_connections GUC into a list GUC comprised of the
connection aspects to log.

This gives users more control over the volume and kind of connection
logging.

The current log_connections options are 'receipt', 'authentication', and
'authorization'. The empty string disables all connection logging. 'all'
enables all available connection logging.

I wonder if it'd be reasonable to remove the separate log_hostname GUC
and fold it into this infrastructure, and while doing so make it
possible to log either or both of the client IP address and hostname.
(For that matter, I think there is interest in being able to capture
the server IP address too, cf 3516ea768. You might wish to log the
IP address only once, not in every log line.)

regards, tom lane

#4David G. Johnston
david.g.johnston@gmail.com
In reply to: Tefft, Michael J (#1)
Re: Capturing both IP address and hostname in the log

On Thu, Apr 10, 2025 at 5:22 AM Tefft, Michael J <Michael.J.Tefft@snapon.com>
wrote:

The documentation for log_hostname says:

log_hostname (boolean)

By default, connection log messages only show the IP address of the
connecting host. Turning this parameter on causes logging of the host name
as well. Note that depending on your host name resolution setup this might
impose a non-negligible performance penalty. This parameter can only be set
in the postgresql.conf file or on the server command line.

https://www.postgresql.org/docs/14/runtime-config-logging.html

Yeah, the wording really should be more like:

diff --git a/doc/src/sgml/config.sgml b/doc/src/sgml/config.sgml
index fea683cb49..c545fee6c9 100644
--- a/doc/src/sgml/config.sgml
+++ b/doc/src/sgml/config.sgml
@@ -7614,10 +7614,11 @@ local0.*    /var/log/postgresql
       </term>
       <listitem>
        <para>
-        By default, connection log messages only show the IP address of the
-        connecting host. Turning this parameter on causes logging of the
-        host name as well.  Note that depending on your host name
resolution
-        setup this might impose a non-negligible performance penalty.
+        By default, for TCP/IP-originated connections, the identifier of
the host
+        making the connection is its IP address.  Turning this parameter
on tells
+        the system to record the resolved host name instead.  Note that
depending
+        on your host name resolution setup this might impose a
non-negligible
+        performance penalty.
         This parameter can only be set in the
<filename>postgresql.conf</filename>
         file or on the server command line.
        </para>

Both the connection logging routine and log_line_prefix %h / %r simply
report the "identifier of the host making the connection".

David J.

#5David G. Johnston
david.g.johnston@gmail.com
In reply to: Tom Lane (#3)
Re: Capturing both IP address and hostname in the log

On Thu, Apr 10, 2025 at 9:00 AM Tom Lane <tgl@sss.pgh.pa.us> wrote:

[ moving to -hackers ]

Adrian Klaver <adrian.klaver@aklaver.com> writes:

On 4/10/25 05:22, Tefft, Michael J wrote:

We have set log_hostname ON and we get hostname reported – but we do

not

get IP address. We would like to capture both.
Is there a way to capture both IP address and hostname in the log
messages? Or must we choose “one or the ootehr”?

I see the same thing. It seems either or.

cross-posting to -hackers now that it is here.

v19 plans aside the existing wording is incorrect (just here, other places
correctly point out the either-or aspect of the output).

The wording really should be more like:

diff --git a/doc/src/sgml/config.sgml b/doc/src/sgml/config.sgml
index fea683cb49..c545fee6c9 100644
--- a/doc/src/sgml/config.sgml
+++ b/doc/src/sgml/config.sgml
@@ -7614,10 +7614,11 @@ local0.*    /var/log/postgresql
       </term>
       <listitem>
        <para>
-        By default, connection log messages only show the IP address of the
-        connecting host. Turning this parameter on causes logging of the
-        host name as well.  Note that depending on your host name
resolution
-        setup this might impose a non-negligible performance penalty.
+        By default, for TCP/IP-originated connections, the identifier of
the host
+        making the connection is its IP address.  Turning this parameter
on tells
+        the system to record the resolved host name instead.  Note that
depending
+        on your host name resolution setup this might impose a
non-negligible
+        performance penalty.
         This parameter can only be set in the
<filename>postgresql.conf</filename>
         file or on the server command line.
        </para>

Both the connection logging routine and log_line_prefix %h / %r simply
report the "identifier of the host making the connection".

David J.

#6Melanie Plageman
melanieplageman@gmail.com
In reply to: Tom Lane (#3)
Re: Capturing both IP address and hostname in the log

On Thu, Apr 10, 2025 at 12:00 PM Tom Lane <tgl@sss.pgh.pa.us> wrote:

Melanie recently committed a patch (9219093ca) that purports to
generalize our log_connections logging ability:

Convert the boolean log_connections GUC into a list GUC comprised of
the
connection aspects to log.

This gives users more control over the volume and kind of connection
logging.

The current log_connections options are 'receipt', 'authentication',
and
'authorization'. The empty string disables all connection logging.
'all'
enables all available connection logging.

I wonder if it'd be reasonable to remove the separate log_hostname GUC
and fold it into this infrastructure, and while doing so make it
possible to log either or both of the client IP address and hostname.
(For that matter, I think there is interest in being able to capture
the server IP address too, cf 3516ea768. You might wish to log the
IP address only once, not in every log line.)

Seems reasonable to me. I'd be willing to move such a thing forward but
would want to see the feature requestors' specific desired behavior (e.g.
an option for each of hostname, client ip address, and server address?).
Also, if they write a WIP patch at least to config.sgml, it would also help
me gauge how serious of a request it is or, rather, how satisfactory a
solution a log_connections option is.

Perhaps there are people who absolutely love log_hostname and don't want to
see it deprecated as a separate GUC?

I also think folding in log_disconnections as a "disconnection" option
makes sense. I do have some anxiety that a very long list of options will
anger users -- but I suppose that ship mostly sailed.

- Melanie