每 5 秒 /var/log/healthd/daemon.log 写入文件不存在的日志。 文件存在,但 nginx 使用本地时区命名它,守护进程尝试使用 UTC 时区。 所有时区文件更改为 LA 区域。
为什么守护进程尝试使用 UTC 时区搜索文件?
W,[2020-02-16T10:29:53.494828 #3644]警告--:日志文件“/var/log/nginx/healthd/application.log.2020-02-16-18”不存在
我知道这是一个老问题,但我遇到了同样的问题,这很痛苦,网上没有太多文档或解决方案。
我在将 ElasticBeanstalk 环境从 Amazon Linux 2 迁移到使用 Apache/PHP 运行的 Amanzon Linux 2023 后遇到了此问题。
服务器托管在 eu-west-3(巴黎)上,在这种情况下,AWS 服务器似乎使用“欧洲/巴黎”时区而不是 UTC。 您可以使用
timedatectl
命令查看。
使用 https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/change-time-zone-of-instance.html 更改时区不起作用。
问题来自于如何创建 Apache 日志文件以供 healthd.service(报告 ElasticBeanstalk 增强运行状况监控的服务)使用。 Apache 正常在
/var/log/httpd/access_log
和 /var/log/httpd/error_log
中生成访问日志,但格式与运行状况要求不兼容,因此 AWS 需要创建一个 CustomLog
Apache 指令 (https://httpd.apache.org/docs/2.4) /fr/mod/mod_log_config.html#customlog)以正确的格式创建日志(有关更多信息,请参阅:https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/health-enhanced-serverlogs。 html)。
这就是
/etc/httpd/conf.d/elasticbeanstalk/healthd.conf
文件的作用,其中应该包含:
LogFormat "%{%s}t\"%U\"%s\"%D\"%D\"%{X-Forwarded-For}i" healthd
CustomLog "|/usr/sbin/rotatelogs /var/log/httpd/healthd/application.log.%Y-%m-%d-%H 3600" healthd
要生成日志并每小时轮换日志文件,请使用
rotatelogs
,请参阅文档 https://httpd.apache.org/docs/2.4/en/programs/rotatelogs.html.
问题是
rotatelogs
始终 使用 UTC
时区,无论如何。
因此,AWS healthd.service 搜索日志文件的时间为“欧洲/巴黎”时区的小时,我们有一个使用 UTC 时区的小时生成的日志文件。
rotatelogs
有一个偏移选项,旨在为 UTC 时间添加偏移,这正是我们想要的。
只需在文件夹
z_healthd.conf
中添加文件 .platform/httpd/conf.d/elasticbeanstalk/
即可添加 httpd 配置(请参阅 https://docs.aws.amazon.com/fr_fr/elasticbeanstalk/latest/dg/platforms-linux-extend.proxy。 html):
LogFormat "%{%s}t\"%U\"%s\"%D\"%D\"%{X-Forwarded-For}i" healthd
CustomLog "|/usr/sbin/rotatelogs /var/log/httpd/healthd/application.log.%Y-%m-%d-%H 3600 +120" healthd
请注意,偏移量
+120
与时区 Europe/Paris
一起使用,因为它是 UTC+2
时区,请根据您的需要进行调整。
创建
z_heathd.conf
文件是我发现覆盖health.conf
中的Apache配置的唯一方法,无法直接通过files
更改文件,也许可以使用脚本,但这意味着需要重新加载Apache,这如果流量已重新转发到它以执行运行状况检查,则可能会在部署后造成停机。
希望它会对您的奋斗有所帮助,祝 AWS EB 一切顺利!