10.13. Transférer les journaux à Loki
Vous pouvez transmettre les journaux à un système de journalisation externe Loki en plus ou à la place de l'instance Elasticsearch interne par défaut d'OpenShift Container Platform.
Pour configurer la transmission des journaux à Loki, vous devez créer une ressource personnalisée (CR) ClusterLogForwarder
avec une sortie vers Loki et un pipeline qui utilise la sortie. La sortie vers Loki peut utiliser la connexion HTTP (non sécurisée) ou HTTPS (HTTP sécurisée).
Conditions préalables
-
Un système de journalisation Loki doit fonctionner à l'URL spécifiée dans le champ
url
du CR.
Procédure
Créez ou modifiez un fichier YAML qui définit l'objet
ClusterLogForwarder
CR :Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- Le nom du CR
ClusterLogForwarder
doit êtreinstance
. - 2
- L'espace de noms pour le CR
ClusterLogForwarder
doit êtreopenshift-logging
. - 3
- Spécifiez un nom pour la sortie.
- 4
- Spécifiez le type comme
"loki"
. - 5
- Spécifiez l'URL et le port du système Loki sous la forme d'une URL absolue valide. Vous pouvez utiliser le protocole
http
(non sécurisé) ouhttps
(HTTP sécurisé). Si le proxy à l'échelle du cluster utilisant l'annotation CIDR est activé, la sortie doit être un nom de serveur ou un FQDN, et non une adresse IP. Le port par défaut de Loki pour la communication HTTP(S) est 3100. - 6
- Pour une connexion sécurisée, vous pouvez spécifier une URL
https
ouhttp
que vous authentifiez en spécifiant unsecret
. - 7
- Pour un préfixe
https
, indiquez le nom du secret requis par le point d'extrémité pour la communication TLS. Le secret doit exister dans le projetopenshift-logging
et doit avoir des clés de : tls.crt, tls.key, et ca-bundle.crt qui pointent vers les certificats respectifs qu'elles représentent. Sinon, pour les préfixeshttp
ethttps
, vous pouvez spécifier un secret contenant un nom d'utilisateur et un mot de passe. Pour plus d'informations, voir l'exemple suivant : "Exemple : Définition d'un secret contenant un nom d'utilisateur et un mot de passe.\N-" - 8
- Facultatif : Spécifiez un champ clé de métadonnées pour générer des valeurs pour le champ
TenantID
dans Loki. Par exemple, le paramètretenantKey: kubernetes.namespace_name
utilise les noms des espaces de noms Kubernetes comme valeurs pour les identifiants de locataire dans Loki. Pour connaître les autres champs d'enregistrement que vous pouvez spécifier, voir le lien "Champs d'enregistrement" dans la section suivante "Ressources supplémentaires". - 9
- Facultatif : Spécifiez une liste de clés de champs de métadonnées pour remplacer les étiquettes Loki par défaut. Les noms des étiquettes Loki doivent correspondre à l'expression régulière
[a-zA-Z_:][a-zA-Z0-9_:]*
. Les caractères illégaux dans les clés de métadonnées sont remplacés par_
pour former le nom de l'étiquette. Par exemple, la clé de métadonnéeskubernetes.labels.foo
devient l'étiquette Lokikubernetes_labels_foo
. Si vous ne définissez paslabelKeys
, la valeur par défaut est :[log_type, kubernetes.namespace_name, kubernetes.pod_name, kubernetes_host]
. Veillez à ce que l'ensemble des étiquettes soit restreint, car Loki limite la taille et le nombre d'étiquettes autorisées. Voir Configuration de Loki, limits_config. Vous pouvez toujours effectuer des requêtes basées sur n'importe quel champ de l'enregistrement à l'aide de filtres de requête. - 10
- Facultatif : Spécifiez un nom pour le pipeline.
- 11
- Spécifiez les types de journaux à transférer en utilisant le pipeline :
application,
infrastructure
ouaudit
. - 12
- Spécifiez le nom de la sortie à utiliser lors du transfert des journaux avec ce pipeline.
NoteComme Loki exige que les flux de journaux soient correctement classés par date,
labelKeys
inclut toujours le jeu d'étiquetteskubernetes_host
, même si vous ne le spécifiez pas. Cette inclusion garantit que chaque flux provient d'un seul hôte, ce qui empêche les horodatages d'être désordonnés en raison des différences d'horloge sur les différents hôtes.Créer l'objet CR :
oc create -f <nom-de-fichier>.yaml
oc create -f <nom-de-fichier>.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
10.13.1. Dépannage des erreurs de Loki "entry out of order" (entrée en dehors de l'ordre) Copier lienLien copié sur presse-papiers!
Si votre Fluentd transmet un grand bloc de messages à un système de journalisation Loki qui dépasse la limite de débit, Loki génère des erreurs "entry out of order". Pour résoudre ce problème, vous devez mettre à jour certaines valeurs dans le fichier de configuration du serveur Loki, loki.yaml
.
loki.yaml
n'est pas disponible sur les serveurs Loki hébergés par Grafana. Cette rubrique ne s'applique pas aux serveurs Loki hébergés par Grafana.
Conditions
-
La ressource personnalisée
ClusterLogForwarder
est configurée pour transmettre les journaux à Loki. Votre système envoie à Loki un bloc de messages d'une taille supérieure à 2 Mo, par exemple :
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Lorsque vous entrez
oc logs -c fluentd
, les journaux Fluentd dans votre cluster OpenShift Logging affichent les messages suivants :429 Too Many Requests Ingestion rate limit exceeded (limit: 8388608 bytes/sec) while attempting to ingest '2140' lines totaling '3285284' bytes 429 Too Many Requests Ingestion rate limit exceeded' or '500 Internal Server Error rpc error: code = ResourceExhausted desc = grpc: received message larger than max (5277702 vs. 4194304)'
429 Too Many Requests Ingestion rate limit exceeded (limit: 8388608 bytes/sec) while attempting to ingest '2140' lines totaling '3285284' bytes 429 Too Many Requests Ingestion rate limit exceeded' or '500 Internal Server Error rpc error: code = ResourceExhausted desc = grpc: received message larger than max (5277702 vs. 4194304)'
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Lorsque vous ouvrez les journaux sur le serveur Loki, ils affichent des messages
entry out of order
comme ceux-ci :,\nentry with timestamp 2021-08-18 05:58:55.061936 +0000 UTC ignored, reason: 'entry out of order' for stream: {fluentd_thread=\"flush_thread_0\", log_type=\"audit\"},\nentry with timestamp 2021-08-18 06:01:18.290229 +0000 UTC ignored, reason: 'entry out of order' for stream: {fluentd_thread="flush_thread_0", log_type="audit"}
,\nentry with timestamp 2021-08-18 05:58:55.061936 +0000 UTC ignored, reason: 'entry out of order' for stream: {fluentd_thread=\"flush_thread_0\", log_type=\"audit\"},\nentry with timestamp 2021-08-18 06:01:18.290229 +0000 UTC ignored, reason: 'entry out of order' for stream: {fluentd_thread="flush_thread_0", log_type="audit"}
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
Procédure
Mettez à jour les champs suivants dans le fichier de configuration
loki.yaml
sur le serveur Loki avec les valeurs indiquées ici :-
grpc_server_max_recv_msg_size: 8388608
-
chunk_target_size: 8388608
-
ingestion_rate_mb: 8
-
ingestion_burst_size_mb: 16
-
-
Appliquez les changements dans
loki.yaml
au serveur Loki.
Exemple de fichier loki.yaml