Exibindo Logs do Aplicativo em Nós Virtuais
Descubra como exibir os logs de aplicativos em execução em nós virtuais em um cluster do Kubernetes que você criou usando o Kubernetes Engine (OKE).
Depois de criar um cluster com nós virtuais usando o Kubernetes Engine, você tem duas opções para acessar os logs de aplicativos em execução nos nós virtuais:
- Exiba os logs stdout e stderr dos contêineres de aplicativos usando o comando
kubectl logs. - Envie logs do aplicativo para um servidor de logs persistente para exibição.
Exibindo logs stdout e stderr usando o comando logs do kubectl
kubectl logs:-
Se você ainda não tiver feito isso, siga as etapas para configurar o arquivo de configuração kubeconfig do cluster e (se necessário) defina a variável de ambiente KUBECONFIG para apontar para o arquivo. Observe que você deve configurar seu próprio arquivo kubeconfig. Não é possível acessar um cluster usando um arquivo kubeconfig que outro usuário tenha configurado. Consulte Configurando o Acesso ao Cluster.
- Em uma janela de terminal, execute o comando
kubectl logsdigitando:kubectl logs <pod-name>Por exemplo:
kubectl logs nginxQuando o pod contiver mais de um contêiner, especifique o contêiner para o qual você deseja exibir os logs. Por exemplo, se o pod
myapptiver dois contêineres chamadosnginxelogginge você quiser exibir os logs do contêinerlogging, informe:kubectl logs myapp logging
Enviando logs para um servidor de logs persistente
Você pode enviar os logs de aplicativos em execução em nós virtuais para um servidor de logs remoto, como OpenSearch, e exibir os logs nesse servidor. Como os nós virtuais não suportam o conjunto de daemons do Kubernetes, você não pode executar um agente de log no nível do nó. Em vez disso, você pode executar um agente de log leve como um sidecar para cada um dos pods do aplicativo. Você pode usar qualquer agente de log que possa ser executado como um sidecar em um pod do Kubernetes, como Fluent Bit.
Por exemplo, para executar o Fluent Bit como um sidecar em um pod para enviar logs do aplicativo para um servidor de log OpenSearch remoto:
- Crie um Kubernetes ConfigMap por cluster ou por namespace, especificando as definições de configuração do Fluent Bit a serem usadas. Em particular, observe que você deve especificar o endereço IP, o número da porta e os parâmetros de autenticação do servidor de log remoto.
Por exemplo:
apiVersion: v1 kind: ConfigMap metadata: name: fluentbit-config data: fluent-bit.conf: | [SERVICE] flush 1 daemon Off [INPUT] Name tail Path /mnt/log/* [OUTPUT] name opensearch match * host <ip-address> port <port-number> tls On HTTP_User <username> HTTP_Passwd <example-password> Index fluent-bit Suppress_Type_Name Onem que:
host <ip-address>especifica o endereço IP do servidor Opensearch.port <port-number>especifica a porta do servidor Opensearch (9200 por padrão).HTTP_User <username>especifica o nome de usuário do servidor Opensearch.HTTP_Passwd <example-password>especifica a senha do servidor Opensearch.
- Adicione um sidecar Fluent Bit a cada pod. Observe que você deve configurar todos os pods com um sidecar de Bit Fluente para garantir que os logs do aplicativo sejam enviados para o destino de log persistente.
-
Na seção
volumesde cada especificação de pod, especifique:- Um emptyDir em que os logs do aplicativo são gravados, da seguinte forma:
- name: logs emptyDir: {} - Uma referência ao ConfigMap criado anteriormente, da seguinte forma:
- name: fluentbit-config configMap: name: fluentbit-config
- Um emptyDir em que os logs do aplicativo são gravados, da seguinte forma:
-
Na seção
containersde cada especificação de pod, especifique que o contêiner de log:- Usa a imagem
fluent/fluent-bit. - Monta
logsemptyDir efluentbit-configConfigMap.
Por exemplo:
- name: logging image: fluent/fluent-bit resources: requests: cpu: 100m memory: 50Mi volumeMounts: - name: logs mountPath: /mnt/log - name: fluentbit-config mountPath: /fluent-bit/etc - Usa a imagem
Veja um exemplo de uma especificação de pod completa:
apiVersion: v1 kind: Pod metadata: name: date-logging spec: containers: - name: date image: busybox resources: requests: cpu: 500m memory: 200Mi command: ["sh", "-c"] args: - while [ 1 ]; do echo "Writing the date in /mnt/log/date.log"; date >> /mnt/log/date.log; sleep 10; done volumeMounts: - name: logs mountPath: /mnt/log - name: logging image: resources: requests: cpu: 100m memory: 50Mi volumeMounts: - name: logs mountPath: /mnt/log - name: fluentbit-config mountPath: /fluent-bit/etc volumes: - name: logs emptyDir: {} - name: fluentbit-config configMap: name: fluentbit-config -