如何使用Helm将自定义仪表板导入Grafana?

16

我正在尝试理解Helm,我想知道是否有人能够以五岁孩子可以听懂的方式向我解释或者帮我解决一些问题。

所以我运行了以下命令:

helm repo add coreos https://s3-eu-west-1.amazonaws.com/coreos-charts/stable/

然后我使用以下方法安装了kube-prometheus:

helm install coreos/kube-prometheus --name kube-prometheus -f values.yaml --namespace monitoringtest

一切都正常工作,但我正在尝试从JSON文件中添加一些自定义仪表板,我很难理解如何实现。

我遵循了这个链接的指导:https://blogcodevalue.wordpress.com/2018/09/16/automate-grafana-dashboard-import-process/

在我的values.yaml文件中,我添加了以下内容:

serverDashboardConfigmaps:
  - example-dashboards

我理解如果我执行:

helm upgrade --install kube-prometheus -f values.yaml --namespace monitoringtest coreos/kube-prometheus

这将导致Grafana选取名为example-dashboards的ConfigMap,并从custom-dashboards文件夹加载*.json文件。

apiVersion: v1
kind: ConfigMap
metadata:
  name: example-dashboards
data:
{{ (.Files.Glob "custom-dashboards/*.json").AsConfig | indent 2 }}

# Or
# 
# data:
#   custom-dashboard.json: |-
# {{ (.Files.Get "custom.json") | indent 4 }}
#
# The filename (and consequently the key under data) must be in the format `xxx-dashboard.json` or `xxx-datasource.json`
# for them to be picked up.

现在有两个问题:

我如何将上述configmap添加到此helm发行版中?

这个custom-dashboards文件夹在哪里?它在我的笔记本电脑上然后发送到grafana吗?

我需要复制https://s3-eu-west-1.amazonaws.com/coreos-charts/stable/的所有内容到我的笔记本电脑吗?

抱歉解释这一切,但我只是尝试理解这个。


1
我也曾经遇到过这个问题。他们使用grafana-watcher sidecar,在启动时将仪表板和数据源上传到Grafana中。实际上,它的工作方式非常容易出错,我发现它无法在日常使用中使用。我不建议你走这条路。我所做的是使用Grafana Provisioning:https://grafana.com/docs/administration/provisioning。因此,我只需将仪表板挂载到Grafana的/etc/grafana/provisioning/dashboards/目录中。其中一个缺点是您不能再在Grafana UI中保存仪表板-只能导出为JSON并上传到Git。 - Vasili Angapov
1
谢谢,但我不认为我可以使用Helm做到这一点? - tr53
为什么不呢,你可以修改Helm图表来实现它。我也这样做了,但是对原始的Helm图表进行了许多修改。也许我可以在几天后分享一些... - Vasili Angapov
我认为目前这已经超出了我的掌舵技能。 - tr53
能否将仪表板作为URL链接?这个示例似乎展示了如何实现: https://github.com/grafana/helm-charts/blob/main/charts/grafana/README.md#import-dashboards - aholbreich
5个回答

6
在2021年最新版本的kube-prometheus-stack图表中,根据Github上的这个回答,您只需创建一个配置映射,并使用正确的标签和仪表板数据,便可由Grafana Pod中的sidecar进行检查。
例如:
apiVersion: v1
kind: ConfigMap
metadata:
  name: grafana-dashboards-custom-1
  namespace: monitoring
  labels:
     grafana_dashboard: "1"
     prometheus: my-value
     release: prometheus

data:
  app-status.json: |-
    {
    "annotations": {
        "list": [
        {

prometheus: my-value的值来自这个Helm Chart的配置:

prometheus:
  prometheusSpec:
    serviceMonitorSelector:
      matchLabels:
        prometheus: my-value

6

这里,你可以找到一个很好的例子来完成此操作。

它是一个ConfigMapList,可以从给定目录获取所有的JSON文件,并将它们存储到ConfigMaps中,最终由Grafana读取。

{{- $files := .Files.Glob "dashboards/*.json" }}
{{- if $files }}
apiVersion: v1
kind: ConfigMapList
items:
{{- range $path, $fileContents := $files }}
{{- $dashboardName := regexReplaceAll "(^.*/)(.*)\\.json$" $path "${2}" }}
- apiVersion: v1
  kind: ConfigMap
  metadata:
    name: {{ printf "%s-%s" (include "prometheus-operator.fullname" $) $dashboardName | trunc 63 | trimSuffix "-" }}
    namespace: {{ template "prometheus-operator.namespace" . }}
    labels:
      {{- if $.Values.grafana.sidecar.dashboards.label }}
      {{ $.Values.grafana.sidecar.dashboards.label }}: "1"
      {{- end }}
      app: {{ template "prometheus-operator.name" $ }}-grafana
{{ include "prometheus-operator.labels" $ | indent 6 }}
  data:
    {{ $dashboardName }}.json: {{ $.Files.Get $path | toJson }}
{{- end }}
{{- end }}

注意:ConfigMap 的大小可能会受到限制: https://dev59.com/QlQJ5IYBdhLWcg3w05f2#53015758


5

针对未来的人:apiVersion: v1 kind: ConfigMap metadata: name: custom-dashboards data: rpi-dashboard.json: |- {{ .Files.Get "dashboards/rpi-dashboard.json" | indent 4}}路径相对于您的Helm图表。 - Valentin Gazzola

1
当前的方式(2023年)很简单。Helm图表来自artifacthub.io。
首先,将仪表盘的JSON文件放在一个子目录中。这里是在dashboards/node-exporter.json中,用于标准的node-exporter仪表盘。
然后,在values.yaml文件中取消注释dashboardprovider部分。
dashboardProviders:
  dashboardproviders.yaml:
    apiVersion: 1
    providers:
    - name: 'default'
      orgId: 1
      folder: ''
      type: file
      disableDeletion: false
      editable: true
      options:
        path: /var/lib/grafana/dashboards/default

然后将文件添加到“dashboards: default:”中。
dashboards:
  default:
    node-exporter-dashboard:
      file: dashboards/node-exporter.json

然后执行helm install或helm upgrade命令,grafana-dashboards-default ConfigMap将弹出,可以在界面中进行选择。该configmap包含了node-exporter-dashboard.json的完整json内容。

有没有关于如何做这个的文档链接? - undefined
1
我想我在这里找到了。https://community.grafana.com/t/how-to-upload-dashboards-as-json-files-to-kubernetes-via-helm/59731 - undefined
美丽,谢谢你! - undefined

0

有不同的方法可以实现。这也取决于Grafana/Prometheus Stack Chart版本。信息在这里:https://github.com/grafana/helm-charts/tree/main/charts/grafana#import-dashboards (Grafana图表可以覆盖kube-prometheus-stack值,因为后者依赖于Grafana)

对我来说肯定有效的是仪表板的Sidecar。 如果您想为所有Grafana组织导入仪表板,还需要使用dashboardProviders: {} 一些详细信息:https://grafana.com/tutorials/provision-dashboards-and-data-sources/


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接