This repository has been archived by the owner on Apr 26, 2024. It is now read-only.
-
-
Notifications
You must be signed in to change notification settings - Fork 2.1k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
lnav config for synpase logs (#14953)
- Loading branch information
David Robertson
authored
Feb 1, 2023
1 parent
73403d5
commit 1958f9d
Showing
3 changed files
with
115 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
Add an [lnav](https://lnav.org) config file for Synapse logs to `/contrib/lnav`. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,47 @@ | ||
# `lnav` config for Synapse logs | ||
|
||
[lnav](https://lnav.org/) is a log-viewing tool. It is particularly useful when | ||
you need to interleave multiple log files, or for exploring a large log file | ||
with regex filters. The downside is that it is not as ubiquitous as tools like | ||
`less`, `grep`, etc. | ||
|
||
This directory contains an `lnav` [log format definition]( | ||
https://docs.lnav.org/en/v0.10.1/formats.html#defining-a-new-format | ||
) for Synapse logs as | ||
emitted by Synapse with the default [logging configuration]( | ||
https://matrix-org.github.io/synapse/latest/usage/configuration/config_documentation.html#log_config | ||
). It supports lnav 0.10.1 because that's what's packaged by my distribution. | ||
|
||
This should allow lnav: | ||
|
||
- to interpret timestamps, allowing log interleaving; | ||
- to interpret log severity levels, allowing colouring by log level(!!!); | ||
- to interpret request IDs, allowing you to skip through a specific request; and | ||
- to highlight room, event and user IDs in logs. | ||
|
||
See also https://gist.github.com/benje/e2ab750b0a81d11920d83af637d289f7 for a | ||
similar example. | ||
|
||
## Example | ||
|
||
[![asciicast](https://asciinema.org/a/556133.svg)](https://asciinema.org/a/556133) | ||
|
||
## Tips | ||
|
||
- `lnav -i /path/to/synapse/checkout/contrib/lnav/synapse-log-format.json` | ||
- `lnav my_synapse_log_file` or `lnav synapse_log_files.*`, etc. | ||
- `lnav --help` for CLI help. | ||
|
||
Within lnav itself: | ||
|
||
- `?` for help within lnav itself. | ||
- `q` to quit. | ||
- `/` to search a-la `less` and `vim`, then `n` and `N` to continue searching | ||
down and up. | ||
- Use `o` and `O` to skip through logs based on the request ID (`POST-1234`, or | ||
else the value of the [`request_id_header`]( | ||
https://matrix-org.github.io/synapse/latest/usage/configuration/config_documentation.html?highlight=request_id_header#listeners | ||
) header). This may get confused if the same request ID is repeated among | ||
multiple files or process restarts. | ||
- ??? | ||
- Profit |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,67 @@ | ||
{ | ||
"$schema": "https://lnav.org/schemas/format-v1.schema.json", | ||
"synapse": { | ||
"title": "Synapse logs", | ||
"description": "Logs output by Synapse, a Matrix homesever, under its default logging config.", | ||
"regex": { | ||
"log": { | ||
"pattern": ".*(?<timestamp>\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}:\\d{2},\\d{3}) - (?<logger>.+) - (?<lineno>\\d+) - (?<level>\\w+) - (?<context>.+) - (?<body>.*)" | ||
} | ||
}, | ||
"json": false, | ||
"timestamp-field": "timestamp", | ||
"timestamp-format": [ | ||
"%Y-%m-%d %H:%M:%S,%L" | ||
], | ||
"level-field": "level", | ||
"body-field": "body", | ||
"opid-field": "context", | ||
"level": { | ||
"critical": "CRITICAL", | ||
"error": "ERROR", | ||
"warning": "WARNING", | ||
"info": "INFO", | ||
"debug": "DEBUG" | ||
}, | ||
"sample": [ | ||
{ | ||
"line": "my-matrix-server-generic-worker-4 | 2023-01-27 09:47:09,818 - synapse.replication.tcp.client - 381 - ERROR - PUT-32992 - Timed out waiting for stream receipts", | ||
"level": "error" | ||
}, | ||
{ | ||
"line": "my-matrix-server-federation-sender-1 | 2023-01-25 20:56:20,995 - synapse.http.matrixfederationclient - 709 - WARNING - federation_transaction_transmission_loop-3 - {PUT-O-3} [example.com] Request failed: PUT matrix://example.com/_matrix/federation/v1/send/1674680155797: HttpResponseException('403: Forbidden')", | ||
"level": "warning" | ||
}, | ||
{ | ||
"line": "my-matrix-server | 2023-01-25 20:55:54,433 - synapse.storage.databases - 66 - INFO - main - [database config 'master']: Checking database server", | ||
"level": "info" | ||
}, | ||
{ | ||
"line": "my-matrix-server | 2023-01-26 15:08:40,447 - synapse.access.http.8008 - 460 - INFO - PUT-74929 - 0.0.0.0 - 8008 - {@alice:example.com} Processed request: 0.011sec/0.000sec (0.000sec, 0.000sec) (0.001sec/0.008sec/3) 2B 200 \"PUT /_matrix/client/r0/user/%40alice%3Atexample.com/account_data/im.vector.setting.breadcrumbs HTTP/1.0\" \"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Element/1.11.20 Chrome/108.0.5359.179 Electron/22.0.3 Safari/537.36\" [0 dbevts]", | ||
"level": "info" | ||
} | ||
], | ||
"highlights": { | ||
"user_id": { | ||
"pattern": "(@|%40)[^:% ]+(:|%3A)[\\[\\]0-9a-zA-Z.\\-:]+(:\\d{1,5})?(?<!:)", | ||
"underline": true | ||
}, | ||
"room_id": { | ||
"pattern": "(!|%21)[^:% ]+(:|%3A)[\\[\\]0-9a-zA-Z.\\-:]+(:\\d{1,5})?(?<!:)", | ||
"underline": true | ||
}, | ||
"room_alias": { | ||
"pattern": "(#|%23)[^:% ]+(:|%3A)[\\[\\]0-9a-zA-Z.\\-:]+(:\\d{1,5})?(?<!:)", | ||
"underline": true | ||
}, | ||
"event_id_v1_v2": { | ||
"pattern": "(\\$|%25)[^:% ]+(:|%3A)[\\[\\]0-9a-zA-Z.\\-:]+(:\\d{1,5})?(?<!:)", | ||
"underline": true | ||
}, | ||
"event_id_v3_plus": { | ||
"pattern": "(\\$|%25)([A-Za-z0-9+/_]|-){43}", | ||
"underline": true | ||
} | ||
} | ||
} | ||
} |