繁体   English   中英

如何将Kubernetes日志发送到AWS CloudWatch?

[英]How to Send Kubernetes Logs to AWS CloudWatch?

AWS CloudWatch登录Docker

设置在AWS CloudWatch的日志驱动器docker用做log-driver=awslogslog-opt ,例如-

#!/bin/bash

docker run \
    --log-driver=awslogs \
    --log-opt awslogs-region=eu-central-1 \
    --log-opt awslogs-group=whatever-group \
    --log-opt awslogs-stream=whatever-stream \
    --log-opt awslogs-create-group=true \
    wernight/funbox \
        fortune

我的问题

我想在Kubernetes集群中使用AWS CloudWatch日志,其中每个pod包含一些Docker容器。 每个部署都有一个单独的日志组,每个容器都有一个单独的流。 我找不到通过Kubernetes create / apply将日志记录参数发送到docker容器的方法。

我的问题

如何将log-driverlog-opt参数发送到pod / deployment中的Docker容器?

我试过了什么

根据我的理解,Kubernetes更喜欢群集级日志记录到Docker日志记录驱动程序。

我们可以使用流利的方法来收集,转换容器日志并将其推送到CloudWatch Logs。

您只需要使用ConfigMap和Secret创建一个流畅的DaemonSet。 文件可以在Github中找到。 它已经过Kubernetes v1.7.5的测试。

以下是一些解释。

使用DaemonSet,流利地从主机文件夹/var/lib/docker/containers docker / containers收集每个容器日志。

过滤

fluent-plugin-kubernetes_metadata_filter插件从Kubernetes API服务器加载pod的元数据。

日志记录就是这样的。

{
    "log": "INFO: 2017/10/02 06:44:13.214543 Discovered remote MAC 62:a1:3d:f6:eb:65 at 62:a1:3d:f6:eb:65(kube-235)\n",
    "stream": "stderr",
    "docker": {
        "container_id": "5b15e87886a7ca5f7ebc73a15aa9091c9c0f880ee2974515749e16710367462c"
    },
    "kubernetes": {
        "container_name": "weave",
        "namespace_name": "kube-system",
        "pod_name": "weave-net-4n4kc",
        "pod_id": "ac4bdfc1-9dc0-11e7-8b62-005056b549b6",
        "labels": {
            "controller-revision-hash": "2720543195",
            "name": "weave-net",
            "pod-template-generation": "1"
        },
        "host": "kube-234",
        "master_url": "https://10.96.0.1:443/api"
    }
}

使一些标签与Fluentd record_transformer过滤器插件。

{
    "log": "...",
    "stream": "stderr",
    "docker": {
        ...
    },
    "kubernetes": {
        ...
    },
    "pod_name": "weave-net-4n4kc",
    "container_name": "weave"
}

退房

fluent-plugin-cloudwatch-logs插件发送到AWS CloudWatch Logs。

使用log_group_name_keylog_stream_name_key配置,日志组和流名称可以是记录的任何字段。

<match kubernetes.**>
  @type cloudwatch_logs
  log_group_name_key pod_name
  log_stream_name_key container_name
  auto_create_stream true
  put_log_events_retry_limit 20
</match>

根据kubernate,Kubernetes不提供日志数据的本机存储解决方案,但您可以将许多现有的日志记录解决方案集成到Kubernetes集群和kubernate 集群级日志记录体系结构中

Kubernetes没有指定日志代理,但是两个可选的日志代理与Kubernetes版本一起打包:Stackdriver Logging用于Google Cloud Platform和Elasticsearch。 您可以在专用文档中找到更多信息和说明。 两者都使用流利的自定义配置作为节点上的代理。

流畅的图像也可以将Kubernetes日志发送到CloudWatch,因此您可以使用它来部署

您可以使用Helm图表来安装Fluentd:

$ helm install --name my-release incubator/fluentd-cloudwatch

这来自: https//github.com/kubernetes/charts/tree/master/incubator/fluentd-cloudwatch

Sliverfox有一个很好的答案。 您不必构建自己的图像。 也可以直接使用流利的官方码头图片,流利/流利-kubernetes-daemonset:cloudwatch。 代码在fluentd-kubernetes-daemonset github上

您可以使用configmap替换默认的fluent.conf。 如下所示在ds.yaml中,并在configmap.yaml中编写自己的fluent.conf。 对于完整的yaml文件,您可以参考我们编写的示例ds.yamlconfigmap.yaml

    volumeMounts:
    - name: varlog
      mountPath: /var/log
    - name: varlibdockercontainers
      mountPath: /var/lib/docker/containers
      readOnly: true
    - name: config-volume
      mountPath: /fluentd/etc/
  volumes:
  - name: varlog
    hostPath:
      path: /var/log
  - name: varlibdockercontainers
    hostPath:
      path: /var/lib/docker/containers
  - name: config-volume
    configMap:
      name: fluentd-cw-config

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM