欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

【赵强老师】Kubernetes平台中日志收集方案

程序员文章站 2024-01-19 23:02:40
...

【赵强老师】Kubernetes平台中日志收集方案
            
    
    博客分类: Kubernetes云计算Docker 云计算DockerK8sKubernetes容器 

一、K8s整体日志收集方案

整体的日志收集方案,如下图所示:

【赵强老师】Kubernetes平台中日志收集方案
            
    
    博客分类: Kubernetes云计算Docker 云计算DockerK8sKubernetes容器 

  1. Filebeat是本地文件的日志数据采集器,可监控日志目录或特定日志文件(tail file),并将它们转发给Elasticsearch或Logstatsh进行索引、kafka等。带有内部模块(auditd,Apache,Nginx,System和MySQL),可通过一个指定命令来简化通用日志格式的收集,解析和可视化。
  2. ELK是Elasticsearch、Logstash、Kibana的简称,这三者是核心套件,但并非全部。
  • Elasticsearch是实时全文搜索和分析引擎,提供搜集、分析、存储数据三大功能;是一套开放REST和JAVA API等结构提供高效搜索功能,可扩展的分布式系统。它构建于Apache Lucene搜索引擎库之上。
  • Logstash是一个用来搜集、分析、过滤日志的工具。它支持几乎任何类型的日志,包括系统日志、错误日志和自定义应用程序日志。它可以从许多来源接收日志,这些来源包括 syslog、消息传递(例如 RabbitMQ)和JMX,它能够以多种方式输出数据,包括电子邮件、websockets和Elasticsearch。
  • Kibana是一个基于Web的图形界面,用于搜索、分析和可视化存储在 Elasticsearch指标中的日志数据。它利用Elasticsearch的REST接口来检索数据,不仅允许用户创建他们自己的数据的定制仪表板视图,还允许他们以特殊的方式查询和过滤数据

二、针对不同组件的日志收集

  • Node上部署一个日志收集程序:DaemonSet方式部署日志收集程序。对本节点/var/log和/var/lib/docker/containers/ 两个目录下的日志进行采集.

【赵强老师】Kubernetes平台中日志收集方案
            
    
    博客分类: Kubernetes云计算Docker 云计算DockerK8sKubernetes容器 

  • Pod中附加专用日志收集的容器:每个运行应用程序的Pod中增加一个日志收集容器,使用emtyDir共享日志目录让日志收集程序读取到。

【赵强老师】Kubernetes平台中日志收集方案
            
    
    博客分类: Kubernetes云计算Docker 云计算DockerK8sKubernetes容器 

  • 应用程序直接推送日志:不属于Kubernetes范围。

【赵强老师】Kubernetes平台中日志收集方案
            
    
    博客分类: Kubernetes云计算Docker 云计算DockerK8sKubernetes容器 

三、安装ELK

  • 安装JDK:这里我们使用的是jdk-8u181-linux-x64.tar.gz(安装过程省去,非常简单)
  • 安装Elasticsearch:直接解压启动,即可,执行下面的语句测试ES。

【赵强老师】Kubernetes平台中日志收集方案
            
    
    博客分类: Kubernetes云计算Docker 云计算DockerK8sKubernetes容器 

  • 安装Kibana:核心配置文件config/kibana.yml
server.port: 5601
server.host: "192.168.79.110"
elasticsearch.hosts: ["http://localhost:9200"]

启动:bin/kibana,访问Web Console:http://192.168.79.110:5601

 

  • 安装logstash:核心配置文件config/logstash.conf
input {
  beats {
    port => 5044
  }
}

output {
  elasticsearch {
    hosts => ["http://localhost:9200"]
    index => "k8s-log-%{+YYYY-MM-dd}"
  }
}

启动:bin/logstash -f config/logstash.conf

 

 

四、收集k8s组件日志

filebeat的配置文件filebeat.yml使用ConfigMap管理,k8s组件日志记录在node节点本机/var/log/messages目录下,所以将node节点/var/log/messages目录挂载到pod中。创建收集k8s 组件日志/var/log/messages资源。创建yaml文件如下:k8s-logs.yaml,并执行kubectl create -f k8s-logs.yaml

 

apiVersion: v1
kind: ConfigMap
metadata:
  name: k8s-logs-filebeat-config
  namespace: kube-system
data:
  filebeat.yml: |-
    filebeat.prospectors:
      - type: log
        paths:
          - /messages
        fields:
          app: k8s
          type: module
        fields_under_root: true

    output.logstash:
      hosts: ['192.168.79.110:5044']

---

apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: k8s-logs
  namespace: kube-system
spec:
  selector:
    matchLabels:
      project: k8s
      app: filebeat
  template:
    metadata:
      labels:
        project: k8s
        app: filebeat
    spec:
      containers:
      - name: filebeat
        image: collenzhao/filebeat:6.5.4
        args: [
          "-c", "/etc/filebeat.yml",
          "-e",
        ]
        resources:
          requests:
            cpu: 100m
            memory: 100Mi
          limits:
            cpu: 500m
            memory: 500Mi
        securityContext:
          runAsUser: 0
        volumeMounts:
        - name: filebeat-config
          mountPath: /etc/filebeat.yml
          subPath: filebeat.yml
        - name: k8s-logs
          mountPath: /messages
      volumes:
      - name: k8s-logs
        hostPath:
          path: /var/log/messages
          type: File
      - name: filebeat-config
        configMap:
          name: k8s-logs-filebeat-config

 

 

下图是Kibana的生成的信息。

【赵强老师】Kubernetes平台中日志收集方案
            
    
    博客分类: Kubernetes云计算Docker 云计算DockerK8sKubernetes容器 

【赵强老师】Kubernetes平台中日志收集方案
            
    
    博客分类: Kubernetes云计算Docker 云计算DockerK8sKubernetes容器 

上一篇: PHP数组函数

下一篇: 关于XML的问题