Introduction
Nous allons voir comment configurer une datasource de type ClickHouse dansGrafana.
Historiquement développé par la société russe Yandex et publié sous license libre depuis 2016, ClickHouse est une base de données conçue pour la haute performance qui permet l’analyse de données mises à jour en temps réel. ClickHouse est notamment utilisé par Cloudflare pour stocker et traiter les logs provenant de ses serveurs DNS.
Gestion de l’accès à Clickhouse
Pour accéder à la base Clickhouse qui est un service managé externe au cluster Kubernetes nous avons besoin de créer les ressources suivantes dans le cluster.
Un Service sans Selector pour accéder au serveur Clickhouse depuis l’intérieur du cluster Kubernetes en utilisant le nom DNS clickhouse
:
clickhouse.service.yaml
ouvrir
---
apiVersion: v1
kind: Service
metadata:
name: clickhouse
spec:
ports:
- protocol: TCP
port: 9000
targetPort: 9440
Un EndpointSlice pour indiquer l’adresse IP et le port d’écoute réel du serveur Clickhouse à l’extérieur du cluster Kubernetes :
clickhouse.endpointslice.yaml
ouvrir
---
apiVersion: discovery.k8s.io/v1
kind: EndpointSlice
metadata:
name: clickhouse
labels:
kubernetes.io/service-name: clickhouse
addressType: IPv4
ports:
- name: '' # empty because port 9440 is not assigned as a well-known
# port (by IANA)
appProtocol: http
protocol: TCP
port: 9440
endpoints:
- addresses:
- "1.2.3.4"
Un Secret pour stocker les crédentiels nécessaires pour la connexion à la base de données CLickhouse :
clickhouse.secret.yaml
ouvrir
---
apiVersion: v1
kind: Secret
metadata:
name: clickhouse
stringData:
CLICKHOUSE_DB: database
CLICKHOUSE_DEFAULT_ACCESS_MANAGEMENT: "1"
CLICKHOUSE_PASSWORD: "Mon super password ultra sécurisé !"
CLICKHOUSE_USER: grafana
Configuration de Grafana
Clickhouse ne fait pas partie des Datasources proposées par défaut dans Grafana, nous devons donc passer par l’installation du plugin ClickHouse.
Pour charger automatiquement ce plugin dans notre instance Grafana, nous pouvons configurer le fichier de valeurs de notre chart Helm Grafana comme suit :
grafana.values.yaml
ouvrir
---
datasources:
datasources.yaml:
apiVersion: 1
datasources:
- name: ClickHouse
type: grafana-clickhouse-datasource
jsonData:
defaultDatabase: $__file{/etc/secrets/clickhouse/CLICKHOUSE_DB}
port: 9000
server: clickhouse
username: $__file{/etc/secrets/clickhouse/CLICKHOUSE_USER}
tlsSkipVerify: false
secure: true
secureJsonData:
password: $__file{/etc/secrets/clickhouse/CLICKHOUSE_PASSWORD}
extraSecretMounts:
- name: clickhouse-secret-mount
secretName: clickhouse
defaultMode: 0440
mountPath: /etc/secrets/clickhouse
readOnly: true
grafana.ini:
analytics:
check_for_updates: true
grafana_net:
url: https://grafana.net
log:
mode: console
level: debug
paths:
data: /var/lib/grafana/
logs: /var/log/grafana
plugins: /var/lib/grafana/plugins
provisioning: /etc/grafana/provisioning
server:
domain: ''
root_url: https://mon-grafana.example.com/
persistence:
enabled: true
type: pvc
size: 100Mi
storageClassName: default
accessModes: ["ReadWriteMany"]
plugins:
- grafana-clickhouse-datasource
rbac:
namespaced: true
service:
type: ClusterIP
serviceAccount:
create: false
testFramework:
enabled: false
Puis nous déployons Grafana via le Chart Helm officiel :
helm repo add grafana https://grafana.github.io/helm-charts
helm repo update
helm install mon-grafana grafana/grafana \
--namespace mon-namespace
--values grafana.values.yaml \
--set rbac.create=false
Après connexion sur l’IHM de Grafana, la datasource devrait être directement fonctionnelle.