Este documento describe cómo utilizar eventer para recolectar eventos de Kubernetes y enviarlos a Simple Log Service.
La arquitectura de Kubernetes se basa en una máquina de estados. Las transiciones entre estados generan los eventos correspondientes. Las transiciones entre estados normales generan eventos de nivel Normal, mientras que las transiciones entre estados normales y anómalos generan eventos de nivel Warning.
Container Service for Kubernetes (ACK) ofrece una solución de monitoreo de eventos lista para usar en escenarios de contenedores. Esta solución utiliza el NPD mantenido por ACK y el kube-eventer incluido para proporcionar el monitoreo de eventos de contenedores.
Node Problem Detector (NPD) es una herramienta de diagnóstico para nodos de Kubernetes. Convierte anomalías del nodo, como bloqueos de Docker Engine, bloqueos del kernel de Linux, problemas de salida de red o anomalías en descriptores de archivos, en eventos de nodo. Al combinarse con kube-eventer, NPD habilita un sistema de ciclo cerrado para alertas de eventos de nodo.
kube-eventer es una herramienta de código abierto mantenida por ACK para el procesamiento offline de eventos de Kubernetes. Envía eventos del clúster a sistemas externos, como DingTalk, SLS y EventBridge. También proporciona condiciones de filtro para distintos niveles de eventos, lo que permite la recolección en tiempo real, alertas dirigidas y el archivado asíncrono.
Node Problem Detector (NPD) es una herramienta de diagnóstico para nodos de Kubernetes. Convierte anomalías del nodo, como bloqueos de Docker Engine, bloqueos del kernel de Linux, problemas de salida de red o anomalías en descriptores de archivos, en eventos de nodo. Al combinarse con kube-eventer, NPD habilita un sistema de ciclo cerrado para alertas de eventos de nodo.
kube-eventer es una herramienta de código abierto mantenida por ACK para el procesamiento offline de eventos de Kubernetes. Envía eventos del clúster a sistemas externos, como DingTalk, SLS y EventBridge. También proporciona condiciones de filtro para distintos niveles de eventos, lo que permite la recolección en tiempo real, alertas dirigidas y el archivado asíncrono.
Requisitos previos
Debe contar con un clúster de Kubernetes creado, como un clúster ACK de Alibaba Cloud o un clúster serverless de ACK.
Facturación
El centro de eventos de K8s es gratuito si se cumplen las siguientes condiciones:
El periodo de retención de datos del Logstore asociado al centro de eventos de K8s es de 90 días (valor predeterminado).
El volumen de datos escritos en el centro de eventos de K8s es inferior a 256 MB por día, lo que equivale aproximadamente a 250,000 eventos.
Ejemplos:
Si utiliza el periodo de retención de datos predeterminado de 90 días y su clúster de Kubernetes genera 1,000 eventos por día, el centro de eventos de K8s es gratuito.
Si establece el periodo de retención de datos en 105 días y su clúster de Kubernetes genera 1,000 eventos por día, se le cobrará por el almacenamiento del Logstore después de 90 días. El concepto facturable es Log Storage. Para obtener más información sobre el concepto facturable Log Storage, consulte Billable items in pay-by-feature mode.
Paso 1: Desplegar kube-eventer y node-problem-detector
ACK
Para un clúster ACK, el componente ack-node-problem-detector integra las funciones de kube-eventer y node-problem-detector. Solo necesita desplegar este componente. Para un clúster serverless de ACK, debe desplegar el componente kube-eventer.
NPD detecta problemas o fallas en los nodos según las configuraciones y complementos de terceros, y luego genera los eventos de clúster correspondientes. El clúster de Kubernetes también genera diversos eventos debido a transiciones de estado, como desalojos de pods y fallas en la descarga de imágenes. El Centro de Eventos de Kubernetes de Simple Log Service (SLS) agrega todos los eventos de Kubernetes en tiempo real y ofrece capacidades de almacenamiento, consulta, análisis, visualización y alertas. Los siguientes pasos describen cómo enviar eventos del clúster al Centro de Eventos de Kubernetes de SLS:
Si seleccionó Install Node-problem-detector (NPD) and create an Event Center al crear el clúster, continúe con el Paso 2 para consultar el Centro de Eventos de Kubernetes.
-
Si no seleccionó Install Node-problem-detector and Create an Event Center al crear el clúster, puede instalarlo manualmente.
Inicie sesión en la consola de ACK. En el panel de navegación izquierdo, haga clic en Clusters.
En la página Clusters, haga clic en el nombre del clúster objetivo. En el panel de navegación izquierdo, vaya a .
En la pestaña Log and Monitoring, busque e instale ack-node-problem-detector.
Self-managed Kubernetes
-
Despliegue
kube-eventer.Instale kubectl. Para obtener más información, consulte Obtain the kubeconfig file of a cluster and use kubectl to connect to the cluster.
-
Cree un archivo de configuración llamado eventer.yaml basado en la siguiente plantilla.
apiVersion: apps/v1 kind: Deployment metadata: labels: name: kube-eventer name: kube-eventer namespace: kube-system spec: replicas: 1 selector: matchLabels: app: kube-eventer template: metadata: labels: app: kube-eventer annotations: scheduler.alpha.kubernetes.io/critical-pod: '' spec: dnsPolicy: ClusterFirstWithHostNet serviceAccount: kube-eventer containers: - image: registry.cn-hangzhou.aliyuncs.com/acs/kube-eventer:v1.2.5-cc7ec54-aliyun name: kube-eventer command: - "/kube-eventer" - "--source=kubernetes:https://kubernetes.default" ## .send to sls ## --sink=sls:https://{endpoint}?project={project}&logStore=k8s-event®ionId={region-id}&internal=false&accessKeyId={accessKeyId}&accessKeySecret={accessKeySecret} - --sink=sls:https://cn-beijing.log.aliyuncs.com?project=k8s-xxxx&logStore=k8s-event®ionId=cn-beijing&internal=false&accessKeyId=xxx&accessKeySecret=xxx env: # If TZ is assigned, set the TZ value as the time zone - name: TZ value: "Asia/Shanghai" volumeMounts: - name: localtime mountPath: /etc/localtime readOnly: true - name: zoneinfo mountPath: /usr/share/zoneinfo readOnly: true resources: requests: cpu: 10m memory: 50Mi limits: cpu: 500m memory: 250Mi volumes: - name: localtime hostPath: path: /etc/localtime - name: zoneinfo hostPath: path: /usr/share/zoneinfo --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: kube-eventer rules: - apiGroups: - "" resources: - events verbs: - get - list - watch --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: kube-eventer roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: kube-eventer subjects: - kind: ServiceAccount name: kube-eventer namespace: kube-system --- apiVersion: v1 kind: ServiceAccount metadata: name: kube-eventer namespace: kube-systemParámetro
Tipo
Obligatorio
Descripción
endpoint
string
Sí
El endpoint de Simple Log Service. Para obtener más información, consulte Endpoints.
project
string
Sí
El proyecto de Simple Log Service.
logStore
string
Sí
El Logstore de Simple Log Service.
internal
string
Obligatorio para clústeres de Kubernetes autogestionados.
Para un clúster de Kubernetes autogestionado, debe establecer este parámetro en false.
regionId
string
Obligatorio para clústeres de Kubernetes autogestionados.
El ID de la región donde reside Simple Log Service. Para obtener más información, consulte Endpoints.
accessKeyId
string
Obligatorio para clústeres de Kubernetes autogestionados.
El AccessKey ID. Se recomienda utilizar el par de AccessKey de un usuario de Resource Access Management (RAM). Para obtener más información, consulte AccessKey pair.
accessKeySecret
string
Obligatorio para clústeres de Kubernetes autogestionados.
El AccessKey secret. Se recomienda utilizar el par de AccessKey de un usuario de Resource Access Management (RAM). Para obtener más información, consulte AccessKey pair.
-
Ejecute el siguiente comando para aplicar la configuración de
eventer.yamlal clúster.kubectl apply -f eventer.yamlSalida esperada:
deployment.apps/kube-eventer created clusterrole.rbac.authorization.k8s.io/kube-eventer created clusterrolebinding.rbac.authorization.k8s.io/kube-eventer created serviceaccount/kube-eventer created
Despliegue
node-problem-detector.
Paso 2: Crear una instancia del centro de eventos de K8s
Después de crear una instancia del centro de eventos de K8s, Simple Log Service crea automáticamente un Logstore llamado k8s-event y los paneles relacionados en el proyecto de destino.
Inicie sesión en la consola de Simple Log Service.
En la sección Log Application, haga clic en la pestaña Intelligent O&M y luego haga clic en K8s Event Center.
En la página Event Center Management, haga clic en Add en la esquina superior derecha.
-
En el panel Create Event Center, configure los parámetros y haga clic en Next.
Si selecciona Select Existing Project, elija un proyecto existente en la lista desplegable Project para gestionar los recursos de la instancia del centro de eventos de K8s, como el Logstore y los paneles.
Si selecciona Select Kubernetes Cluster from Container Service for Kubernetes, elija un clúster de K8s existente en la lista desplegable K8s Cluster. Si utiliza este método, Simple Log Service crea automáticamente un proyecto llamado
k8s-log-{cluster-id}para gestionar los recursos de la instancia del centro de eventos de K8s, como el Logstore y los paneles.
Paso 3: Utilizar la instancia del centro de eventos de K8s
Una vez creada la instancia del centro de eventos de K8s y desplegados kube-eventer y node-problem-detector, puede comenzar a usar el centro de eventos. Puede consultar el resumen de eventos, buscar detalles de eventos, ver el ciclo de vida de los pods, revisar eventos de nodos, verificar eventos de componentes principales, configurar alertas, ejecutar consultas personalizadas y actualizar la versión.
En la página K8s Event Center, localice la instancia del centro de eventos de K8s objetivo y haga clic en el icono
para realizar las siguientes operaciones.
Acciones | Descripción |
Consultar resumen de eventos | La página Event Overview muestra estadísticas resumidas de eventos principales. Estas estadísticas incluyen el número total de eventos, una comparación de eventos de error entre hoy y ayer, estadísticas de alertas, tendencias de eventos de error y detalles de OOM de pods. Nota La información de OOM de pods no identifica el pod específico. Solo permite localizar el nodo, el nombre del proceso y el ID del proceso donde ocurrió el evento. Puede ejecutar una consulta personalizada para encontrar eventos de reinicio de pods ocurridos cerca del momento del OOM y así ayudar a identificar el pod específico. |
Buscar detalles de eventos | La página Event Detail Query muestra los detalles de eventos filtrados por diversas dimensiones, como tipo de evento, objeto del evento, host, namespace y nombre. |
Ver ciclo de vida del pod | La página Pod Lifecycle muestra una línea de tiempo gráfica de los eventos en el ciclo de vida de un pod. También puede filtrar eventos importantes del pod por nivel de evento. |
Ver eventos de nodo | La página Node Events muestra detalles de eventos de nodo, como el ciclo de vida del nodo y una lista de eventos. |
Ver eventos de componentes principales | La página Core Component Events muestra detalles de eventos de componentes principales, como fallas en el reinicio de ECS y modos de URL no implementados. |
Configurar alertas | En la página Alert Configuration, puede configurar alertas para el centro de eventos de K8s. Para obtener más información, consulte Set up alerts. |
Ejecutar consultas personalizadas | En la página Custom Query, puede personalizar sentencias de consulta y sentencias analíticas. Todos los eventos del centro de eventos de K8s se almacenan en un Logstore, por lo que puede utilizar todas las funciones del Logstore, como consultas personalizadas, consumo de eventos, informes personalizados y alertas personalizadas. Para obtener más información, consulte Quick start for query and analysis. Para acceder al proyecto asociado con la instancia del centro de eventos de K8s, puede encontrar el nombre del proyecto de una de las siguientes maneras:
|
Actualizar versión | En la página Version Update, puede actualizar el centro de eventos de K8s. |
Registro de ejemplo
El siguiente código muestra un registro de ejemplo.
hostname: cn-hangzhou.i-***********"
level: Normal
pod_id: 2a360760-****
pod_name: logtail-ds-blkkr
event_id: {
"metadata":{
"name":"logtail-ds-blkkr.157b7cc90de7e192",
"namespace":"kube-system",
"selfLink":"/api/v1/namespaces/kube-system/events/logtail-ds-blkkr.157b7cc90de7e192",
"uid":"2aaf75ab-****",
"resourceVersion":"6129169",
"creationTimestamp":"2019-01-20T07:08:19Z"
},
"involvedObject":{
"kind":"Pod",
"namespace":"kube-system",
"name":"logtail-ds-blkkr",
"uid":"2a360760-****",
"apiVersion":"v1",
"resourceVersion":"6129161",
"fieldPath":"spec.containers{logtail}"
},
"reason":"Started",
"message":"Started container",
"source":{
"component":"kubelet",
"host":"cn-hangzhou.i-***********"
},
"firstTimestamp":"2019-01-20T07:08:19Z",
"lastTimestamp":"2019-01-20T07:08:19Z",
"count":1,
"type":"Normal",
"eventTime":null,
"reportingComponent":"",
"reportingInstance":""
}
|
Campo del registro |
Tipo |
Descripción |
|
hostname |
string |
El nombre de host del equipo donde ocurrió el evento. |
|
level |
string |
El nivel del registro. Valores válidos: Normal y Warning. |
|
pod_id |
string |
El ID único del pod. Este campo solo se incluye si el evento está relacionado con un pod. |
|
pod_name |
string |
El nombre del pod. Este campo solo se incluye si el evento está relacionado con un pod. |
|
event_id |
json |
Los detalles del evento. El valor de este campo es una cadena JSON. |
Preguntas frecuentes
Una instancia del centro de eventos de K8s no tiene datos
Después de desplegar una instancia del centro de eventos de K8s, los nuevos eventos se recolectan automáticamente. Puede buscarlos en la página Custom Query. Se recomienda establecer el rango de tiempo en la esquina superior derecha en 1 Day. Si no se encuentran datos, generalmente se debe a dos causas:
-
No se han generado nuevos eventos en el clúster de Kubernetes desde que desplegó el centro de eventos de K8s.
Puede ejecutar el comando
kubectl get events --all-namespacespara comprobar si se generan nuevos eventos en el clúster. -
Los parámetros están configurados incorrectamente en su despliegue de
kube-eventerynode-problem-detector.-
Si utiliza un clúster de Container Service for Kubernetes (ACK), siga estos pasos:
Inicie sesión en la consola de ACK.
En la página Clusters, haga clic en el nombre del clúster objetivo.
En el panel de navegación izquierdo, vaya a .
En la página Helm, busque ack-node-problem-detector y haga clic en Update.
Revise y modifique la configuración de parámetros.
Si utiliza un clúster de Kubernetes autogestionado, consulte Collect Kubernetes events para ver la configuración de parámetros.
-
¿Cómo consulto los registros de contenedor de un evento?
-
Si utiliza un clúster de Container Service for Kubernetes (ACK), siga estos pasos:
Inicie sesión en la consola de ACK.
En la página Clusters, haga clic en el nombre del clúster objetivo.
En el panel de navegación izquierdo, vaya a .
Establezca Namespace en kube-system.
En la lista Pods, busque el pod objetivo y haga clic en Log.
Si utiliza un clúster de Kubernetes autogestionado, revise los registros de los Pods con el prefijo de nombre de archivo
eventer-slsen el namespace kube-system.