持续集成系列(8)------k8s容器日志统一收集(efk方案)

文章目录

    • 概述
    • elk集群部署
    • filebeat部署
    • 验证

概述

k8s集群中的pod产生的日志(stdout/stderr)都存放在对应node的/var/lib/docker/containers/下,目前集中收集k8s日志主要有以下几种方案

  • 使用运行在每个Node上的Node级别的日志记录代理
  • 在应用Pod中包含一个用于日志记录的sidecar
  • 将日志直接从应用内推到后端
    综合考虑,本文使用方案一,以deamonset方式部署filebeat,收集node中的pod日志并发送到elk集群

elk集群部署

参考官网或网上其他文档进行部署
本文使用的架构为
持续集成系列(8)------k8s容器日志统一收集(efk方案)_第1张图片

filebeat部署

#下载官方yaml文件
wget https://raw.githubusercontent.com/elastic/beats/6.1/deploy/kubernetes/filebeat-kubernetes.yaml
#修改以下内容将收集到的日志直接发送到elasticsearch
    setup.template.name: "k8s-logs"
    setup.template.pattern: "k8s-logs-*"
    output.elasticsearch:
      index: "k8s-logs-%{+yyyy.MM.dd}"
      hosts: ['10.79.160.88:9200','10.79.160.89:9200','10.79.160.90:9200']
      username: elastic
      password: changeme

#有高可用需要的话,推荐先将日志发送到kafka集群,再由logstash进行拉取
#    output.kafka:
#      hosts: ["10.79.160.88:9092", "10.79.160.89:9092", "10.79.160.90:9092"]
#      topic: 'k8s-log'
#      partition.round_robin:
#        reachable_only: false
#      required_acks: 1
#      compression: gzip
#      codec.json:
#        pretty: true
#      max_message_bytes: 10000000

kubectl create -f filebeat-kubernetes.yaml

验证

[root@k8s1 opt]# kubectl get po -n kube-system|grep filebeat
filebeat-6r446                          1/1       Running   0          20h
filebeat-hs4x4                          1/1       Running   0          20h
filebeat-mkbtz                          1/1       Running   0          20h
filebeat-qp6lx                          1/1       Running   0          20h
filebeat-qr27x                          1/1       Running   0          20h
filebeat-vb7vr                          1/1       Running   0          20h
filebeat-wp5p4                          1/1       Running   0          20h

持续集成系列(8)------k8s容器日志统一收集(efk方案)_第2张图片

你可能感兴趣的:(持续集成,容器编排)