Skip to content

Commit

Permalink
feat: log ASN (#8309)
Browse files Browse the repository at this point in the history
* feat: log ip_src_asnum in nginx

* feat: log asn from gunicorn
  • Loading branch information
jennifer-richards authored Dec 6, 2024
1 parent b255883 commit 167752b
Show file tree
Hide file tree
Showing 3 changed files with 10 additions and 3 deletions.
5 changes: 4 additions & 1 deletion dev/build/gunicorn.conf.py
Original file line number Diff line number Diff line change
Expand Up @@ -64,18 +64,21 @@ def _describe_request(req):
start and end of handling a request. E.g., do not include a timestamp.
"""
client_ip = "-"
asn = "-"
cf_ray = "-"
for header, value in req.headers:
header = header.lower()
if header == "cf-connecting-ip":
client_ip = value
elif header == "x-ip-src-asnum":
asn = value
elif header == "cf-ray":
cf_ray = value
if req.query:
path = f"{req.path}?{req.query}"
else:
path = req.path
return f"{req.method} {path} (client_ip={client_ip}, cf_ray={cf_ray})"
return f"{req.method} {path} (client_ip={client_ip}, asn={asn}, cf_ray={cf_ray})"


def pre_request(worker, req):
Expand Down
1 change: 1 addition & 0 deletions ietf/utils/jsonlogger.py
Original file line number Diff line number Diff line change
Expand Up @@ -31,4 +31,5 @@ def add_fields(self, log_record, record, message_dict):
log_record.setdefault("cf_connecting_ip", record.args["{cf-connecting-ip}i"])
log_record.setdefault("cf_connecting_ipv6", record.args["{cf-connecting-ipv6}i"])
log_record.setdefault("cf_ray", record.args["{cf-ray}i"])
log_record.setdefault("asn", record.args["{x-ip-src-asnum}i"])
log_record.setdefault("is_authenticated", record.args["{x-datatracker-is-authenticated}o"])
7 changes: 5 additions & 2 deletions k8s/nginx-logging.conf
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
# Define JSON log format - must be loaded before config that references it
# Define JSON log format - must be loaded before config that references it.
# Note that each line is fully enclosed in single quotes. Commas in arrays are
# intentionally inside the single quotes.
log_format ietfjson escape=json
'{'
'"time":"$${keepempty}time_iso8601",'
Expand All @@ -16,5 +18,6 @@ log_format ietfjson escape=json
'"x_forwarded_proto":"$${keepempty}http_x_forwarded_proto",'
'"cf_connecting_ip":"$${keepempty}http_cf_connecting_ip",'
'"cf_connecting_ipv6":"$${keepempty}http_cf_connecting_ipv6",'
'"cf_ray":"$${keepempty}http_cf_ray"'
'"cf_ray":"$${keepempty}http_cf_ray",'
'"asn":"$${keepempty}http_x_ip_src_asnum"'
'}';

0 comments on commit 167752b

Please sign in to comment.