From ea9e9725e47fc9fc763ca52566e8484a6b8d4f26 Mon Sep 17 00:00:00 2001 From: Aditya C S Date: Sun, 17 May 2020 17:43:55 +0530 Subject: [PATCH] Set JournalTarget Priority value to keyword --- docs/clients/promtail/configuration.md | 2 ++ pkg/promtail/targets/journaltarget.go | 25 ++++++++++++++++++++++ pkg/promtail/targets/journaltarget_test.go | 19 +++++++++++++++- 3 files changed, 45 insertions(+), 1 deletion(-) diff --git a/docs/clients/promtail/configuration.md b/docs/clients/promtail/configuration.md index 11d570335ff1..c9da1cbece2e 100644 --- a/docs/clients/promtail/configuration.md +++ b/docs/clients/promtail/configuration.md @@ -661,6 +661,8 @@ labels: [path: ] ``` +**Note**: priority label is available as both value and keyword. For example, if `priority` is `3` then the labels will be `__journal_priority` with a value `3` and `__journal_priority_keyword` with a corresponding keyword `err`. + ### syslog_config The `syslog_config` block configures a syslog listener allowing users to push diff --git a/pkg/promtail/targets/journaltarget.go b/pkg/promtail/targets/journaltarget.go index bbaa98af32be..d805a455afa2 100644 --- a/pkg/promtail/targets/journaltarget.go +++ b/pkg/promtail/targets/journaltarget.go @@ -322,7 +322,32 @@ func (t *JournalTarget) Stop() error { func makeJournalFields(fields map[string]string) map[string]string { result := make(map[string]string, len(fields)) for k, v := range fields { + if k == "PRIORITY" { + result[fmt.Sprintf("__journal_%s_%s", strings.ToLower(k), "keyword")] = makeJournalPriority(v) + } result[fmt.Sprintf("__journal_%s", strings.ToLower(k))] = v } return result } + +func makeJournalPriority(priority string) string { + switch priority { + case "0": + return "emerg" + case "1": + return "alert" + case "2": + return "crit" + case "3": + return "error" + case "4": + return "warning" + case "5": + return "notice" + case "6": + return "info" + case "7": + return "debug" + } + return priority +} diff --git a/pkg/promtail/targets/journaltarget_test.go b/pkg/promtail/targets/journaltarget_test.go index 873e30d3ded8..9253f7a26fe3 100644 --- a/pkg/promtail/targets/journaltarget_test.go +++ b/pkg/promtail/targets/journaltarget_test.go @@ -3,6 +3,7 @@ package targets import ( + "fmt" "io" "os" "testing" @@ -113,7 +114,7 @@ func TestJournalTarget(t *testing.T) { }) assert.NoError(t, err) } - + fmt.Println(client.messages) assert.Len(t, client.messages, 10) require.NoError(t, jt.Stop()) } @@ -299,3 +300,19 @@ func TestJournalTarget_Cursor_NotTooOld(t *testing.T) { require.Equal(t, r.config.Since, time.Duration(0)) require.Equal(t, r.config.Cursor, "foobar") } + +func Test_MakeJournalFields(t *testing.T) { + entryFields := map[string]string{ + "CODE_FILE": "journaltarget_test.go", + "OTHER_FIELD": "foobar", + "PRIORITY": "6", + } + receivedFields := makeJournalFields(entryFields) + expectedFields := map[string]string{ + "__journal_code_file": "journaltarget_test.go", + "__journal_other_field": "foobar", + "__journal_priority": "6", + "__journal_priority_keyword": "info", + } + assert.Equal(t, expectedFields, receivedFields) +}