Log request_id for each api call

Registered by Maho Koshiya

Blueprint [1] is up for review 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-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": "keystone",
     "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 (keystone or
                 keystone-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-keystoneclient 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:keystoneclient.auth.identity.v2 http:POST call to keystone for
http://127.0.0.1:5000/v2.0/tokens
used request id req-9dd9ffc4-e3cf-4d76-8f2a-1fc3abd29d20

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

2. python-keystoneclient is used in another component

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

DEBUG keystoneclient.session
GET call to 'keystone' for GET http://192.168.56.5:35357/v3/auth/tokens
used request_id 'req-33821d15-22fb-4939-a210-70921e6937d3'

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

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

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

Blueprint information

Status:
Complete
Approver:
Steve Martinelli
Priority:
Medium
Drafter:
Maho Koshiya
Direction:
Approved
Assignee:
Maho Koshiya
Definition:
New
Series goal:
None
Implementation:
Implemented
Milestone target:
None
Started by
Steve Martinelli
Completed by
Steve Martinelli

Related branches

Sprints

Whiteboard

(stevemar) This was fixed by https://review.openstack.org/#/c/392442/

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

Addressed by: https://review.openstack.org/352858
    Log request-id for each api call

(?)

Work Items

This blueprint contains Public information 
Everyone can see this information.

Subscribers

No subscribers.