我已在我的EBS应用程序中激活了CloudWatch日志。我启用了截图附件:
但是当我查看awslogs.log时,我总能找到这个错误:
cwlogs.push.stream - WARNING - 3317 - Thread-1 - No file is found with given path '/var/log/httpd/error.log*'.
cwlogs.push.stream - WARNING - 3317 - Thread-1 - No file is found with given path '/var/log/httpd/access.log*'.
我不知道为什么,因为httpd是来自Apache的服务,我正在使用Nginx(以Node.js为原点)。
如何禁用/删除此错误?
感谢。
答案 0 :(得分:1)
这是因为EC2实例上的awslogs
应用程序正在寻找要发送到CloudWatch的文件。
您可以检查和编辑位于以下位置的配置文件:
/etc/awslogs/awslogs.conf
确保重启服务:
sudo service awslogs restart
您可以在那里指定自己的文件并创建不同的组,而不是。
资源:
https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/AgentReference.html
答案 1 :(得分:1)
解决此问题的另一种方法是更改/etc/awslogs/config/beanstalklogs.conf
文件。
您可以创建一个包含以下内容的.ebextensions/myconfig.config
文件:
files:
"/etc/awslogs/config/beanstalklogs.conf":
mode: "000644"
owner: root
group: root
content: |
[/var/log/nodejs/nodejs.log]
log_group_name=/aws/elasticbeanstalk/YOUR_ENV/var/log/nodejs/nodejs.log
log_stream_name={instance_id}
file=/var/log/nodejs/nodejs.log*
[/var/log/nginx/error.log]
log_group_name=/aws/elasticbeanstalk/YOUR_ENV/var/log/nginx/error.log
log_stream_name={instance_id}
file=/var/log/nginx/error.log*
[/var/log/nginx/access.log]
log_group_name=/aws/elasticbeanstalk/YOUR_ENV/var/log/nginx/access.log
log_stream_name={instance_id}
file=/var/log/nginx/access.log*
# [/var/log/httpd/error_log]
# log_group_name=/aws/elasticbeanstalk/YOUR_ENV/var/log/httpd/error_log
# log_stream_name={instance_id}
# file=/var/log/httpd/error_log*
# [/var/log/httpd/access_log]
# log_group_name=/aws/elasticbeanstalk/YOUR_ENV/var/log/httpd/access_log
# log_stream_name={instance_id}
# file=/var/log/httpd/access_log*
[/var/log/eb-activity.log]
log_group_name=/aws/elasticbeanstalk/YOUR_ENV/var/log/eb-activity.log
log_stream_name={instance_id}
file=/var/log/eb-activity.log*
commands:
01-remove-default-beanstalklogs:
command: rm /etc/awslogs/config/beanstalklogs.conf.bak
02-restart-awslogs:
command: service awslogs restart
请注意,我已注释掉用于上传/var/log/httpd/error.log*
和/var/log/httpd/access.log*
文件的行。因此,CloudWatch代理将停止寻找这些文件。
在运行beanstalklogs.conf
中的命令之前,Awslogs使用@AndyHayden提到的默认myconfig.config
。这就是为什么我要求awslogs在beanstalklogs.conf
文件更改后重新启动。
将.ebextensions/myconfig.config
放在您上载到Elastic beantalk的*.zip
文件中。然后,弹性beantalk将执行myconfig.config
中的命令。
以下是commands
的使用文档:https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/customize-containers-ec2.html#linux-commands
答案 2 :(得分:0)
您可以使用以下.ebextensions/awslog.config
:
container_commands:
touch_logs:
command: touch /var/log/nodejs/nodejs.log /var/log/nginx/access.log /var/log/nginx/error.log /var/log/httpd/access_log /var/log/httpd/error_log
这可确保您从不会看到任何这些文件的“找不到具有给定路径的文件”。
注意:如果您使用的不是节点容器,则可以将/var/log/nodejs.log
替换为beanstalklogs.conf中的所有内容。
awslogs配置文件为/etc/awslogs/config/beanstalklogs.conf
,默认文件(用于Node):
[/var/log/nodejs/nodejs.log]
log_group_name=/aws/elasticbeanstalk/YOUR_ENV/var/log/nodejs/nodejs.log
log_stream_name={instance_id}
file=/var/log/nodejs/nodejs.log*
[/var/log/nginx/error.log]
log_group_name=/aws/elasticbeanstalk/YOUR_ENV/var/log/nginx/error.log
log_stream_name={instance_id}
file=/var/log/nginx/error.log*
[/var/log/nginx/access.log]
log_group_name=/aws/elasticbeanstalk/YOUR_ENV/var/log/nginx/access.log
log_stream_name={instance_id}
file=/var/log/nginx/access.log*
[/var/log/httpd/error_log]
log_group_name=/aws/elasticbeanstalk/YOUR_ENV/var/log/httpd/error_log
log_stream_name={instance_id}
file=/var/log/httpd/error_log*
[/var/log/httpd/access_log]
log_group_name=/aws/elasticbeanstalk/YOUR_ENV/var/log/httpd/access_log
log_stream_name={instance_id}
file=/var/log/httpd/access_log*
[/var/log/eb-activity.log]
log_group_name=/aws/elasticbeanstalk/YOUR_ENV/var/log/eb-activity.log
log_stream_name={instance_id}
file=/var/log/eb-activity.log*
如您所见,它同时具有 nginx和httpd行。
一个可以: 1.删除这些httpd块。 2.触摸这些文件。
触摸这些文件似乎具有较小的侵入性,并抑制了错误消息,因此没有任何内容发布到cloudwatch日志中:
sudo touch /var/log/httpd/error_log /var/log/httpd/access_log
注意:当EB首次启动时,您会收到有关httpd,nginx和nodejs.log的错误!因此在启动时触摸所有这些文件似乎更容易,这就是上面的awslog.config文件所做的。
答案 3 :(得分:0)
在我的一个环境中也遇到了这个问题,在配置了实例自动缩放的环境中,以及在缩放频率过于频繁的环境中,我也遇到了这个问题。
查看了/ var / logs目录中的awslogs,并且出现此错误
cwlogs.push.stream-警告-3317-线程1-找不到具有给定路径'/var/log/production.log*'的文件。
我尝试使用命令创建文件
sudo touch /var/log/production.log
但这停止了错误,但即使重新启动后也没有流式传输日志。
最后查看其他可以正常传输日志的实例,它是指向返回实际日志的文件的符号链接,因此通过容器命令从ebextension创建了符号链接
commands:
"01":
command: ln -sf /var/app/current/log/production.log /var/log/production.log
这终于对我有用。