首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >如何收集k8s集群日志?

如何收集k8s集群日志?

作者头像
BUG弄潮儿
发布2025-06-09 12:28:27
发布2025-06-09 12:28:27
28000
代码可运行
举报
文章被收录于专栏:JAVA乐园JAVA乐园
运行总次数:0
代码可运行

在 Kubernetes(K8S)集群中,日志收集是运维管理的重要环节。以下是几种常见的日志收集方案和工具,以及具体实施步骤:

日志来源

K8S集群的日志主要来源于以下三个方面:

  • 容器内部的日志:容器的标准输出和错误输出会被 Kubernetes 采集并存储。
  • K8S组件的日志:例如 kubelet、kube-apiserver 等组件的日志。

· 节点操作系统日志:宿主机的操作系统日志。

日志收集工具

常用的日志收集工具和方案包括:

  • EFK Stack(Elasticsearch + Fluentd + Kibana):这是 Kubernetes 官方推荐的方案。Fluentd 用于日志收集和转发,Elasticsearch 用于日志存储和索引,Kibana 用于日志分析和可视化。
  • ELK Stack(Elasticsearch + Logstash + Kibana):与 EFK 类似,但使用 Logstash 替代 Fluentd,适用于更复杂的日志解析场景。
  • Elasticsearch + Filebeat + Kibana:Filebeat 是轻量级的日志收集器,适合资源受限的环境。
  • Loki:轻量级的日志管理和分析平台,适合大规模集群,支持服务发现和可视化。

日志收集架构

日志收集三剑客

  • Fluentd(全能捕手)
代码语言:javascript
代码运行次数:0
运行
复制
# DaemonSet部署模式
apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: fluentd-logging
spec:
  template:
    spec:
      containers:
      - name: fluentd
        image: fluent/fluentd-kubernetes-daemonset:v1.16
        env:
          - name: FLUENT_ELASTICSEARCH_HOST
            value: "elasticsearch.prod.svc"
          - name: FLUENT_ELASTICSEARCH_PORT
            value: "9200"
        resources:
          limits:
            memory: 500Mi
          requests:
            cpu: 100m
            memory: 200Mi

生产经验:

每个Node部署1个实例,避免日志丢失

限制内存防止OOM(曾因内存泄漏导致节点崩溃)

使用buffer插件应对日志洪峰

Filebeat(轻量特工)

代码语言:javascript
代码运行次数:0
运行
复制
# Sidecar模式对接业务容器
apiVersion: v1
kind: Pod
metadata:
  name: payment-service
spec:
  containers:
  - name: app
    image: payment:v1.2
    volumeMounts:
    - name: logs
      mountPath: /var/log
  - name: filebeat
    image: docker.elastic.co/beats/filebeat:8.9
    volumeMounts:
    - name: logs
      mountPath: /var/log
    - name: filebeat-config
      mountPath: /usr/share/filebeat/filebeat.yml

适用场景:

Java堆栈日志(需解析多行日志)

敏感数据过滤(如银行卡号脱敏)

Vector(性能怪兽)

代码语言:javascript
代码运行次数:0
运行
复制
# 高性能Rust实现的配置示例
[sources.k8s_logs]
type = "kubernetes_logs"

[transforms.filter]
type = "filter"
inputs = ["k8s_logs"]
condition = '''
!includes(["kube-system", "monitoring"], .pod_namespace)
'''

[sinks.elastic]
type = "elasticsearch"
inputs = ["filter"]
endpoint = "http://elastic:9200"

性能对比:

吞吐量达到Fluentd的3倍

CPU占用降低40%

适合日均TB级日志场景

以下是一个基于Filebeat、Fluent-bit、ElasticsearchKibana的日志收集架构:

代码语言:javascript
代码运行次数:0
运行
复制
Node (Operating Sys) --> 
Filebeat (Container Logs) --> 
Fluent-bit (Log Processing) --> 
Elasticsearch (Log Storage) -->
Kibana (Log Analysis)

存储方案选型矩阵

存储引擎

日志规模

成本

查询性能

典型场景

Elasticsearch

10TB+/天

⭐⭐⭐⭐

全链路追踪

Loki

1-5TB/天

⭐⭐⭐

容器日志快速检索

ClickHouse

50TB+/天

⭐⭐⭐⭐⭐

时序日志分析

S3+Glacier

归档日志

极低

合规审计存储

选型决策树:

是否需要全文检索? → Elasticsearch

是否关注存储成本? → Loki

是否需要OLAP分析? → ClickHouse

是否合规审计要求? → S3冷存储

日志收集步骤

部署 Filebeat

Filebeat 用于收集容器日志。配置文件示例:

代码语言:javascript
代码运行次数:0
运行
复制
filebeat.inputs:
- type: log
  enabled: true
  paths:
    - /var/log/containers/*.log
  tags:
    - k8s
  fields:
    k8s_container_id: "{{container.id}}"
    k8s_pod_name: "{{pod.name}}"
    k8s_namespace: "{{pod.namespace}}"
    k8s_deployment_name: "{{deployment.name}}"
 
output.elasticsearch:
  hosts: ["localhost:9200"]
 
setup.kibana:
  host: "localhost:5601"

部署 Fluent-bit

Fluent-bit 用于处理和转发日志。配置文件示例:

代码语言:javascript
代码运行次数:0
运行
复制
[Input]
  @type tail
  Path /var/log/containers/*.log
  Posix
  RefreshInterval 10
 
[Filter]
  @type kubernetes
  kubernetes.logtag_prefix k8s
 
[Output]
  @type elasticsearch
  hosts ["localhost:9200"]
  index_name k8s-logs-%{+YYYY.MM.dd}
  flush_interval 10s
  retry.on_failure true
  retry.max_retries 5
  retry.backoff_factor 2

部署 Elasticsearch

Elasticsearch 用于存储日志数据。配置文件示例:

代码语言:javascript
代码运行次数:0
运行
复制
cluster.name: k8s-logs
node.name: elasticsearch
network.host: 0.0.0.0
http.port: 9200

部署 Kibana

Kibana 用于日志分析和可视化。配置文件示例:

代码语言:javascript
代码运行次数:0
运行
复制
server.host: "0.0.0.0"
server.port: 5601
elasticsearch.hosts: ["localhost:9200"]

日志分析

在 Kibana 中,可以使用内置的分析工具对日志数据进行可视化分析和查询。

其他注意事项

  • 日志规范:建议使用 JSON 格式记录日志,便于解析和分析。
  • 日志清理和归档:定期清理旧日志,避免存储压力过大。
  • 监控和告警:使用 Prometheus 和 Grafana 监控日志平台的性能,并设置告警规则。

综上所述,可以实现 Kubernetes 集群日志的高效收集、存储和分析,从而提升运维效率和集群的可管理性。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2025-06-08,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 BUG弄潮儿 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 日志来源
  • 日志收集工具
  • 日志收集架构
    • 日志收集三剑客
    • Filebeat(轻量特工)
    • Vector(性能怪兽)
  • 存储方案选型矩阵
  • 日志收集步骤
    • 部署 Filebeat
    • 部署 Fluent-bit
    • 部署 Elasticsearch
    • 部署 Kibana
  • 日志分析
  • 其他注意事项
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档