溫馨提示×

centos上k8s日志如何收集

小樊
46
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官方推薦的經典日志方案,適合需要復雜日志解析、大規模存儲及可視化分析的場景。

  • 組件職責
    • Fluentd:作為守護進程集(DaemonSet)部署在每個節點上,負責收集節點上/var/log/containers/*.log(容器日志)、/var/log/kube-apiserver.log(K8s組件日志)等日志文件,通過過濾插件(如解析JSON格式、提取時間戳)處理日志,并轉發至Elasticsearch。
    • Elasticsearch:分布式搜索引擎,用于存儲和索引日志數據,支持全文檢索、聚合分析等功能。
    • Kibana:可視化工具,通過連接Elasticsearch實現日志的儀表盤展示(如錯誤日志趨勢、應用性能指標)、查詢過濾(如按命名空間、Pod名稱篩選)。
  • 優勢:功能全面,適合中大型集群;支持日志解析、富化(如添加節點、命名空間標簽)。
  • 注意事項:Elasticsearch對資源消耗較大(建議節點配置≥4核CPU、8GB內存),需合理規劃集群規模。

2. Loki + Fluent Bit

Loki是Grafana Labs推出的輕量級日志聚合系統,專注于高吞吐、低存儲成本,適合云原生環境;搭配Fluent Bit(輕量級日志收集器)可實現高效日志收集。

  • 組件職責
    • Fluent Bit:作為DaemonSet部署,收集容器日志(/var/log/containers/*.log),通過解析插件(如提取日志中的level、message字段)處理日志,轉發至Loki。
    • Loki:存儲日志時按標簽(Labels)分類(如namespace、pod_name、container_name),而非全文索引,大幅降低存儲開銷;支持與Grafana集成,實現日志的快速查詢(如{namespace="default", pod_name="my-app"})。
  • 優勢:資源占用低(Fluent Bit內存占用約20MB),適合中小規模集群或日志量大的場景;與Grafana生態無縫集成。
  • 注意事項:Loki不支持全文檢索,適合基于標簽的快速查詢,若需復雜分析(如日志內容統計),需結合其他工具(如Promtail)。

3. Filebeat + Elasticsearch + Kibana

Filebeat是Elastic公司推出的輕量級日志收集器,適合資源受限的環境(如邊緣節點),或已有Elasticsearch基礎架構的場景。

  • 組件職責
    • Filebeat:部署在每個節點上,監控/var/log/containers/*.log文件的變化,將日志轉發至Elasticsearch(或通過Logstash進行預處理)。
    • Elasticsearch/Kibana:功能與EFK方案一致,負責日志存儲與可視化。
  • 優勢:部署簡單,資源占用低(Filebeat內存占用約10-20MB);支持多種輸出目標(如Kafka、Logstash)。
  • 注意事項:Filebeat本身不具備日志解析功能,需配合Logstash或Elasticsearch的Ingest Pipeline進行日志處理(如提取字段、過濾無用日志)。

二、日志收集實戰步驟(以EFK為例)

1. 準備工作

  • 確保CentOS系統已安裝Docker/Kubelet、Kubeadm等工具,且K8s集群正常運行。
  • 安裝Helm(K8s包管理工具),用于簡化Elasticsearch、Fluentd等組件的部署:
    curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash
    

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. 驗證日志收集

  • 訪問Kibana(通過kubectl get svc -n logging kibana獲取外部IP),進入Discover頁面,選擇kubernetes.*索引模式,即可查看容器日志。
  • 使用kubectl logs命令驗證單個Pod日志:
    kubectl logs -f <pod-name> -n <namespace>
    

三、日志管理最佳實踐

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解析(提取timestamp、level、message等字段),提高日志查詢效率。

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
亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女