<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>OS on Zwindler's Reflection</title><link>https://blog.zwindler.fr/categories/os/</link><description>Recent content in OS on Zwindler's Reflection</description><generator>Hugo -- gohugo.io</generator><language>fr</language><copyright>Licensed under CC BY-SA 4.0</copyright><lastBuildDate>Thu, 12 Dec 2024 18:00:00 +0200</lastBuildDate><atom:link href="https://blog.zwindler.fr/categories/os/index.xml" rel="self" type="application/rss+xml"/><item><title>Recompiler les dashboards Grafana "MetaMonitoring" de Mimir pour Kubernetes</title><link>https://blog.zwindler.fr/2024/12/12/recompiler-dashboards-mimir-distributed-grafana/</link><pubDate>Thu, 12 Dec 2024 18:00:00 +0200</pubDate><guid>https://blog.zwindler.fr/2024/12/12/recompiler-dashboards-mimir-distributed-grafana/</guid><description>&lt;img src="https://blog.zwindler.fr/2020/01/20200102_084825-2.webp" alt="Featured image of post Recompiler les dashboards Grafana "MetaMonitoring" de Mimir pour Kubernetes" /&gt;&lt;h2 id="contexte"&gt;Contexte
&lt;/h2&gt;&lt;p&gt;Quand on travaille sur l&amp;rsquo;observabilité, il y a un outil qui vient toujours en tête en premier : Grafana.&lt;/p&gt;
&lt;p&gt;&lt;a class="link" href="https://grafana.com/" target="_blank" rel="noopener"
&gt;Grafana&lt;/a&gt; est un outil de visualisation open source développé par Grafana Labs, et je suis sûr que vous le connaissez tous (et j&amp;rsquo;ai aussi &lt;a class="link" href="https://blog.zwindler.fr/recherche/?keyword=grafana" target="_blank" rel="noopener"
&gt;écrit à son sujet de nombreuses fois&lt;/a&gt;). Mais au-delà de cela, ils développent également beaucoup d&amp;rsquo;autres outils utiles dans le paysage de l&amp;rsquo;observabilité, au point qu&amp;rsquo;on peut en théorie construire toute sa stack d&amp;rsquo;observabilité uniquement avec des outils Grafana Labs.&lt;/p&gt;
&lt;p&gt;Pour répondre au manque de stockage long terme de Prometheus et au manque de fonctionnalités de haute disponibilité (je n&amp;rsquo;ai JAMAIS compris pourquoi l&amp;rsquo;équipe Prometheus refuse de travailler là-dessus), Grafana Labs a forké Cortex il y a quelques années et l&amp;rsquo;a renommé Mimir.&lt;/p&gt;
&lt;p&gt;Je ne vais pas couvrir l&amp;rsquo;installation de Mimir ici, il y a plein de tutoriels sur Internet et une documentation officielle pour ça.&lt;/p&gt;
&lt;p&gt;À la place, je vais parler d&amp;rsquo;un problème que j&amp;rsquo;ai avec le chart helm officiel de Mimir, et plus précisément avec les dashboards Grafana intégrés qui viennent avec.&lt;/p&gt;
&lt;h2 id="des-dashboards-vous-dites-"&gt;Des dashboards, vous dites ?
&lt;/h2&gt;&lt;p&gt;Mimir est livré avec de nombreux dashboards Grafana utiles pour s&amp;rsquo;assurer que les composants fonctionnent correctement.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2024/12/mimir-dashboard.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;Ces dashboards sont compatibles avec les différents modes de déploiement de Mimir. Dans Kubernetes, si vous utilisez le &lt;a class="link" href="https://github.com/grafana/mimir/blob/main/operations/helm/charts/mimir-distributed/values.yaml" target="_blank" rel="noopener"
&gt;chart helm officiel mimir-distributed&lt;/a&gt;, cela peut être activé par une simple valeur :&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;metaMonitoring&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;dashboards&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;enabled&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;Mais&lt;/strong&gt;, par défaut, tous les dashboards installés via la valeur &lt;code&gt;metaMonitoring&lt;/code&gt; dans les charts helm de Mimir sont des manifestes JSON précompilés utilisant &lt;strong&gt;jsonnet/mixin&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Par exemple, voici la version précompilée du &amp;ldquo;Mimir / Overview dashboard&amp;rdquo; :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a class="link" href="https://github.com/grafana/mimir/blob/2640b8f72127548e9e3da281a763476b03fb4aae/operations/mimir-mixin-compiled/dashboards/mimir-overview.json" target="_blank" rel="noopener"
&gt;github.com/grafana/mimir/blob/2640b8f72127548e9e3da281a763476b03fb4aae/operations/mimir-mixin-compiled/dashboards/mimir-overview.json&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Par conception, &lt;strong&gt;vous ne pouvez pas changer des choses comme le préfixe du nom des pods mimir&lt;/strong&gt;, ce qui rend ces dashboards précompilés inutiles dans un environnement type helm où le nom de release (mimir-) est un préfixe du pod.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubectl -n monitoring get pods
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;NAME READY STATUS RESTARTS AGE
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;mimir-alertmanager-0 1/1 Running &lt;span class="m"&gt;0&lt;/span&gt; 24h
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;mimir-alertmanager-1 1/1 Running &lt;span class="m"&gt;0&lt;/span&gt; 24h
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;mimir-compactor-0 1/1 Running &lt;span class="m"&gt;0&lt;/span&gt; 24h
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;mimir-distributor-5d668b479f-ksltr 1/1 Running &lt;span class="m"&gt;1&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;24h ago&lt;span class="o"&gt;)&lt;/span&gt; 6d1h
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;...
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Dans ce cas, tous les dashboards seront cassés, affichant tous &amp;ldquo;no data&amp;rdquo; dans Grafana car les données seront incorrectement filtrées. Par exemple, le panneau &amp;ldquo;Write requests / sec&amp;rdquo; dans &amp;ldquo;Mimir / Overview dashboard&amp;rdquo; a un label &lt;code&gt;job=~&amp;quot;($namespace)/((distributor...&lt;/code&gt;, mais notre pod est &lt;code&gt;mimir-distributor&lt;/code&gt;, pas &lt;code&gt;distributor&lt;/code&gt; :&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;sum by (status) (
label_replace(label_replace(rate(cortex_request_duration_seconds_count{cluster=~&amp;#34;$cluster&amp;#34;, job=~&amp;#34;($namespace)/((distributor.*|cortex|mimir|mimir-write.*))&amp;#34;, route=~&amp;#34;/distributor.Distributor/Push|/httpgrpc.*|api_(v1|prom)_push|otlp_v1_metrics&amp;#34;}[$__rate_interval]),
&amp;#34;status&amp;#34;, &amp;#34;${1}xx&amp;#34;, &amp;#34;status_code&amp;#34;, &amp;#34;([0-9])..&amp;#34;),
&amp;#34;status&amp;#34;, &amp;#34;${1}&amp;#34;, &amp;#34;status_code&amp;#34;, &amp;#34;([a-zA-Z]+)&amp;#34;))
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;La solution est de &lt;strong&gt;désactiver le flag metaMonitoring&lt;/strong&gt; du chart, et de construire / déployer les dashboards séparément.&lt;/p&gt;
&lt;h2 id="procédure"&gt;Procédure
&lt;/h2&gt;&lt;p&gt;Récupérez les sources de Mimir :&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;git clone https://github.com/grafana/mimir.git
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Heureusement, les fichiers jsonnet/mixin incluent une variable &lt;code&gt;job_prefix&lt;/code&gt; qui va nous aider à corriger cela :&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sed -i.bak &lt;span class="s2"&gt;&amp;#34;s/job_prefix: &amp;#39;(\$namespace)\/&amp;#39;,/job_prefix: &amp;#39;(\$namespace)\/mimir-&amp;#39;,/&amp;#34;&lt;/span&gt; operations/mimir-mixin/config.libsonnet
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Recompilez les dashboards :&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;make build-mixin
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;podman image inspect grafana/mimir-build-image:pr9491-80f5778956 &amp;gt;/dev/null 2&amp;gt;&lt;span class="p"&gt;&amp;amp;&lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; podman pull grafana/mimir-build-image:pr9491-80f5778956
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;podman tag grafana/mimir-build-image:pr9491-80f5778956 grafana/mimir-build-image:latest
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;[&lt;/span&gt;...&lt;span class="o"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;make: Leaving directory &lt;span class="s1"&gt;&amp;#39;/go/src/github.com/grafana/mimir&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; 10,10 real 0,02 user 0,01 sys
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Note : Si vous n&amp;rsquo;avez pas &lt;code&gt;docker&lt;/code&gt; sur votre machine (j&amp;rsquo;utilise podman), la commande &lt;code&gt;make&lt;/code&gt; va échouer car elle ne peut pas trouver docker et le binaire &lt;code&gt;docker&lt;/code&gt; est hardcodé dans les commandes make. Modifiez le Makefile pour remplacer &lt;code&gt;docker&lt;/code&gt; par &lt;code&gt;podman&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Les fichiers json dans operations/mimir-mixin-compiled/dashboards sont maintenant construits avec les noms de pods corrects.&lt;/p&gt;
&lt;p&gt;Créez un chart helm grafana-dashboards (appelé &lt;strong&gt;yourDashboardsChart&lt;/strong&gt; ici).&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;helm create yourDashboardsChart
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Dans ce chart, créez un répertoire &lt;code&gt;src/dashboards/mimir&lt;/code&gt; (pour les sources des dashboards json) à côté du répertoire classique &lt;code&gt;templates&lt;/code&gt; contenant les manifestes YAML go-templatés. Nous allons créer les fichiers helm gotemplate juste après :&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;cp operations/mimir-mixin-compiled/dashboards/* ../yourDashboardsChart/src/dashboards/mimir
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Maintenant, pour chaque fichier json généré par jsonnet, nous allons créer un fichier yaml helm gotemplaté, qui à son tour créera une ConfigMap pour chaque dashboard dans notre cluster Kubernetes. Ils ressembleront à ceci :&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nn"&gt;---&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;# Source: mimir-distributed/templates/metamonitoring/grafana-dashboards.yaml&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;apiVersion&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;v1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;kind&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;ConfigMap&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;metadata&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;mimir-alertmanager-dashboard&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;namespace&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;{{ $.Release.Namespace }}&amp;#39;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;labels&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;grafana_dashboard&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;1&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;annotations&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;k8s-sidecar-target-directory&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;/tmp/dashboards/Mimir Dashboards&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;data&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;mimir-alertmanager.json&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;|-&lt;/span&gt;&lt;span class="sd"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; {{ $.Files.Get &amp;#34;src/dashboards/mimir/mimir-alertmanager.json&amp;#34; | fromJson | toJson }}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Pour accélérer le processus, vous pouvez réutiliser &lt;code&gt;helm template&lt;/code&gt; et quelques commandes bash pour générer tous les fichiers helm gotemplate pour vous :&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;helm repo add grafana https://grafana.github.io/helm-charts
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;helm repo update
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;mkdir -p mimir
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;helm -n monitoring template mimir grafana/mimir-distributed --set metaMonitoring.dashboards.enabled&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nb"&gt;true&lt;/span&gt; &amp;gt; helm-output.yaml
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Compter le nombre de séparateurs de documents&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;doc_count&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="k"&gt;$(&lt;/span&gt;grep -c &lt;span class="s1"&gt;&amp;#39;^---$&amp;#39;&lt;/span&gt; helm-output.yaml&lt;span class="k"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Diviser le fichier YAML en fichiers séparés pour chaque document&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;csplit -f mimir/helm-output- helm-output.yaml &lt;span class="s1"&gt;&amp;#39;/---/&amp;#39;&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;{&lt;/span&gt;&lt;span class="k"&gt;$((&lt;/span&gt;doc_count &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="m"&gt;2&lt;/span&gt;&lt;span class="k"&gt;))&lt;/span&gt;&lt;span class="s2"&gt;}&amp;#34;&lt;/span&gt; &amp;gt;/dev/null
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Un peu de nettoyage&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;for&lt;/span&gt; file in mimir/helm-output-*&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; grep -q &lt;span class="s1"&gt;&amp;#39;kind: ConfigMap&amp;#39;&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="nv"&gt;$file&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; grep -q &lt;span class="s1"&gt;&amp;#39;dashboard&amp;#39;&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="nv"&gt;$file&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;then&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nv"&gt;name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="k"&gt;$(&lt;/span&gt;yq &lt;span class="nb"&gt;eval&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;.metadata.name&amp;#39;&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="nv"&gt;$file&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="k"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; yq &lt;span class="nb"&gt;eval&lt;/span&gt; -i &lt;span class="s1"&gt;&amp;#39;del(.metadata.labels.&amp;#34;helm.sh/chart&amp;#34;, .metadata.labels.&amp;#34;app.kubernetes.io/name&amp;#34;, .metadata.labels.&amp;#34;app.kubernetes.io/instance&amp;#34;, .metadata.labels.&amp;#34;app.kubernetes.io/version&amp;#34;, .metadata.labels.&amp;#34;app.kubernetes.io/managed-by&amp;#34;)&amp;#39;&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="nv"&gt;$file&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; yq &lt;span class="nb"&gt;eval&lt;/span&gt; -i &lt;span class="s1"&gt;&amp;#39;.metadata.namespace = &amp;#34;{{ $.Release.Namespace }}&amp;#34;&amp;#39;&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="nv"&gt;$file&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; yq &lt;span class="nb"&gt;eval&lt;/span&gt; -i &lt;span class="s1"&gt;&amp;#39;.data |= with_entries(.value = &amp;#34;{{ $.Files.Get \&amp;#34;src/dashboards/mimir/&amp;#34; + .key + &amp;#34;\&amp;#34; | fromJson | toJson }}&amp;#34;)&amp;#39;&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="nv"&gt;$file&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; mv &lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="nv"&gt;$file&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;mimir/&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;name&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;.yaml&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;else&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; rm &lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="nv"&gt;$file&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;fi&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;done&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;mv mimir/* ../yourDashboardsChart/templates/mimir
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Maintenant, vous devriez avoir tous les fichiers nécessaires pour régénérer les dashboards Grafana dans votre cluster Kubernetes, avec le préfixe correct.&lt;/p&gt;
&lt;p&gt;Have fun!&lt;/p&gt;
&lt;h2 id="source"&gt;Source
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;a class="link" href="https://grafana.com/docs/mimir/latest/manage/monitor-grafana-mimir/requirements/" target="_blank" rel="noopener"
&gt;https://grafana.com/docs/mimir/latest/manage/monitor-grafana-mimir/requirements/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://grafana.com/docs/mimir/latest/manage/monitor-grafana-mimir/installing-dashboards-and-alerts/" target="_blank" rel="noopener"
&gt;https://grafana.com/docs/mimir/latest/manage/monitor-grafana-mimir/installing-dashboards-and-alerts/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description></item></channel></rss>