Este documento descreve como usar o eventer para coletar eventos do Kubernetes e enviá-los ao Simple Log Service.
A arquitetura do Kubernetes baseia-se em uma máquina de estados. As transições entre estados geram eventos correspondentes. Transições entre estados normais produzem eventos de nível Normal, enquanto transições entre estados normais e anômalos geram eventos de nível Warning.
O Container Service for Kubernetes (ACK) oferece uma solução pronta para uso no monitoramento de eventos em cenários de contêineres. Essa solução utiliza o NPD, mantido pelo ACK, e o kube-eventer incluído para fornecer o monitoramento de eventos de contêineres.
O Node Problem Detector (NPD) é uma ferramenta de diagnóstico para nós do Kubernetes. Ele converte anomalias nos nós, como travamentos do docker Engine, travamentos do kernel Linux, problemas de saída de rede ou anomalias em descritores de arquivos, em eventos de nó. Quando combinado com o kube-eventer, o NPD possibilita um sistema de ciclo fechado para alertas de eventos de nó.
O kube-eventer é uma ferramenta open source mantida pelo ACK para processamento offline de eventos do Kubernetes. Ele envia eventos do cluster para sistemas externos, como DingTalk, SLS e EventBridge. Além disso, fornece condições de filtro para diferentes níveis de evento, permitindo coleta em tempo real, alertas direcionados e arquivamento assíncrono.
O Node Problem Detector (NPD) atua como ferramenta de diagnóstico para nós do Kubernetes, transformando anomalias — como travamentos do docker Engine ou do kernel Linux, falhas de saída de rede e problemas em descritores de arquivos — em eventos de nó. Em conjunto com o kube-eventer, o NPD viabiliza um sistema de ciclo fechado para alertas de eventos de nó.
Mantido pelo ACK, o kube-eventer é uma ferramenta open source destinada ao processamento offline de eventos do Kubernetes. Ela encaminha eventos do cluster para sistemas externos, incluindo DingTalk, SLS e EventBridge, e oferece filtros por nível de evento para suportar coleta em tempo real, alertas específicos e arquivamento assíncrono.
Pré-requisitos
Crie um cluster Kubernetes, como um cluster ACK da Alibaba Cloud ou um cluster serverless ACK.
Faturamento
O K8s event center é gratuito se as seguintes condições forem atendidas:
O período de retenção de dados do Logstore associado ao K8s event center é de 90 dias (valor padrão).
O volume de dados gravados no K8s event center é inferior a 256 MB por dia, o que corresponde a aproximadamente 250.000 eventos.
Exemplos:
Se você usar o período de retenção padrão de 90 dias e seu cluster Kubernetes gerar 1.000 eventos por dia, o K8s event center será gratuito.
Se o período de retenção de dados for definido como 105 dias e o cluster Kubernetes gerar 1.000 eventos diários, haverá cobrança pelo armazenamento do Logstore após 90 dias. O item faturável é Armazenamento de Logs. Para mais informações sobre esse item, consulte Billable items in pay-by-feature mode.
Etapa 1: Implantar kube-eventer e node-problem-detector
ACK
Em clusters ACK, o componente ack-node-problem-detector integra as funcionalidades do kube-eventer e do node-problem-detector. Implante apenas esse componente. Para um cluster serverless ACK, implante o componente kube-eventer.
O NPD detecta problemas ou falhas nos nós com base em configurações e plug-ins de terceiros, gerando eventos de cluster correspondentes. O cluster Kubernetes também produz diversos eventos devido a transições de estado, como evicções de pods e falhas ao baixar imagens. O Kubernetes Event Center do Simple Log Service (SLS) agrega todos os eventos do Kubernetes em tempo real, oferecendo recursos de armazenamento, consulta, análise, visualização e alertas. Os passos a seguir detalham como enviar eventos do cluster para o Kubernetes Event Center do SLS:
Se você selecionou Install Node-problem-detector (NPD) and create an Event Center durante a criação do cluster, avance para a Etapa 2 para visualizar o Kubernetes Event Center.
-
Caso não tenha selecionado Install Node-problem-detector and Create an Event Center na criação do cluster, instale-o manualmente.
Faça login no ACK console. No painel de navegação à esquerda, clique em Clusters.
Na página Clusters, clique no nome do cluster desejado. No painel de navegação à esquerda, escolha .
Na aba Log and Monitoring, localize e instale o ack-node-problem-detector.
Self-managed Kubernetes
-
Implante o
kube-eventer.Instale o kubectl. Para mais detalhes, consulte Obtain the kubeconfig file of a cluster and use kubectl to connect to the cluster.
-
Crie um arquivo de configuração chamado eventer.yaml usando o modelo abaixo.
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
Obrigatório
Descrição
endpoint
string
Sim
O endpoint do Simple Log Service. Para mais informações, consulte Endpoints.
project
string
Sim
O projeto do Simple Log Service.
logStore
string
Sim
O Logstore do Simple Log Service.
internal
string
Obrigatório para clusters Kubernetes autogerenciados.
Em clusters Kubernetes autogerenciados, defina este parâmetro como false.
regionId
string
Obrigatório para clusters Kubernetes autogerenciados.
O ID da região onde o Simple Log Service está localizado. Para mais informações, consulte Endpoints.
accessKeyId
string
Obrigatório para clusters Kubernetes autogerenciados.
O AccessKey ID. Recomendamos o uso do par de AccessKeys de um usuário do Resource Access Management (RAM). Para mais informações, consulte AccessKey pair.
accessKeySecret
string
Obrigatório para clusters Kubernetes autogerenciados.
O AccessKey secret. Recomendamos o uso do par de AccessKeys de um usuário do Resource Access Management (RAM). Para mais informações, consulte AccessKey pair.
-
Execute o comando a seguir para aplicar a configuração
eventer.yamlao cluster.kubectl apply -f eventer.yamlSaída 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
Implante o
node-problem-detector.
Etapa 2: Criar uma instância do K8s event center
Após criar uma instância do K8s event center, o Simple Log Service cria automaticamente um Logstore chamado k8s-event e painéis relacionados no projeto de destino.
Faça login no console do Simple Log Service.
Na seção Log Application, clique na aba Intelligent O&M e selecione K8s Event Center.
Na página Event Center Management, clique em Add no canto superior direito.
-
No painel Create Event Center, configure os parâmetros e clique em Next.
Ao optar por Select Existing Project, escolha um projeto existente na lista suspensa Project para gerenciar os recursos da instância do K8s event center, como Logstores e painéis.
Se preferir Select Kubernetes Cluster from Container Service for Kubernetes, selecione um cluster K8s existente na lista suspensa K8s Cluster. Nesse caso, o Simple Log Service criará automaticamente um projeto denominado
k8s-log-{cluster-id}para administrar os recursos da instância do K8s event center, incluindo Logstores e painéis.
Etapa 3: Utilizar a instância do K8s event center
Depois de criar uma instância do K8s event center e implantar o kube-eventer e o node-problem-detector, inicie o uso do event center. É possível visualizar o resumo de eventos, consultar detalhes, acompanhar o ciclo de vida dos pods, verificar eventos de nós e de componentes principais, configurar alertas, executar consultas personalizadas e atualizar a versão.
Na página K8s Event Center, localize a instância desejada do K8s event center e clique no ícone
para realizar as operações abaixo.
Ações | Descrição |
Visualizar resumo de eventos | A página Event Overview exibe estatísticas resumidas dos eventos principais, incluindo o total de eventos, comparação de erros entre hoje e ontem, estatísticas de alertas, tendências de erros e detalhes de OOM em pods. Nota As informações de OOM de pod não identificam o pod específico. É possível localizar apenas o nó, o nome do processo e o ID do processo onde o evento ocorreu. Execute uma consulta personalizada para buscar eventos de reinicialização de pods próximos ao horário do OOM, facilitando a identificação do pod afetado. |
Consultar detalhes de eventos | A página Event Detail Query apresenta detalhes dos eventos filtrados por diversas dimensões, como tipo de evento, objeto do evento, host, namespace e nome. |
Visualizar ciclo de vida do pod | A página Pod Lifecycle mostra uma linha do tempo gráfica dos eventos no ciclo de vida de um pod. Também é possível filtrar eventos importantes por nível. |
Visualizar eventos de nó | A página Node Events exibe detalhes dos eventos de nó, incluindo o ciclo de vida do nó e uma lista de eventos. |
Visualizar eventos de componentes principais | A página Core Component Events apresenta detalhes sobre eventos de componentes essenciais, como falhas na reinicialização de ECS e modos de URL não implementados. |
Configurar alertas | Na página Alert Configuration, configure alertas para o K8s event center. Para mais informações, consulte Set up alerts. |
Executar consultas personalizadas | Na página Custom Query, personalize instruções de consulta e análise. Todos os eventos do K8s event center ficam armazenados em um Logstore, permitindo o uso de todos os recursos disponíveis, como consultas personalizadas, consumo de eventos, relatórios customizados e alertas personalizados. Para mais informações, consulte Quick start for query and analysis. Para acessar o projeto associado à instância do K8s event center, encontre o nome do projeto de uma das seguintes formas:
|
Atualizar versão | Na página Version Update, atualize o K8s event center. |
Exemplo de log
O código a seguir apresenta um exemplo de log.
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 do log |
Tipo |
Descrição |
|
hostname |
string |
Nome do host onde o evento ocorreu. |
|
level |
string |
Nível do log. Valores válidos: Normal e Warning. |
|
pod_id |
string |
ID exclusivo do pod. Este campo aparece apenas se o evento estiver relacionado a um pod. |
|
pod_name |
string |
Nome do pod. Este campo aparece apenas se o evento estiver relacionado a um pod. |
|
event_id |
json |
Detalhes do evento. O valor deste campo é uma string JSON. |
Perguntas frequentes
Uma instância do K8s event center não apresenta dados
Após a implantação de uma instância do K8s event center, novos eventos são coletados automaticamente. Pesquise-os na página Custom Query. Recomendamos definir o intervalo de tempo no canto superior direito como 1 Day. Se nenhum dado for encontrado, geralmente há duas causas:
-
Nenhum evento novo foi gerado no cluster Kubernetes desde a implantação do K8s event center.
Execute o comando
kubectl get events --all-namespacespara verificar se há novos eventos no cluster. -
Os parâmetros foram configurados incorretamente na implantação do
kube-eventere donode-problem-detector.-
Para clusters Container Service for Kubernetes (ACK), siga estes passos:
Faça login no ACK console.
Na página Clusters, clique no nome do cluster desejado.
No painel de navegação à esquerda, escolha .
Na página Helm, localize ack-node-problem-detector e clique em Update.
Verifique e ajuste as configurações dos parâmetros.
Para clusters Kubernetes autogerenciados, consulte Collect Kubernetes events para obter as configurações de parâmetros.
-
Como visualizar os logs de contêiner de um evento?
-
Em clusters Container Service for Kubernetes (ACK), proceda da seguinte forma:
Faça login no ACK console.
Na página Clusters, clique no nome do cluster desejado.
No painel de navegação à esquerda, escolha .
Defina o Namespace como kube-system.
Na lista Pods, localize o pod desejado e clique em Log.
Para clusters Kubernetes autogerenciados, verifique os logs dos Pods com prefixo de arquivo
eventer-slsno namespace kube-system.