Azure Kubernetes - Azure Monitor 和 Sidecar 日志传送?
Azure Kubernetes - Azure Monitor & Sidecar Logshipping?
因为用于容器的 Azure Monitor 将从控制台收集基本日志,即 stdout/stderr。是否有任何理由为日志传送实施 sidecar,尤其是对于生产工作负载?目前我正在使用以下模式
apiVersion: apps/v1
kind: Deployment
metadata:
name: sidecar-logshipping
spec:
replicas: 2
selector:
matchLabels:
app: sidecar-logshipping
template:
metadata:
labels:
app: sidecar-logshipping
spec:
containers:
- name: main-container
image: busybox
args:
- /bin/sh
- -c
- >
i=0;
while true;
do
echo "$i: $(date) dog" >> /var/log/mylogs/app.log;
i=$((i+1));
sleep 1;
done
resources:
limits:
memory: "256Mi"
cpu: "500m"
requests:
memory: "64Mi"
cpu: "250m"
volumeMounts:
- name: logs
mountPath: /var/log/mylogs
- name: log-shipper
image: busybox
args: [/bin/sh, -c, 'tail -n+1 -f /var/log/mylogs/*.log']
resources:
limits:
memory: "256Mi"
cpu: "500m"
requests:
memory: "64Mi"
cpu: "250m"
volumeMounts:
- name: logs
mountPath: /var/log/mylogs
volumes:
- name: logs
emptyDir: {}
Azure Monitor 收集日志并发送到 Log Analytics 工作区。它无法将日志发送到 ELK 堆栈。因此,如果您习惯了这些工具并想继续使用它们,那么可以选择基于 fluentbit sidecar 或 fluentd daemonset 的解决方案。但在这种情况下,ELK 堆栈的管理权在您身上。
Azure Monitor 的优势在于它将您的 AKS 日志与其他 Azure 平台日志整合,提供统一的监控体验。
azure monitor 的缺点是在非常大的数量下,成本可能成为一个考虑因素。
因此,您可能希望对产生大量日志的应用程序使用开源 ELK 堆栈,对产生少量日志的应用程序使用 Azure Monitor。
只是为 Arghya Sadhus 的回答添加另一个选项:Elasticsearch 在生产就绪安装中占用相当高的内存。我个人认为仅将其用于日志聚合是大材小用。
一个轻量级的替代方案是您可以使用直接集成在 Grafana 中的 Loki 来聚合您的日志。 (参考这里:https://grafana.com/oss/loki/)
因为用于容器的 Azure Monitor 将从控制台收集基本日志,即 stdout/stderr。是否有任何理由为日志传送实施 sidecar,尤其是对于生产工作负载?目前我正在使用以下模式
apiVersion: apps/v1
kind: Deployment
metadata:
name: sidecar-logshipping
spec:
replicas: 2
selector:
matchLabels:
app: sidecar-logshipping
template:
metadata:
labels:
app: sidecar-logshipping
spec:
containers:
- name: main-container
image: busybox
args:
- /bin/sh
- -c
- >
i=0;
while true;
do
echo "$i: $(date) dog" >> /var/log/mylogs/app.log;
i=$((i+1));
sleep 1;
done
resources:
limits:
memory: "256Mi"
cpu: "500m"
requests:
memory: "64Mi"
cpu: "250m"
volumeMounts:
- name: logs
mountPath: /var/log/mylogs
- name: log-shipper
image: busybox
args: [/bin/sh, -c, 'tail -n+1 -f /var/log/mylogs/*.log']
resources:
limits:
memory: "256Mi"
cpu: "500m"
requests:
memory: "64Mi"
cpu: "250m"
volumeMounts:
- name: logs
mountPath: /var/log/mylogs
volumes:
- name: logs
emptyDir: {}
Azure Monitor 收集日志并发送到 Log Analytics 工作区。它无法将日志发送到 ELK 堆栈。因此,如果您习惯了这些工具并想继续使用它们,那么可以选择基于 fluentbit sidecar 或 fluentd daemonset 的解决方案。但在这种情况下,ELK 堆栈的管理权在您身上。
Azure Monitor 的优势在于它将您的 AKS 日志与其他 Azure 平台日志整合,提供统一的监控体验。
azure monitor 的缺点是在非常大的数量下,成本可能成为一个考虑因素。
因此,您可能希望对产生大量日志的应用程序使用开源 ELK 堆栈,对产生少量日志的应用程序使用 Azure Monitor。
只是为 Arghya Sadhus 的回答添加另一个选项:Elasticsearch 在生产就绪安装中占用相当高的内存。我个人认为仅将其用于日志聚合是大材小用。
一个轻量级的替代方案是您可以使用直接集成在 Grafana 中的 Loki 来聚合您的日志。 (参考这里:https://grafana.com/oss/loki/)