Amazon web services 如何登录亚马逊网络服务(AWS)?
我有一个在Golang中构建的项目,部署在AWS中的Docker实例上 我在内部创建了一个日志文件,程序在其中写入多个日志 如何访问该日志文件 有没有其他正确的方法来记录日志Amazon web services 如何登录亚马逊网络服务(AWS)?,amazon-web-services,logging,go,docker,Amazon Web Services,Logging,Go,Docker,我有一个在Golang中构建的项目,部署在AWS中的Docker实例上 我在内部创建了一个日志文件,程序在其中写入多个日志 如何访问该日志文件 有没有其他正确的方法来记录日志 谢谢您可以将日志文件从容器装载到EC2主机。您可以在运行容器时使用: docker run -v /var/log/my_host_log_file.log:/var/log/your_container_log_file.log your-image 或者,您可以将应用程序配置为登录到stdout,并使用syslog作
谢谢您可以将日志文件从容器装载到EC2主机。您可以在运行容器时使用:
docker run -v /var/log/my_host_log_file.log:/var/log/your_container_log_file.log your-image
或者,您可以将应用程序配置为登录到stdout,并使用syslog作为日志驱动程序(使用)。然后,您的容器日志将写入主机上的
/var/log/messages
。如果您使用AWS,我建议将日志直接发送到AWS CloudWatch
首先在AWS Cloudwatch中创建一个新的日志组,例如“生产”。在Docker-Compose.yml(或通过Docker run..)中添加AWS日志驱动程序:
logging:
driver: "awslogs"
options:
awslogs-region: "eu-central-1"
awslogs-group: "Production"
awslogs-stream: "MyApp"
接下来创建一个IAM用户,该用户可以访问AWS Cloudwatch,并将凭据添加到Dockerhost中
IAM策略示例:
"Version" "2012-10-17"
"Statement"
“操作”“日志:CreateLogStream”“日志:PutLogEvents”“效果”“允许”“资源”
在使用systemd的Ubuntu上:
"Version" "2012-10-17"
"Statement"
"Action"
"logs:CreateLogStream"
"logs:PutLogEvents"
"Effect"
"Allow" "Resource"
并添加到文件中:
[Service] Environment"AWS_ACCESS_KEY_ID=<aws_access_key_id>"
Environment"AWS_SECRET_ACCESS_KEY=<aws_secret_access_key>"
现在,您的日志应该出现在AWS Cloudwatch中。谢谢您的回复
经过一段时间寻找问题的解决方案,我找到了
首先,我需要在docker主机中装载实例内部的文件
为此,我在项目的根文件夹Dockerrun.aws.Json中添加了一个Json文件
()
该文件声明了保存日志文件的共享文件夹(卷)(docker主机和实例)。此行相当于在docker run命令()中添加-v标志。我这样做是因为我不能将挂载添加到正在运行的实例中,也不能通过ssh停止挂载
{
"AWSEBDockerrunVersion": "1",
"Volumes": [
{
"HostDirectory": "/var/log/",
"ContainerDirectory": "/go/src/app/log"
}
]
}
然后告诉aws,当我请求记录时,我想下载我的日志文件。(Tail(最后100行)、bundle或rotate)我将这些文件添加到项目目录中的.ebextension文件夹中。()
Log_bundle.conf
Files:
"/opt/elasticbeanstalk/tasks/bundlelogs.d/log_bundle.conf":
Mode: "000755"
Owner: root
Group: root
Content: |
/var/log/application.log
Log_rotate.config
Files:
"/opt/elasticbeanstalk/tasks/bundlelogs.d/log_rotate.conf":
Mode: "000755"
Owner: root
Group: root
Content: |
/var/log/application.log
Log_tail.config
Files:
"/opt/elasticbeanstalk/tasks/publishlogs.d/log_tail.conf":
Mode: "000755"
Owner: root
Group: root
Content: |
/var/log/application.log
最后,我不尝试亚马逊可以看,但这是下一步
关于如果你使用麋鹿(Elasticsearch、Logstash、Kibana),我建议使用“logrus”
去图书馆
获取github.com/sirupsen/logrus
然后在你的项目中
package main
import (
logrus "github.com/sirupsen/logrus"
)
var log = logrus.New()
func main() {
conn, _ := net.Dial("tcp", "logstash-address")
hook := logrustash.New(conn, logrustash.DefaultFormatter(logrus.Fields{"type": "my-app"}))
log.Hooks.Add(hook)
log.Info("Hello World!")
}
您还可以装载AWS EBS卷,以便在需要保存日志并在其他地方访问日志时,将它们类似地作为-v some_AWS_EBS_vol:/var/log/your_app_log提供给docker launch of container,这对我解决问题有很大帮助。我张贴答案。谢谢
package main
import (
logrus "github.com/sirupsen/logrus"
)
var log = logrus.New()
func main() {
conn, _ := net.Dial("tcp", "logstash-address")
hook := logrustash.New(conn, logrustash.DefaultFormatter(logrus.Fields{"type": "my-app"}))
log.Hooks.Add(hook)
log.Info("Hello World!")
}