prometheus #0

Supports: kubernetes

Deploy this charm on Kubernetes with the CLI. Find out how by reading the docs.


Prometheus is an open source monitoring solution. Prometheus supports aggregating high dimensional data and exposes a powerful query language PromQL. This charm deploys and operates Prometheus on Kubernetes clusters. Prometheus can raise alerts through a relation with the Altermanager charm. Alerting rules for Prometheus need to be provided through a relation with the application that requires alerting. Prometheus provides its own dashboard for data visualization but a richer visualization interface may be obtained through a relation with the Grafana charm.

Prometheus Operator


The Prometheus Operator provides a cluster monitoring solution using Prometheus, which is an open source monitoring system and alerting toolkit.

This repository contains a Juju Charm for deploying the monitoring component of Prometheus in a Kubernetes cluster. The alerting component of prometheus is offered through a separate Charm.


A typical setup using snaps, for deployments to a microk8s cluster can be done using the following commands

sudo snap install microk8s --classic
microk8s.enable dns storage registry dashboard
sudo snap install juju --classic
juju bootstrap microk8s microk8s
juju create-storage-pool operator-storage kubernetes storage-class=microk8s-hostpath


Install the charmcraft tool

sudo snap install charmcraft

Build the charm in this git repository

charmcraft build


Create a Juju model for your monitoring operators

juju add-model lma

Deploy Prometheus using its default configuration.

juju deploy ./prometheus.charm

View the Prometheus dashboard

  1. Use juju status to determine IP of the Prometheus unit
  2. Navigate to http://<IP-Address>:9090 using your browser

If required, remove the deployed monitoring model completely

juju destroy-model -y lma --no-wait --force --destroy-storage


Currently supported relations are


Use your existing Python 3 development environment or create and activate a Python 3 virtualenv

virtualenv -p python3 venv
source venv/bin/activate

Install the development requirements

pip install -r requirements-dev.txt


Just run run_tests:



(string) How frequently rules will be evaluated.
(string) A JSON string of key-value pairs that specify the labels to attach to metrics in this Prometheus instance when they get pulled by an aggregating parent. This is useful in the case of federation where, for example, you want each datacenter to have its own Prometheus instance and then have a global instance that pulls from each of these datacenter instances. By specifying a unique set of external-labels for each datacenter instance, you can easily determine in the aggregating Prometheus instance which datacenter a metric is coming from. Note that you are not limited to one instance per datacenter. The datacenter example here is arbitrary and you are free to organize your federation's hierarchy as you see fit. Ex. '{ "cluster": "datacenter1" }'. Both keys and values may be arbitrarily chosen as you see fit.
(string) Prometheus server log level (only log messages with the given severity or above). Must be one of: [debug, info, warn, error, fatal]. If not set, the Prometheus default one (info) will be used.
(int) The port prometheus will be listening on
(string) The password associated with prometheus-image-username for accessing the registry specified in prometheus-image-path.
(string) The location of the image to use, e.g. "". This setting is required.
(string) The username for accessing the registry specified in prometheus-image-path.
(string) How frequently to scrape targets by default.
(string) How long until a scrape request times out.
(string) SSL certificate to install and use for Prometheus endpoint.
(string) SSL key to use with certificate specified as ssl-cert.
(string) How long to retain samples in the storage. Units Supported: y, w, d, h, m, s
(boolean) This flag enables compression of the write-ahead log (WAL). Depending on your data, you can expect the WAL size to be halved with little extra cpu load.
(string) The URL under which Prometheus is externally reachable (for example, if Prometheus is served via a reverse proxy). Used for generating relative and absolute links back to Prometheus itself. If the URL has a path portion, it will be used to prefix all HTTP endpoints served by Prometheus. If omitted, relevant URL components will be derived automatically.