您有不同的方法,主要取决于您在 Kubernetes pod 中部署 Sidekiq 的方式。
这里有一些。
SIDEKIQMON
从 Sidekiq v6 开始,我们有 sidekiqmon
您可以尝试以下方法:
bundle exec sidekiqmon processes | grep $(hostname)
要使其正常工作,您必须能够 grep 与当前 pod/container 相关的正确运行进程。
PS AUX(我以前用过)
这样的事情可能会起作用:
ps aux | grep '[s]idekiq 6'
请注意末尾的 6(sidekiq 版本),以区别于您可能拥有的其他进程。
无论如何,这里的想法是使用ps aux 检查您的流程并尝试“grep”您需要监控的sidekiq。
SIDEKIQ_ALIVE
另一种方法是使用sidekiq_alive
但它需要更多的努力来配置和管理,我从未真正尝试过。这是唯一真正检查完整功能以及 Redis 状态的工具。
SYSTEMCTL
如果您使用 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 启动它,则您不需要它。