Skip to content

Commit df012bc

Browse files
authored
Adding AI metrics for NPM (#475)
* Adding AI metrics for NPM * addressing tamilmani's comments
1 parent 19ac791 commit df012bc

File tree

7 files changed

+65
-49
lines changed

7 files changed

+65
-49
lines changed

Makefile

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,7 @@ CNS_BUILD_DIR = $(BUILD_DIR)/cns
7979
NPM_BUILD_DIR = $(BUILD_DIR)/npm
8080
NPM_TELEMETRY_DIR = $(NPM_BUILD_DIR)/telemetry
8181
CNI_AI_ID = 5515a1eb-b2bc-406a-98eb-ba462e6f0411
82+
NPM_AI_ID = 014c22bd-4107-459e-8475-67909e96edcb
8283
ACN_PACKAGE_PATH = github.com/Azure/azure-container-networking
8384

8485
# Containerized build parameters.
@@ -180,7 +181,7 @@ $(CNS_BUILD_DIR)/azure-cns$(EXE_EXT): $(CNSFILES)
180181
# Build the Azure NPM plugin.
181182
$(NPM_BUILD_DIR)/azure-npm$(EXE_EXT): $(NPMFILES)
182183
go build -v -o $(NPM_BUILD_DIR)/azure-vnet-telemetry$(EXE_EXT) -ldflags "-X main.version=$(VERSION) -s -w" $(CNI_TELEMETRY_DIR)/*.go
183-
go build -v -o $(NPM_BUILD_DIR)/azure-npm$(EXE_EXT) -ldflags "-X main.version=$(VERSION) -s -w" $(NPM_DIR)/*.go
184+
go build -v -o $(NPM_BUILD_DIR)/azure-npm$(EXE_EXT) -ldflags "-X main.version=$(VERSION) -X $(ACN_PACKAGE_PATH)/npm.aiMetadata=$(NPM_AI_ID) -s -w" $(NPM_DIR)/*.go
184185

185186
# Build all binaries in a container.
186187
.PHONY: all-containerized

npm/Dockerfile

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ ARG NPM_BUILD_DIR
66
RUN apt-get update
77
RUN apt-get install -y iptables
88
RUN apt-get install -y ipset
9+
RUN apt-get install -y ca-certificates
910

1011
# Install plugin.
1112
COPY $NPM_BUILD_DIR/azure-npm /usr/bin

npm/namespace_test.go

Lines changed: 0 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@ import (
77
"os"
88

99
"github.com/Azure/azure-container-networking/npm/iptm"
10-
"github.com/Azure/azure-container-networking/telemetry"
1110

1211
"github.com/Azure/azure-container-networking/npm/ipsm"
1312
"github.com/Azure/azure-container-networking/npm/util"
@@ -48,10 +47,6 @@ func TestAddNamespace(t *testing.T) {
4847
npMgr := &NetworkPolicyManager{
4948
nsMap: make(map[string]*namespace),
5049
TelemetryEnabled: false,
51-
reportManager: &telemetry.ReportManager{
52-
ContentType: telemetry.ContentType,
53-
Report: &telemetry.NPMReport{},
54-
},
5550
}
5651

5752
allNs, err := newNs(util.KubeAllNamespacesFlag)
@@ -89,10 +84,6 @@ func TestUpdateNamespace(t *testing.T) {
8984
npMgr := &NetworkPolicyManager{
9085
nsMap: make(map[string]*namespace),
9186
TelemetryEnabled: false,
92-
reportManager: &telemetry.ReportManager{
93-
ContentType: telemetry.ContentType,
94-
Report: &telemetry.NPMReport{},
95-
},
9687
}
9788

9889
allNs, err := newNs(util.KubeAllNamespacesFlag)
@@ -143,10 +134,6 @@ func TestDeleteNamespace(t *testing.T) {
143134
npMgr := &NetworkPolicyManager{
144135
nsMap: make(map[string]*namespace),
145136
TelemetryEnabled: false,
146-
reportManager: &telemetry.ReportManager{
147-
ContentType: telemetry.ContentType,
148-
Report: &telemetry.NPMReport{},
149-
},
150137
}
151138

152139
allNs, err := newNs(util.KubeAllNamespacesFlag)

npm/npm.go

Lines changed: 60 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import (
88
"sync"
99
"time"
1010

11+
"github.com/Azure/azure-container-networking/aitelemetry"
1112
"github.com/Azure/azure-container-networking/log"
1213
"github.com/Azure/azure-container-networking/npm/iptm"
1314
"github.com/Azure/azure-container-networking/npm/util"
@@ -23,6 +24,8 @@ import (
2324
"k8s.io/client-go/tools/cache"
2425
)
2526

27+
var aiMetadata string
28+
2629
const (
2730
restoreRetryWaitTimeInSeconds = 5
2831
restoreMaxRetries = 10
@@ -47,7 +50,7 @@ type NetworkPolicyManager struct {
4750
isSafeToCleanUpAzureNpmChain bool
4851

4952
clusterState telemetry.ClusterState
50-
reportManager *telemetry.ReportManager
53+
version string
5154

5255
serverVersion *version.Info
5356
TelemetryEnabled bool
@@ -77,6 +80,61 @@ func (npMgr *NetworkPolicyManager) GetClusterState() telemetry.ClusterState {
7780
return npMgr.clusterState
7881
}
7982

83+
// SendAiMetrics :- send NPM metrics using AppInsights
84+
func (npMgr *NetworkPolicyManager) SendAiMetrics() {
85+
var (
86+
aiConfig = aitelemetry.AIConfig{
87+
AppName: util.AzureNpmFlag,
88+
AppVersion: npMgr.version,
89+
BatchSize: 32768,
90+
BatchInterval: 30,
91+
RefreshTimeout: 15,
92+
DebugMode: true,
93+
GetEnvRetryCount: 5,
94+
GetEnvRetryWaitTimeInSecs: 3,
95+
}
96+
97+
th, err = aitelemetry.NewAITelemetry("", aiMetadata, aiConfig)
98+
heartbeat = time.NewTicker(time.Minute * heartbeatIntervalInMinutes).C
99+
customDimensions = map[string]string{"ClusterID": util.GetClusterID(npMgr.nodeName),
100+
"APIServer": npMgr.serverVersion.String()}
101+
podCount = aitelemetry.Metric{
102+
Name: "PodCount",
103+
CustomDimensions: customDimensions,
104+
}
105+
nsCount = aitelemetry.Metric{
106+
Name: "NsCount",
107+
CustomDimensions: customDimensions,
108+
}
109+
nwPolicyCount = aitelemetry.Metric{
110+
Name: "NwPolicyCount",
111+
CustomDimensions: customDimensions,
112+
}
113+
)
114+
115+
for ; err != nil; {
116+
log.Logf("Failed to init AppInsights with err: %+v", err)
117+
time.Sleep(time.Minute * 5)
118+
th, err = aitelemetry.NewAITelemetry("", aiMetadata, aiConfig)
119+
}
120+
121+
log.Logf("Initialized AppInsights handle")
122+
123+
defer th.Close(10)
124+
125+
for {
126+
<-heartbeat
127+
clusterState := npMgr.GetClusterState()
128+
podCount.Value = float64(clusterState.PodCount)
129+
nsCount.Value = float64(clusterState.NsCount)
130+
nwPolicyCount.Value = float64(clusterState.NwPolicyCount)
131+
132+
th.TrackMetric(podCount)
133+
th.TrackMetric(nsCount)
134+
th.TrackMetric(nwPolicyCount)
135+
}
136+
}
137+
80138
// restore restores iptables from backup file
81139
func (npMgr *NetworkPolicyManager) restore() {
82140
iptMgr := iptm.NewIptablesManager()
@@ -177,18 +235,11 @@ func NewNetworkPolicyManager(clientset *kubernetes.Clientset, informerFactory in
177235
NsCount: 0,
178236
NwPolicyCount: 0,
179237
},
180-
reportManager: &telemetry.ReportManager{
181-
ContentType: telemetry.ContentType,
182-
Report: &telemetry.NPMReport{},
183-
},
238+
version: npmVersion,
184239
serverVersion: serverVersion,
185240
TelemetryEnabled: true,
186241
}
187242

188-
clusterID := util.GetClusterID(npMgr.nodeName)
189-
clusterState := npMgr.GetClusterState()
190-
npMgr.reportManager.Report.(*telemetry.NPMReport).GetReport(clusterID, npMgr.nodeName, npmVersion, serverVersion.GitVersion, clusterState)
191-
192243
allNs, _ := newNs(util.KubeAllNamespacesFlag)
193244
npMgr.nsMap[util.KubeAllNamespacesFlag] = allNs
194245

npm/nwpolicy_test.go

Lines changed: 0 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@ import (
88
"github.com/Azure/azure-container-networking/npm/ipsm"
99
"github.com/Azure/azure-container-networking/npm/iptm"
1010
"github.com/Azure/azure-container-networking/npm/util"
11-
"github.com/Azure/azure-container-networking/telemetry"
1211

1312
corev1 "k8s.io/api/core/v1"
1413
networkingv1 "k8s.io/api/networking/v1"
@@ -20,10 +19,6 @@ func TestAddNetworkPolicy(t *testing.T) {
2019
npMgr := &NetworkPolicyManager{
2120
nsMap: make(map[string]*namespace),
2221
TelemetryEnabled: false,
23-
reportManager: &telemetry.ReportManager{
24-
ContentType: telemetry.ContentType,
25-
Report: &telemetry.NPMReport{},
26-
},
2722
}
2823

2924
allNs, err := newNs(util.KubeAllNamespacesFlag)
@@ -131,10 +126,6 @@ func TestUpdateNetworkPolicy(t *testing.T) {
131126
npMgr := &NetworkPolicyManager{
132127
nsMap: make(map[string]*namespace),
133128
TelemetryEnabled: false,
134-
reportManager: &telemetry.ReportManager{
135-
ContentType: telemetry.ContentType,
136-
Report: &telemetry.NPMReport{},
137-
},
138129
}
139130

140131
allNs, err := newNs(util.KubeAllNamespacesFlag)
@@ -243,10 +234,6 @@ func TestDeleteNetworkPolicy(t *testing.T) {
243234
npMgr := &NetworkPolicyManager{
244235
nsMap: make(map[string]*namespace),
245236
TelemetryEnabled: false,
246-
reportManager: &telemetry.ReportManager{
247-
ContentType: telemetry.ContentType,
248-
Report: &telemetry.NPMReport{},
249-
},
250237
}
251238

252239
allNs, err := newNs(util.KubeAllNamespacesFlag)

npm/plugin/main.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,8 @@ func main() {
6060

6161
npMgr := npm.NewNetworkPolicyManager(clientset, factory, version)
6262

63+
go npMgr.SendAiMetrics()
64+
6365
if err = npMgr.Start(wait.NeverStop); err != nil {
6466
log.Logf("npm failed with error %v.", err)
6567
panic(err.Error)

npm/pod_test.go

Lines changed: 0 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@ import (
77

88
"github.com/Azure/azure-container-networking/npm/ipsm"
99
"github.com/Azure/azure-container-networking/npm/util"
10-
"github.com/Azure/azure-container-networking/telemetry"
1110
corev1 "k8s.io/api/core/v1"
1211
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
1312
)
@@ -39,10 +38,6 @@ func TestAddPod(t *testing.T) {
3938
npMgr := &NetworkPolicyManager{
4039
nsMap: make(map[string]*namespace),
4140
TelemetryEnabled: false,
42-
reportManager: &telemetry.ReportManager{
43-
ContentType: telemetry.ContentType,
44-
Report: &telemetry.NPMReport{},
45-
},
4641
}
4742

4843
allNs, err := newNs(util.KubeAllNamespacesFlag)
@@ -83,10 +78,6 @@ func TestUpdatePod(t *testing.T) {
8378
npMgr := &NetworkPolicyManager{
8479
nsMap: make(map[string]*namespace),
8580
TelemetryEnabled: false,
86-
reportManager: &telemetry.ReportManager{
87-
ContentType: telemetry.ContentType,
88-
Report: &telemetry.NPMReport{},
89-
},
9081
}
9182

9283
allNs, err := newNs(util.KubeAllNamespacesFlag)
@@ -145,10 +136,6 @@ func TestDeletePod(t *testing.T) {
145136
npMgr := &NetworkPolicyManager{
146137
nsMap: make(map[string]*namespace),
147138
TelemetryEnabled: false,
148-
reportManager: &telemetry.ReportManager{
149-
ContentType: telemetry.ContentType,
150-
Report: &telemetry.NPMReport{},
151-
},
152139
}
153140

154141
allNs, err := newNs(util.KubeAllNamespacesFlag)

0 commit comments

Comments
 (0)