[英]How to check health of docker image running sidekiq
我在我的集群上使用 kubernetes 和几个 rails / node docker 图像。 他们中的大多数都有 :3000/healtz 健康检查,只是返回状态 200 和身体正常。
现在我正在尝试探索如何在运行 sidekiq 的 docker 镜像上执行此健康检查的最佳方式。 我如何验证工作人员是否正在运行?
如果您的图像类似于 unix,您可以检查进程是否正在运行
$ ps aux | grep '[s]idekiq'
但这并不能保证在 sidekiq 和 redis 中一切正常。
在此 sidekiq 插件https://github.com/arturictus/sidekiq_alive 中描述/开发了更好的方法
我面临着问题livenessProbe
为K8S并试图不使用此LIB来解决,但尚未成功。
您有不同的方法,主要取决于您在 Kubernetes pod 中部署 Sidekiq 的方式。
这里有一些。
配角兽
从 Sidekiq v6 开始,我们有了sidekiqmon
您可以尝试使用以下方法:
bundle exec sidekiqmon processes | grep $(hostname)
要使其工作,您必须能够 grep 与当前 pod/容器相关的正确运行进程。
PS AUX (我过去用过)
这样的事情可以工作:
ps aux | grep '[s]idekiq 6'
请注意末尾的 6(sidekiq 版本)以区别于您可能拥有的其他进程。 无论如何,这里的想法是使用ps aux
检查您的进程,并尝试“grep”您需要监视的 sidekiq 进程。
SIDEKIQ_ALIVE
另一种方法是使用sidekiq_alive,但它需要更多的精力来配置和管理,我从来没有真正尝试过。 这是唯一一个真正检查完整功能以及 Redis 状态的方法。
系统控制
如果您使用systemd
部署了 sidekiq,则可以执行以下操作:
systemctl status sidekiq | grep '[r]unning'"
所以最后,我用于 Sidekiq 部署的 YAML 清单如下所示:
livenessProbe:
exec:
command: ["/bin/bash", "-l", "-c", "bundle exec sidekiqmon processes | grep $(hostname)"]
initialDelaySeconds: 120
periodSeconds: 30
successThreshold: 1
failureThreshold: 3
timeoutSeconds: 30
请注意,只有 sidekiq_alive 方法将执行完整的端到端测试,同时检查 redis 状态。 也许这太多了,你可以有其他的 Redis 监控系统,所以也许在这里,使用 kubernetes LivenessProbes,你不需要检查整个流程,而只需检查 sidekiq 进程是否仍然存在或由于内存泄漏而崩溃. 这取决于您,根据您的需要。
“你为什么需要这种 LivenessProbes?”
因为如果您通过 systemd 或类似方式启动 Sidekiq,您将拥有主进程(PID 1)作为/usr/bin/python3 /usr/bin/systemctl start sidekiq
和使用 ExecStart 作为sidekiq 6.1.3 your_app_name [0 of 5 busy]
。 如果你有内存泄漏,最后一个会崩溃,而不是 PID 1。出于这个原因,你需要一种用于 Sidekiq 的 livenessProbes。
相反,如果您没有使用 systemd 并且您的 PID 1 是sidekiq 6.1.3 your_app_name [0 of 5 busy]
因为您使用bundle exec sidekiq
启动它,您不需要它。
Sidekiq 6.0 附带了一个新的sidekiqmon
,您可以使用它来验证进程是否在使用 redis 的当前机器上运行:
REDIS_URL=redis://redis.example.com:6380/5 sidekiqmon | grep $$(hostname)
文档: https : //github.com/mperham/sidekiq/wiki/Monitoring#sidekiqmon
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.