Charmed MySQL K8s How-to - Enable Monitoring

Enable monitoring

:information_source: Hint: Use Juju 3. Otherwise replace juju run ... with juju run-action --wait ... and juju integrate with juju relate for Juju 2.9.

Enable monitoring requires that you:

Switch to COS K8s environment and offer COS interfaces to be cross-model related with Charmed MySQL K8s model:

# Switch to Kubernetes controller, for the cos model.
juju switch <k8s_cos_controller>:<cos_model_name>

juju offer grafana:grafana-dashboard
juju offer loki:logging
juju offer prometheus:receive-remote-write

Switch to Charmed MySQL K8s model, find offers and consume them:

# We are on the Kubernetes controller, for the cos model. Switch to mysql model
juju switch <k8s_db_controller>:<mysql_model_name>

juju find-offers <k8s_cos_controller>: # Do not miss ':' here!

A similar output should appear, if k8s is the k8s controller name and cos the model where cos-lite has been deployed:

Store  URL                    Access  Interfaces
k8s    admin/cos:grafana      admin   grafana:grafana-dashboard
k8s    admin/cos.loki         admin   loki:logging
k8s    admin/cos.prometheus   admin   prometheus:receive-remote-write
...

Consume offers to be reachable in the current model:

juju consume k8s:admin/cos.grafana
juju consume k8s:admin/cos.loki
juju consume k8s:admin/cos.prometheus

Now, deploy ‘grafana-agent-k8s’ and integrate (relate) it with Charmed MySQL K8s, later integrate (relate) grafana-agent-k8s with consumed COS offers:

juju deploy grafana-agent-k8s --trust

juju relate grafana-agent-k8s grafana
juju relate grafana-agent-k8s loki
juju relate grafana-agent-k8s prometheus

juju relate grafana-agent-k8s mysql-k8s:grafana-dashboard
juju relate grafana-agent-k8s mysql-k8s:logging
juju relate grafana-agent-k8s mysql-k8s:metrics-endpoint

After this is complete, Grafana will show the new dashboards: MySQL Exporter and allows access for Charmed MySQL logs on Loki.

The example of juju status on Charmed MySQL K8s model:

Model  Controller   Cloud/Region        Version  SLA          Timestamp
mysql  charmed-dev  microk8s/localhost  3.1.6    unsupported  02:20:09+02:00

SAAS        Status  Store        URL
grafana     active  charmed-dev  admin/cos.grafana
loki        active  charmed-dev  admin/cos.loki
prometheus  active  charmed-dev  admin/cos.prometheus

App        Version                  Status  Scale  Charm      Channel     Rev  Address         Exposed  Message
mysql-k8s  8.0.32-0ubuntu0.22.04.2  active      1  mysql-k8s  8.0/stable   61  10.152.183.115  no       Primary

Unit          Workload  Agent  Address      Ports  Message
mysql-k8s/0*  active    idle   10.1.84.116         Primary

The example of juju status on COS K8s model:

Model  Controller   Cloud/Region        Version  SLA          Timestamp
cos    charmed-dev  microk8s/localhost  3.1.6    unsupported  02:20:11+02:00

App           Version  Status  Scale  Charm             Channel  Rev  Address         Exposed  Message
alertmanager  0.23.0   active      1  alertmanager-k8s  stable    47  10.152.183.206  no       
catalogue              active      1  catalogue-k8s     stable    13  10.152.183.183  no       
grafana       9.2.1    active      1  grafana-k8s       stable    64  10.152.183.140  no       
loki          2.4.1    active      1  loki-k8s          stable    60  10.152.183.241  no       
prometheus    2.33.5   active      1  prometheus-k8s    stable   103  10.152.183.240  no       
traefik       2.9.6    active      1  traefik-k8s       stable   110  10.76.203.178   no       

Unit             Workload  Agent  Address      Ports  Message
alertmanager/0*  active    idle   10.1.84.125         
catalogue/0*     active    idle   10.1.84.127         
grafana/0*       active    idle   10.1.84.83          
loki/0*          active    idle   10.1.84.79          
prometheus/0*    active    idle   10.1.84.96          
traefik/0*       active    idle   10.1.84.119         

Offer       Application  Charm           Rev  Connected  Endpoint              Interface                Role
grafana     grafana      grafana-k8s     64   1/1        grafana-dashboard     grafana_dashboard        requirer
loki        loki         loki-k8s        60   1/1        logging               loki_push_api            provider
prometheus  prometheus   prometheus-k8s  103  1/1        receive-remote-write  prometheus_scrape        requirer

To connect Grafana WEB interface, follow the COS section “Browse dashboards”:

juju run grafana/leader get-admin-password --model <k8s_controller>:<cos_model_name>

asciicast

switch to

$ juju offer prometheus:receive-remote-write

note that i in addition to switching the endpoint also dropped the endpoint from the offer name (defaults to application name), this is because an offer can include multiple endpoints, so having a separate one for each doesn’t really make sense. I’d suggest replicating that for all offers in your docs. ie.

$ juju offer grafana:grafana-dashboard 
$ juju offer loki:logging
$ juju offer prometheus:receive-remote-write
$ juju consume k8s:admin/cos.prometheus
$ juju consume k8s:admin/cos.loki
$ juju consume k8s:admin/cos.grafana

Before this step, deploy grafana-agent-k8s in the mysql model:

$ juju deploy grafana-agent-k8s agent --trust

then change the relate commands as follows

$ juju relate mysql-k8s:grafana-dashboard agent
$ juju relate mysql-k8s:logging agent
$ juju relate mysql-k8s:metrics-endpoint agent

$ juju relate agent prometheus
$ juju relate agent loki
$ juju relate agent grafana

Have fun! :blush: :rocket:

@0x12b thank you for the nice hints! I have tested grafana-agent-k8s from the latest/edge (rev 43) and it looks superb! Both VM and K8s manuals updated to follow your recommendations. Tnx!