mirror of
https://github.com/pomerium/pomerium.git
synced 2025-07-31 07:19:16 +02:00
config: add customization options for logging
This commit is contained in:
parent
d2e8ecc7da
commit
aa4ed135ae
17 changed files with 879 additions and 548 deletions
|
@ -3,6 +3,7 @@ package controlplane
|
|||
import (
|
||||
"strings"
|
||||
|
||||
envoy_data_accesslog_v3 "github.com/envoyproxy/go-control-plane/envoy/data/accesslog/v3"
|
||||
envoy_service_accesslog_v3 "github.com/envoyproxy/go-control-plane/envoy/service/accesslog/v3"
|
||||
"github.com/rs/zerolog"
|
||||
|
||||
|
@ -30,28 +31,51 @@ func (srv *Server) StreamAccessLogs(stream envoy_service_accesslog_v3.AccessLogS
|
|||
} else {
|
||||
evt = log.Info(stream.Context())
|
||||
}
|
||||
// common properties
|
||||
evt = evt.Str("service", "envoy")
|
||||
evt = evt.Str("upstream-cluster", entry.GetCommonProperties().GetUpstreamCluster())
|
||||
// request properties
|
||||
evt = evt.Str("method", entry.GetRequest().GetRequestMethod().String())
|
||||
evt = evt.Str("authority", entry.GetRequest().GetAuthority())
|
||||
evt = evt.Str("path", stripQueryString(reqPath))
|
||||
evt = evt.Str("user-agent", entry.GetRequest().GetUserAgent())
|
||||
evt = evt.Str("referer", stripQueryString(entry.GetRequest().GetReferer()))
|
||||
evt = evt.Str("forwarded-for", entry.GetRequest().GetForwardedFor())
|
||||
evt = evt.Str("request-id", entry.GetRequest().GetRequestId())
|
||||
// response properties
|
||||
dur := entry.CommonProperties.TimeToLastDownstreamTxByte.AsDuration()
|
||||
evt = evt.Dur("duration", dur)
|
||||
evt = evt.Uint64("size", entry.Response.ResponseBodyBytes)
|
||||
evt = evt.Uint32("response-code", entry.GetResponse().GetResponseCode().GetValue())
|
||||
evt = evt.Str("response-code-details", entry.GetResponse().GetResponseCodeDetails())
|
||||
for _, field := range srv.currentConfig.Load().Config.Options.GetAccessLogFields() {
|
||||
evt = populateLogEvent(field, evt, entry)
|
||||
}
|
||||
evt.Msg("http-request")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func populateLogEvent(
|
||||
field log.AccessLogField,
|
||||
evt *zerolog.Event,
|
||||
entry *envoy_data_accesslog_v3.HTTPAccessLogEntry,
|
||||
) *zerolog.Event {
|
||||
switch field {
|
||||
case log.AccessLogFieldAuthority:
|
||||
return evt.Str(string(field), entry.GetRequest().GetAuthority())
|
||||
case log.AccessLogFieldDuration:
|
||||
dur := entry.CommonProperties.TimeToLastDownstreamTxByte.AsDuration()
|
||||
return evt.Dur(string(field), dur)
|
||||
case log.AccessLogFieldForwardedFor:
|
||||
return evt.Str(string(field), entry.GetRequest().GetForwardedFor())
|
||||
case log.AccessLogFieldMethod:
|
||||
return evt.Str(string(field), entry.GetRequest().GetRequestMethod().String())
|
||||
case log.AccessLogFieldPath:
|
||||
return evt.Str(string(field), stripQueryString(entry.GetRequest().GetPath()))
|
||||
case log.AccessLogFieldReferer:
|
||||
return evt.Str(string(field), stripQueryString(entry.GetRequest().GetReferer()))
|
||||
case log.AccessLogFieldRequestID:
|
||||
return evt.Str(string(field), entry.GetRequest().GetRequestId())
|
||||
case log.AccessLogFieldResponseCode:
|
||||
return evt.Uint32(string(field), entry.GetResponse().GetResponseCode().GetValue())
|
||||
case log.AccessLogFieldResponseCodeDetails:
|
||||
return evt.Str(string(field), entry.GetResponse().GetResponseCodeDetails())
|
||||
case log.AccessLogFieldSize:
|
||||
return evt.Uint64(string(field), entry.Response.ResponseBodyBytes)
|
||||
case log.AccessLogFieldUpstreamCluster:
|
||||
return evt.Str(string(field), entry.GetCommonProperties().GetUpstreamCluster())
|
||||
case log.AccessLogFieldUserAgent:
|
||||
return evt.Str(string(field), entry.GetRequest().GetUserAgent())
|
||||
default:
|
||||
return evt.Str(string(field), "<<UNKNOWN ACCESS LOG FIELD>>")
|
||||
}
|
||||
}
|
||||
|
||||
func stripQueryString(str string) string {
|
||||
if idx := strings.Index(str, "?"); idx != -1 {
|
||||
str = str[:idx]
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue