Charmed MySQLRouter K8s How-to - Enable Monitoring

Note: All commands are written for juju >= v3.0

How to enable monitoring with COS and Grafana

This guide goes over the steps to integrate MySQL Router K8s deployment with COS to enable monitoring in Grafana.

To learn about Alert Rules, see Charmed MySQL K8s > How to enable COS Alert Rules.

Prerequisites

Summary


Offer interfaces via the COS controller

First, we will switch to the COS K8s environment and offer COS interfaces to be cross-model integrated with the Charmed MySQLRouter K8s model.

To switch to the Kubernetes controller for the COS model, run

juju switch <k8s_controller>:<cos_model_name>

To offer the COS interfaces, run

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

Consume offers via the MySQL Router K8s model

Next, we will switch to the Charmed MySQL Router K8s model, find offers, and consume them.

We are currently on the Kubernetes controller for the COS model. To switch to the MySQL Router K8smodel, run

juju switch <k8s_db_controller>:<mysql_router_model_name>

Display a list of available interfaces with the following command:

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

In the sample output below, k8s is the k8s controller name and cos is the model where cos-lite has been deployed:

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

To consume offers to be reachable in the current model, run

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

Deploy and integrate Grafana

First, deploy grafana-agent:

juju deploy grafana-agent-k8s --trust

Then, integrate (previously known as “relate”) grafana-agent with Charmed MySQL Router K8s:

juju integrate grafana-agent-k8s grafana
juju integrate grafana-agent-k8s loki
juju integrate grafana-agent-k8s prometheus

Finally, integrate grafana-agent-k8s with the consumed COS offers:

juju integrate grafana-agent-k8s mysql-router-k8s:grafana-dashboard
juju integrate grafana-agent-k8s mysql-router-k8s:logging
juju integrate grafana-agent-k8s mysql-router-k8s:metrics-endpoint

After this is complete, Grafana will show the new dashboards MySQLRouter Exporter and allow access for Charmed MySQL Router K8s logs on Loki.

An example of juju status on Charmed MySQL Router K8s model:

ubuntu@localhost:~$ juju status
Model 	Controller  Cloud/Region    	Version  SLA      	Timestamp
database  k8s     	microk8s/localhost  3.1.8	unsupported  13:27:08Z

SAAS    	Status  Store  URL
grafana 	active  k8s	admin/cos.grafana
loki    	active  k8s	admin/cos.loki
prometheus  active  k8s	admin/cos.prometheus

App            	   Version              	Status  Scale  Charm           	  Channel 	  Rev  Address     	   Exposed  Message
grafana-agent-k8s  0.35.2               	active  	1  grafana-agent-k8s  stable   	  64   10.152.183.141  no  	 
mysql-k8s      	   8.0.35-0ubuntu0.22.04.1  active  	1  mysql-k8s      	  8.0/stable  127  10.152.183.105  no  	 
mysql-router-k8s   8.0.36-0ubuntu0.22.04.1  active  	1  mysql-router-k8s   8.0/edge	  102  10.152.183.92   no  	 
mysql-test-app 	   0.0.2                	active  	1  mysql-test-app 	  stable   	  36   10.152.183.35   no  	 

Unit              	Workload    Agent  Address   	Ports  Message
grafana-agent-k8s/0*  active	idle   10.1.241.243    	 
mysql-k8s/0*      	  active	idle   10.1.241.239        Primary
mysql-router-k8s/0*   active	idle   10.1.241.240    	 
mysql-test-app/0* 	  active	idle   10.1.241.241    	 

An example of juju status on the COS K8s model:

ubuntu@localhost:~$ juju status
Model  Controller  Cloud/Region    	Version  SLA      	Timestamp
cos	k8s     	microk8s/localhost  3.1.8	unsupported  13:28:02Z

App       	Version  Status  Scale  Charm         	Channel  Rev  Address     	Exposed  Message
alertmanager  0.27.0   active  	1  alertmanager-k8s  stable   106  10.152.183.197  no  	 
catalogue          	active  	1  catalogue-k8s 	stable	33  10.152.183.38   no  	 
grafana   	9.5.3	active  	1  grafana-k8s   	stable   106  10.152.183.238  no  	 
loki      	2.9.4	active  	1  loki-k8s      	stable   124  10.152.183.84   no  	 
prometheus	2.49.1   active  	1  prometheus-k8s	stable   171  10.152.183.182  no  	 
traefik   	2.10.5   active  	1  traefik-k8s   	stable   174  10.0.0.44   	no  	 

Unit         	Workload  Agent  Address   	Ports  Message
alertmanager/0*  active	idle   10.1.241.222    	 
catalogue/0* 	active	idle   10.1.241.225    	 
grafana/0*   	active	idle   10.1.241.228    	 
loki/0*      	active	idle   10.1.241.226    	 
prometheus/0*	active	idle   10.1.241.227    	 
traefik/0*   	active	idle   10.1.241.221    	 

Offer   	Application  Charm       	Rev  Connected  Endpoint          	Interface            	Role
grafana 	grafana  	grafana-k8s 	106  2/2    	grafana-dashboard 	grafana_dashboard    	requirer
loki    	loki     	loki-k8s    	124  2/2    	logging           	loki_push_api        	provider
prometheus  prometheus   prometheus-k8s  171  2/2    	receive-remote-write  prometheus_remote_write  provider

Connect to Grafana web interface

To connect to the Grafana web interface, follow the Browse dashboards section of the MicroK8s “Getting started” guide.

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