Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Apply monitoring linters #932

Merged
merged 2 commits into from Mar 20, 2024
Merged

Conversation

assafad
Copy link
Contributor

@assafad assafad commented Mar 19, 2024

What this PR does / why we need it:

Apply the following linters:

  • monitoringlinter that was implemented in Add monitoring linter monitoring#221, and was designed to enforce proposal: Monitoring code refactor community#219.
    This linter ensures that all monitoring-related practices are implemented within the pkg/monitoring directory using operator-observability methods. It verifies that all metrics, alerts and recording rules registrations are centralized in this directory, and restricts the direct use of Prometheus registration methods.
    Example for a message reported by the linter:

    kubevirt/pkg/virt-controller/watch/workload-updater/workload-updater.go:67:2: monitoring-linter: metrics should be registered only within pkg/monitoring directory, using operator-observability packages.
    
  • operator-observability rules linter - ensures that alerts and recording rules definitions are following the monitoring best practices, e.g. alerts have all the required annotations and labels with expected values, recording rules have expressions, etc.

Fixes https://issues.redhat.com/browse/CNV-36766
Other PRs references: kubevirt/hyperconverged-cluster-operator#2827, kubevirt/kubevirt#11454

Release note:

None

@kubevirt-bot kubevirt-bot added the release-note-none Denotes a PR that doesn't merit a release note. label Mar 19, 2024
@kubevirt-bot kubevirt-bot added dco-signoff: yes Indicates the PR's author has DCO signed all their commits. size/XXL labels Mar 19, 2024
@assafad
Copy link
Contributor Author

assafad commented Mar 19, 2024

@0xFelix, @akrejcir Hi, can you PTAL?

@assafad
Copy link
Contributor Author

assafad commented Mar 19, 2024

/retest

Makefile Outdated
@@ -326,6 +326,11 @@ lint:
lint-metrics:
./hack/prom_metric_linter.sh --operator-name="kubevirt" --sub-operator-name="ssp"

.PHONY: lint-monitoring
lint-monitoring:
go install github.com/kubevirt/monitoring/monitoringlinter/cmd/monitoringlinter@e2be790
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please install it to the $(LOCALBIN) directory. Similarly to how controller-gen is installed on line 250.

As a future task, can you create a release tag in the github.com/kubevirt/monitoring repo for the submodule monitoringlinter? Then we can use a released version instead of a git commit e2be790.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Updated to use $(LOCALBIN), thanks.

We did create a release tag in https://github.com/kubevirt/monitoring/releases, but there is an issue with installing it using v0.0.5 tag, probably because it's a submodule:

 go install github.com/kubevirt/monitoring/monitoringlinter/cmd/monitoringlinter@v0.0.5
go: github.com/kubevirt/monitoring/monitoringlinter/cmd/monitoringlinter@v0.0.5: module github.com/kubevirt/monitoring@v0.0.5 found, but does not contain package github.com/kubevirt/monitoring/monitoringlinter/cmd/monitoringlinter

We decided to use commit hash because of that issue, and also because this way we don't need to release all kubevirt/monitoring repo for changes in the linter.

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes, you need to create a separate tag for submodule. Like we do in ssp-operator for the api submoule: https://github.com/kubevirt/ssp-operator/tags

Makefile Outdated Show resolved Hide resolved
@akrejcir
Copy link
Collaborator

/approve

@kubevirt-bot
Copy link
Contributor

[APPROVALNOTIFIER] This PR is APPROVED

This pull-request has been approved by: akrejcir

The full list of commands accepted by this bot can be found here.

The pull request process is described here

Needs approval from an approver in each of these files:

Approvers can indicate their approval by writing /approve in a comment
Approvers can cancel approval by writing /approve cancel in a comment

@kubevirt-bot kubevirt-bot added the approved Indicates a PR has been approved by an approver from all required OWNERS files. label Mar 19, 2024
Makefile Outdated
@@ -326,6 +328,11 @@ lint:
lint-metrics:
./hack/prom_metric_linter.sh --operator-name="kubevirt" --sub-operator-name="ssp"

.PHONY: lint-monitoring
lint-monitoring: $(LOCALBIN)
test -s $(LOCALBIN)/monitoringlinter || GOBIN=$(LOCALBIN) go install github.com/kubevirt/monitoring/monitoringlinter/cmd/monitoringlinter@e2be790
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can we put the version / rev into a variable?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Done

testutil.ValidateAlertHealthImpactLabel,
testutil.ValidateAlertPartOfAndComponentLabels)

alerts := ListAlerts()
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

nit: Inline this

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Done

})

It("Should validate recording rules", func() {
recordingRules := ListRecordingRules()
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

nit: Inline this

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Done

Apply monitoringlinter, which is designed to enforce
kubevirt/community#219 by ensuring that monitoring-related practices are
implemented within the pkg/monitoring directory using
operator-observability methods.

Signed-off-by: assafad <aadmi@redhat.com>
Apply operator-observability rules linter which ensures that kubevirt
alerts and recording rules definitions are following the monitoring best
practices.

Signed-off-by: assafad <aadmi@redhat.com>
Copy link

sonarcloud bot commented Mar 19, 2024

Quality Gate Passed Quality Gate passed

Issues
0 New issues
0 Accepted issues

Measures
0 Security Hotspots
No data about Coverage
0.0% Duplication on New Code

See analysis details on SonarCloud

Copy link
Member

@0xFelix 0xFelix left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

/lgtm

Thanks

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
approved Indicates a PR has been approved by an approver from all required OWNERS files. dco-signoff: yes Indicates the PR's author has DCO signed all their commits. lgtm Indicates that a PR is ready to be merged. release-note-none Denotes a PR that doesn't merit a release note. size/XXL
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

4 participants