mirror of
https://github.com/superseriousbusiness/gotosocial.git
synced 2025-12-15 17:23:01 -06:00
[feature] Add a request ID and include it in logs (#1476)
This adds a lightweight form of tracing to GTS. Each incoming request is assigned a Request ID which we then pass on and log in all our log lines. Any function that gets called downstream from an HTTP handler should now emit a requestID=value pair whenever it logs something. Co-authored-by: kim <grufwub@gmail.com>
This commit is contained in:
parent
b5993095fa
commit
68e6d08c76
118 changed files with 813 additions and 591 deletions
|
|
@ -147,6 +147,8 @@ type Configuration struct {
|
|||
AdminAccountPassword string `name:"password" usage:"the password to set for this account"`
|
||||
AdminTransPath string `name:"path" usage:"the path of the file to import from/export to"`
|
||||
AdminMediaPruneDryRun bool `name:"dry-run" usage:"perform a dry run and only log number of items eligible for pruning"`
|
||||
|
||||
RequestIDHeader string `name:"request-id-header" usage:"Header to extract the Request ID from. Eg.,'X-Request-Id'"`
|
||||
}
|
||||
|
||||
type CacheConfiguration struct {
|
||||
|
|
|
|||
|
|
@ -163,4 +163,6 @@ var Defaults = Configuration{
|
|||
},
|
||||
|
||||
AdminMediaPruneDryRun: true,
|
||||
|
||||
RequestIDHeader: "X-Request-Id",
|
||||
}
|
||||
|
|
|
|||
|
|
@ -140,6 +140,8 @@ func (s *ConfigState) AddServerFlags(cmd *cobra.Command) {
|
|||
cmd.Flags().Int(AdvancedRateLimitRequestsFlag(), cfg.AdvancedRateLimitRequests, fieldtag("AdvancedRateLimitRequests", "usage"))
|
||||
cmd.Flags().Int(AdvancedThrottlingMultiplierFlag(), cfg.AdvancedThrottlingMultiplier, fieldtag("AdvancedThrottlingMultiplier", "usage"))
|
||||
cmd.Flags().Duration(AdvancedThrottlingRetryAfterFlag(), cfg.AdvancedThrottlingRetryAfter, fieldtag("AdvancedThrottlingRetryAfter", "usage"))
|
||||
|
||||
cmd.Flags().String(RequestIDHeaderFlag(), cfg.RequestIDHeader, fieldtag("RequestIDHeader", "usage"))
|
||||
})
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -2977,3 +2977,28 @@ func GetAdminMediaPruneDryRun() bool { return global.GetAdminMediaPruneDryRun()
|
|||
|
||||
// SetAdminMediaPruneDryRun safely sets the value for global configuration 'AdminMediaPruneDryRun' field
|
||||
func SetAdminMediaPruneDryRun(v bool) { global.SetAdminMediaPruneDryRun(v) }
|
||||
|
||||
// GetRequestIDHeader safely fetches the Configuration value for state's 'RequestIDHeader' field
|
||||
func (st *ConfigState) GetRequestIDHeader() (v string) {
|
||||
st.mutex.Lock()
|
||||
v = st.config.RequestIDHeader
|
||||
st.mutex.Unlock()
|
||||
return
|
||||
}
|
||||
|
||||
// SetRequestIDHeader safely sets the Configuration value for state's 'RequestIDHeader' field
|
||||
func (st *ConfigState) SetRequestIDHeader(v string) {
|
||||
st.mutex.Lock()
|
||||
defer st.mutex.Unlock()
|
||||
st.config.RequestIDHeader = v
|
||||
st.reloadToViper()
|
||||
}
|
||||
|
||||
// RequestIDHeaderFlag returns the flag name for the 'RequestIDHeader' field
|
||||
func RequestIDHeaderFlag() string { return "request-id-header" }
|
||||
|
||||
// GetRequestIDHeader safely fetches the value for global configuration 'RequestIDHeader' field
|
||||
func GetRequestIDHeader() string { return global.GetRequestIDHeader() }
|
||||
|
||||
// SetRequestIDHeader safely sets the value for global configuration 'RequestIDHeader' field
|
||||
func SetRequestIDHeader(v string) { global.SetRequestIDHeader(v) }
|
||||
|
|
|
|||
11
internal/config/testdata/test.yaml
vendored
11
internal/config/testdata/test.yaml
vendored
|
|
@ -415,4 +415,13 @@ cache:
|
|||
gts:
|
||||
account-max-size: 99
|
||||
account-ttl: "3h"
|
||||
account-sweep-freq: "1s"
|
||||
account-sweep-freq: "1s"
|
||||
|
||||
##################################
|
||||
##### OBSERVABILITY SETTINGS #####
|
||||
##################################
|
||||
|
||||
# String. Header name to use to extract a request or trace ID from. Typically set by a
|
||||
# loadbalancer or proxy.
|
||||
# Default: "X-Request-Id"
|
||||
request-id-header: "X-Trace-Id"
|
||||
|
|
|
|||
|
|
@ -55,7 +55,7 @@ func Validate() error {
|
|||
// no problem
|
||||
break
|
||||
case "http":
|
||||
log.Warnf("%s was set to 'http'; this should *only* be used for debugging and tests!", ProtocolFlag())
|
||||
log.Warnf(nil, "%s was set to 'http'; this should *only* be used for debugging and tests!", ProtocolFlag())
|
||||
case "":
|
||||
errs = append(errs, fmt.Errorf("%s must be set", ProtocolFlag()))
|
||||
default:
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue