Elastic Beanstalk 增强健康功能不能生成 healthd/application.log 文件。

0

【以下的问题经过翻译处理】 我为我的Elastic Beanstalk 环境开启了增强健康报告。环境是:

  1. 在“Amazon Linux 2”上运行多容器 Docker 设置。
  2. 它有一个 nginx 代理(配置 > 软件显示:日志流:已禁用 / 代理服务器:nginx / 轮换日志:已禁用 / X-Ray 守护程序:已禁用)。
  3. 开启了增强监控(才用了一下操作:配置 > 监控显示:CloudWatch 自定义指标-环境:CloudWatch 自定义指标-实例:/ 健康事件日志流:已禁用 / 忽略 HTTP 4xx:已启用 / 忽略负载均衡器 4xx:已禁用 系统:增强)。

但是在健康页面上,请求、响应或延迟字段都没有被填充,而负载和 CPU 利用率被填充了。我理解这些数据是从写入“/var/log/nginx/healthd/”目录下的日志文件中填充的,但是这个目录是空的。这好像是一个 bug 或某种错误配置。有人知道是怎么回事吗?

以下是一些相关信息:

healthd 配置文件(我注释掉了实际文件中的 UUID 的 group_id):

$ cat /etc/healthd/config.yaml
group_id: XXXX
log_to_file: true
endpoint: https://elasticbeanstalk-health.us-east-2.amazonaws.com
appstat_log_path: /var/log/nginx/healthd/application.log
appstat_unit: sec
appstat_timestamp_on: completion

healthd 守护程序日志的输出,显示未找到先前的 application.log.YYYY-MM-DD-HH 文件的警告:

$ head /var/log/healthd/daemon.log
# Logfile created on 2022-04-02 21:02:22 +0000 by logger .rb/66358
A, [2022-04-02T21:02:24.123304 #4122]   ANY -- : healthd daemon 1.0.6 initialized
W, [2022-04-02T21:02:24.266469 #4122]  WARN -- : log file "/var/log/nginx/healthd/application.log.2022-04-02-21" does not exist
W, [2022-04-02T21:02:29.266806 #4122]  WARN -- : log file "/var/log/nginx/healthd/application.log.2022-04-02-21" does not exist
W, [2022-04-02T21:02:34.404332 #4122]  WARN -- : log file "/var/log/nginx/healthd/application.log.2022-04-02-21" does not exist
W, [2022-04-02T21:02:39.406846 #4122]  WARN -- : log file "/var/log/nginx/healthd/application.log.2022-04-02-21" does not exist
W, [2022-04-02T21:02:44.410108 #4122]  WARN -- : log file "/var/log/nginx/healthd/application.log.2022-04-02-21" does not exist
W, [2022-04-02T21:02:49.410342 #4122]  WARN -- : log file "/var/log/nginx/healthd/application.log.2022-04-02-21" does not exist
W, [2022-04-02T21:02:54.410611 #4122]  WARN -- : log file "/var/log/nginx/healthd/application.log.2022-04-02-21" does not exist
W, [2022-04-02T21:02:59.410860 #4122]  WARN -- : log file "/var/log/nginx/healthd/application.log.2022-04-02-21" does not exist

/var/logs/nginx/ 路径以及他的perms和ownership。Nginx应不应该有healthd呢?

$ ls -l /var/log/nginx/
total 12
-rw-r--r-- 1 root  root  11493 Apr  4 21:15 access.log
drwxr-xr-x 2 nginx nginx     6 Apr  2 21:01 healthd
drwxr-xr-x 2 root  root      6 Apr  2 21:02 rotated

/var/logs/nginx/healthd/路径是空的

$ ls /var/log/nginx/healthd/
# this directory is empty

profile picture
专家
已提问 2 年前51 查看次数
1 回答
0

【以下的回答经过翻译处理】 尽管Elastic Beanstalk web控制台显示我的设置具有nginx代理,但对于多容器docker + docker compose,它不使用Elastic Beanstalk代理,所以我需要自己的nginx容器报告此信息。

以下是一些有用的信息:

*如何通常正确挂载容器日志:https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/create_deploy_docker.container.console.html#docker-env-cfg.healthd-logging *如何设置自己的nginx以正确格式记录日志:https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/health-enhanced-serverlogs.html#health-enhanced-serverlogs.configure

用上面的信息,我自己的nginx记录健康信息到NGINXDIR =“/var/log/eb-docker/containers/nginx/healthd”和一个空目录HEALTHDDIR=“/ var/log/nginx/healthd ”,所以我创建了一个.ebextensions脚本:

1.执行 mkdir -p“$ NGINXDIR”&& chmod 777“$ NGINXDIR”(很想听听对该目录的更严格权限和/或用户/组所有者的建议) 2.在HEALTHDDIR中设置符号链接,指向我的NGINXDIR:

      if [ -L "$HEALTHDDIR" ]; then
        echo "is symlink: $HEALTHDDIR"
      else
        mv "$HEALTHDDIR" "$BACKUPDIR"
        echo "moved $HEALTHDDIR to $BACKUPDIR"
        ln -s "$NGINXDIR" "$HEALTHDDIR"
        echo "linked $NGINXDIR to $HEALTHDDIR"
      fi

现在应该正在工作,我现在能看到“Nxx Responses”和“PNN Latency”列中的数据,它们从最后10秒读取并定期更新

profile picture
专家
已回答 2 年前

您未登录。 登录 发布回答。

一个好的回答可以清楚地解答问题和提供建设性反馈,并能促进提问者的职业发展。

回答问题的准则