-
Notifications
You must be signed in to change notification settings - Fork 3.4k
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
feat: Drain uses different tokenizer based on log format #13384
Conversation
for !t.dec.EOL() && t.dec.ScanKeyval() { | ||
key := t.dec.Key() | ||
if isVariableField(key) { | ||
tokens = append(tokens, unsafeString(t.dec.Key()), t.varReplace) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Interesting that this works - I thought that ScanKeyval reused those values after every call but it seems tthat it doesn't?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
It returns either a copy if it needs to decode quoted bytes or just a subslice.
buf := bytes.NewBuffer(make([]byte, 0, 1024)) | ||
enc := gologfmt.NewEncoder(buf) | ||
for i := 0; i < len(tokens); i += 2 { | ||
k, v := tokens[i], tokens[i+1] |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
How does this handle multi-word values? Are they a single token?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
correct they are.
What this PR does / why we need it:
This replace the tokenizer with special one depending on the log format. It also discard json logs.
I also improve performance by removing most of allocations
Which issue(s) this PR fixes:
Fixes #
Special notes for your reviewer:
Checklist
CONTRIBUTING.md
guide (required)feat
PRs are unlikely to be accepted unless a case can be made for the feature actually being a bug fix to existing behavior.docs/sources/setup/upgrade/_index.md
production/helm/loki/Chart.yaml
and updateproduction/helm/loki/CHANGELOG.md
andproduction/helm/loki/README.md
. Example PRdeprecated-config.yaml
anddeleted-config.yaml
files respectively in thetools/deprecated-config-checker
directory. Example PR