Skip to content

K8SPG-718 patroni metrics to pmm #1209

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

Open
wants to merge 3 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions e2e-tests/tests/monitoring-pmm3/05-check-qan.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -11,5 +11,6 @@ commands:
instance=$(kubectl get -n "${NAMESPACE}" pod -l postgres-operator.crunchydata.com/instance-set=instance1 -o 'jsonpath={.items[].metadata.name}')

get_metric_values node_boot_time_seconds ${NAMESPACE}-${instance} ${token}
get_metric_values patroni_postgres_running ${NAMESPACE}-${instance} ${token}
get_qan20_values_pmm3 ${NAMESPACE}-${instance} ${token}
timeout: 240
14 changes: 10 additions & 4 deletions percona/pmm/pmm.go
Original file line number Diff line number Diff line change
Expand Up @@ -224,7 +224,7 @@ func sidecarContainerV2(pgc *v2.PerconaPGCluster) corev1.Container {
},
{
Name: "PMM_AGENT_PRERUN_SCRIPT",
Value: agentPrerunScript(pgc.Spec.PMM.QuerySource, pgc),
Value: agentPrerunScript(pgc, false),
},
{
Name: "PMM_AGENT_PATHS_TEMPDIR",
Expand Down Expand Up @@ -407,7 +407,7 @@ func sidecarContainerV3(pgc *v2.PerconaPGCluster) corev1.Container {
},
{
Name: "PMM_AGENT_PRERUN_SCRIPT",
Value: agentPrerunScript(pgc.Spec.PMM.QuerySource, pgc),
Value: agentPrerunScript(pgc, true),
},
{
Name: "PMM_AGENT_PATHS_TEMPDIR",
Expand All @@ -419,7 +419,7 @@ func sidecarContainerV3(pgc *v2.PerconaPGCluster) corev1.Container {
return container
}

func agentPrerunScript(querySource v2.PMMQuerySource, pgc *v2.PerconaPGCluster) string {
func agentPrerunScript(pgc *v2.PerconaPGCluster, isPMM3 bool) string {
wait := "pmm-admin status --wait=10s"
annotate := "pmm-admin annotate --service-name=$(PMM_AGENT_SETUP_NODE_NAME) 'Service restarted'"

Expand All @@ -435,7 +435,7 @@ func agentPrerunScript(querySource v2.PMMQuerySource, pgc *v2.PerconaPGCluster)
"--skip-connection-check",
"--metrics-mode=push",
"--service-name=$(PMM_AGENT_SETUP_NODE_NAME)",
fmt.Sprintf("--query-source=%s", querySource),
fmt.Sprintf("--query-source=%s", pgc.Spec.PMM.QuerySource),
}

if pgc.CompareVersion("2.7.0") >= 0 {
Expand All @@ -449,5 +449,11 @@ func agentPrerunScript(querySource v2.PMMQuerySource, pgc *v2.PerconaPGCluster)
}
addService := fmt.Sprintf("pmm-admin add postgresql %s", strings.Join(addServiceArgs, " "))

if pgc.CompareVersion("2.8.0") >= 0 && isPMM3 {
addPatroniMetrics := fmt.Sprintf(
"pmm-admin add external --scheme=https --listen-port=%d --tls-skip-verify --service-name=$(PMM_AGENT_SETUP_NODE_NAME)-patroni-external", pgc.Spec.Patroni.GetPort())
return fmt.Sprintf("%s; %s; %s; %s", wait, addService, addPatroniMetrics, annotate)
}

return wait + "; " + addService + "; " + annotate
}
9 changes: 5 additions & 4 deletions percona/pmm/pmm_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ import (
corev1 "k8s.io/api/core/v1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"

"github.com/percona/percona-postgresql-operator/percona/version"
v2 "github.com/percona/percona-postgresql-operator/pkg/apis/pgv2.percona.com/v2"
)

Expand All @@ -26,7 +27,7 @@ func TestContainer(t *testing.T) {

pgc := &v2.PerconaPGCluster{
Spec: v2.PerconaPGClusterSpec{
CRVersion: "2.6.0",
CRVersion: version.Version(),
PMM: pmmSpec,
},
ObjectMeta: metav1.ObjectMeta{
Expand Down Expand Up @@ -152,7 +153,7 @@ func TestSidecarContainerV2(t *testing.T) {

pgc := &v2.PerconaPGCluster{
Spec: v2.PerconaPGClusterSpec{
CRVersion: "2.7.0",
CRVersion: version.Version(),
PMM: pmmSpec,
},
ObjectMeta: metav1.ObjectMeta{
Expand Down Expand Up @@ -264,7 +265,7 @@ func TestSidecarContainerV3(t *testing.T) {

pgc := &v2.PerconaPGCluster{
Spec: v2.PerconaPGClusterSpec{
CRVersion: "2.7.0",
CRVersion: version.Version(),
PMM: pmmSpec,
},
ObjectMeta: metav1.ObjectMeta{
Expand Down Expand Up @@ -320,7 +321,7 @@ func TestSidecarContainerV3(t *testing.T) {
"DB_TYPE": "postgresql",
"DB_USER": v2.UserMonitoring,
"DB_PASS": "", // secret reference is asserted separately
"PMM_AGENT_PRERUN_SCRIPT": "pmm-admin status --wait=10s; pmm-admin add postgresql --username=$(DB_USER) --password='$(DB_PASS)' --host=127.0.0.1 --port=5432 --tls-cert-file=/pgconf/tls/tls.crt --tls-key-file=/pgconf/tls/tls.key --tls-ca-file=/pgconf/tls/ca.crt --tls-skip-verify --skip-connection-check --metrics-mode=push --service-name=$(PMM_AGENT_SETUP_NODE_NAME) --query-source= --cluster=test-cluster --environment=dev-postgres; pmm-admin annotate --service-name=$(PMM_AGENT_SETUP_NODE_NAME) 'Service restarted'",
"PMM_AGENT_PRERUN_SCRIPT": "pmm-admin status --wait=10s; pmm-admin add postgresql --username=$(DB_USER) --password='$(DB_PASS)' --host=127.0.0.1 --port=5432 --tls-cert-file=/pgconf/tls/tls.crt --tls-key-file=/pgconf/tls/tls.key --tls-ca-file=/pgconf/tls/ca.crt --tls-skip-verify --skip-connection-check --metrics-mode=push --service-name=$(PMM_AGENT_SETUP_NODE_NAME) --query-source= --cluster=test-cluster --environment=dev-postgres; pmm-admin add external --scheme=https --listen-port=8008 --tls-skip-verify --service-name=$(PMM_AGENT_SETUP_NODE_NAME)-patroni-external; pmm-admin annotate --service-name=$(PMM_AGENT_SETUP_NODE_NAME) 'Service restarted'",
"PMM_AGENT_PATHS_TEMPDIR": "/tmp",
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -83,6 +83,9 @@ type PatroniSwitchover struct {
const (
PatroniSwitchoverTypeFailover = "Failover"
PatroniSwitchoverTypeSwitchover = "Switchover"

// K8SPG-718
patroniDefaultPort = int32(8008)
)

// Default sets the default values for certain Patroni configuration attributes,
Expand All @@ -105,6 +108,15 @@ func (s *PatroniSpec) Default() {
}
}

// GetPort returns the patroni port. Added as part of K8SPG-718.
func (s *PatroniSpec) GetPort() int32 {
patroniPort := patroniDefaultPort
if s != nil && s.Port != nil {
patroniPort = *s.Port
}
return patroniPort
}

type PatroniStatus struct {

// - "database_system_identifier" of https://github.com/zalando/patroni/blob/v2.0.1/docs/rest_api.rst#monitoring-endpoint
Expand Down
Loading