--- apiVersion: apps/v1 kind: StatefulSet metadata: name: grafana labels: app: grafana spec: serviceName: grafana replicas: 1 selector: matchLabels: app: grafana template: metadata: labels: app: grafana spec: volumes: - name: data emptyDir: {} - name: tmp emptyDir: {} - name: config configMap: name: grafana-config - name: config-datasources configMap: name: grafana-config-datasources - name: config-dashboards configMap: name: grafana-config-dashboards - name: dashboards configMap: name: grafana-dashboards containers: - name: grafana image: grafana/grafana:latest imagePullPolicy: IfNotPresent ports: - containerPort: 3000 name: http env: - name: GF_DATABASE_TYPE value: sqlite3 - name: GF_DATABASE_PATH value: /var/lib/grafana/grafana.db - name: GF_AUTH_GENERIC_OAUTH_CLIENT_ID valueFrom: secretKeyRef: name: oidc-client-grafana-owner-secrets key: OIDC_CLIENT_ID - name: GF_AUTH_GENERIC_OAUTH_SCOPES valueFrom: secretKeyRef: name: oidc-client-grafana-owner-secrets key: OIDC_AVAILABLE_SCOPES - name: GF_AUTH_GENERIC_OAUTH_AUTH_URL valueFrom: secretKeyRef: name: oidc-client-grafana-owner-secrets key: OIDC_IDP_AUTH_URI - name: GF_AUTH_GENERIC_OAUTH_TOKEN_URL value: "https://auth.ee-lte-1.codemowers.io/token" - name: GF_AUTH_GENERIC_OAUTH_API_URL valueFrom: secretKeyRef: name: oidc-client-grafana-owner-secrets key: OIDC_IDP_URI - name: GF_AUTH_GENERIC_OAUTH_CLIENT_SECRET valueFrom: secretKeyRef: name: oidc-client-grafana-owner-secrets key: OIDC_CLIENT_SECRET - name: GF_AUTH_GENERIC_OAUTH_USE_ID_TOKEN value: "false" - name: GF_SERVER_DOMAIN value: grafana-sala.ee-lte-1.codemowers.io - name: GF_SERVER_ROOT_URL value: "https://%(domain)s/" - name: GF_AUTH_OAUTH_ALLOW_INSECURE_EMAIL_LOOKUP value: "true" - name: GF_AUTH_BASIC_ENABLED value: "false" - name: GF_AUTH_GENERIC_OAUTH_ENABLED value: "true" - name: GF_AUTH_GENERIC_OAUTH_ALLOW_SIGN_UP value: "true" - name: GF_AUTH_GENERIC_OAUTH_USE_PKCE value: "true" - name: GF_AUTH_GENERIC_OAUTH_ALLOW_ASSIGN_GRAFANA_ADMIN value: "true" - name: GF_SECURITY_DISABLE_INITIAL_ADMIN_CREATION value: "true" - name: GF_AUTH_GENERIC_OAUTH_ROLE_ATTRIBUTE_PATH value: "contains(groups[*], 'github.com:codemowers:admins') && 'Admin' || 'Viewer'" volumeMounts: - name: grafana-storage mountPath: /var/lib/grafana - name: config-datasources mountPath: /etc/grafana/provisioning/datasources - name: config-dashboards mountPath: /etc/grafana/provisioning/dashboards - name: dashboards mountPath: /var/lib/grafana/dashboards/ readinessProbe: httpGet: path: /api/health port: 3000 initialDelaySeconds: 10 periodSeconds: 10 livenessProbe: httpGet: path: /api/health port: 3000 initialDelaySeconds: 30 periodSeconds: 10 volumeClaimTemplates: - metadata: name: grafana-storage spec: accessModes: - ReadWriteOnce storageClassName: sqlite resources: requests: storage: 5Gi --- apiVersion: codemowers.cloud/v1beta1 kind: OIDCClient metadata: name: grafana namespace: memelord-sala spec: displayName: Grafana sala uri: https://grafana-sala.ee-lte-1.codemowers.io/login/generic_oauth redirectUris: - https://grafana-sala.ee-lte-1.codemowers.io/login/generic_oauth grantTypes: - authorization_code - refresh_token responseTypes: - code availableScopes: - openid - profile - groups pkce: true --- apiVersion: v1 kind: ConfigMap metadata: name: grafana-config-datasources data: prometheus.yaml: | apiVersion: 1 prune: true datasources: - name: Prometheus type: prometheus orgId: 1 url: http://prometheus-operated.monitoring.svc.cluster.local:9090 version: 1 editable: false - name: Thanos type: prometheus orgId: 1 url: http://thanos-query.monitoring.svc.cluster.local:10902 version: 1 editable: false - name: Loki type: loki orgId: 1 url: http://loki.monitoring.svc.cluster.local:3100 version: 1 editable: false --- apiVersion: v1 kind: ConfigMap metadata: name: grafana-config-dashboards data: dashboards.yaml: | apiVersion: 1 providers: - name: dashboards orgId: 1 folder: Dashboards type: file options: path: /var/lib/grafana/dashboards/ --- apiVersion: v1 kind: ConfigMap metadata: name: grafana-dashboards data: LogAggregator.json: | { "annotations": { "list": [ { "builtIn": 1, "datasource": { "type": "grafana", "uid": "-- Grafana --" }, "enable": true, "hide": true, "iconColor": "rgba(0, 211, 255, 1)", "name": "Annotations & Alerts", "type": "dashboard" } ] }, "editable": true, "fiscalYearStartMonth": 0, "graphTooltip": 0, "id": 1, "links": [], "panels": [ { "datasource": { "type": "loki", "uid": "P8E80F9AEF21F6940" }, "fieldConfig": { "defaults": { "color": { "mode": "palette-classic" }, "custom": { "axisBorderShow": false, "axisCenteredZero": false, "axisColorMode": "text", "axisLabel": "", "axisPlacement": "auto", "barAlignment": 0, "barWidthFactor": 0.6, "drawStyle": "line", "fillOpacity": 0, "gradientMode": "opacity", "hideFrom": { "legend": false, "tooltip": false, "viz": false }, "insertNulls": false, "lineInterpolation": "linear", "lineWidth": 1, "pointSize": 5, "scaleDistribution": { "type": "linear" }, "showPoints": "auto", "showValues": false, "spanNulls": false, "stacking": { "group": "A", "mode": "normal" }, "thresholdsStyle": { "mode": "off" } }, "mappings": [], "thresholds": { "mode": "absolute", "steps": [ { "color": "green", "value": 0 }, { "color": "red", "value": 80 } ] }, "unit": "msg/s" }, "overrides": [] }, "gridPos": { "h": 8, "w": 24, "x": 0, "y": 0 }, "id": 2, "options": { "legend": { "calcs": [], "displayMode": "list", "placement": "bottom", "showLegend": true }, "tooltip": { "hideZeros": false, "mode": "single", "sort": "none" } }, "pluginVersion": "12.2.1", "targets": [ { "datasource": { "type": "loki", "uid": "P8E80F9AEF21F6940" }, "direction": "backward", "editorMode": "code", "expr": "sum by (detected_level) (count_over_time ({app=~\"$app\",namespace=~\"$namespace\"}[1m]))", "legendFormat": "{{detected_level}}", "queryType": "range", "refId": "A" } ], "title": "Log records", "type": "timeseries" }, { "datasource": { "type": "loki", "uid": "P8E80F9AEF21F6940" }, "fieldConfig": { "defaults": {}, "overrides": [] }, "gridPos": { "h": 20, "w": 24, "x": 0, "y": 8 }, "id": 1, "options": { "dedupStrategy": "none", "enableInfiniteScrolling": false, "enableLogDetails": true, "prettifyLogMessage": true, "showCommonLabels": true, "showLabels": true, "showTime": true, "sortOrder": "Descending", "wrapLogMessage": true }, "pluginVersion": "12.2.1", "targets": [ { "datasource": { "type": "loki", "uid": "P8E80F9AEF21F6940" }, "direction": "backward", "editorMode": "code", "expr": "{app=~\"$app\",namespace=~\"$namespace\"}", "queryType": "range", "refId": "A" } ], "title": "Loki", "type": "logs" } ], "preload": false, "refresh": "30s", "schemaVersion": 42, "tags": [], "templating": { "list": [ { "allValue": ".*", "current": { "text": "All", "value": [ "$__all" ] }, "datasource": { "type": "loki", "uid": "P8E80F9AEF21F6940" }, "definition": "", "includeAll": true, "multi": true, "name": "app", "options": [], "query": { "label": "app", "refId": "LokiVariableQueryEditor-VariableQuery", "stream": "", "type": 1 }, "refresh": 1, "regex": "", "sort": 5, "type": "query" }, { "allValue": ".+", "current": { "text": "All", "value": [ "$__all" ] }, "datasource": { "type": "loki", "uid": "P8E80F9AEF21F6940" }, "definition": "", "includeAll": true, "label": "namespace", "multi": true, "name": "namespace", "options": [], "query": { "label": "namespace", "refId": "LokiVariableQueryEditor-VariableQuery", "stream": "", "type": 1 }, "refresh": 1, "regex": "", "type": "query" } ] }, "time": { "from": "now-5m", "to": "now" }, "timepicker": {}, "timezone": "browser", "title": "Log Aggregator", "uid": "lawf6g2", "version": 1 }