我有一个任务,将AKS日志(控制平面和工作负载)自动上传到Azure存储帐户,以便以后可以查看它们,或者在出现任何故障时向电子邮件/团队通道发出警报通知。如果使用日志分析工作区,这将是一项简单的任务,但是,为了节省成本,我们将其禁用。
我已经尝试使用下面的cronjob,它会定期将pod日志上传到存储帐户,但它会给我带来以下错误[1]
apiVersion: batch/v1
kind: CronJob
metadata:
name: log-uploader
spec:
schedule: "0 0 * * *" # Run every day at midnight
jobTemplate:
spec:
template:
spec:
containers:
- name: log-uploader
image: mcr.microsoft.com/azure-cli:latest
command:
- bash
- "-c"
- |
az aks install-cli
# Set environment variables for Azure Storage Account and Container
export AZURE_STORAGE_ACCOUNT=test-101
export AZURE_STORAGE_CONTAINER=logs-101
# Iterate over all pods in the cluster and upload their logs to Azure Blob Storage
for pod in $(kubectl get pods --all-namespaces -o jsonpath='{range .items[*]}{.metadata.name} {.metadata.namespace}{"n"}{end}'); do
namespace=$(echo $pod | awk '{print $2}')
pod_name=$(echo $pod | awk '{print $1}')
# Use the Kubernetes logs API to retrieve the logs for the pod
logs=$(kubectl logs -n $namespace $pod_name)
# Use the Azure CLI to upload the logs to Azure Blob Storage
echo $logs | az storage blob upload --file - --account-name $AZURE_STORAGE_ACCOUNT --container-name $AZURE_STORAGE_CONTAINER --name "$namespace/$pod_name_`date`.log"
done
restartPolicy: OnFailure
错误[1]
error: expected 'logs [-f] [-p] (POD | TYPE/NAME) [-c CONTAINER]'.
POD or TYPE/NAME is a required argument for the logs command
See 'kubectl logs -h' for help and examples
相同的命令在容器外运行良好。
任何想法/建议都将是非常感谢的。
问候,
总裁
实现这一点的更好方法是在集群中部署一个fluentd守护进程,并使用azure存储插件将日志上传到存储帐户。
这个工具是为这个特定的目的而构建的,可能会更好地为您服务。
因此,我找到了一种更好的方法来自动将aks日志导出到azure存储帐户。我使用了一个名为Vector的工具(由DataDog提供)。它更容易实现,而且比fluentd轻量级。Vector不仅可以近乎实时地导出数据,还可以在数据实际传输到目的地之前对其进行大量转换。我已经创建了一个端到端视频教程来实现这一点视频链接