ibeautiful
2023-09-26 14:20:13
我有一個 Fargate ECS 容器,用于通過 ECS 中的任務運行 Docker 容器。當任務啟動時,會調(diào)用一個sh腳本runner.sh,,#!/bin/shecho "this line will get logged to ECS..."python3 src/my_python_script.py # however print statements from this Python script are not logged to ECS這又會啟動一個長時間運行的 Python 腳本my_python_script.py. 我知道 Python 腳本運行良好,因為它執(zhí)行了需要執(zhí)行的操作,但我看不到 Python 腳本的輸出。里面my_python_script.py有好幾條print()語句。在我的 ECS Fargate 任務的 CloudWatch 日志中,我看到 sh 腳本 ( "this line will get logged to ECS...") 的輸出,但沒有看到print()Python 腳本中執(zhí)行的語句的輸出。這是我的任務定義中的日志配置:{ "ipcMode": null, "executionRoleArn": "myecsTaskExecutionRolearn", "containerDefinitions": [ { "dnsSearchDomains": null, "environmentFiles": null, "logConfiguration": { "logDriver": "awslogs", "secretOptions": null, "options": { "awslogs-group": "/ecs/mylogsgroup", "awslogs-region": "eu-west-1", "awslogs-stream-prefix": "ecs" } }, "entryPoint": null, "portMappings": [], "command": null, "linuxParameters": null, "cpu": 0, "environment": [], "resourceRequirements": null, "ulimits": null, "dnsServers": null, "mountPoints": [], "workingDirectory": null, "secrets": null, "dockerSecurityOptions": null, "memory": null, "memoryReservation": null, "volumesFrom": [], "stopTimeout": null, "image": "1234567.dck.aws.com/mydockerimage", "startTimeout": null, "firelensConfiguration": null, } 我想我正在遵循h(huán)ttps://docs.aws.amazon.com/AmazonECS/latest/userguide/using_awslogs.html中的 awslogs 說明,但也許不是?我是否需要做一些明顯的事情來確保print()在我的 ECS 任務的 CloudWatch 日志中捕獲 Python 腳本中的語句?
1 回答

慕絲7291255
TA貢獻1859條經(jīng)驗 獲得超6個贊
在我看來,您可以在這里處理一些事情。
第一個是 Python 的默認緩沖行為,這可能會阻止輸出顯示。你需要阻止這個。
您可以通過在 CMD 之前插入以下內(nèi)容來正確設置PYTHONUNBUFFERED環(huán)境變量:
ENV PYTHONUNBUFFERED=1
其次,
任務中的容器記錄的信息類型主要取決于它們的 ENTRYPOINT 命令。默認情況下,捕獲的日志顯示您在本地運行容器時通常會在交互式終端中看到的命令輸出,即 STDOUT 和 STDERR I/O 流。awslogs 日志驅(qū)動程序只是將這些日志從 Docker 傳遞到 CloudWatch Logs。有關(guān)如何處理 Docker 日志的更多信息,包括捕獲不同文件數(shù)據(jù)或流的替代方法,請參閱 Docker 文檔中的查看容器或服務的日志。
因此,按照ENTRYPOINT 的 Exec 形式,我將用以下內(nèi)容替換 CMD 行:
ENTRYPOINT ["/app/runner.sh"]
這應該有助于將您的 shell 腳本的 STDOUT 和 STDERR I/O 流連接起來,并希望將您的 Python 腳本連接到容器日志記錄。
添加回答
舉報
0/150
提交
取消