Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Added request logging for gRPC and HTTP in the server side #3361

Closed
wants to merge 55 commits into from
Closed

Added request logging for gRPC and HTTP in the server side #3361

wants to merge 55 commits into from

Conversation

yashrsharma44
Copy link
Contributor

@yashrsharma44 yashrsharma44 commented Oct 25, 2020

Fixes #2844

Signed-off-by: Yash Sharma [email protected]

  • I added CHANGELOG entry for this change.

Changes

  • Updated the grpc middleware version to use v2. We are using the last commit which contains the logging middleware. Once grpc_middleware releases the v2 we can add that as well.
  • Reuse the flag for enabling/disabling the start and finish of the requests from http-request logging.(Let me know if a separate flag is needed for gRPC).
  • This PR also works on the changes made by Initial setup for Request Logging in HTTP in the server side #2849 and adds in YAML configuration for the same.

Verification

Current Output -

ts=2020-10-25T06:06:52.994721959Z caller=level.go:63 name=sidecar-1 level=info service=gRPC/server component=sidecar protocol=grpc grpc.component=server grpc.service=thanos.Store grpc.method=Info grpc.method_type=unary grpc.start_time=2020-10-25T11:36:52+05:30 grpc.request.deadline=2020-10-25T11:36:57+05:30 grpc.code=OK peer.address=127.0.0.1:41926 grpc.request.request-id=01ENF5VS22Q4M9E326FPCTSJ0F grpc.time_ms=0.038 startedcall=(MISSING)
ts=2020-10-25T06:06:52.99524562Z caller=level.go:63 name=sidecar-1 level=info service=gRPC/server component=sidecar protocol=grpc grpc.component=server grpc.service=thanos.Store grpc.method=Info grpc.method_type=unary grpc.start_time=2020-10-25T11:36:52+05:30 grpc.request.deadline=2020-10-25T11:36:57+05:30 grpc.code=OK peer.address=127.0.0.1:41926 grpc.request.request-id=01ENF5VS22Q4M9E326FPCTSJ0F grpc.time_ms=0.566 finishedcall=(MISSING)
ts=2020-10-25T06:06:52.994721917Z caller=level.go:63 name=sidecar-2 level=info service=gRPC/server component=sidecar protocol=grpc grpc.component=server grpc.service=thanos.Store grpc.method=Info grpc.method_type=unary grpc.start_time=2020-10-25T11:36:52+05:30 grpc.request.deadline=2020-10-25T11:36:57+05:30 grpc.code=OK peer.address=127.0.0.1:33364 grpc.request.request-id=01ENF5VS22Z5WGC34BSQ3MFTE9 grpc.time_ms=0.037 startedcall=(MISSING)
ts=2020-10-25T06:06:52.995514182Z caller=level.go:63 name=sidecar-2 level=info service=gRPC/server component=sidecar protocol=grpc grpc.component=server grpc.service=thanos.Store grpc.method=Info grpc.method_type=unary grpc.start_time=2020-10-25T11:36:52+05:30 grpc.request.deadline=2020-10-25T11:36:57+05:30 grpc.code=OK peer.address=127.0.0.1:33364 grpc.request.request-id=01ENF5VS22Z5WGC34BSQ3MFTE9 grpc.time_ms=0.837 finishedcall=(MISSING)
ts=2020-10-25T06:06:52.995990248Z caller=level.go:63 name=sidecar-0 level=info service=gRPC/server component=sidecar protocol=grpc grpc.component=server grpc.service=thanos.Store grpc.method=Info grpc.method_type=unary grpc.start_time=2020-10-25T11:36:52+05:30 grpc.request.deadline=2020-10-25T11:36:57+05:30 grpc.code=OK peer.address=127.0.0.1:49516 grpc.request.request-id=01ENF5VS23BVAZF5ETRQDJ20Q2 grpc.time_ms=0.04 startedcall=(MISSING)
ts=2020-10-25T06:06:52.996181723Z caller=level.go:63 name=sidecar-0 level=info service=gRPC/server component=sidecar protocol=grpc grpc.component=server grpc.service=thanos.Store grpc.method=Info grpc.method_type=unary grpc.start_time=2020-10-25T11:36:52+05:30 grpc.request.deadline=2020-10-25T11:36:57+05:30 grpc.code=OK peer.address=127.0.0.1:49516 grpc.request.request-id=01ENF5VS23BVAZF5ETRQDJ20Q2 grpc.time_ms=0.231 finishedcall=(MISSING)

Current TODO

  • Setup a flag for using the grpc request logging

cc @kakkoyun 🤓

@yashrsharma44
Copy link
Contributor Author

There seems to be a (MISSING) field, I have pushed the changes in the grpc_middleware, that should be fixed in the subsequent release.

@yashrsharma44
Copy link
Contributor Author

yashrsharma44 commented Oct 27, 2020

The test failures are unrelated to this PR.

@kakkoyun
Copy link
Member

@yashrsharma44 Needs a rebase.

@bwplotka bwplotka self-requested a review November 16, 2020 16:39
Copy link
Member

@bwplotka bwplotka left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks amazing generally just some nits.

Overall:

  • Let's be consistent and create helpers for all components on one go.
  • don't introduce non relevant changes (CHANGELOG reformat)
  • Good work (:

CHANGELOG.md Outdated Show resolved Hide resolved
CHANGELOG.md Outdated Show resolved Hide resolved
CHANGELOG.md Outdated Show resolved Hide resolved
cmd/thanos/receive.go Outdated Show resolved Hide resolved
cmd/thanos/receive.go Outdated Show resolved Hide resolved
cmd/thanos/sidecar.go Outdated Show resolved Hide resolved
cmd/thanos/sidecar.go Outdated Show resolved Hide resolved
pkg/server/grpc/grpc.go Outdated Show resolved Hide resolved
pkg/server/grpc/grpc.go Outdated Show resolved Hide resolved
pkg/server/grpc/option.go Outdated Show resolved Hide resolved
@yashrsharma44
Copy link
Contributor Author

yashrsharma44 commented Nov 17, 2020

I have used a logMap to map the options from the string flag into the options for the logging middleware. Since from the flag, I only get a string response, so is there any clean way you suggest for configuring the options?

@yashrsharma44
Copy link
Contributor Author

Test Failures are unrelated

Copy link
Member

@bwplotka bwplotka left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looking good 👍
Some thoughts during offline disscussions.

cmd/thanos/receive.go Outdated Show resolved Hide resolved
cmd/thanos/sidecar.go Outdated Show resolved Hide resolved
@yashrsharma44
Copy link
Contributor Author

Feature Request: Would be nice if we add in the error message as well - https://cloud-native.slack.com/archives/CK5RSSC10/p1606754524365300

@yashrsharma44
Copy link
Contributor Author

yashrsharma44 commented Dec 8, 2020

Currently, we have deployed a basic request logging for HTTP(#2849) and it seems to be working well. However, with the new addition of YAML config for request logging, it raises a question, how should we warn the user for the deprecating flag for request logging for HTTP.

  • Should we add this message at the start of the help of log.request.decision - Deprecation Warning - This flag would be soon deprecated, and replaced with YAML config...
  • Or maybe add in a warning log when the flag is used, that we would deprecate this in the next release.
    Need ideas for warning users.

Another issue is that, would we allow configuration from both the flags and YAML? Or one?

WDYT? cc @yeya24 @bwplotka @kakkoyun

@yashrsharma44
Copy link
Contributor Author

yashrsharma44 commented Dec 15, 2020

Added the YAML configuration for request logging - Sample Config File - https://gist.github.com/yashrsharma44/02f5765c5710dd09ce5d14e854f22825
TODO:

  • Add a deprecation warning for using the old flag for request logging
  • Complete the todos in the code
  • Added some more fields in the HTTP logging.
  • Add regex for the Method, Service and Path field
  • Discuss which components need to have the request logging enabled.

@yashrsharma44
Copy link
Contributor Author

Feature Request: Would be nice if we add in the error message as well - https://cloud-native.slack.com/archives/CK5RSSC10/p1606754524365300

Currently, only gRPC provides logging of error, HTTP returns a status code for the same. If we want to log the error for HTTP, we need it from the response body, which is kind of blocking process and not worth it. I have added more fields for HTTP logs, which would help in finding the component which sends in the error.

cmd/thanos/store.go Outdated Show resolved Hide resolved
pkg/logging/grpc.go Outdated Show resolved Hide resolved
pkg/logging/options.go Outdated Show resolved Hide resolved
pkg/logging/options.go Outdated Show resolved Hide resolved
Copy link
Member

@bwplotka bwplotka left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks super nice, thanks.

Generally lgtm, just minor nits.

cmd/thanos/compact.go Outdated Show resolved Hide resolved
cmd/thanos/compact.go Outdated Show resolved Hide resolved
cmd/thanos/main.go Outdated Show resolved Hide resolved
cmd/thanos/sidecar.go Outdated Show resolved Hide resolved
cmd/thanos/store.go Outdated Show resolved Hide resolved
pkg/logging/options.go Outdated Show resolved Hide resolved
pkg/logging/options.go Outdated Show resolved Hide resolved
pkg/logging/yaml_parser.go Outdated Show resolved Hide resolved
pkg/logging/yaml_parser.go Show resolved Hide resolved
pkg/logging/yaml_parser.go Outdated Show resolved Hide resolved
@yashrsharma44 yashrsharma44 changed the title Added request logging for gRPC Added request logging for gRPC and HTTP in the server side Dec 18, 2020
@yashrsharma44
Copy link
Contributor Author

yashrsharma44 commented Dec 18, 2020

Documentation of this new feature would be tracked in this issue #3623 😎 💪

Copy link
Member

@bwplotka bwplotka left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nice! Some suggestions still.

High level suggestion:

  • Please test things manually. I don't think flag filling works in current version at all
  • Make sure we don't use panics or break consistency. Why suddenly we return error different request logging flag?
  • Request logging is important but not the core of Thanos functionality. So why warning about deprecation of this flag on every Thanos run, even though only small portion is using this feature?

cmd/thanos/compact.go Outdated Show resolved Hide resolved
cmd/thanos/main.go Outdated Show resolved Hide resolved
cmd/thanos/query.go Outdated Show resolved Hide resolved
cmd/thanos/query.go Outdated Show resolved Hide resolved
Copy link
Member

@bwplotka bwplotka left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

As above

@yashrsharma44
Copy link
Contributor Author

Can you elaborate on this -

Please test things manually. I don't think flag filling works in current version at all

@yashrsharma44
Copy link
Contributor Author

Make sure we don't use panics or break consistency. Why suddenly we return error different request logging flag?

Didn't we agree on panic quickly if configs not correct?

scripts/cfggen/main.go Outdated Show resolved Hide resolved
scripts/cfggen/main.go Outdated Show resolved Hide resolved
Copy link
Member

@bwplotka bwplotka left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nice.

Looks super close, but some things to improve still 🤗

CHANGELOG.md Outdated Show resolved Hide resolved
cmd/thanos/query.go Outdated Show resolved Hide resolved
cmd/thanos/query.go Outdated Show resolved Hide resolved
cmd/thanos/query.go Outdated Show resolved Hide resolved
cmd/thanos/query.go Outdated Show resolved Hide resolved
cmd/thanos/query.go Outdated Show resolved Hide resolved
cmd/thanos/query.go Outdated Show resolved Hide resolved
cmd/thanos/query.go Outdated Show resolved Hide resolved
cmd/thanos/query_frontend.go Outdated Show resolved Hide resolved
cmd/thanos/query_frontend.go Outdated Show resolved Hide resolved
@yashrsharma44
Copy link
Contributor Author

PTAL whenever free 😎 @kakkoyun @bwplotka

Signed-off-by: Yash Sharma <[email protected]>
Signed-off-by: Yash Sharma <[email protected]>
Signed-off-by: Yash Sharma <[email protected]>
Signed-off-by: Yash Sharma <[email protected]>
Signed-off-by: Yash Sharma <[email protected]>
Signed-off-by: Yash Sharma <[email protected]>
Signed-off-by: Yash Sharma <[email protected]>
Signed-off-by: Yash Sharma <[email protected]>
Signed-off-by: Yash Sharma <[email protected]>
@yashrsharma44
Copy link
Contributor Author

I had deleted the fork of Thanos for some reason, hence I am not able to push changes to this PR.
Created another PR to track the changes - #3862

auto-merge was automatically disabled March 2, 2021 07:04

Pull request was closed

@@ -141,6 +144,17 @@ func registerQuery(app *extkingpin.App) {
return errors.Errorf("Address %s is duplicated for --rule flag.", dup)
}

// Check if the YAML configuration of request.logging is correct. Exit early if error.
HTTPlogOpts, err := logging.DecideHTTPFlag(*reqLogDecision, reqLogConfig)
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Function should have verb in name. Parse Configure would be better as you suggested offline.

cmd/thanos/query.go Outdated Show resolved Hide resolved
kakkoyun pushed a commit that referenced this pull request Mar 4, 2021
…TP in the server side (#3862)

* Added request logging for grpc

Signed-off-by: Yash Sharma <[email protected]>

Added request logging for grpc

Signed-off-by: Yash Sharma <[email protected]>

changed the logging option to log start and finish of a call

Signed-off-by: Yash Sharma <[email protected]>

added flags for enabling/disabling request logging for grpc

Signed-off-by: Yash Sharma <[email protected]>

nitpicks due to make docs

Signed-off-by: Yash Sharma <[email protected]>

added a changelog

Signed-off-by: Yash Sharma <[email protected]>

nitpicks

Signed-off-by: Yash Sharma <[email protected]>

configure option for logging

Signed-off-by: Yash Sharma <[email protected]>

changelog nitpick

Signed-off-by: Yash Sharma <[email protected]>

added changelog

Signed-off-by: Yash Sharma <[email protected]>

more nitpicks

Signed-off-by: Yash Sharma <[email protected]>

renamed requestLoggingDecision to reqLogDecision and some nitcpicks

Signed-off-by: Yash Sharma <[email protected]>

Added the check of reusing the request-id if present

Signed-off-by: Yash Sharma <[email protected]>

make docs nitpick

Signed-off-by: Yash Sharma <[email protected]>

Added the default level of debug and error codes for logging

Signed-off-by: Yash Sharma <[email protected]>

Add the levels for logging

Signed-off-by: Yash Sharma <[email protected]>

Added a YAML flag for request logging config

Signed-off-by: Yash Sharma <[email protected]>

Changed the setup signature to accept a reqlog param to be shared among all the components of Thanos. Changed the signature of decision for logging, and pushed the new yaml config among all the middleware

Signed-off-by: Yash Sharma <[email protected]>

Updated the grpc middleware package to include the latest signature of the decider

Signed-off-by: Yash Sharma <[email protected]>

Added new config files for YAML parsing

Signed-off-by: Yash Sharma <[email protected]>

changelog nitpick

Signed-off-by: Yash Sharma <[email protected]>

linting nitpicks

Signed-off-by: Yash Sharma <[email protected]>

Added deprecation warning and added a function to reroute logging through one of the flags

Signed-off-by: Yash Sharma <[email protected]>

docs nitpicks

Signed-off-by: Yash Sharma <[email protected]>

bug fix for reverse logging condition

Signed-off-by: Yash Sharma <[email protected]>

fixed some bugs for evaluating the options and added a warning for deprecating flag of log.request.decision

Signed-off-by: Yash Sharma <[email protected]>

removed gophercloud from go.mod

Signed-off-by: Yash Sharma <[email protected]>

self addressed comments

Signed-off-by: Yash Sharma <[email protected]>

* Added a dummy variable which was used by the, to be deprecated flag of request logging
* Added a warning that request logging is disabled for tools
* Removed a flag which is to be deprecated in the next release

Signed-off-by: Yash Sharma <[email protected]>

* Added a fail-first approach if the request logging is incorrectly enabled.

Signed-off-by: Yash Sharma <[email protected]>

Renaming of functions

Signed-off-by: Yash Sharma <[email protected]>

Removed indentation and simplified else conditions

Signed-off-by: Yash Sharma <[email protected]>

break down the yaml struct for grpc and http into its individual configs

Signed-off-by: Yash Sharma <[email protected]>

make docs nits

Signed-off-by: Yash Sharma <[email protected]>

modify changelog

Signed-off-by: Yash Sharma <[email protected]>

modified the signature of setup function to the original one

Signed-off-by: Yash Sharma <[email protected]>

removed the message for the flags

Signed-off-by: Yash Sharma <[email protected]>

make docs nits

Signed-off-by: Yash Sharma <[email protected]>

Added auto generation scripts for req logging

Signed-off-by: Yash Sharma <[email protected]>

removed request logging from compactor

Signed-off-by: Yash Sharma <[email protected]>

remove verbose warn messages

Signed-off-by: Yash Sharma <[email protected]>

changed pass by value to pass by reference

Signed-off-by: Yash Sharma <[email protected]>

removed occurence of os.Exit

Signed-off-by: Yash Sharma <[email protected]>

make docs nits

Signed-off-by: Yash Sharma <[email protected]>

revert compact.go to master

Signed-off-by: Yash Sharma <[email protected]>

rename ReqlogConfig to RequestConfig

Signed-off-by: Yash Sharma <[email protected]>

Added a validation check so that all the configs are checked before a component starts

Signed-off-by: Yash Sharma <[email protected]>

nits

Signed-off-by: Yash Sharma <[email protected]>

Modify the message for request.logging flag for having a default value as null

Signed-off-by: Yash Sharma <[email protected]>

remove a line from the flags

Signed-off-by: Yash Sharma <[email protected]>

remove a deceptive comment

Signed-off-by: Yash Sharma <[email protected]>

changed the var name to small caps

Signed-off-by: Yash Sharma <[email protected]>

change errors.Errorf to Wrapf for providing context to error message

Signed-off-by: Yash Sharma <[email protected]>

move changelog entry to unreleased tag

Signed-off-by: Yash Sharma <[email protected]>

changed request.logging to `request.logging` in the flags

Signed-off-by: Yash Sharma <[email protected]>

* added changelog entry

Signed-off-by: Yash Sharma <[email protected]>

* changed changelog

Signed-off-by: Yash Sharma <[email protected]>

* renamed decidehttpflag and decidegrpcflag

Signed-off-by: Yash Sharma <[email protected]>

* addressed reviewers comments

Signed-off-by: Yash Sharma <[email protected]>
andrejbranch pushed a commit to andrejbranch/thanos that referenced this pull request Mar 11, 2021
…PC and HTTP in the server side (thanos-io#3862)

* Added request logging for grpc

Signed-off-by: Yash Sharma <[email protected]>

Added request logging for grpc

Signed-off-by: Yash Sharma <[email protected]>

changed the logging option to log start and finish of a call

Signed-off-by: Yash Sharma <[email protected]>

added flags for enabling/disabling request logging for grpc

Signed-off-by: Yash Sharma <[email protected]>

nitpicks due to make docs

Signed-off-by: Yash Sharma <[email protected]>

added a changelog

Signed-off-by: Yash Sharma <[email protected]>

nitpicks

Signed-off-by: Yash Sharma <[email protected]>

configure option for logging

Signed-off-by: Yash Sharma <[email protected]>

changelog nitpick

Signed-off-by: Yash Sharma <[email protected]>

added changelog

Signed-off-by: Yash Sharma <[email protected]>

more nitpicks

Signed-off-by: Yash Sharma <[email protected]>

renamed requestLoggingDecision to reqLogDecision and some nitcpicks

Signed-off-by: Yash Sharma <[email protected]>

Added the check of reusing the request-id if present

Signed-off-by: Yash Sharma <[email protected]>

make docs nitpick

Signed-off-by: Yash Sharma <[email protected]>

Added the default level of debug and error codes for logging

Signed-off-by: Yash Sharma <[email protected]>

Add the levels for logging

Signed-off-by: Yash Sharma <[email protected]>

Added a YAML flag for request logging config

Signed-off-by: Yash Sharma <[email protected]>

Changed the setup signature to accept a reqlog param to be shared among all the components of Thanos. Changed the signature of decision for logging, and pushed the new yaml config among all the middleware

Signed-off-by: Yash Sharma <[email protected]>

Updated the grpc middleware package to include the latest signature of the decider

Signed-off-by: Yash Sharma <[email protected]>

Added new config files for YAML parsing

Signed-off-by: Yash Sharma <[email protected]>

changelog nitpick

Signed-off-by: Yash Sharma <[email protected]>

linting nitpicks

Signed-off-by: Yash Sharma <[email protected]>

Added deprecation warning and added a function to reroute logging through one of the flags

Signed-off-by: Yash Sharma <[email protected]>

docs nitpicks

Signed-off-by: Yash Sharma <[email protected]>

bug fix for reverse logging condition

Signed-off-by: Yash Sharma <[email protected]>

fixed some bugs for evaluating the options and added a warning for deprecating flag of log.request.decision

Signed-off-by: Yash Sharma <[email protected]>

removed gophercloud from go.mod

Signed-off-by: Yash Sharma <[email protected]>

self addressed comments

Signed-off-by: Yash Sharma <[email protected]>

* Added a dummy variable which was used by the, to be deprecated flag of request logging
* Added a warning that request logging is disabled for tools
* Removed a flag which is to be deprecated in the next release

Signed-off-by: Yash Sharma <[email protected]>

* Added a fail-first approach if the request logging is incorrectly enabled.

Signed-off-by: Yash Sharma <[email protected]>

Renaming of functions

Signed-off-by: Yash Sharma <[email protected]>

Removed indentation and simplified else conditions

Signed-off-by: Yash Sharma <[email protected]>

break down the yaml struct for grpc and http into its individual configs

Signed-off-by: Yash Sharma <[email protected]>

make docs nits

Signed-off-by: Yash Sharma <[email protected]>

modify changelog

Signed-off-by: Yash Sharma <[email protected]>

modified the signature of setup function to the original one

Signed-off-by: Yash Sharma <[email protected]>

removed the message for the flags

Signed-off-by: Yash Sharma <[email protected]>

make docs nits

Signed-off-by: Yash Sharma <[email protected]>

Added auto generation scripts for req logging

Signed-off-by: Yash Sharma <[email protected]>

removed request logging from compactor

Signed-off-by: Yash Sharma <[email protected]>

remove verbose warn messages

Signed-off-by: Yash Sharma <[email protected]>

changed pass by value to pass by reference

Signed-off-by: Yash Sharma <[email protected]>

removed occurence of os.Exit

Signed-off-by: Yash Sharma <[email protected]>

make docs nits

Signed-off-by: Yash Sharma <[email protected]>

revert compact.go to master

Signed-off-by: Yash Sharma <[email protected]>

rename ReqlogConfig to RequestConfig

Signed-off-by: Yash Sharma <[email protected]>

Added a validation check so that all the configs are checked before a component starts

Signed-off-by: Yash Sharma <[email protected]>

nits

Signed-off-by: Yash Sharma <[email protected]>

Modify the message for request.logging flag for having a default value as null

Signed-off-by: Yash Sharma <[email protected]>

remove a line from the flags

Signed-off-by: Yash Sharma <[email protected]>

remove a deceptive comment

Signed-off-by: Yash Sharma <[email protected]>

changed the var name to small caps

Signed-off-by: Yash Sharma <[email protected]>

change errors.Errorf to Wrapf for providing context to error message

Signed-off-by: Yash Sharma <[email protected]>

move changelog entry to unreleased tag

Signed-off-by: Yash Sharma <[email protected]>

changed request.logging to `request.logging` in the flags

Signed-off-by: Yash Sharma <[email protected]>

* added changelog entry

Signed-off-by: Yash Sharma <[email protected]>

* changed changelog

Signed-off-by: Yash Sharma <[email protected]>

* renamed decidehttpflag and decidegrpcflag

Signed-off-by: Yash Sharma <[email protected]>

* addressed reviewers comments

Signed-off-by: Yash Sharma <[email protected]>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Request/Response Logging for HTTP/gRPC
3 participants