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
各ポッドにいくつかのDockerコンテナが含まれるKubernetesクラスターでAWS CloudWatchログを使用したいと思います。各展開には個別のロググループがあり、各コンテナには個別のストリームがあります。 Kubernetes create
/apply
を介して、ドッキングコンテナにロギングパラメータを送信する方法が見つかりませんでした。
log-driver
およびlog-opt
ポッド/デプロイ内のDockerコンテナーへのパラメーター
kubectl apply
kops
の読み取りKubernetes Logging Architecture
私が理解していることから、KubernetesはDockerログドライバーよりクラスターレベルのログを好みます。
fluentd を使用して、コンテナログを収集、変換、およびCloudWatch Logsにプッシュできます。
必要なのは、ConfigMapとSecretで流れるようなDaemonSetを作成することだけです。ファイルは Github にあります。 Kubernetes v1.7.5でテスト済みです。
以下はいくつかの説明です。
DaemonSetを使用すると、fluentdはホストフォルダーからすべてのコンテナーログを収集します/var/lib/docker/containers
。
fluent-plugin-kubernetes_metadata_filter プラグインは、Kubernetes APIサーバーからポッドのメタデータをロードします。
ログレコードは次のようになります。
{
"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 filterプラグインでいくつかのタグを作成します。
{
"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>
Kubernateごとに、Kubernetesはログデータのネイティブストレージソリューションを提供しませんが、Kubernetesクラスターとkubernate cluster-level-logging-architectures に多くの既存のロギングソリューションを統合できます。
Kubernetesはロギングエージェントを指定しませんが、Kubernetesリリースには2つのオプションのロギングエージェントがパッケージ化されています。GoogleCloud Platformで使用するStackdriver LoggingとElasticsearchです。詳細については、専用のドキュメントを参照してください。どちらも、カスタム構成でfluentdをノード上のエージェントとして使用します。
KubernetesログをCloudWatchに送信するためのFluentdイメージ。これを使用して Deploy 、
Helmチャートを使用してFluentdをインストールできます。
$ helm install --name my-release incubator/fluentd-cloudwatch
これは: https://github.com/kubernetes/charts/tree/master/incubator/fluentd-cloudwatch
Sliverfoxには素晴らしい答えがあります。独自のイメージを作成する必要はありません。また、fluentd公式dockerイメージ、fluent/fluentd-kubernetes-daemonset:cloudwatchを直接使用することもできます。コードは fluentd-kubernetes-daemonset github にあります。
デフォルトのfluent.confをconfigmapに置き換えることができます。以下の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