监视并根据 pod 日志事件采取措施

Monitor and take action based on pod log event

我已经将 PagerBot https://github.com/stripe-contrib/pagerbot 部署到我们的内部 k8s 集群中作为学习机会。我很高兴为它写一个舵图!

该机器人似乎在未知时间从 slack 断开连接,并且再也没有重新连接。我杀死了 pod,部署重新创建了它,它再次连接(我们使用的是 Slack RTM 选项)。

Pod 在断开连接时记录以下条目:

2018-02-24 02:31:14.382590 I [9:34765020] PagerBot::SlackRTMAdapter -- Closed connection to chat. --

我想学习一种监视此日志条目并采取措施的方法。最初我认为 Liveness 探测将是在记录此条目时使用 returns 非零命令的方式。但是日志并没有存储在容器内部(我可以看到)。

您如何根据使用 kubectl logs pod-name 可以看到的日志进行监控和采取措施?

我可以在我们的 Prometheus 测试部署中实现吗?我应该使用已知的 k8s 功能吗?

我认为 最好的 行动方案是将 pagerbot 扩展到表面,而不仅仅是其 /ping endpoint 中的字符串文字 pong,然后使用作为它的 livelinessProbe,紧随其后的是教它重新连接,因为这几乎肯定比拆除 Pod 便宜

话虽如此,您可能会考虑的一种方法是使用 Pod 的服务帐户凭证来监视同级容器的 sidecar 容器(类似于 if kubectl logs -f -c pagerbot $my_pod_name | grep "Closed connection to chat"; then kill -9 $pagerbot_pid; fi 类型的交易)。这有点尴尬,但我无法立即想到为什么它不起作用

我最终登陆 "liveness probe" 来解决我的问题。我已将以下内容添加到 pageyBot 部署的部署中:

    livenessProbe:
      exec:
        command:
        - bash
        - -c
        - "ss -an | grep -q 'EST.*:443 *$'"
      initialDelaySeconds: 120
      periodSeconds: 60

基本上测试是否为 443 建立了连接,我们注意到当 bot 断开连接时连接消失了。