Registrazione per i cluster

Configura la registrazione dei log in IBM Cloud® Kubernetes Service per facilitare la risoluzione dei problemi e migliorare lo stato di salute e le prestazioni dei tuoi cluster e delle tue app Kubernetes.

Il monitoraggio continuo e la registrazione costituiscono la chiave per rilevare gli attacchi al tuo cluster e per risolvere i problemi nel momento in cui si verificano. Monitorando continuamente il tuo cluster, puoi meglio comprenderne la capacità e la disponibilità delle risorse disponibili per la tua applicazione. Con queste conoscenze, puoi prepararti a proteggere le tue applicazioni dai tempi di inattività.

Scelta di una soluzione di registrazione

Per impostazione predefinita, i log vengono generati e scritti localmente per tutti i seguenti componenti del cluster di IBM Cloud Kubernetes Service: nodi di lavoro, container, applicazioni, archiviazione persistente, bilanciatore di carico delle applicazioni Ingress, API Kubernetes e lo spazio dei nomi kube-system. Sono disponibili diverse soluzioni di registrazione per raccogliere, inoltrare e visualizzare questi log.

IBM Cloud Logs
Gestisci i log del contenitore di pod distribuendo un'istanza di IBM Cloud Logs e configurando questa istanza per il tuo cluster in Kubernetes Service. Un agent di registrazione raccoglie i log con estensione *.log e i file senza estensione memorizzati nella directory /var/log del tuo pod da tutti gli spazi dei nomi, incluso kube-system. L'agente inoltra quindi i log alla tua istanza di servizio. È inoltre possibile tenere traccia delle attività amministrative avviate dagli utenti nel cluster Kubernetes Service genera automaticamente eventi di gestione del cluster e inoltra questi registri di eventi a IBM Cloud Logs. Per ulteriori informazioni, vedi Introduzione a IBM Cloud Logs. Per distribuire un agente di registrazione sul cluster, vedere Gestione dell'agente di registrazione per i cluster Red Hat OpenShift on IBM Cloud o Gestione dell'agente di registrazione per i cluster IBM Cloud Kubernetes Service.
Fluentd con un server esterno
Per raccogliere, inoltrare e visualizzare i log per un componente cluster, puoi creare una configurazione di registrazione utilizzando Fluentd. Quando si crea una configurazione di registrazione, il Fluentd componente del cluster raccoglie i log dai percorsi relativi a una fonte specificata. Fluentd può quindi inoltrare questi log a un server esterno che supporti il protocollo syslog. Per iniziare, vedere Comprendere l'inoltro dei log a un server esterno.

Migrazione degli agenti di registrazione e monitoraggio a Cloud Logs

Il plug-in observability CLI ibmcloud ob e gli endpoint v2/observe non sono più supportati. Non c'è una sostituzione diretta, ma ora è possibile gestire le integrazioni di log e monitoraggio attraverso l'estensione IBM Cloud Kubernetes Service o inviando i dati di log di IBM Cloud Kubernetes Service a IBM Cloud Logs.

Non è più possibile utilizzare il plug-in ob, Terraform o l'API per installare agenti di osservabilità su un cluster o per modificare la configurazione esistente. Gli agenti Sysdig continuano a inviare metriche all'istanza IBM Cloud Monitoring specificata. LogDNA gli agenti non possono più inviare i registri poiché IBM Cloud Log Analysis è stato sostituito da IBM Cloud Logs.

Rimozione degli agenti plug-in di osservabilità

  • Una volta terminato il supporto per il sito ob plugin, è necessario eliminare ogni singolo componente.

    1. Pulire i daemonset e le configmap.
        kubectl delete daemonset logdna-agent -n ibm-observe
        kubectl delete daemonset sysdig-agent -n ibm-observe
        kubectl delete configmap <logdna-configmap> -n ibm-observe
        kubectl delete configmap <sysdig-configmap> -n ibm-observe
        ```
    1. Facoltativo: Cancellare lo spazio dei nomi. Dopo che nessun'altra risorsa è in esecuzione nello spazio dei nomi.
    ```sh {: pre}
        kubectl delete namespace ibm-observe
        ```
    

Una volta rimosso il plug-in, reinstallare gli agenti di registrazione e monitoraggio nel cluster utilizzando la dashboard del cluster, Terraform o manualmente.

Per ulteriori informazioni, consulta i seguenti link:

Inoltro dei log di applicazioni e cluster a un server esterno

Configura l'inoltro del log per i cluster standard IBM Cloud Kubernetes Service a un server esterno.

Descrizione dell'inoltro dei log a un server esterno

Quando si crea una configurazione di registrazione per una sorgente nel proprio cluster al fine di inoltrare i dati a un server esterno, nel cluster viene creato un Fluentd viene creato un componente nel cluster. Fluentd raccoglie i log dai percorsi di tale origine e inoltra i log a un server esterno. Il traffico dall'origine al servizio di registrazione sulla porta di inserimento è crittografato.

Per quali sorgenti posso configurare l'inoltro dei log?
Nell'immagine seguente è possibile vedere l'area delle sorgenti per le quali è possibile configurare la registrazione.

Sorgenti di log nel cluster.
Sorgenti di log nel cluster

  1. worker: informazioni specifiche per la configurazione dell'infrastruttura del tuo nodo di lavoro. I registri dei processi vengono acquisiti in syslog e contengono gli eventi del sistema operativo. In auth.log puoi trovare informazioni sulle richieste di autenticazione che vengono effettuate al sistema operativo.

    Percorsi

    • /var/log/syslog
    • /var/log/auth.log
  2. container: Informazioni registrate da un container in esecuzione. Percorsi: Qualsiasi dato scritto in STDOUT o STDERR.

  3. application: informazioni sugli eventi che si verificano a livello dell'applicazione. Potrebbe trattarsi di una notifica relativa al verificarsi di un evento, come ad esempio un accesso riuscito, un avviso relativo allo spazio di archiviazione o altre operazioni eseguibili a livello di app. Percorsi: è possibile impostare i percorsi a cui inoltrare i log. Tuttavia, affinché i log vengano inviati, è necessario utilizzare un percorso assoluto nella configurazione della registrazione; in caso contrario, i log non potranno essere letti. Se il percorso è montato sul nodo di lavoro, è possibile che sia stato creato un collegamento simbolico. Esempio: se il percorso specificato è /usr/local/spark/work/app-0546/0/stderr ma i log vengono effettivamente salvati su /usr/local/spark-1.0-hadoop-1.2/work/app-0546/0/stderr, allora non è possibile leggerli.

  4. storage: informazioni sull'archiviazione persistente configurata nel tuo cluster. I log di archiviazione possono aiutarti a configurare dashboard e avvisi di determinazione dei problemi come parte delle tue release di produzione e pipeline DevOps. Nota: i percorsi/var/log/kubelet.log e /var/log/syslog contengono anche log di archiviazione, ma i log di questi percorsi vengono raccolti dalle origini log kubernetes e worker.

    Percorsi
    /var/log/ibmc-s3fs.log
    /var/log/ibmc-block.log
    Pod
    portworx-***
    ibmcloud-block-storage-attacher-***
    ibmcloud-block-storage-driver-***
    ibmcloud-block-storage-plugin-***
    ibmcloud-object-storage-plugin-***
  5. kubernetes: informazioni da kubelet, kube-proxy e altri eventi Kubernetes che si verificano nello spazio dei nomi kube-system del nodo di lavoro.

    Percorsi
    /var/log/kubelet.log
    /var/log/kube-proxy.log
    /var/log/event-exporter/1..log
  6. ingress: Informazioni sul traffico di rete in entrata in un cluster tramite l'ALB di Ingress.

    Percorsi
    /var/log/alb/ids/*.log
    /var/log/alb/ids/*.err
    /var/log/alb/customerlogs/*.log
    /var/log/alb/customerlogs/*.err
  7. kube-audit: informazioni sulle azioni relative al cluster che vengono inviate al server API Kubernetes, inclusi l'ora, l'utente e la risorsa interessata. L'origine kube-audit può essere configurata con un webhook. Per ulteriori informazioni, vedi Inoltro dei log di verifica API Kubernetes a un server esterno.

Sono tenuto a mantenere aggiornato il sito Fluentd?
Per modificare le configurazioni di registrazione o dei filtri, è necessario che il componente di registrazione " Fluentd " sia aggiornato all'ultima versione. Per impostazione predefinita, gli aggiornamenti automatici per il componente aggiuntivo sono abilitati. Per disabilitare gli aggiornamenti automatici, vedi Aggiornamento dei componenti del cluster: Fluentd per la registrazione.
Posso inoltrare alcuni log, ma non altri, da una fonte del mio cluster?
Sì. Ad esempio, se hai un pod particolarmente ridondante, puoi impedire che i log di tale pod occupino spazio di archiviazione, consentendo comunque l'inoltro dei log di altri pod. Per impedire che i log di uno specifico pod vengano inoltrati, vedi Filtraggio dei log.

Inoltro dei log del cluster e delle applicazioni

Crea una configurazione per la registrazione del cluster e delle applicazioni. È possibile distinguere le diverse opzioni di registrazione utilizzando le opzioni.

La tabella riportata di seguito mostra le diverse opzioni a tua disposizione quando configuri la registrazione e le relative descrizioni.

Descrizione delle opzioni di configurazione della registrazione
Parametro Descrizione
<cluster_name_or_ID> Il nome o l'ID del cluster.
--logsource L'origine da cui vuoi inoltrare i log. I valori ammessi sono container, application, worker, kubernetes, ingress e storage. Questa opzione supporta un elenco di sorgenti di log separate da virgole da applicare alla configurazione. Se non si specifica una fonte di log, vengono create configurazioni di log per le fonti di log container e ingress.
--type syslog Il valore " syslog " inoltra i log a un server esterno.
--namespace Facoltativo: lo spazio dei nomi Kubernetes da cui vuoi inoltrare i log. L'inoltro dei log non è supportato per i namespace ibm-system, kube-system e Kubernetes. Questo valore è valido solo per la fonte di log " container ". Se non si specifica uno spazio dei nomi, tutti gli spazi dei nomi presenti nel cluster utilizzeranno questa configurazione.
--hostname Specifica il nome host o l'indirizzo IP del servizio di raccolta log.
--port La porta di inserimento. Se non si specifica una porta, viene utilizzata la porta standard 9091. Per syslog, specifica la porta del server di raccolta log. Se non si specifica una porta, viene utilizzata la porta standard 514.
--app-containers Facoltativo: per inoltrare i log dalle applicazioni, puoi specificare il nome del contenitore che contiene la tua applicazione. Puoi specificare più di un contenitore utilizzando un elenco separato da virgole. Se non vengono specificati contenitori, i log vengono inoltrati da tutti i contenitori che contengono i percorsi indicati.
--app-paths Il percorso su un contenitore a cui accedono le applicazioni. Per inoltrare i log con tipo di origine “ application ”, è necessario specificare un percorso. Per specificare più di un percorso, utilizzare un elenco separato da virgole; ad esempio, /var/log/myApp1/*,/var/log/myApp2/*
--syslog-protocol Quando il tipo di registrazione è “ syslog< ”, il protocollo del livello di trasporto. Puoi usare i seguenti protocolli: udp, tls o tcp. Quando si inoltrano i log a un server rsyslog utilizzando il protocollo udp, i log di dimensioni superiori a 1KB vengono troncati.
--ca-cert Obbligatorio: quando il tipo di registrazione è “ syslog ” e il protocollo è “ tls ”, il nome del segreto “ Kubernetes ” che contiene il certificato dell’autorità di certificazione.
--verify-mode Quando il tipo di registrazione è “ syslog ” e il protocollo è “ tls ”, la modalità di verifica. I valori supportati sono verify-peer e quello predefinito verify-none.
--skip-validation Facoltativo: ignora la convalida dei nomi di organizzazione e spazio quando vengono specificati. La mancata convalida riduce il tempo di elaborazione, ma una configurazione di registrazione non valida non inoltra correttamente i log.

Inoltro dei log al proprio server tramite i protocolli udp o tcp

  1. Assicurarsi di disporre di Ruolo di accesso della piattaforma Editor o Amministratore IBM Cloud IAM.

  2. Per il cluster in cui si trova la fonte di log: Accedi al tuo account. Se applicabile, specifica il gruppo di risorse appropriato. Imposta il contesto per il tuo cluster.

  3. Configurare un server che accetti il protocollo syslog in uno dei due modi seguenti: : Configura e gestisci il tuo proprio server o utilizza un provider per gestirlo al tuo posto. Se un provider gestisce il server al tuo posto, richiama l'endpoint di registrazione dal provider di registrazione.

    : Esegui " syslog " da un container. Ad esempio, puoi utilizzare questo file.yaml di distribuzione per scaricare un'immagine pubblica Docker che esegue un container nel tuo cluster. L'immagine pubblica la porta 514 sull'indirizzo IP del cluster pubblico e utilizza questo indirizzo IP per configurare l'host syslog.

    È possibile visualizzare i log in formato JSON valido rimuovendo i prefissi " syslog ". Per farlo, aggiungi il seguente codice all'inizio del file etc/rsyslog.conf sul server su cui è in esecuzione rsyslog : $template customFormat,"%msg%\n"$ActionFileDefaultTemplate customFormat

  4. Crea una configurazione di inoltro dei log. Per ulteriori informazioni sui parametri, vedi la tabella delle opzioni di configurazione della registrazione.

    ibmcloud ks logging config create --cluster CLUSTER_NAME_OR_ID --logsource LOG_SOURCE --namespace KUBERNETES_NAMESPACE --hostname LOG_SERVER_HOSTNAME_OR_IP --port LOG_SERVER_PORT --type syslog --app-containers CONTAINER1,2 --app-paths PATHS_TO_LOGS --syslog-protocol PROTOCOL
    

Inoltro dei log al proprio server tramite il protocollo tls

  1. Assicurati di disporre dei seguenti ruoli IBM Cloud IAM:

    • Ruolo di accesso alla piattaforma come redattore o amministratore per il cluster
    • Ruolo di accesso al servizio " Writer " o " Manager " per lo spazio dei nomi kube-system
  2. Per il cluster in cui si trova la fonte di log: Accedi al tuo account. Se applicabile, specifica il gruppo di risorse appropriato. Imposta il contesto per il tuo cluster.

  3. Configurare un server che accetti il protocollo syslog in uno dei due modi seguenti:

    • Configura e gestisci il tuo proprio server o utilizza un provider per gestirlo al tuo posto. Se un provider gestisce il server al tuo posto, richiama l'endpoint di registrazione dal provider di registrazione.

    • Esegui " syslog " da un container. Ad esempio, puoi utilizzare questo file.yaml di distribuzione per scaricare un'immagine pubblica Docker che esegue un container nel tuo cluster. L'immagine pubblica la porta 514 sull'indirizzo IP pubblico del cluster e utilizza tale indirizzo IP pubblico del cluster per configurare l'host syslog. Devi inserire l'autorità di certificazione (CA, certificate authority) pertinente e i certificati del lato server e aggiornare il file syslog.conf per abilitare tls sul tuo server.

  4. Salvare il certificato dell'autorità di certificazione in un file denominato ca-cert. Deve essere proprio quel nome.

  5. Crea un segreto nello spazio dei nomi kube-system per il file ca-cert. Quando crei la configurazione di registrazione, utilizza il nome del segreto per l'opzione " --ca-cert ".

    kubectl -n kube-system create secret generic --from-file=ca-cert
    
  6. Crea una configurazione di inoltro dei log. Per ulteriori informazioni sui parametri, vedi la tabella delle opzioni di configurazione della registrazione.

    ibmcloud ks logging config create --cluster <cluster name or id> --logsource <log source> --type syslog --syslog-protocol tls --hostname <ip address of syslog server> --port <port for syslog server, 514 is default> --ca-cert <secret name> --verify-mode <defaults to verify-none>
    

Filtraggio dei log inoltrati

Puoi scegliere quali log inoltrare al tuo server esterno eliminando tramite filtro specifici log per un periodo di tempo. È possibile distinguere le diverse opzioni di filtraggio utilizzando le opzioni.

Descrizione delle opzioni per il filtraggio log
Parametro Descrizione
<cluster_name_or_ID> Obbligatorio: il nome o l'ID del cluster per il quale desideri filtrare i log.
<log_type> Il tipo di log a cui desideri applicare il filtro. Attualmente sono supportati all, container e host.
<configs> Facoltativo: un elenco separato da virgole dei tuoi ID di configurazione di registrazione. Se non specificato, il filtro viene applicato a tutte le configurazioni di registrazione del cluster che vengono passate al filtro. È possibile visualizzare le configurazioni dei log che corrispondono al filtro utilizzando l'opzione " --show-matching-configs ".
<kubernetes_namespace> Facoltativo: lo spazio dei nomi Kubernetes da cui vuoi inoltrare i log. Questa opzione è valida solo quando si utilizza il tipo di log “ container ”.
<container_name> Facoltativo: il nome del contenitore da cui desideri filtrare i log.
<logging_level> Facoltativo: filtra i log che si trovano al livello specificato e a quelli inferiori ad esso. I valori ammessi, nell'ordine canonico, sono fatal, error, warn/warning, info, debug e trace. Ad esempio, se si filtrano i log a livello di " info ", vengono filtrati anche debug e trace. Nota: è possibile utilizzare questa opzione solo se i messaggi di log sono in formato JSON e contengono un campo "level". Per visualizzare i messaggi in formato JSON, aggiungi l'opzione --output json al comando.
<message> Facoltativo: filtra i log che contengono un messaggio specificato scritto come un'espressione regolare.
<filter_ID> Facoltativo: l'ID del filtro di log.
--show-matching-configs Facoltativo: mostra le configurazioni di registrazione a cui applicare ciascun filtro.
--all Facoltativo: elimina tutti i filtri di inoltro dei log.
  1. Crea un filtro di registrazione.

    ibmcloud ks logging filter create --cluster CLUSTER_NAME_OR_ID --type LOG_TYPE --logging-configs CONFIGS --namespace KUBERNETES_NAMESPACE --container CONTAINER_NAME --level LOGGING_LEVEL --regex-message MESSAGE
    
  2. Visualizza il filtro di log che hai creato.

    ibmcloud ks logging filter get --cluster CLUSTER_NAME_OR_ID --id FILTER_ID --show-matching-configs
    
  3. Aggiorna il filtro di log che hai creato.

    ibmcloud ks logging filter update --cluster CLUSTER_NAME_OR_ID --id FILTER_ID --type SERVER_TYPE --logging-configs CONFIGS --namespace KUBERNETES_NAMESPACE --container CONTAINER_NAME --level LOGGING_LEVEL --regex-message MESSAGE
    
  4. Elimina un filtro di log che hai creato.

    ibmcloud ks logging filter rm --cluster CLUSTER_NAME_OR_ID --id FILTER_ID [--all]
    

Verifica, aggiornamento ed eliminazione dell'inoltro dei log

Verifica dell'inoltro dei log

È possibile verificare che la configurazione sia impostata correttamente in uno dei due modi seguenti:

  • Per elencare tutte le configurazioni di registrazione in un cluster:
    ibmcloud ks logging config get --cluster CLUSTER_NAME_OR_ID
    
  • Per elencare le configurazioni di registrazione per un tipo di origine log:
    ibmcloud ks logging config get --cluster CLUSTER_NAME_OR_ID --logsource SOURCE
    

Aggiornamento dell'inoltro dei log

È possibile aggiornare una configurazione di registrazione già creata:

ibmcloud ks logging config update --cluster CLUSTER_NAME_OR_ID --id LOG_CONFIG_ID --namespace NAMESPACE --type SERVER_TYPE --syslog-protocol PROTOCOL --logsource SOURCE --hostname HOSTNAME_OR_INGESTION_URL --port PORT --app-containers CONTAINER1,2 --app-paths PATHS_TO_LOGS

Eliminazione dell'inoltro dei log

È possibile interrompere l'inoltro dei log eliminando una o tutte le configurazioni di registrazione per un cluster:

  • Per eliminare una configurazione di registrazione:
    ibmcloud ks logging config rm --cluster CLUSTER_NAME_OR_ID --id LOG_CONFIG_ID
    
  • Per eliminare tutte le configurazioni di registrazione relative a uno spazio dei nomi:
    ibmcloud ks logging config rm --cluster MY_CLUSTER --namespace KUBERNETES_NAMESPACE