centos

centos上k8s日志如何收集

小樊
65
2025-09-20 09:46:32
栏目: 智能运维

CentOS上K8s日志收集方案设计与实施

在CentOS系统上部署Kubernetes(K8s)集群时,日志收集是保障应用可观测性的核心环节。K8s的日志主要来自三个层面:容器内部日志(应用通过stdout/stderr输出的日志)、K8s组件日志(kubelet、kube-apiserver等系统组件的日志)、节点操作系统日志(宿主机系统日志)。针对这些日志来源,需采用合适的工具链实现集中化收集、存储、分析与可视化

一、主流日志收集方案

1. EFK Stack(Elasticsearch + Fluentd + Kibana)

EFK是K8s官方推荐的经典日志方案,适合需要复杂日志解析、大规模存储及可视化分析的场景。

2. Loki + Fluent Bit

Loki是Grafana Labs推出的轻量级日志聚合系统,专注于高吞吐、低存储成本,适合云原生环境;搭配Fluent Bit(轻量级日志收集器)可实现高效日志收集。

3. Filebeat + Elasticsearch + Kibana

Filebeat是Elastic公司推出的轻量级日志收集器,适合资源受限的环境(如边缘节点),或已有Elasticsearch基础架构的场景。

二、日志收集实战步骤(以EFK为例)

1. 准备工作

2. 部署Elasticsearch

使用Helm部署Elasticsearch(单节点模式,生产环境建议使用StatefulSet+多副本):

helm repo add elastic https://helm.elastic.co
helm install elasticsearch elastic/elasticsearch \
  --namespace logging \
  --set replicas=1 \
  --set resources.requests.cpu="500m" \
  --set resources.requests.memory="2Gi"

3. 部署Fluentd

使用Helm部署Fluentd DaemonSet(收集节点日志并转发至Elasticsearch):

helm repo add fluent https://fluent.github.io/helm-charts
helm install fluentd fluent/fluentd \
  --namespace logging \
  --set daemonset.enabled=true \
  --set elasticsearch.host="elasticsearch.logging.svc.cluster.local" \
  --set elasticsearch.port=9200

4. 部署Kibana

使用Helm部署Kibana(连接Elasticsearch并实现可视化):

helm install kibana elastic/kibana \
  --namespace logging \
  --set elasticsearch.hosts=["elasticsearch.logging.svc.cluster.local:9200"] \
  --set service.type=LoadBalancer

5. 验证日志收集

三、日志管理最佳实践

1. 日志轮转

使用logrotate工具防止日志文件无限增长(如Docker容器日志),配置示例(/etc/logrotate.d/docker):

/var/lib/docker/containers/*/*.log {
  daily
  rotate 7
  compress
  missingok
  notifempty
  copytruncate
}

该配置表示:每天轮转日志,保留7天,压缩旧日志,清空原日志文件(不影响应用运行)。

2. 结构化日志

应用日志建议采用JSON格式输出(如Spring Boot应用配置logging.pattern.console=%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n),便于Fluentd/Elasticsearch解析(提取timestamplevelmessage等字段),提高日志查询效率。

3. 敏感信息过滤

在Fluentd配置中添加过滤插件,屏蔽日志中的敏感信息(如密码、API密钥):

<filter kubernetes.**>
  @type record_transformer
  enable_ruby true
  <record>
    message ${(record["message"] || "").gsub(/password=[^&]*/, "password=****")}
  </record>
</filter>

4. 日志分级存储

根据日志级别(ERROR、WARN、INFO)将日志存储至不同索引(如Elasticsearch中创建k8s-error-logs-*k8s-warn-logs-*索引),减少不必要的存储开销(如ERROR日志保留30天,INFO日志保留7天)。

5. 监控与告警

使用Prometheus监控Elasticsearch、Fluentd的集群状态(如节点健康、磁盘使用率),并通过Grafana设置告警规则(如Elasticsearch磁盘使用率超过80%时触发告警)。

通过以上方案与实践,可在CentOS系统上实现K8s集群的高效日志收集与管理,为应用运维、故障排查提供有力支持。

0
看了该问题的人还看了