在docker
中设置AWS CloudWatch Logs驱动程序已完成log-driver=awslogs
和log-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-driver
和log-opt
参数发送到广告连播/部署中的Docker容器?
kubectl apply
kops
Kubernetes Logging Architecture
答案 0 :(得分:14)
根据我的理解,Kubernetes更喜欢群集级日志记录到Docker日志记录驱动程序。
我们可以使用fluentd来收集,转换容器日志并将其推送到CloudWatch Logs。
您只需要使用ConfigMap和Secret创建一个流畅的DaemonSet。文件可以在Github中找到。它已经过Kubernetes v1.7.5的测试。
以下是一些解释。
使用DaemonSet,流利地从主机文件夹/var/lib/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"
}
}
使用流畅的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_key
和log_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>
答案 1 :(得分:4)
根据kubernate,Kubernetes不提供日志数据的本机存储解决方案,但您可以将许多现有的日志记录解决方案集成到Kubernetes集群和kubernate cluster-level-logging-architectures中。
Kubernetes未指定日志代理,但两个可选日志代理与Kubernetes版本打包在一起:Stackdriver Logging用于Google Cloud Platform和Elasticsearch。您可以在专用文档中找到更多信息和说明。两者都使用流利的自定义配置作为节点上的代理。
Fluentd图像也可以将Kubernetes日志发送到CloudWatch,因此您可以将其用于Deploy,
答案 2 :(得分:4)
您可以使用Helm图表来安装Fluentd:
$ helm install --name my-release incubator/fluentd-cloudwatch
这是来自: https://github.com/kubernetes/charts/tree/master/incubator/fluentd-cloudwatch
答案 3 :(得分:3)
Sliverfox有一个很好的答案。您不必构建自己的图像。也可以直接使用流利的官方码头图片,流利/流利-kubernetes-daemonset:cloudwatch。代码位于fluentd-kubernetes-daemonset github。
您可以使用configmap替换默认的fluent.conf。如下所示在ds.yaml中,并在configmap.yaml中编写自己的fluent.conf。对于完整的yaml文件,您可以参考我们编写的示例ds.yaml和configmap.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