Skip to content

Commit 330f3de

Browse files
[Bugfix] Fix internal metrics mode (#1022)
1 parent 08604a4 commit 330f3de

File tree

9 files changed

+36
-57
lines changed

9 files changed

+36
-57
lines changed

CHANGELOG.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@
77
- (Feature) Remove forgotten ArangoDB jobs during restart
88
- (Feature) Add support for managed services
99
- (Feature) Recreation member in the high plan
10+
- (Feature) Add 'crd install' subcommand
11+
- (Bugfix) Fix `internal` metrics mode
1012

1113
## [1.2.14](https://github.com/arangodb/kube-arangodb/tree/1.2.14) (2022-07-14)
1214
- (Feature) Add ArangoSync TLS based rotation
@@ -40,7 +42,6 @@
4042
- (Bugfix) Infinite loop fix in ArangoD AsyncClient
4143
- (Bugfix) Add Panic Handler
4244
- (Bugfix) Unify yaml packages
43-
- (Feature) Add 'crd install' subcommand
4445

4546
## [1.2.13](https://github.com/arangodb/kube-arangodb/tree/1.2.13) (2022-06-07)
4647
- (Bugfix) Fix arangosync members state inspection

docs/design/exporter.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ In default mode metrics provided by ArangoDB `_admin/metrics` (<=3.7) or `_admin
2828

2929
There are several ways to configure Prometheus to fetch metrics from the ArangoDB Exporter.
3030

31-
Below you're find a sample Prometheus configuration file that can be used to fetch
31+
Below you will find a sample Prometheus configuration file that can be used to fetch
3232
metrics from an ArangoDB exporter listening on localhost port 9101 (without TLS).
3333

3434
```yaml

pkg/apis/deployment/v1/deployment_metrics_spec.go

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,8 @@ func (m MetricsMode) New() *MetricsMode {
4141
return &m
4242
}
4343

44-
// deprecated
44+
// GetMetricsEndpoint
45+
// Deprecated
4546
func (m MetricsMode) GetMetricsEndpoint() string {
4647
switch m {
4748
case MetricsModeInternal:
@@ -52,12 +53,14 @@ func (m MetricsMode) GetMetricsEndpoint() string {
5253
}
5354

5455
const (
55-
// deprecated
56-
// MetricsModeExporter exporter mode for old exporter type
56+
// MetricsModeExporter starts sidecar container with
57+
// Deprecated
5758
MetricsModeExporter MetricsMode = "exporter"
58-
// deprecated
59+
// MetricsModeSidecar behaves exactly the same as MetricsModeExporter
60+
// Deprecated
5961
MetricsModeSidecar MetricsMode = "sidecar"
60-
// deprecated
62+
// MetricsModeInternal exposes metrics using ArangoD endpoint
63+
// Deprecated
6164
MetricsModeInternal MetricsMode = "internal"
6265
)
6366

@@ -106,14 +109,14 @@ func (s *MetricsSpec) IsEnabled() bool {
106109
return util.BoolOrDefault(s.Enabled, false)
107110
}
108111

109-
// deprecated
110112
// HasImage returns whether a image was specified or not
113+
// Deprecated
111114
func (s *MetricsSpec) HasImage() bool {
112115
return s.Image != nil
113116
}
114117

115-
// deprecated
116118
// GetImage returns the Image or empty string
119+
// Deprecated
117120
func (s *MetricsSpec) GetImage() string {
118121
return util.StringOrDefault(s.Image)
119122
}

pkg/apis/deployment/v2alpha1/deployment_metrics_spec.go

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,8 @@ func (m MetricsMode) New() *MetricsMode {
4141
return &m
4242
}
4343

44-
// deprecated
44+
// GetMetricsEndpoint
45+
// Deprecated
4546
func (m MetricsMode) GetMetricsEndpoint() string {
4647
switch m {
4748
case MetricsModeInternal:
@@ -52,12 +53,14 @@ func (m MetricsMode) GetMetricsEndpoint() string {
5253
}
5354

5455
const (
55-
// deprecated
5656
// MetricsModeExporter exporter mode for old exporter type
57+
// Deprecated
5758
MetricsModeExporter MetricsMode = "exporter"
58-
// deprecated
59+
// MetricsModeSidecar
60+
// Deprecated
5961
MetricsModeSidecar MetricsMode = "sidecar"
60-
// deprecated
62+
// MetricsModeInternal
63+
// Deprecated
6164
MetricsModeInternal MetricsMode = "internal"
6265
)
6366

@@ -106,14 +109,14 @@ func (s *MetricsSpec) IsEnabled() bool {
106109
return util.BoolOrDefault(s.Enabled, false)
107110
}
108111

109-
// deprecated
110112
// HasImage returns whether a image was specified or not
113+
// Deprecated
111114
func (s *MetricsSpec) HasImage() bool {
112115
return s.Image != nil
113116
}
114117

115-
// deprecated
116118
// GetImage returns the Image or empty string
119+
// Deprecated
117120
func (s *MetricsSpec) GetImage() string {
118121
return util.StringOrDefault(s.Image)
119122
}

pkg/deployment/deployment_metrics_test.go

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -180,7 +180,6 @@ func TestEnsurePod_Metrics(t *testing.T) {
180180
}
181181

182182
testCase.createTestPodData(deployment, api.ServerGroupDBServers, firstDBServerStatus)
183-
testCase.ExpectedPod.ObjectMeta.Labels[k8sutil.LabelKeyArangoExporter] = testYes
184183
},
185184
ExpectedEvent: "member dbserver is created",
186185
ExpectedPod: core.Pod{
@@ -212,7 +211,6 @@ func TestEnsurePod_Metrics(t *testing.T) {
212211
ImagePullPolicy: core.PullIfNotPresent,
213212
SecurityContext: securityContext.NewSecurityContext(),
214213
},
215-
testArangodbInternalExporterContainer(false, false, emptyResources),
216214
},
217215
RestartPolicy: core.RestartPolicyNever,
218216
TerminationGracePeriodSeconds: &defaultDBServerTerminationTimeout,
@@ -250,7 +248,6 @@ func TestEnsurePod_Metrics(t *testing.T) {
250248
}
251249

252250
testCase.createTestPodData(deployment, api.ServerGroupAgents, firstAgentStatus)
253-
testCase.ExpectedPod.ObjectMeta.Labels[k8sutil.LabelKeyArangoExporter] = testYes
254251
},
255252
ExpectedEvent: "member agent is created",
256253
ExpectedPod: core.Pod{
@@ -282,7 +279,6 @@ func TestEnsurePod_Metrics(t *testing.T) {
282279
ImagePullPolicy: core.PullIfNotPresent,
283280
SecurityContext: securityContext.NewSecurityContext(),
284281
},
285-
testArangodbInternalExporterContainer(false, false, emptyResources),
286282
},
287283
RestartPolicy: core.RestartPolicyNever,
288284
TerminationGracePeriodSeconds: &defaultAgentTerminationTimeout,

pkg/deployment/resources/exporter.go

Lines changed: 9 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,6 @@ package resources
2121
import (
2222
"path/filepath"
2323

24-
core "k8s.io/api/core/v1"
25-
2624
"github.com/arangodb/go-driver"
2725

2826
api "github.com/arangodb/kube-arangodb/pkg/apis/deployment/v1"
@@ -32,34 +30,6 @@ import (
3230
"github.com/arangodb/kube-arangodb/pkg/util/k8sutil/probes"
3331
)
3432

35-
// ArangodbExporterContainer creates metrics container
36-
func ArangodbExporterContainer(image string, args []string, livenessProbe *probes.HTTPProbeConfig,
37-
resources core.ResourceRequirements, securityContext *core.SecurityContext,
38-
spec api.DeploymentSpec) core.Container {
39-
40-
c := core.Container{
41-
Name: shared.ExporterContainerName,
42-
Image: image,
43-
Command: append([]string{"/app/arangodb-exporter"}, args...),
44-
Ports: []core.ContainerPort{
45-
{
46-
Name: "exporter",
47-
ContainerPort: int32(spec.Metrics.GetPort()),
48-
Protocol: core.ProtocolTCP,
49-
},
50-
},
51-
Resources: k8sutil.ExtractPodResourceRequirement(resources),
52-
ImagePullPolicy: core.PullIfNotPresent,
53-
SecurityContext: securityContext,
54-
}
55-
56-
if livenessProbe != nil {
57-
c.LivenessProbe = livenessProbe.Create()
58-
}
59-
60-
return c
61-
}
62-
6333
func createInternalExporterArgs(spec api.DeploymentSpec, groupSpec api.ServerGroupSpec, version driver.Version) []string {
6434
tokenpath := filepath.Join(shared.ExporterJWTVolumeMountDir, constants.SecretKeyToken)
6535
options := k8sutil.CreateOptionPairs(64)
@@ -68,10 +38,7 @@ func createInternalExporterArgs(spec api.DeploymentSpec, groupSpec api.ServerGro
6838
options.Add("--arangodb.jwt-file", tokenpath)
6939
}
7040

71-
path := shared.ArangoExporterInternalEndpoint
72-
if version.CompareTo("3.8.0") >= 0 {
73-
path = shared.ArangoExporterInternalEndpointV2
74-
}
41+
path := getArangoExporterInternalEndpoint(version)
7542

7643
if port := groupSpec.InternalPort; port == nil {
7744
scheme := "http"
@@ -95,6 +62,14 @@ func createInternalExporterArgs(spec api.DeploymentSpec, groupSpec api.ServerGro
9562
return options.Sort().AsArgs()
9663
}
9764

65+
func getArangoExporterInternalEndpoint(version driver.Version) string {
66+
path := shared.ArangoExporterInternalEndpoint
67+
if version.CompareTo("3.8.0") >= 0 {
68+
path = shared.ArangoExporterInternalEndpointV2
69+
}
70+
return path
71+
}
72+
9873
func createExporterLivenessProbe(isSecure bool) *probes.HTTPProbeConfig {
9974
probeCfg := &probes.HTTPProbeConfig{
10075
LocalPath: "/",

pkg/deployment/resources/pod_creator_arangod.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -344,7 +344,7 @@ func (m *MemberArangoDPod) GetServiceAccountName() string {
344344
}
345345

346346
func (m *MemberArangoDPod) GetSidecars(pod *core.Pod) error {
347-
if m.spec.Metrics.IsEnabled() {
347+
if m.spec.Metrics.IsEnabled() && m.spec.Metrics.Mode.Get() != api.MetricsModeInternal {
348348
var c *core.Container
349349

350350
pod.Labels[k8sutil.LabelKeyArangoExporter] = "yes"

pkg/deployment/resources/servicemonitor.go

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,6 @@ import (
3131

3232
"github.com/arangodb/kube-arangodb/pkg/apis/deployment"
3333
deploymentApi "github.com/arangodb/kube-arangodb/pkg/apis/deployment/v1"
34-
"github.com/arangodb/kube-arangodb/pkg/apis/shared"
3534
"github.com/arangodb/kube-arangodb/pkg/util/constants"
3635
"github.com/arangodb/kube-arangodb/pkg/util/errors"
3736
"github.com/arangodb/kube-arangodb/pkg/util/globals"
@@ -95,7 +94,9 @@ func (r *Resources) serviceMonitorSpec() (coreosv1.ServiceMonitorSpec, error) {
9594

9695
endpoint.BearerTokenSecret.Name = *spec.Metrics.Authentication.JWTTokenSecretName
9796
endpoint.BearerTokenSecret.Key = constants.SecretKeyToken
98-
endpoint.Path = shared.ArangoExporterInternalEndpoint
97+
98+
version := r.context.GetMembersState().State().Version.Version
99+
endpoint.Path = getArangoExporterInternalEndpoint(version)
99100

100101
return coreosv1.ServiceMonitorSpec{
101102
JobLabel: "k8s-app",

pkg/util/k8sutil/util.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ const (
3434
LabelKeyApp = "app"
3535
// LabelKeyRole is the key of the label used to store the role of the resource in
3636
LabelKeyRole = "role"
37-
// LabelKeyArangoExporter is the key of the label used to indicate that a exporter is present
37+
// LabelKeyArangoExporter is the key of the label used to indicate that an exporter is present
3838
LabelKeyArangoExporter = "arango_exporter"
3939
// LabelKeyArangoMember is the key of the label used to store the ArangoDeployment member ID in
4040
LabelKeyArangoMember = "deployment.arangodb.com/member"

0 commit comments

Comments
 (0)