在Kubernetes上本地使用awslogs

时间:2019-04-10 09:39:43

标签: amazon-web-services kubernetes amazon-cloudwatchlogs

  1. 我想出了一种配置k8以使用aws日志而无需任何第三方服务/应用程序的方法。您所要做的就是在master.yaml文件中添加以下行:
spec:
  additionalPolicies:
    master: |
      [
        {
          "Effect": "Allow",
          "Action": ["logs:CreateLogGroup", "logs:CreateLogStream", "logs:PutLogEvents"],
          "Resource": ["*"]
        }
      ]
    node: |
      [
        {
          "Effect": "Allow",
          "Action": ["logs:CreateLogGroup", "logs:CreateLogStream", "logs:PutLogEvents"],
          "Resource": ["*"]
        }
      ]
  docker:
    logDriver: awslogs
    logOpt:
    - awslogs-region=eu-west-1
    - awslogs-group=<group-name> # make sure that this group already exist (create it manually)
    - tag={{.Name}}
  1. 最后一行是最重要的一行,它将把每个pod的日志流重命名为可读的内容,而不是docker哈希。

  2. 毫无疑问,您必须更新集群才能使更改生效。 (请更新集群$ {CLUSTER-NAME}-是)

  3. 就是这样。打开AWS Cloudwatch并享受您的日志:-)

  4. 话虽如此,我有一个问题。日志流名称包含的信息比我想要的要多得多。知道如何将日志流名称简化为Pod Nice名称吗?

  5. 我尝试了几种处理'tag'值的方法(例如,tag = {{带split .Name“ _”}} {{index。2}} {{end}}),但是它具有更新操作失败。

  6. 日志流名称示例:k8s_POD-NICE-NAME_POD-NICE-NAME-67c77758bf-8knn8_mind_24ed4160-5b5e-11e9-b53a-0a02b6d80d7c_1

1 个答案:

答案 0 :(得分:0)

在这种情况下,您将使用Docker awslogs驱动程序进行日志记录。在这种情况下,您必须指定awslogs-stream或tag选项才能将流名称更改为默认值。该标签更具灵活性,我认为它可以解释Go模板标记,因此可以更好地适应您的要求。这样,您可以拥有一个更友好的流名称,而不是容器ID。

来自docker文档:

  

指定标记以替代awslogs-stream选项。标签会解释Go模板标记,例如{{.ID}},{{。FullID}}或{{.Name}}码头工人。{{。ID}}。有关所有支持的模板替换的详细信息,请参见标签选项文档。

     

同时指定awslogs-stream和tag时,为awslogs-stream提供的值将覆盖用tag指定的模板。

     

如果未指定,则将容器ID用作日志流。

在此处查看tag和awslogs-stream选项: https://docs.docker.com/config/containers/logging/awslogs/