我知道检查Docker容器的运行状况的方法之一是使用命令
HEALTHCHECK CMD curl --fail http://localhost:3000/ || exit 1
Run Code Online (Sandbox Code Playgroud)
但是如果工人没有这样的URL,那么如何在这种情况下检查容器的健康状况?
pun*_*eel 14
该celery inspect ping命令派上用场,因为它完成了一次旅行:它在代理上发送"ping"任务,工作人员响应并且芹菜获取响应.
假设您的应用程序已命名tasks.add,您可以ping所有工作人员:
/app $ celery inspect ping -A tasks.add
-> celery@aa7c21dd0e96: OK
pong
-> celery@57615db15d80: OK
pong
Run Code Online (Sandbox Code Playgroud)
随着aa7c21dd0e96作为泊坞窗主机名,从而获得$HOSTNAME.
要ping单个节点,您必须运行:
celery inspect ping -A tasks.add -d celery@$HOSTNAME
Run Code Online (Sandbox Code Playgroud)
这里,d代表目的地.
要添加到Dockerfile的行:
HEALTHCHECK CMD celery inspect ping -A tasks.add -d celery@$HOSTNAME
Run Code Online (Sandbox Code Playgroud)
样本输出:
/app $ celery inspect ping -A tasks.add -d fake_node
Error: No nodes replied within time constraint.
/app $ echo $?
69
Run Code Online (Sandbox Code Playgroud)
如果节点不存在或没有回复,则不健康
/app $ celery inspect ping -A tasks.add -d celery@$HOSTNAME
-> celery@d39b3d31cc13: OK
pong
/app $ echo $?
0
Run Code Online (Sandbox Code Playgroud)
节点回复时健康pong.
/app $ celery inspect ping -d celery@$HOSTNAME
Traceback (most recent call last):
...
raise socket.error(last_err)
OSError: [Errno 111] Connection refused
/app $ echo $?
1
Run Code Online (Sandbox Code Playgroud)
当代理不可用时不健康 - 我删除了应用程序,因此它尝试连接到本地AMPQ并且失败这可能不适合您的需求,代理是不健康的,而不是工作者.
下面的示例片段源自@PunKeel 发布的片段,适用于那些希望实现健康检查的人,docker-compose.yml其中可以通过docker-compose或 使用docker stack deploy。
worker:
build:
context: .
dockerfile: Dockerfile
image: myimage
links:
- rabbitmq
restart: always
command: celery worker --hostname=%h --broker=amqp://rabbitmq:5672
healthcheck:
test: celery inspect ping -b amqp://rabbitmq:5672 -d celery@$$HOSTNAME
interval: 30s
timeout: 10s
retries: 3
Run Code Online (Sandbox Code Playgroud)
注意$命令中的额外内容,以便$HOSTNAME实际传递到容器中。我也没有使用-A标志。
理想情况下,rabbitmq 也应该有自己的健康检查,也许是curl guest:guest@localhost:15672/api/overview,因为 docker 将无法辨别是 worker 宕机还是 broker 宕机了celery inspect ping。
| 归档时间: |
|
| 查看次数: |
3986 次 |
| 最近记录: |