@@ -8,12 +8,13 @@ import (
88
99 "github.com/buger/jsonparser"
1010 gologfmt "github.com/go-logfmt/logfmt"
11+ "github.com/prometheus/client_golang/prometheus"
1112
1213 "github.com/grafana/loki/v3/pkg/logql/log/logfmt"
1314)
1415
1516type LineTokenizer interface {
16- Tokenize (line string , tokens []string , state interface {}) ([]string , interface {})
17+ Tokenize (line string , tokens []string , state interface {}, linesDropped * prometheus. CounterVec ) ([]string , interface {})
1718 Join (tokens []string , state interface {}) string
1819 Clone (tokens []string , state interface {}) ([]string , interface {})
1920}
@@ -56,8 +57,16 @@ func newPunctuationTokenizer(maxLineLength int) *punctuationTokenizer {
5657 }
5758}
5859
59- func (p * punctuationTokenizer ) Tokenize (line string , tokens []string , state interface {}) ([]string , interface {}) {
60+ func (p * punctuationTokenizer ) Tokenize (
61+ line string ,
62+ tokens []string ,
63+ state interface {},
64+ linesDropped * prometheus.CounterVec ,
65+ ) ([]string , interface {}) {
6066 if len (line ) > p .maxLineLength {
67+ if linesDropped != nil {
68+ linesDropped .WithLabelValues (LineTooLong ).Inc ()
69+ }
6170 return nil , nil
6271 }
6372
@@ -131,7 +140,12 @@ func (p *punctuationTokenizer) Clone(tokens []string, state interface{}) ([]stri
131140
132141type splittingTokenizer struct {}
133142
134- func (splittingTokenizer ) Tokenize (line string , tokens []string , state interface {}) ([]string , interface {}) {
143+ func (splittingTokenizer ) Tokenize (
144+ line string ,
145+ tokens []string ,
146+ state interface {},
147+ _ * prometheus.CounterVec ,
148+ ) ([]string , interface {}) {
135149 numEquals := strings .Count (line , "=" )
136150 numColons := strings .Count (line , ":" )
137151 numSpaces := strings .Count (line , " " )
@@ -209,8 +223,16 @@ func newLogfmtTokenizer(varReplace string, maxLineLength int) *logfmtTokenizer {
209223 }
210224}
211225
212- func (t * logfmtTokenizer ) Tokenize (line string , tokens []string , _ interface {}) ([]string , interface {}) {
226+ func (t * logfmtTokenizer ) Tokenize (
227+ line string ,
228+ tokens []string ,
229+ _ interface {},
230+ linesDropped * prometheus.CounterVec ,
231+ ) ([]string , interface {}) {
213232 if len (line ) > t .maxLineLength {
233+ if linesDropped != nil {
234+ linesDropped .WithLabelValues (LineTooLong ).Inc ()
235+ }
214236 return nil , nil
215237 }
216238
@@ -277,7 +299,12 @@ func newJSONTokenizer(varReplace string, maxLineLength int, fieldsToTokenize []s
277299 }
278300}
279301
280- func (t * jsonTokenizer ) Tokenize (line string , tokens []string , state interface {}) ([]string , interface {}) {
302+ func (t * jsonTokenizer ) Tokenize (
303+ line string ,
304+ tokens []string ,
305+ state interface {},
306+ linesDropped * prometheus.CounterVec ,
307+ ) ([]string , interface {}) {
281308 var found []byte
282309 for _ , key := range t .fieldsToTokenize {
283310 msg , ty , _ , err := jsonparser .Get (unsafeBytes (line ), key )
@@ -297,7 +324,7 @@ func (t *jsonTokenizer) Tokenize(line string, tokens []string, state interface{}
297324 return nil , nil
298325 }
299326
300- return t .punctuationTokenizer .Tokenize (foundLine , tokens , state )
327+ return t .punctuationTokenizer .Tokenize (foundLine , tokens , state , linesDropped )
301328}
302329
303330func (t * jsonTokenizer ) Join (tokens []string , state interface {}) string {
0 commit comments