Logs & Metrics-old - Envoi des logs depuis un cluster kubernetes via fluentd
... / Envoi des logs depuis un ...
BMPCreated with Sketch.BMPZIPCreated with Sketch.ZIPXLSCreated with Sketch.XLSTXTCreated with Sketch.TXTPPTCreated with Sketch.PPTPNGCreated with Sketch.PNGPDFCreated with Sketch.PDFJPGCreated with Sketch.JPGGIFCreated with Sketch.GIFDOCCreated with Sketch.DOC Error Created with Sketch.
Frage

Envoi des logs depuis un cluster kubernetes via fluentd

Von
dgoujard
Erstellungsdatum 2016-10-31 13:28:55 (edited on 2024-09-04 13:02:54) in Logs & Metrics-old

Bonjour,

J'essaye de sortir les logs de mon cluster kubernetes de test vers la plateforme de logs ovh mais je reste bloqué pour le moment.
J'ai crée une image qui lance fluentd avec un plugin permettant d'envoyer les infos via le gem gelf https://github.com/Graylog2/gelf-rb

J'ai crée un pod qui se charge bien, fluentd récupère bien les logs, le plugin est bien appelé et appel la fonction notify de la gem avec l'objet suivant (en json) :
> {"timestamp":1477915664.0,"_tag":"kubernetes.var.log.containers.fluentd-gelf_default_docker-fluentd-kubernetes-gelf-ea6231fcd00d6c393dec95dd740410605e6af450fccb9c5e3a4668c5c8e55925.log","facility":null,"_stream":"stdout","host":"fluentd-gelf","_version":"1.1","short_message":"2016-10-31 12:07:44 +0000 info]: reading config file path=\"/etc/fluent/fluent.conf\"\n","_X-OVH-TOKEN":"MON TOKEN"}

Le probléme c'est que ça remonte pas du tout dans la partie temps réel alors qu'en appelant la ligne de commande suivante ça fonctionne :slight_smile:
> echo -e '{"timestamp":1477915664.0,"_tag":"kubernetes.var.log.containers.fluentd-gelf_default_docker-fluentd-kubernetes-gelf-ea6231fcd00d6c393dec95dd740410605e6af450fccb9c5e3a4668c5c8e55925.log","facility":null,"_stream":"stdout","host":"fluentd-gelf","_version":"1.1","short_message":"2016-10-31 12:07:44 +0000 [info]: reading config file path=\"/etc/fluent/fluent.conf\"\n","_X-OVH-TOKEN":"MON TOKEN"}\0' | openssl s_client -quiet -no_ign_eof -connect laas.runabove.com:12202

Avez-vous des pistes ? La librairie ne semble pas correctement envoyer les logs mais je n'ai pas d'exception, c'est peut être pas la bonne config gelf que j'utilise ?
J'ai essayer en tcp et udp sur le même port sans sucées.

Voici le github de mon image/pod : [https://github.com/dgoujard/docker-fluentd-kubernetes-gelf-ovh

> kubectl create -f fluentd-pod.yaml --record --validate=false


3 Antworten ( Latest reply on 2017-03-21 08:41:27 Von
ClaireM
)

Hello,

Superbe exemple, merci.

2 pistes:

- Est ce que votre implémentation supporte bien le tls ? Dans le doute, tester TCP 2202 (UDP est d'ailleurs aussi sur ce port).
- Est ce que sur le transport TCP, vous envoyez bien le délimiteur Gelf \0 entre chaque message ?

Merci :grin: j'ai trouvé l'explication je pense, j'utilise le port tcp/tls mais c'est une connexion de type tcp que je lance.
J'ai regarder la gem elle semble faire le \0

Quand je rentre de la promenade en ville je test et si c'est ça je met à jour mon image que vous pourrez utiliser en exemple/tuto je pense que c'est un exemple qui va être utile à d'autres

Ok donc ça marche, c'était un problème de port /protocol.
J'ai eu des soucis de resolution DNS apres mais un reboot de mes VM et c'était bon.
L'image est à jour (ou en cours) j'ai retiré des variables d'environnement dans mon pod car par défaut c'est pour ovh.

Il me reste encore des soucis avec le filter kubernetes_metadata qui devrait remplir des variables sympa dans le log gelf.
Affaire à suivre donc.

Edit: C'est bon c'est fait pour le filter

@dgoujard
J'essaye de faire marcher votre solution en suivant votre repo.
tout ce déploie sans problème.
A la seule différence qu'aucune log n'arrive ds graylog.
voici les logs de l'un des pod :
kubectl --namespace kube-system logs fluentd-gelf-1rctl

2017-03-13 17:13:15 +0000 [info]: reading config file path="/etc/fluent/fluent.conf"
2017-03-13 17:13:15 +0000 [info]: starting fluentd-0.14.8
2017-03-13 17:13:15 +0000 [info]: spawn command to main: /opt/rh/rh-ruby23/root/usr/bin/ruby -Eascii-8bit:ascii-8bit /usr/bin/fluentd --under-supervisor
2017-03-13 17:13:15 +0000 [info]: reading config file path="/etc/fluent/fluent.conf"
2017-03-13 17:13:15 +0000 [info]: starting fluentd-0.14.8 without supervision
2017-03-13 17:13:15 +0000 [info]: gem 'fluent-plugin-forest' version '0.3.3'
2017-03-13 17:13:15 +0000 [info]: gem 'fluent-plugin-kubernetes_metadata_filter' version '0.26.3'
2017-03-13 17:13:15 +0000 [info]: gem 'fluentd' version '0.14.8'
2017-03-13 17:13:15 +0000 [info]: adding filter pattern="kubernetes.**" type="kubernetes_metadata"
2017-03-13 17:13:15 +0000 [info]: adding filter pattern="kubernetes.**" type="record_transformer"
2017-03-13 17:13:15 +0000 [info]: adding match pattern="kubernetes.**" type="copy"
2017-03-13 17:13:15 +0000 [info]: adding source type="tail"
2017-03-13 17:13:16 +0000 [info]: using configuration file:

@type tail
path "/var/log/containers/*.log"
pos_file "/var/log/es-containers.log.pos"
time_format %Y-%m-%dT%H:%M:%S
tag "kubernetes.*"
format json
read_from_head true

@type json
time_format %Y-%m-%dT%H:%M:%S



@type kubernetes_metadata


@type record_transformer
renew_record true
enable_ruby true
keep_keys "facility,stream"

host ${Socket.gethostname}
version 1.1
short_message ${log}
X-OVH-TOKEN XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX (edité evidemment)
kubernetes_namespace ${kubernetes["namespace_name"]}
kubernetes_pod ${kubernetes["pod_name"]}
kubernetes_container ${kubernetes["container_name"]}



@type copy

@type "gelf"
host "laas.runabove.com"
port 12202
protocol "tcp"
tls "true"
use_record_host true
flush_interval 5s

flush_mode interval
retry_type exponential_backoff
flush_interval 5s






Pouverz vous m'aider?

Bonjour @ClaireM,

Je n'ai pas de Kubernetes sous la main pour tester votre configuration, mais pourriez-vous changer _laas.runabove.com_ par **discover.logs.ovh.com** (le premier domaine n'étant plus supporté).

Cordialement,

Je confirme c'est ça le problème.

J'ai mis à jour mon image docker et je vais pusher la modif sur le github.

Je vais essayer à nouveau.

Antworten sind derzeit für diese Frage deaktiviert.