Skip to content

Commit 6605979

Browse files
authored
feat: add apiserver FQDN to CNS log metadata in AKS
Signed-off-by: Evan Baker <[email protected]>
1 parent c670d53 commit 6605979

File tree

4 files changed

+46
-66
lines changed

4 files changed

+46
-66
lines changed

cns/logger/cnslogger.go

Lines changed: 41 additions & 62 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package logger
22

33
import (
44
"fmt"
5+
"maps"
56
"os"
67
"sync"
78

@@ -16,15 +17,17 @@ import (
1617
type CNSLogger struct {
1718
logger *log.Logger
1819
th aitelemetry.TelemetryHandle
19-
DisableTraceLogging bool
20-
DisableMetricLogging bool
21-
DisableEventLogging bool
20+
disableTraceLogging bool
21+
disableMetricLogging bool
22+
disableEventLogging bool
2223

2324
zapLogger *zap.Logger
2425

25-
m sync.RWMutex
26-
Orchestrator string
27-
NodeID string
26+
m sync.RWMutex
27+
metadata map[string]string
28+
// orchestrator string
29+
// nodeID string
30+
// apiserver string
2831
}
2932

3033
func NewCNSLogger(fileName string, logLevel, logTarget int, logDir string) (*CNSLogger, error) {
@@ -59,12 +62,11 @@ func (c *CNSLogger) InitAIWithIKey(aiConfig aitelemetry.AIConfig, instrumentatio
5962
c.logger.Errorf("Error initializing AI Telemetry:%v", err)
6063
return
6164
}
62-
6365
c.th = th
6466
c.logger.Printf("AI Telemetry Handle created")
65-
c.DisableMetricLogging = disableMetricLogging
66-
c.DisableTraceLogging = disableTraceLogging
67-
c.DisableEventLogging = disableEventLogging
67+
c.disableMetricLogging = disableMetricLogging
68+
c.disableTraceLogging = disableTraceLogging
69+
c.disableEventLogging = disableEventLogging
6870
}
6971

7072
// wait time for closing AI telemetry session.
@@ -80,83 +82,76 @@ func (c *CNSLogger) Close() {
8082
func (c *CNSLogger) SetContextDetails(orchestrator, nodeID string) {
8183
c.logger.Logf("SetContext details called with: %v orchestrator nodeID %v", orchestrator, nodeID)
8284
c.m.Lock()
83-
c.Orchestrator = orchestrator
84-
c.NodeID = nodeID
85+
c.metadata[orchestratorTypeKey] = orchestrator
86+
c.metadata[nodeIDKey] = nodeID
87+
c.m.Unlock()
88+
}
89+
90+
func (c *CNSLogger) SetAPIServer(apiserver string) {
91+
c.m.Lock()
92+
c.metadata[apiServerKey] = apiserver
8593
c.m.Unlock()
8694
}
8795

8896
func (c *CNSLogger) Printf(format string, args ...any) {
8997
c.logger.Logf(format, args...)
9098
c.zapLogger.Info(fmt.Sprintf(format, args...))
91-
92-
if c.th == nil || c.DisableTraceLogging {
99+
if c.th == nil || c.disableTraceLogging {
93100
return
94101
}
95-
96102
msg := fmt.Sprintf(format, args...)
97103
c.sendTraceInternal(msg)
98104
}
99105

100106
func (c *CNSLogger) Debugf(format string, args ...any) {
101107
c.logger.Debugf(format, args...)
102108
c.zapLogger.Debug(fmt.Sprintf(format, args...))
103-
104-
if c.th == nil || c.DisableTraceLogging {
109+
if c.th == nil || c.disableTraceLogging {
105110
return
106111
}
107-
108112
msg := fmt.Sprintf(format, args...)
109113
c.sendTraceInternal(msg)
110114
}
111115

112116
func (c *CNSLogger) Warnf(format string, args ...any) {
113117
c.logger.Warnf(format, args...)
114118
c.zapLogger.Warn(fmt.Sprintf(format, args...))
115-
116-
if c.th == nil || c.DisableTraceLogging {
119+
if c.th == nil || c.disableTraceLogging {
117120
return
118121
}
119-
120122
msg := fmt.Sprintf(format, args...)
121123
c.sendTraceInternal(msg)
122124
}
123125

124126
func (c *CNSLogger) Errorf(format string, args ...any) {
125127
c.logger.Errorf(format, args...)
126128
c.zapLogger.Error(fmt.Sprintf(format, args...))
127-
128-
if c.th == nil || c.DisableTraceLogging {
129+
if c.th == nil || c.disableTraceLogging {
129130
return
130131
}
131-
132132
msg := fmt.Sprintf(format, args...)
133133
c.sendTraceInternal(msg)
134134
}
135135

136136
func (c *CNSLogger) Request(tag string, request any, err error) {
137137
c.logger.Request(tag, request, err)
138-
139-
if c.th == nil || c.DisableTraceLogging {
138+
if c.th == nil || c.disableTraceLogging {
140139
return
141140
}
142-
143141
var msg string
144142
if err == nil {
145143
msg = fmt.Sprintf("[%s] Received %T %+v.", tag, request, request)
146144
} else {
147145
msg = fmt.Sprintf("[%s] Failed to decode %T %+v %s.", tag, request, request, err.Error())
148146
}
149-
150147
c.sendTraceInternal(msg)
151148
}
152149

153150
func (c *CNSLogger) Response(tag string, response any, returnCode types.ResponseCode, err error) {
154151
c.logger.Response(tag, response, int(returnCode), returnCode.String(), err)
155-
156-
if c.th == nil || c.DisableTraceLogging {
152+
if c.th == nil || c.disableTraceLogging {
157153
return
158154
}
159-
160155
var msg string
161156
switch {
162157
case err == nil && returnCode == 0:
@@ -166,17 +161,14 @@ func (c *CNSLogger) Response(tag string, response any, returnCode types.Response
166161
default:
167162
msg = fmt.Sprintf("[%s] Code:%s, %+v.", tag, returnCode.String(), response)
168163
}
169-
170164
c.sendTraceInternal(msg)
171165
}
172166

173167
func (c *CNSLogger) ResponseEx(tag string, request, response any, returnCode types.ResponseCode, err error) {
174168
c.logger.ResponseEx(tag, request, response, int(returnCode), returnCode.String(), err)
175-
176-
if c.th == nil || c.DisableTraceLogging {
169+
if c.th == nil || c.disableTraceLogging {
177170
return
178171
}
179-
180172
var msg string
181173
switch {
182174
case err == nil && returnCode == 0:
@@ -186,50 +178,37 @@ func (c *CNSLogger) ResponseEx(tag string, request, response any, returnCode typ
186178
default:
187179
msg = fmt.Sprintf("[%s] Code:%s, %+v, %+v.", tag, returnCode.String(), request, response)
188180
}
189-
190181
c.sendTraceInternal(msg)
191182
}
192183

193-
func (c *CNSLogger) getOrchestratorAndNodeID() (orch, nodeID string) {
194-
c.m.RLock()
195-
orch, nodeID = c.Orchestrator, c.NodeID
196-
c.m.RUnlock()
197-
return
198-
}
199-
200184
func (c *CNSLogger) sendTraceInternal(msg string) {
201-
orch, nodeID := c.getOrchestratorAndNodeID()
202-
203185
report := aitelemetry.Report{
204-
Message: msg,
205-
Context: nodeID,
206-
CustomDimensions: map[string]string{
207-
OrchestratorTypeStr: orch,
208-
NodeIDStr: nodeID,
209-
},
186+
Message: msg,
187+
Context: c.metadata[nodeIDKey],
188+
CustomDimensions: map[string]string{},
210189
}
211-
190+
c.m.RLock()
191+
maps.Copy(report.CustomDimensions, c.metadata)
192+
c.m.RUnlock()
212193
c.th.TrackLog(report)
213194
}
214195

215196
func (c *CNSLogger) LogEvent(event aitelemetry.Event) {
216-
if c.th == nil || c.DisableEventLogging {
197+
if c.th == nil || c.disableEventLogging {
217198
return
218199
}
219-
220-
orch, nodeID := c.getOrchestratorAndNodeID()
221-
event.Properties[OrchestratorTypeStr] = orch
222-
event.Properties[NodeIDStr] = nodeID
200+
c.m.RLock()
201+
maps.Copy(event.Properties, c.metadata)
202+
c.m.RUnlock()
223203
c.th.TrackEvent(event)
224204
}
225205

226206
func (c *CNSLogger) SendMetric(metric aitelemetry.Metric) {
227-
if c.th == nil || c.DisableMetricLogging {
207+
if c.th == nil || c.disableMetricLogging {
228208
return
229209
}
230-
231-
orch, nodeID := c.getOrchestratorAndNodeID()
232-
metric.CustomDimensions[OrchestratorTypeStr] = orch
233-
metric.CustomDimensions[NodeIDStr] = nodeID
210+
c.m.RLock()
211+
maps.Copy(metric.CustomDimensions, c.metadata)
212+
c.m.RUnlock()
234213
c.th.TrackMetric(metric)
235214
}

cns/logger/constants.go

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,14 +7,15 @@ const (
77
ConfigSnapshotMetricsStr = "ConfigSnapshot"
88

99
// Dimensions
10-
OrchestratorTypeStr = "OrchestratorType"
11-
NodeIDStr = "NodeID"
10+
orchestratorTypeKey = "OrchestratorType"
11+
nodeIDKey = "NodeID"
1212
HomeAZStr = "HomeAZ"
1313
IsAZRSupportedStr = "IsAZRSupported"
1414
HomeAZErrorCodeStr = "HomeAZErrorCode"
1515
HomeAZErrorMsgStr = "HomeAZErrorMsg"
1616
CNSConfigPropertyStr = "CNSConfiguration"
1717
CNSConfigMD5CheckSumPropertyStr = "CNSConfigurationMD5Checksum"
18+
apiServerKey = "APIServer"
1819

1920
// CNS NC Snspshot properties
2021
CnsNCSnapshotEventStr = "CNSNCSnapshot"

cns/metric/heartbeat.go

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,6 @@ func SendHeartBeat(ctx context.Context, heartbeatInterval time.Duration, homeAzM
3030
Value: 1.0,
3131
CustomDimensions: make(map[string]string),
3232
}
33-
3433
// add azr metrics when channel mode is direct
3534
if channelMode == cns.Direct {
3635
getHomeAzResp := homeAzMonitor.GetHomeAz(ctx)
@@ -41,7 +40,6 @@ func SendHeartBeat(ctx context.Context, heartbeatInterval time.Duration, homeAzM
4140
default:
4241
metric.CustomDimensions[logger.HomeAZErrorCodeStr] = getHomeAzResp.Response.ReturnCode.String()
4342
metric.CustomDimensions[logger.HomeAZErrorMsgStr] = getHomeAzResp.Response.Message
44-
4543
}
4644
}
4745
logger.SendMetric(metric)

cns/service/main.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -828,6 +828,8 @@ func main() {
828828
// Initialze state in if CNS is running in CRD mode
829829
// State must be initialized before we start HTTPRestService
830830
if config.ChannelMode == cns.CRD {
831+
// Add APIServer FQDN to Log metadata
832+
logger.Log.SetAPIServer(os.Getenv("KUBERNETES_SERVICE_HOST"))
831833

832834
// Check the CNI statefile mount, and if the file is empty
833835
// stub an empty JSON object

0 commit comments

Comments
 (0)