Implante o alibaba-log-controller e defina CRDs AliyunLogConfig para coletar logs de texto e stdout de Pods ECI.
Pré-requisitos
Certifique-se de que:
Um cluster ACK Serverless foi criado.
O componente ack-virtual-node está instalado na versão 2.7.0 ou superior.
Configure a coleta de logs
Implantar o alibaba-log-controller
Faça login no console ACK.
No canto superior esquerdo, selecione uma região.
Na página Clusters, clique em nome do cluster.
No painel de navegação à esquerda, escolha Operations > Add-ons.
Clique em aba Logs and Monitoring, localize o cartão Alibaba-log-controller e clique em Install.
Na caixa de diálogo de confirmação, clique em OK.
Após a instalação, o status Installed aparece no cartão Alibaba-log-controller.
Crie um CRD AliyunLogConfig
Conecte-se ao cluster ACK Serverless e crie um arquivo de configuração YAML para o CRD de coleta de logs.
Observe as seguintes restrições antes de criar o CRD:
O valor de
configNamedeve corresponder exatamente ametadata.name.A coleta de logs baseada em CRD aplica-se apenas a Pods ECI criados após a definição do CRD. Para coletar logs de Pods existentes, recrie-os por meio de uma atualização contínua (rolling update).
Após criar uma configuração do Logtail via CRD, gerencie-a exclusivamente pelo CRD. Alterações feitas no console do Simple Log Service (SLS) não são sincronizadas de volta. Para atualizar, modifique diretamente o CRD AliyunLogConfig.
Modelo de CRD
apiVersion: log.alibabacloud.com/v1alpha1
kind: AliyunLogConfig
metadata:
name: simple-stdout-example
spec:
project: k8s-my-project
logstore: k8s-stdout
logstoreMode: standard
shardCount: 2
lifeCycle: 90
logtailConfig:
inputType: plugin
configName: simple-stdout-example
inputDetail:
...
Parâmetros básicos
|
Parâmetro |
Tipo |
Obrigatório |
Descrição |
|
|
string |
Não |
Nome do projeto SLS. O padrão é o projeto de instalação do Logtail. Criado automaticamente se não existir. |
|
|
string |
Sim |
Nome do Logstore. Criado automaticamente se não existir. |
|
|
string |
Não |
Tipo do Logstore. Valores válidos: |
|
|
int |
Não |
Número de shards. Valores válidos: 1–10. Padrão: 2. |
|
|
int |
Não |
Período de retenção de logs em dias. Valores válidos: 1–3650. Padrão: 90. 3650 indica retenção permanente. Tem efeito apenas na criação. |
|
|
array |
Não |
Grupo de máquinas. O SLS cria automaticamente o grupo |
|
|
object |
Sim |
Configuração do Logtail. Consulte os subparâmetros abaixo. |
Subparâmetros de logtailConfig:
|
Subparâmetro |
Descrição |
|
|
Nome da configuração do Logtail. Deve corresponder a |
|
|
Tipo de source do log. |
|
|
Configuração detalhada de entrada. |
|
|
Tipo de saída. Defina como |
|
|
Configuração detalhada de saída. |
|
|
Uma entrada de log de exemplo. |
Consulte Configurações do Logtail.
Filtragem de contêineres
As opções de filtragem dependem da versão do Logtail.
Logtail anterior à v1.0.34 — filtre apenas por variáveis de ambiente e rótulos de contêiner.
O namespace do Kubernetes e o nome do contêiner correspondem aos seguintes rótulos:
Namespace:
io.kubernetes.pod.namespaceNome do contêiner:
io.kubernetes.container.name
Use esses rótulos para filtrar contêineres. Caso não sejam suficientes, utilize listas de permissões ou listas de bloqueios de variáveis de ambiente.
Logtail v1.0.34 e posterior — filtre por metadados de nível Kubernetes, incluindo nome do Pod, namespace, nome do contêiner e rótulos.
Configure os parâmetros de filtragem em logtailConfig.inputDetail.advanced.k8s:
|
Parâmetro |
Descrição |
|
|
Lista de permissões de rótulos Kubernetes — contêineres a incluir |
|
|
Lista de bloqueios de rótulos Kubernetes — contêineres a excluir |
|
|
Filtrar por namespace (regex) |
|
|
Filtrar por nome do Pod (regex) |
|
|
Filtrar por nome do contêiner (regex) |
Consulte Coletar logs de texto de contêineres Kubernetes no modo DaemonSet e Coletar stdout e stderr de contêineres Kubernetes no modo DaemonSet (versão antiga).
Exemplo: coletar logs de texto
Crie o arquivo log-file.yaml com o seguinte conteúdo:
apiVersion: log.alibabacloud.com/v1alpha1 # Use the default value. Do not modify.
kind: AliyunLogConfig # Use the default value. Do not modify.
metadata:
name: test-file # Unique resource name in the Kubernetes cluster.
spec:
project: k8s-log-c326bc86**** # Optional. Auto-created if the project does not exist.
logstore: test-file # Required. Auto-created if the Logstore does not exist.
logtailConfig:
inputType: file # file = text logs; plugin = stdout logs.
configName: test-file # Must match metadata.name.
inputDetail:
logType: common_reg_log # Simple mode.
logPath: /log/ # Log file directory.
filePattern: "*.log" # Log file name pattern. Supports * and ?.
dockerFile: true # Set to true to collect from containers.
advanced:
k8s:
K8sNamespaceRegex: ^(default)$
K8sPodRegex: '^(eci-sls-demo.*)$'
Exemplo: coletar logs de stdout
Crie o arquivo log-stdout.yaml com o seguinte conteúdo:
apiVersion: log.alibabacloud.com/v1alpha1 # Use the default value. Do not modify.
kind: AliyunLogConfig # Use the default value. Do not modify.
metadata:
name: test-stdout # Unique resource name in the Kubernetes cluster.
spec:
project: k8s-log-c326bc86**** # Optional. Auto-created if the project does not exist.
logstore: test-stdout # Required. Auto-created if the Logstore does not exist.
shardCount: 2 # Optional. Default: 2. Valid values: 1–10.
lifeCycle: 90 # Optional. Default: 90 days. Valid values: 1–3650. 3650 = permanent.
logtailConfig:
inputType: plugin # plugin = stdout logs; file = text logs.
configName: test-stdout # Must match metadata.name.
inputDetail:
plugin:
inputs:
- type: service_docker_stdout
detail:
Stdout: true
Stderr: true
# IncludeEnv:
# aliyun_logs_test-stdout: "stdout"
Aplicar a configuração do CRD
kubectl apply -f log-file.yaml
kubectl apply -f log-stdout.yaml
Após aplicar a configuração, o Logtail coleta logs de stdout ou texto de cada contêiner e os envia para o SLS.
Crie índices no Logstore para habilitar consultas e análises. Consulte Criar índices.
Testar a coleta de logs
Após a criação do CRD, os logs dos novos Pods são coletados automaticamente. Verifique a configuração seguindo estas etapas.
Crie uma aplicação de teste
Crie o arquivo test-sls-crd.yaml com o seguinte Deployment. O contêiner grava tanto no stdout quanto em um arquivo de log.
apiVersion: apps/v1
kind: Deployment
metadata:
name: eci-sls-demo
labels:
app: sls
spec:
replicas: 1
selector:
matchLabels:
app: sls
template:
metadata:
name: sls-test
labels:
app: sls
alibabacloud.com/eci: "true"
spec:
containers:
- args:
- -c
- mkdir -p /log;while true; do echo hello world; date; echo hello sls >> /log/busy.log; sleep 1;done
command:
- /bin/sh
image: registry-vpc.cn-beijing.aliyuncs.com/eci_open/busybox:1.30
imagePullPolicy: Always
name: busybox
kubectl create -f test-sls-crd.yaml
Verifique o status do Pod
kubectl get pod
Saída esperada:
NAME READY STATUS RESTARTS AGE
eci-sls-demo-7bf8849b9f-cgpbn 1/1 Running 0 2m14s
Visualize logs coletados
Faça login no console SLS.
Clique em nome do projeto.
Clique em Logstore correspondente aos seus contêineres para visualizar os logs.
Coleta de logs de texto:

Coleta de logs de stdout:

Desativar a coleta de logs para Pods específicos
Por padrão, o CRD coleta logs de todos os Pods correspondentes. Para excluir Pods específicos, adicione a anotação k8s.aliyun.com/eci-sls-enable: "false" aos metadados do Pod.
Adicione as anotações em
spec.template.metadata, e não nos metadados de nível superior.As anotações têm efeito apenas na criação do Pod. Alterações durante atualizações do Pod não surtem efeito.
apiVersion: apps/v1
kind: Deployment
metadata:
name: eci-sls-demo2
labels:
app: sls
spec:
replicas: 1
selector:
matchLabels:
app: sls
template:
metadata:
name: sls-test
labels:
app: sls
alibabacloud.com/eci: "true"
annotations:
k8s.aliyun.com/eci-sls-enable: "false" # Disables log collection.
spec:
containers:
- args:
- -c
- mkdir -p /log;while true; do echo hello world; date; echo hello sls >> /log/busy.log; sleep 1;
done
command:
- /bin/sh
image: registry.cn-shanghai.aliyuncs.com/eci_open/busybox:1.30
imagePullPolicy: Always
name: busybox