On Fri, Mar 18, 2016 at 12:53 PM, Robert Coup <robert.coup@anonymised.com>
wrote:
One small extra note, it could also be useful to have also have the
request id in the response header, so that
if I have a problematic request in the client, I can go and look for the
id and then grep the logs for just the log
lines pertaining to it.
Well, if it's generally useful I could simplify the approach a bit:
- Add a global config option with a header to look at for inbound
requests (ie. X-Request-ID or whatever). For Geoserver instances without a
reverse proxy generating UUIDs sitting in front, they would just create a
UUID for each request like precent.
- *Always* add the request ID to the logging/monitor/sql contexts (and
pass it through to WPS/etc as discussed below), and have the Dispatcher set
it up initially.
- *Always* return the request ID as a response header (either using
the configured header name, or defaulting to GeoServer-Request-ID).
Always returning a header would add 60 bytes (using the above name) to
every response... how do people feel about that?
I'm not particularly worried about it... just look at how many headers GWC
sets on returned tiles.
*Personally* I think OGC service responses are verbose enough that it'd
be unlikely to make any difference to users, and the ability to trace
requests and debug issues quickly and effectively massively trumps that
overhead. But most admins won't use it most of the time, so I'm interested
in others views. We could always make it disable-able if only a few admins
might want to optimise and are prepared to run with a custom
applicationContext config.
Admins rarely touch app context, but are normally happy to play with system
variables. GeoServerExtensions.getProperty allows to pick a variable from
env, system, and servlet context, which allows a range of options.
Presumably changing the default behaviour and adding a new config setting
would need a GSIP?
Hum... it's unclear to me if a GSIP is needed for this, or not, since no
programming interface or user visible change is performed but... I guess it
would not hurt either?
Personally I'm happy with some conversation on the ml, let's hear what the
others think.
- Add it to the logging MDC context in the same custom callback
MDC... ? Ah:
https://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/MDC.html
Yeah... I'm a little fuzzy on exactly which logging system GeoServer uses
(I don't spend enough time in Java), but the docs says it uses
java.util.logging but has log4j underneath (so MDC is available)? slf4j
looks like it wraps MDC for java.util.logging (
http://www.slf4j.org/api/org/slf4j/MDC.html) and that seems to be in the
POMs too... so I think I should be able to get it working somehow
¯\_(ツ)_/¯
slf4j is not really used, it's there because some libs we depend onto are
using it.
GeoServer by default uses a java logging to log4j bridge coming from
GeoTools, but there is a system var
one can set to just use java logging instead.
See:
https://github.com/geoserver/geoserver/blob/master/src/main/src/main/java/org/geoserver/logging/LoggingInitializer.java
https://github.com/geoserver/geoserver/blob/master/src/main/src/main/java/org/geoserver/logging/LoggingUtils.java
and:
https://github.com/geotools/geotools/tree/master/modules/library/metadata/src/main/java/org/geotools/util/logging
Sounds good, I hadn't thought about WPS. From my quick reading of the
docs/code:
- &request=Execute will start processing, and creates an ExecutionID
- If the RequestID from the Execute request is attached to the
background processing via ThreadLocalTransfer & potentially via the
Hazelcast clustering, logs/etc can keep being associated with the initial
Execute user request if that's useful
- For Async requests any Dismiss/Status/Result requests require the
ExecutionID to be passed in. They'll each have their own RequestIDs as well.
- WPS ExecutionIDs should probably be put into the MDC/monitor/SQL/etc
contexts too if users want to track/log/use them for similar reasons.
Thinking further, it would also be good to pass request IDs to any
upstream cascaded WFS/WMS servers too, continuing the goal that a single
end-user request can be traced/followed as far as possible. Though I
haven't looked at *how* yet 
Yes, that's something I've seen doing in service oriented architectures, so
that a single id is passed around across services.
Doing so might not be so easy, but have a look at
https://github.com/geotools/geotools/blob/master/modules/library/main/src/main/java/org/geotools/data/ows/HTTPClient.java
its implementations and how they are used by the WMS client, and... maybe
by the wfs client too (don't really know what the
wfs-ng store is doing internally, you'll have to check)
Cheers
Andrea
--
GeoServer Professional Services from the experts! Visit
http://goo.gl/it488V for more information.
Ing. Andrea Aime
@geowolf
Technical Lead
GeoSolutions S.A.S.
Via di Montramito 3/A
55054 Massarosa (LU)
phone: +39 0584 962313
fax: +39 0584 1660272
mob: +39 339 8844549
http://www.geo-solutions.it
http://twitter.com/geosolutions_it
*AVVERTENZE AI SENSI DEL D.Lgs. 196/2003*
Le informazioni contenute in questo messaggio di posta elettronica e/o
nel/i file/s allegato/i sono da considerarsi strettamente riservate. Il
loro utilizzo è consentito esclusivamente al destinatario del messaggio,
per le finalità indicate nel messaggio stesso. Qualora riceviate questo
messaggio senza esserne il destinatario, Vi preghiamo cortesemente di
darcene notizia via e-mail e di procedere alla distruzione del messaggio
stesso, cancellandolo dal Vostro sistema. Conservare il messaggio stesso,
divulgarlo anche in parte, distribuirlo ad altri soggetti, copiarlo, od
utilizzarlo per finalità diverse, costituisce comportamento contrario ai
principi dettati dal D.Lgs. 196/2003.
The information in this message and/or attachments, is intended solely for
the attention and use of the named addressee(s) and may be confidential or
proprietary in nature or covered by the provisions of privacy act
(Legislative Decree June, 30 2003, no.196 - Italy's New Data Protection
Code).Any use not in accord with its purpose, any disclosure, reproduction,
copying, distribution, or either dissemination, either whole or partial, is
strictly forbidden except previous formal approval of the named
addressee(s). If you are not the intended recipient, please contact
immediately the sender by telephone, fax or e-mail and delete the
information in this message that has been received in error. The sender
does not give any warranty or accept liability as the content, accuracy or
completeness of sent messages and accepts no responsibility for changes
made after they were sent or for other risks which arise as a result of
e-mail transmission, viruses, etc.
-------------------------------------------------------