Skip to content

Commit b446b27

Browse files
committed
INST-21677 - Tailing logs through k8s container
1 parent a1f47b6 commit b446b27

7 files changed

Lines changed: 70 additions & 14 deletions

File tree

helm/templates/configmap-provider.yaml

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,10 @@ data:
7575
"name": "disable_provider_autoupdate",
7676
"value": "{{ not $.Values.autoUpgrade }}"
7777
},
78+
{
79+
"name": "log_level",
80+
"value": {{ $.Values.logLevel | toJson }}
81+
},
7882
{{- if .http_timeout_seconds }}
7983
{
8084
"name": "http_timeout_seconds",
@@ -136,6 +140,8 @@ data:
136140
value: "{{ .gcp.jfrog_oidc_provider_name }}"
137141
- name: disable_provider_autoupdate
138142
value: "{{ not $.Values.autoUpgrade }}"
143+
- name: log_level
144+
value: "{{ $.Values.logLevel }}"
139145
{{- if .http_timeout_seconds }}
140146
- name: http_timeout_seconds
141147
value: "{{ .http_timeout_seconds }}"
@@ -162,6 +168,8 @@ data:
162168
value: "{{ .azure.jfrog_oidc_provider_name }}"
163169
- name: disable_provider_autoupdate
164170
value: "{{ not $.Values.autoUpgrade }}"
171+
- name: log_level
172+
value: "{{ $.Values.logLevel }}"
165173
{{- if .http_timeout_seconds }}
166174
- name: http_timeout_seconds
167175
value: "{{ .http_timeout_seconds }}"

helm/templates/configmap-setup.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -112,7 +112,7 @@ data:
112112
nsenter -t 1 -m -p -- systemctl status kubelet
113113
114114
# Logs of credential provider for 30 seconds
115-
nsenter -t 1 -m -p -- timeout 30s tail -n 30 -f /var/log/jfrog-credential-provider.log || true
115+
nsenter -t 1 -m -p -- timeout 30s tail -n 30 -f /var/log/jfrog-credentials-provider/jfrog-credentials-provider.log || true
116116
117117
{{- end }}
118118

helm/templates/daemonset.yaml

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -76,9 +76,19 @@ spec:
7676
{{- toYaml . | nindent 12 }}
7777
{{- end }}
7878
containers:
79-
- name: jfrog-credential-provider-injector-pause
79+
- name: jfrog-credentials-provider-main
80+
{{- if .Values.containerLogging.enabled }}
81+
image: {{ include "jfrog-credential-provider.initContainerImage" . }}
82+
imagePullPolicy: {{ .Values.initContainer.image.pullPolicy }}
83+
command: ["sh", "-c", "tail -F /var/log/jfrog-credentials-provider/jfrog-credentials-provider.log"]
84+
volumeMounts:
85+
- name: jfrog-log-dir
86+
mountPath: /var/log/jfrog-credentials-provider
87+
readOnly: true
88+
{{- else }}
8089
image: {{ include "jfrog-credential-provider.pauseImage" . }}
8190
imagePullPolicy: {{ .Values.image.pullPolicy }}
91+
{{- end }}
8292
{{- with .Values.resources }}
8393
resources:
8494
{{- toYaml . | nindent 12 }}
@@ -109,6 +119,12 @@ spec:
109119
- name: {{ include "jfrog-credential-provider.fullname" . }}-config
110120
configMap:
111121
name: {{ include "jfrog-credential-provider.fullname" . }}-config
122+
{{- if .Values.containerLogging.enabled }}
123+
- name: jfrog-log-dir
124+
hostPath:
125+
path: /var/log/jfrog-credentials-provider
126+
type: DirectoryOrCreate
127+
{{- end }}
112128
{{- if .Values.customVolumes }}
113129
{{- .Values.customVolumes | nindent 8 }}
114130
{{- end }}

helm/templates/validations.yaml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,3 +58,9 @@
5858
{{- end }}
5959
{{- end }}
6060

61+
{{/* Validate logLevel is a supported value */}}
62+
{{- $logLevel := upper .Values.logLevel }}
63+
{{- if and (ne $logLevel "INFO") (ne $logLevel "DEBUG") }}
64+
{{- fail (printf "\nERROR: Invalid logLevel %q. Supported values are \"INFO\" or \"DEBUG\"." .Values.logLevel) }}
65+
{{- end }}
66+

helm/values.yaml

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,16 @@ resources: {}
2020
# Enable automatic upgrade of the credential provider binary
2121
autoUpgrade: false
2222

23+
# Log level for the credential provider binary
24+
# Supported values: "INFO" (default), "DEBUG"
25+
logLevel: "INFO"
26+
27+
# Container logging configuration
28+
# When enabled, the DaemonSet main container tails the credential provider log file
29+
# from the host, making logs accessible via kubectl logs
30+
containerLogging:
31+
enabled: false
32+
2333
# Init container configuration
2434
initContainer:
2535
image:

internal/logger/logger.go

Lines changed: 27 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -15,51 +15,67 @@
1515
package logger
1616

1717
import (
18-
"log"
18+
"fmt"
19+
"log/slog"
1920
"os"
21+
"path/filepath"
22+
"strings"
2023
)
2124

22-
const logFileLocation = "/var/log/jfrog-credential-provider.log"
23-
const logPrefix = "[JFROG CREDENTIALS PROVIDER] "
25+
const logFileLocation = "/var/log/jfrog-credentials-provider/jfrog-credentials-provider.log"
2426

2527
type Logger struct {
26-
Logger *log.Logger
28+
Logger *slog.Logger
2729
}
2830

2931
func NewLogger() (*Logger, error) {
32+
if err := os.MkdirAll(filepath.Dir(logFileLocation), 0755); err != nil {
33+
return nil, err
34+
}
3035
logFile, err := os.OpenFile(logFileLocation, os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0644)
3136
if err != nil {
3237
return nil, err
3338
}
39+
40+
level := slog.LevelInfo
41+
if strings.EqualFold(os.Getenv("log_level"), "debug") {
42+
level = slog.LevelDebug
43+
}
44+
45+
handler := slog.NewJSONHandler(logFile, &slog.HandlerOptions{
46+
AddSource: true,
47+
Level: level,
48+
})
49+
3450
return &Logger{
35-
Logger: log.New(logFile, logPrefix, log.Ldate|log.Ltime|log.Lshortfile),
51+
Logger: slog.New(handler),
3652
}, nil
3753
}
3854

3955
func (l *Logger) Info(message interface{}) {
40-
l.Logger.Println("[INFO] " + formatMessage(message))
56+
l.Logger.Info(toStr(message))
4157
}
4258

4359
func (l *Logger) Debug(message interface{}) {
44-
l.Logger.Println("[DEBUG] " + formatMessage(message))
60+
l.Logger.Debug(toStr(message))
4561
}
4662

4763
func (l *Logger) Error(message interface{}) {
48-
l.Logger.Println("[ERROR] " + formatMessage(message))
64+
l.Logger.Error(toStr(message))
4965
}
5066

5167
func (l *Logger) Exit(message interface{}, code int) {
52-
l.Logger.Println("[EXIT] " + formatMessage(message))
68+
l.Logger.Error(toStr(message))
5369
os.Exit(code)
5470
}
5571

56-
func formatMessage(message interface{}) string {
72+
func toStr(message interface{}) string {
5773
switch v := message.(type) {
5874
case string:
5975
return v
6076
case error:
6177
return v.Error()
6278
default:
63-
return "unknown message type"
79+
return fmt.Sprintf("%v", v)
6480
}
6581
}

internal/provider/provider.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ import (
3434
const (
3535
defaultSecretTTL = "18000" // 5 hours
3636
defaultHTTPTimeout = 10 * time.Second
37-
logFileLocation = "/var/log/jfrog-credential-provider.log" // "/var/log/jfrog-credential-provider.log" // used for debug: "jfrog-credential-provider.log"
37+
logFileLocation = "/var/log/jfrog-credentials-provider/jfrog-credentials-provider.log"
3838
logPrefix = "[JFROG CREDENTIALS PROVIDER] "
3939
)
4040

0 commit comments

Comments
 (0)