OVH Community

Bienvenue sur votre espace communautaire. Posez des questions, recherchez des informations, publiez du contenu et interagissez avec d’autres membres OVH Community.

K8s / fluentd / graylog


#1

Bonjour,

je suis actuellement en train de tenter de faire fonctionner fluentd depuis mon cluster k8s OVH.
Le problème étant le suivant: seulement les logs relatif à kubelet apparaissent correctement dans la console graylog d'OVH, tous les logs relatifs aux container n'apparaissent pas dans la console graylog.
Je cherche depuis un moment où j'ai bien pu faire une erreur, mais je ne trouve pas.
A noter que j'ai activé fluentd en mode "trace" et que je n'ai aucune erreur.

Voici mon YAML:

---
apiVersion: v1
kind: ServiceAccount
metadata:
  name: fluentd
  namespace: kube-system
---
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRole
metadata:
  name: fluentd
  namespace: kube-system
rules:
- apiGroups:
  - ""
  resources:
  - pods
  - namespaces
  verbs:
  - get
  - list
  - watch
---
kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1beta1
metadata:
  name: fluentd
roleRef:
  kind: ClusterRole
  name: fluentd
  apiGroup: rbac.authorization.k8s.io
subjects:
- kind: ServiceAccount
  name: fluentd
  namespace: kube-system
---
apiVersion: v1
kind: ConfigMap
metadata:
  name: fluentd-ovh
  namespace: kube-system
data:
  ovh.conf: |-
    <filter **>
      @type record_modifier
      <record>
        X-OVH-TOKEN "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX"
      </record>
    </filter>
---
apiVersion: extensions/v1beta1
kind: DaemonSet
metadata:
  name: fluentd
  namespace: kube-system
  labels:
    k8s-app: fluentd-graylog
    version: v1
    kubernetes.io/cluster-service: "true"
spec:
  template:
    metadata:
      labels:
        k8s-app: fluentd-graylog
        version: v1
        kubernetes.io/cluster-service: "true"
    spec:
      serviceAccount: fluentd
      serviceAccountName: fluentd    
      tolerations:
      - key: node-role.kubernetes.io/master
        effect: NoSchedule
      containers:
      - name: fluentd
        image: fluent/fluentd-kubernetes-daemonset:v1.3-debian-graylog-1
        env:
          - name:  FLUENT_GRAYLOG_HOST
            value: "gra2.logs.ovh.com"
          - name:  FLUENT_GRAYLOG_PORT
            value: "2202"
        resources:
          limits:
            memory: 200Mi
          requests:
            cpu: 100m
            memory: 200Mi
        volumeMounts:
        - name: varlog
          mountPath: /var/log
        - name: varlibdockercontainers
          mountPath: /var/lib/docker/containers
          readOnly: true
        - name: fluentd-ovh
          mountPath: /fluentd/etc/conf.d/ovh.conf
          subPath: ovh.conf
      terminationGracePeriodSeconds: 30
      volumes:
      - name: varlog
        hostPath:
          path: /var/log
      - name: varlibdockercontainers
        hostPath:
          path: /var/lib/docker/containers
      - name: fluentd-ovh
        configMap:
          name: fluentd-ovh
          items:
          - key: ovh.conf
            path: ovh.conf

j'ai juste un doute sur le fait que le log des container est en JSON, et que le champs X-OVH-TOKEN est ajouté dans le JSON, mais je suppose que le parser json le rajoute normalement.

Merci pour toute aide.


#2

Bonjour @BaptisteM3,

Merci pour l'intérêt que vous portez à Logs Data Platform et Kubernetes.

Désolé pour le délai de réponse, je vous contacte en privé pour la suite.


#3

Bonjour,

Ayant eu le même besoin je peux te confirmer que les logs sont bien au format json:
{"log":"the log line","stream":"stderr","time":"thetime"}
Pour ce qui est du X-OVH-TOKEN, si ovh.conf est bien @include depuis le fichier de configuration fluentd, le token est bien ajouté.

Est-ce possible d'avoir le fichier de configuration de fluentd en entier ? Pour comprendre d'où viendrait le problème ?

Merci d'avance.


#4

Salut,

le ovh.conf est bien inclus vu que j'ai les logs de kubelet (non json) mais pas ceux des containers (json).
Pour les autres configs, j'utilise l'image officielle de fluentd daemonset: les confs sont ici: https://github.com/fluent/fluentd-kubernetes-daemonset/tree/master/docker-image/v1.3/debian-graylog/conf

Merci


#5

Salut,

Il semble que le pod fluentd soit lancé avec l'utilisateur fluentd (uid != 0).
Il existe un moyen: lancer le pod avec un uid 0 (variable d'environnement FLUENT_UID=0).

Cependant, voyant le fonctionnement par défaut de fluentd, nous avons décidé de mettre les logs docker lisibles par défaut, ca devrait fonctionner sur ton cluster dés aujourd'hui, sur les nouveux clusters dans les prochains jours, et sur les autres clusters dans les prochaines semaines.

N'hésite pas à me renir au courant, si tu recois les logs
Merci


#6

Salut et merci pour le retour.
Pour le FLUENT_UID=0, depuis plusieurs version les images sont lancées en root: https://github.com/fluent/fluentd-kubernetes-daemonset/blob/master/docker-image/v1.3/debian-graylog/Dockerfile
Donc ce paramètre n'est plus pertinent.

Je testerai les logs pour mon cluster rapidement, mais ça veut dire que je n'ai pas besoin de fluentd pour avoir les logs des containers, c'est nativement fait par OVH ?

Merci