Log request_id for each api call

Registered by Takashi Natsume

Blueprint [1] was implemented in the last Mitaka release cycle which returns request_id back to the caller as per design proposed in the cross-project specs [2].
Now, in step 2, we would like to log x-compute-request-id (x-openstack-request-id) returned in the response header using the python logging module.

Following log message will be logged in debug logging level.

LOG.debug("%(method)s call to '%(my_service_name)s' for %(my_url)s "
          "used request_id '%(response_request_id)s'",
          {"method": resp.request.method,
           "my_service_name": "nova",
           "my_url": resp.url, "response_request_id": request_id})

method: HTTP request method (GET/POST/PUT/DELETE etc.)
my_service_name: Name of service processing the request (nova or nova-api in this case)
my_url: Request URL with endpoint
response_request_id: request_id extracted from response header

The log messages logged by the log handlers would be dependant on how the root loggers are configured.

1. python-novaclient used as a shell command:

In this case, the root loggers will be configured in the client itself.
So if --debug flag is passed in the command, then following log message will be shown on console:-

DEBUG (session:195) GET call to nova for http://192.168.0.15:8774/v2.1/a52704800acf42619eb643784184a5f7/servers/detail used request id req-9dd9ffc4-e3cf-4d76-8f2a-1fc3abd29d20

Nothing will be logged on console if --debug flag is not set.

2. python-novaclient is used in another component (e.g. cinder, heat, etc.)

In this case, when another component calls apis of Nova service using python-novaclient, then following log message for get server api will be logged in another component's log file:-

DEBUG novaclient.v2.client [req-0569e5c5-ddbe-42a2-b07c-4f4afb1926c9 demo demo]
GET call to 'nova' for http://192.168.0.15:8774/v2.1/a88dcfadf1cb4b3482b43c411c886c88/servers/9c22c964-69c9-4aa4-b1aa-b95ca4763291
used request_id 'req-33821d15-22fb-4939-a210-70921e6937d3'

In the above log message, you will see both nova (callee) and the caller's request_ids are logged in the same log message.
If the root loggers are configured in the caller and the same will be used by the client as well.
If the caller uses oslo.log library, it internally logs request_id using ContextFormatter configured in the "formatter_context" section of the caller's configuration file.

* The blueprint[3] for python-cinderclient has already been approved for Newton.

References:
[1] https://blueprints.launchpad.net/nova/+spec/return-request-id-to-caller
[2] http://specs.openstack.org/openstack/openstack-specs/specs/return-request-id.html
[3] https://blueprints.launchpad.net/python-cinderclient/+spec/log-request-id

Mailing List discussion:
http://lists.openstack.org/pipermail/openstack-dev/2016-March/088001.html

Blueprint information

Status:
Complete
Approver:
Matt Riedemann
Priority:
Low
Drafter:
Takashi Natsume
Direction:
Approved
Assignee:
Takashi Natsume
Definition:
Approved
Series goal:
Accepted for newton
Implementation:
Implemented
Milestone target:
None
Started by
Takashi Natsume
Completed by
Takashi Natsume

Related branches

Sprints

Whiteboard

This was approved during the newton summit. -- mriedem 20160429

Gerrit topic: https://review.openstack.org/#q,topic:bp/log-request-id,n,z

Addressed by: https://review.openstack.org/322664
    Log request_id for each api call

(?)

Work Items

This blueprint contains Public information 
Everyone can see this information.

Subscribers

No subscribers.