Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/magento/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Amazon web services 如何登录亚马逊网络服务(AWS)?_Amazon Web Services_Logging_Go_Docker - Fatal编程技术网

Amazon web services 如何登录亚马逊网络服务(AWS)?

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作

我有一个在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作为日志驱动程序(使用)。然后,您的容器日志将写入主机上的
/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!")

}