【问题标题】:openshift livenessProbe logging only when status NOT 200仅当状态不是 200 时才记录 openshift livenessProbe
【发布时间】:2020-12-16 01:33:35
【问题描述】:

我有一个简单的 livenessProbe http 检查:

livenessProbe:
    httpGet:
      path: /health
      port: 8080
    initialDelaySeconds: 20
    timeoutSeconds: 30
    failureThreshold: 3
    successThreshold: 3

在我的日志中,有大量状态为 200 OK 的 /health 检查,这使日志变得非常大,因此非常昂贵。有没有办法只在状态为 NOT 200 时记录?

我试图寻找答案,但还没有成功。

有人可以帮我吗?谢谢

#UPDATE

我认为日志是通过 nginx 生成的:

nginx的配置:

server {
    listen 8080;

    root /www/data/;
    index index.html;
    access_log off;

    location /health {
        return 200 '{\"status\": \"ok\"}';
        default_type application/json;
    }

    location / {
        gzip on;
        try_files $uri /index.html;
    }
}

【问题讨论】:

  • 您是否设置了任何日志架构,或者您是否使用默认的 OpenShift 设置?

标签: kubernetes openshift livenessprobe


【解决方案1】:

如果探测检查成功,OpenShift 不会将成功的探测日志记录到事件日志中(您可以使用oc get events 查看)。它只记录失败的日志。我认为您提到的日志可能是 httpd 或 nginx 网络服务器等访问日志。如果是 pod 日志作为正在运行的 Web 服务器或您的应用程序,您应该通过 Web 服务器或您的应用程序配置过滤“/health”。

例如,如果您使用httpd web服务器,您可以如下过滤访问日志。

SetEnvIf Request_URI "^/health$" health_check_log

CustomLog "logs/access_log" combined env=!health_check_log

【讨论】:

  • 是的,实际上这些是 pod 上的日志。是否可以只过滤掉不包含 statusCode: 200 的日志?
  • @MartinFric AFAIK,apache 没有基于状态码的过滤选项,因此您可以使用 `CustomLog "logs/health_log" 组合 env=health_check_log"` 单独保留运行状况检查日志,并且可以删除状态码 200 定期使用 cron 等记录日志。
  • 我发现它是从哪里来的。我猜是在 nginx 配置中。在问题的#UPDATE 部分中更新了行。你能帮我按照你为 httpd webserver 解释的方式配置 nginx 吗?
  • 我对 nginx 不熟悉,但是试试这个怎么样? ~~~ location /health { return 200 '{\"status\": \"ok\"}'; default_type 应用程序/json; access_log 关闭; }~~~
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-12-26
  • 2016-05-07
  • 1970-01-01
  • 2013-06-14
  • 1970-01-01
  • 1970-01-01
  • 2020-10-26
相关资源
最近更新 更多