Skip to content

Instantly share code, notes, and snippets.

@mjmenger
Last active May 15, 2024 17:49
Show Gist options
  • Save mjmenger/9f02d7bb05b684e7ff86c40fcd8741d5 to your computer and use it in GitHub Desktop.
Save mjmenger/9f02d7bb05b684e7ff86c40fcd8741d5 to your computer and use it in GitHub Desktop.
Grafana on F5 distributed cloud

Grafana on XC

Deploy App Stack

reference to App Stack documentation

Deploy Grafana

edit the csrf_trusted_origins value to domain that will be used for the grafana http load balancer, and save as grafana.ini.

#################################### Paths ####################################
[paths]
#################################### Server ####################################
[server]

[server.custom_response_headers]

#################################### GRPC Server #########################

#################################### Database ####################################
[database]

################################### Data sources #########################
[datasources]

#################################### Cache server #############################
[remote_cache]

#################################### Data proxy ###########################
[dataproxy]

#################################### Analytics ####################################
[analytics]

#################################### Security ####################################
[security]

csrf_trusted_origins = nupic-grafana.f5xc-demo.net

[security.encryption]

#################################### Snapshots ###########################
[snapshots]

#################################### Dashboards History ##################
[dashboards]

#################################### Users ###############################
[users]

[secretscan]

[service_accounts]

[auth]

#################################### Anonymous Auth ######################
[auth.anonymous]

#################################### GitHub Auth ##########################
[auth.github]

#################################### GitLab Auth #########################
[auth.gitlab]

#################################### Google Auth ##########################
[auth.google]

#################################### Grafana.com Auth ####################
[auth.grafana_com]

#################################### Azure AD OAuth #######################
[auth.azuread]

#################################### Okta OAuth #######################
[auth.okta]

#################################### Generic OAuth ##########################
[auth.generic_oauth]

#################################### Basic Auth ##########################
[auth.basic]

#################################### Auth Proxy ##########################
[auth.proxy]

#################################### Auth JWT ##########################
[auth.jwt]

#################################### Auth LDAP ##########################
[auth.ldap]

#################################### AWS ###########################
[aws]

#################################### Azure ###############################
[azure]

#################################### Role-based Access Control ###########
[rbac]

#################################### SMTP / Emailing ##########################
[smtp]

[smtp.static_headers]

[emails]

#################################### Logging ##########################
[log]

[log.console]

[log.file]

[log.syslog]

[log.frontend]

#################################### Usage Quotas ########################
[quota]

#################################### Unified Alerting ####################
[unified_alerting]

[unified_alerting.reserved_labels]

[unified_alerting.state_history]

[unified_alerting.state_history.external_labels]

[unified_alerting.upgrade]

#################################### Alerting ############################
[alerting]

#################################### Annotations #########################
[annotations]

[annotations.dashboard]

[annotations.api]

#################################### Explore #############################
[explore]

#################################### Help #############################
[help]

#################################### Profile #############################
[profile]

#################################### News #############################
[news]

#################################### Query #############################
[query]

#################################### Query History #############################
[query_history]

#################################### Internal Grafana Metrics ##########################

[metrics]

[metrics.environment_info]

[metrics.graphite]

#################################### Grafana.com integration  ##########################

[grafana_com]

#################################### Distributed tracing ############

[tracing.jaeger]

[tracing.opentelemetry]

[tracing.opentelemetry.jaeger]

[tracing.opentelemetry.otlp]

#################################### External image storage ##########################
[external_image_storage]

[external_image_storage.s3]

[external_image_storage.webdav]

[external_image_storage.gcs]

[external_image_storage.azure_blob]

[external_image_storage.local]

[rendering]

[panels]

[plugins]

#################################### Grafana Live ##########################################
[live]

#################################### Grafana Image Renderer Plugin ##########################
[plugin.grafana-image-renderer]

[support_bundles]

[enterprise]

[feature_toggles]

[date_formats]

[expressions]

[geomap]

[navigation.app_sections]

[navigation.app_standalone_pages]

#################################### Secure Socks5 Datasource Proxy #####################################
[secure_socks_datasource_proxy]

################################## Feature Management ##############################################
[feature_management]

#################################### Public Dashboards #####################################
[public_dashboards]

What domain name will you use?

Create grafana.ini ConfigMap

use the previously created grafana.ini file to create a ConfigMap

k create configmap -n grafana grafana-ini-cm --from-file=grafana.ini

Deploy Grafana

save the following as grafana.yaml

---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: grafana-pvc
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 1Gi
---
apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: grafana
  name: grafana
spec:
  selector:
    matchLabels:
      app: grafana
  template:
    metadata:
      labels:
        app: grafana
    spec:       
      securityContext:
        fsGroup: 472
        supplementalGroups:
          - 0
      containers:
        - name: grafana
          image: grafana/grafana:latest
          imagePullPolicy: IfNotPresent
          ports:
            - containerPort: 3000
              name: http-grafana
              protocol: TCP
          readinessProbe:
            failureThreshold: 3
            httpGet:
              path: /robots.txt
              port: 3000
              scheme: HTTP
            initialDelaySeconds: 10
            periodSeconds: 30
            successThreshold: 1
            timeoutSeconds: 2
          livenessProbe:
            failureThreshold: 3
            initialDelaySeconds: 30
            periodSeconds: 10
            successThreshold: 1
            tcpSocket:
              port: 3000
            timeoutSeconds: 1
          resources:
            requests:
              cpu: 250m
              memory: 750Mi
          volumeMounts:
            - name: grafana-pv
              mountPath: /var/lib/grafana
            - name: grafana-ini-vol
              mountPath: /etc/grafana/grafana.ini
              subPath: grafana.ini
      volumes:
        - name: grafana-pv
          persistentVolumeClaim:
            claimName: grafana-pvc
        - name: grafana-ini-vol
          configMap:
            name: grafana-ini-cm
---
apiVersion: v1
kind: Service
metadata:
  name: grafana
spec:
  ports:
    - port: 3000
      protocol: TCP
      targetPort: http-grafana
  selector:
    app: grafana
  sessionAffinity: None
  type: LoadBalancer

apply the grafana.yaml manifest

kubectl apply -n grafana -f grafana.yaml

Configure HTTP Load Balancer

Base configuration

configure the HTTP load balancer with an origin pool pointing to the grafana service running App Stack.

TBD details

Websocket for Grafana

HTTP Load Balancer -> Routes -> New Route

  • Simple Route
    • ANY
    • Path
      • /live/api

Advanced Options -> Protocol Upgrades -> Enable Websocket -> Use Websocket

Save

Apply Apply Save etc.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment