External grafana

A basic example configuring an external grafana instance.

In this case we create a grafana instance through the operator just to showcase that it can be done.

Notice the instanceSelector of the grafana dashboard and the grafana instances. You will notice that it’s only the grafana instance called external-grafana that will match with the grafana dashboard called external-grafanadashboard-sample.

If you look in the status of external-grafana you will also see the hash of the dashboard that have been applied.

kubectl get grafanas.grafana.integreatly.org external-grafana -o yaml
# redacted output
status:
  adminUrl: http://test.io
  dashboards:
  - grafana-operator-system/external-grafanadashboard-sample/cb1688d2-547a-465b-bc49-df3ccf3da883
  stage: complete
  stageStatus: success

FYI

If you want run the same test locally on your computer remember to ether update the ingres host to match your settings or change client.preferIngress to false assuming that you run the operator within the cluster.

---
apiVersion: grafana.integreatly.org/v1beta1
kind: Grafana
metadata:
  name: grafana
  labels:
    dashboards: "grafana"
spec:
  config:
    log:
      mode: "console"
    auth:
      disable_login_form: "false"
    security:
      admin_user: root
      admin_password: secret
  ingress:
    spec:
      ingressClassName: nginx
      rules:
        - host: test.io
          http:
            paths:
              - backend:
                  service:
                    name: grafana-service
                    port:
                      number: 3000
                path: /
                pathType: Prefix
---
# Use the same grafana instance that we just created, notice the ingress config
apiVersion: grafana.integreatly.org/v1beta1
kind: Grafana
metadata:
  name: external-grafana
  labels:
    dashboards: "external-grafana"
spec:
  external:
    url: http://test.io
    adminPassword:
      name: grafana-admin-credentials
      key: GF_SECURITY_ADMIN_PASSWORD
    adminUser:
      name: grafana-admin-credentials
      key: GF_SECURITY_ADMIN_USER
---
apiVersion: grafana.integreatly.org/v1beta1
kind: GrafanaDashboard
metadata:
  name: external-grafanadashboard-sample
spec:
  instanceSelector:
    matchLabels:
      dashboards: "external-grafana"
  json: >
    {
      "id": null,
      "title": "Simple Dashboard",
      "tags": [],
      "style": "dark",
      "timezone": "browser",
      "editable": true,
      "hideControls": false,
      "graphTooltip": 1,
      "panels": [],
      "time": {
        "from": "now-6h",
        "to": "now"
      },
      "timepicker": {
        "time_options": [],
        "refresh_intervals": []
      },
      "templating": {
        "list": []
      },
      "annotations": {
        "list": []
      },
      "refresh": "5s",
      "schemaVersion": 17,
      "version": 0,
      "links": []
    }