Kubernetes在Debian上的日志收集与分析
导读:整体架构与方案选型 在 Debian 节点上,Kubernetes 的日志通常分为三类:应用日志、集群组件日志(如 kubelet、apiserver)、审计日志。采集方式以节点级 DaemonSet 为主,也可按应用选择 Sidecar...
整体架构与方案选型
- 在 Debian 节点上,Kubernetes 的日志通常分为三类:应用日志、集群组件日志(如 kubelet、apiserver)、审计日志。采集方式以节点级 DaemonSet 为主,也可按应用选择 Sidecar 或宿主机直采。常见方案包括:
- EFK(Elasticsearch + Fluentd + Kibana):适合需要强大检索与可视化的场景。
- Loki + Grafana:更轻量,适合云原生与成本敏感场景。
- Filebeat/Logstash + ES + Kibana:Beats 更轻量,Logstash 负责复杂处理。
快速落地 EFK 堆栈
- 组件与版本建议
- Elasticsearch 7.x、Fluentd、Kibana 7.x(示例采用 7.12.1,便于与示例镜像一致)。
- 部署步骤
- 创建命名空间
- kubectl create ns logging
- 部署 Elasticsearch
- 示例 Service(elasticsearch/logging/svc.yaml)
apiVersion: v1 kind: Service metadata: name: elasticsearch namespace: logging spec: ports: - port: 9200 clusterIP: None selector: app: elasticsearch - 示例 Deployment(elasticsearch/logging/deployment.yaml)
apiVersion: apps/v1 kind: Deployment metadata: name: elasticsearch namespace: logging spec: replicas: 1 selector: matchLabels: app: elasticsearch template: metadata: labels: app: elasticsearch spec: containers: - name: elasticsearch image: docker.elastic.co/elasticsearch/elasticsearch:7.12.1 ports: - containerPort: 9200 - containerPort: 9300 - 应用:kubectl apply -f elasticsearch/logging/svc.yaml -f elasticsearch/logging/deployment.yaml
- 示例 Service(elasticsearch/logging/svc.yaml)
- 部署 Fluentd DaemonSet(节点日志采集)
- 示例(fluentd-ds.yaml)
apiVersion: apps/v1 kind: DaemonSet metadata: name: fluentd namespace: kube-system spec: selector: matchLabels: app: fluentd template: metadata: labels: app: fluentd spec: serviceAccountName: fluentd containers: - name: fluentd image: fluent/fluentd-kubernetes-daemonset:v1-debian-elasticsearch env: - name: FLUENT_ELASTICSEARCH_HOST value: "elasticsearch.logging.svc.cluster.local" - name: FLUENT_ELASTICSEARCH_PORT value: "9200" - 应用:kubectl apply -f fluentd-ds.yaml
- 示例(fluentd-ds.yaml)
- 部署 Kibana
- 示例 Service(kibana/logging/svc.yaml,NodePort 便于访问)
apiVersion: v1 kind: Service metadata: name: kibana namespace: logging spec: type: NodePort ports: - port: 5601 targetPort: 5601 nodePort: 31000 selector: app: kibana - 示例 Deployment(kibana/logging/deployment.yaml)
apiVersion: apps/v1 kind: Deployment metadata: name: kibana namespace: logging spec: replicas: 1 selector: matchLabels: app: kibana template: metadata: labels: app: kibana spec: containers: - name: kibana image: docker.elastic.co/kibana/kibana:7.12.1 ports: - containerPort: 5601 env: - name: ELASTICSEARCH_HOSTS value: "http://elasticsearch.logging.svc.cluster.local:9200" - 应用:kubectl apply -f kibana/logging/svc.yaml -f kibana/logging/deployment.yaml
- 示例 Service(kibana/logging/svc.yaml,NodePort 便于访问)
- 访问与验证
- 查看 Kibana:http://< 任意节点IP> :31000
- 在 Kibana 的 Discover 中创建索引模式(如 logstash-* 或 fluentd-*),开始检索日志。
- 创建命名空间
替代方案 Loki + Grafana
- 适用场景:希望更轻量、与 Kubernetes 标签/命名空间天然集成、成本更可控。
- 核心思路:以 Promtail(DaemonSet)采集节点与容器日志,发送至 Loki;用 Grafana 进行查询与可视化。
- 基本步骤
- 部署 Loki(StatefulSet/Deployment + Service)
- 部署 Promtail(DaemonSet,挂载 /var/log、/var/lib/docker/containers 等日志目录)
- 部署 Grafana,添加 Loki 数据源,使用 LogQL 查询
- 优点:资源占用更低、部署与维护更简单,适合中小规模或云原生环境。
日志轮换与节点侧维护
- 容器运行时日志轮换
- 若使用 Docker,确保 /etc/docker/daemon.json 启用日志驱动与轮换,例如:
{ "log-driver": "json-file", "log-opts": { "max-size": "100m", "max-file": "3" } } - 修改后重启 Docker:systemctl restart docker
- 若使用 Docker,确保 /etc/docker/daemon.json 启用日志驱动与轮换,例如:
- 系统日志轮换
- 使用 logrotate 管理 /var/log 下文件(如 messages、syslog、kubelet.log 等),控制单文件大小与保留份数,避免磁盘被占满。
- 节点磁盘与资源监控
- 监控 /var/log、/var/lib/docker 分区使用率,设置告警;为日志组件(ES、Fluentd)配置资源 requests/limits 与持久化。
安全与运维最佳实践
- 访问控制与加密
- 为 Elasticsearch、Kibana、Fluentd 配置基于 RBAC 的最小权限;对外暴露服务时启用 TLS;敏感字段在传输与存储中加密。
- 日志级别与噪声控制
- 生产环境将应用与组件日志级别设为 WARN/ERROR 为主,必要时动态调高;在采集端做 去重/降噪 与 采样。
- 持久化与容量规划
- 为 Elasticsearch 配置 PV/PVC 与合理副本数;定期评估索引生命周期(ILM)与冷热分层策略。
- 审计与合规
- 启用 Kubernetes 审计日志,将其单独采集与保留,避免与业务日志混流。
- 可视化与告警
- 使用 Kibana 或 Grafana 建立关键指标与错误日志的 Dashboard,结合 告警规则 实现主动发现。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: Kubernetes在Debian上的日志收集与分析
本文地址: https://pptw.com/jishu/776133.html
