k8s集群事件日志时间 (k8s中如何采集服务日志)

随着微服务架构的普及,应用系统的规模逐渐变大,日志管理也成为了一个非常重要的问题。而在Kubernetes环境下,使用Filebeat采集应用日志是一种非常常见的做法。本文将详细介绍如何在Kubernetes环境下部署Filebeat采集应用日志,并结合实际案例进行讲解。

1.前置知识

2.为什么选择Filebeat

3. Filebeat安装与配置

4. Kubernetes下的Filebeat配置

5.使用DaemonSet方式部署Filebeat

6.使用Sidecar容器方式部署Filebeat

7. Filebeat采集多行日志

8. Filebeat采集JSON格式日志

9.总结

####1.前置知识

在阅读本文之前,需要对以下内容有一定的了解:

- Kubernetes基础知识:Pod、Deployment、Service等概念;

- Docker基础知识:Docker镜像、Dockerfile等概念;

-日志管理相关知识:ELK、EFK等技术栈。

####2.为什么选择Filebeat

在Kubernetes环境下,我们可以选择多种工具来采集应用日志,比如Fluentd、Logstash等。那么为什么我们选择使用Filebeat呢?

首先,Filebeat是Elastic公司推出的一款轻量级日志采集工具,具有以下优点:

-轻量级:相比于其他日志采集工具,Filebeat的二进制包体积非常小,启动速度也非常快;

-易于部署:Filebeat的配置非常简单,几乎可以零配置启动;

-高性能:Filebeat使用Go语言编写,具有很高的性能;

-安全性:Filebeat支持加密传输、证书认证等安全特性。

除此之外,Elastic公司还提供了一整套完善的日志管理解决方案,包括Logstash、Elasticsearch和Kibana等组件。使用Filebeat采集应用日志可以与这些组件无缝集成,形成一个完整的日志管理系统。

####3. Filebeat安装与配置

在开始使用Filebeat之前,我们需要先进行安装和配置。这里我们以Ubuntu系统为例进行讲解。

#####3.1安装

首先,在官网上*载下**最新版本的Filebeat二进制包:

bash
wget 

然后解压缩并移动到/usr/local/filebeat目录下:

bash
tar xzvf filebeat-7.13.2-linux-x86_64.tar.gz
mv filebeat-7.13.2-linux-x86_64 /usr/local/filebeat

#####3.2配置

接下来,我们需要对Filebeat进行配置。配置文件位于/usr/local/filebeat目录下的filebeat.yml文件中。下面是一个简单的配置文件示例:

yaml
filebeat.inputs:
- type: log
  paths:
    -/var/log/nginx/access.log
  fields:
    log_type: nginx_access
output.elasticsearch:
  hosts:["localhost:9200"]

上面的配置文件中,我们定义了一个日志输入源和一个Elasticsearch输出目标。具体来说:

- filebeat.inputs:定义了日志输入源,这里我们指定采集/var/log/nginx/access.log文件;

- output.elasticsearch:定义了Elasticsearch输出目标,这里我们指定输出到本地Elasticsearch节点。

####4. Kubernetes下的Filebeat配置

在Kubernetes环境下使用Filebeat采集应用日志,需要对Filebeat进行一些额外的配置。

#####4.1配置RBAC权限

k8s日志挂在本地磁盘,k8s日志有哪几个级别

首先,我们需要为Filebeat配置RBAC权限。创建一个filebeat-rbac.yaml文件,内容如下:

yaml
apiVersion: v1
kind: ServiceAccount
metadata:
  name: filebeat
---
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRoleBinding
metadata:
  name: filebeat
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: view
subjects:
- kind: ServiceAccount
  name: filebeat
  namespace: default

然后执行以下命令:

bash
kubectl apply -f filebeat-rbac.yaml

#####4.2配置ConfigMap

接下来,我们需要为Filebeat配置一些参数,比如日志采集路径、输出目标等。我们可以使用Kubernetes的ConfigMap来管理这些参数。

创建一个filebeat-configmap.yaml文件,内容如下:

yaml
apiVersion: v1
kind: ConfigMap
metadata:
  name: filebeat-config
data:
  filebeat.yml:|
    filebeat.inputs:
    - type: log
      paths:
        -/var/log/nginx/access.log
      fields:
        log_type: nginx_access
    output.elasticsearch:
      hosts:["elasticsearch.default.svc.cluster.local:9200"]

然后执行以下命令:

bash
kubectl apply -f filebeat-configmap.yaml

#####4.3配置Deployment

最后,我们需要创建一个Filebeat的Deployment。创建一个filebeat-deployment.yaml文件,内容如下:

yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: filebeat
spec:
  replicas: 1
  selector:
    matchLabels:
      app: filebeat
  template:
    metadata:
      labels:
        app: filebeat
    spec:
      serviceAccountName: filebeat
      containers:
      - name: filebeat
        image: docker.elastic.co/beats/filebeat-oss:7.13.2
        args:[
          "-c","/etc/filebeat.yml",
          "-e",
        ]
        volumeMounts:
        - name: config-volume
          mountPath:/etc/filebeat.yml
          subPath: filebeat.yml
        - name: varlognginxaccess-volume 
          mountPath:/var/log/nginx/access.log
          readOnly: true
      volumes:
      - name: config-volume
        configMap:
          name: filebeat-config
      - name: varlognginxaccess-volume 
        hostPath:
          path:/var/log/nginx/access.log

然后执行以下命令:

bash
kubectl apply -f filebeat-deployment.yaml

####5.使用DaemonSet方式部署Filebeat

除了使用Deployment方式部署Filebeat,我们还可以使用DaemonSet方式来部署Filebeat。DaemonSet会在每个节点上启动一个Pod,用于采集该节点上的日志。

创建一个filebeat-daemonset.yaml文件,内容如下:

yaml
apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: filebeat
spec:
  selector:
    matchLabels:
      app: filebeat
  template:
    metadata:
      labels:
        app: filebeat
    spec:
      serviceAccountName: filebeat
      containers:
      - name: filebeat
        image: docker.elastic.co/beats/filebeat-oss:7.13.2
        args:[
          "-c","/etc/filebeat.yml",
          "-e",
        ]
        volumeMounts:
        - name: config-volume
          mountPath:/etc/filebeat.yml
          subPath: filebeat.yml
        - name: varlognginxaccess-volume 
          mountPath:/var/log/nginx/access.log
          readOnly: true
      volumes:
      - name: config-volume
        configMap:
          name: filebeat-config
      - name: varlognginxaccess-volume 
        hostPath:
          path:/var/log/nginx/access.log

然后执行以下命令:

bash
kubectl apply -f filebeat-daemonset.yaml

####6.使用Sidecar容器方式部署Filebeat

除了使用Deployment和DaemonSet方式部署Filebeat,我们还可以使用Sidecar容器的方式来部署Filebeat。在这种方式下,我们将Filebeat容器和应用容器放在同一个Pod中,形成一个Sidecar容器。

创建一个filebeat-sidecar.yaml文件,内容如下:

yaml
apiVersion: v1
kind: Pod
metadata:
  name: nginx-filebeat
spec:
  containers:
  - name: nginx
    image: nginx:1.21.0
    volumeMounts:
    - name: varlognginxaccess-volume 
      mountPath:/var/log/nginx/access.log
      subPath: access.log
  - name: filebeat
    image: docker.elastic.co/beats/filebeat-oss:7.13.2
    args:[
      "-c","/etc/filebeat.yml",
      "-e",
    ]
    volumeMounts:
    - name: config-volume
      mountPath:/etc/filebeat.yml
      subPath: filebeat.yml
    - name: varlognginxaccess-volume 
      mountPath:/var/log/nginx/access.log
      readOnly: true
  volumes:
  - name: config-volume
    configMap:
      name: filebeat-config
  - name: varlognginxaccess-volume 
    emptyDir:{}

然后执行以下命令:

bash
kubectl apply -f filebeat-sidecar.yaml

####7. Filebeat采集多行日志

有些应用的日志可能是多行日志,比如Java应用的堆栈信息等。在这种情况下,我们需要使用Filebeat的multiline功能来采集多行日志。

假设我们要采集一个Java应用的堆栈信息,那么我们可以将Filebeat的配置修改为以下内容:

yaml
filebeat.inputs:
- type: log
  paths:
    -/var/log/myapp.log
  multiline.pattern:'^[[:space:]]'
  multiline.negate: false
  multiline.match: after

上面的配置中,我们使用了multiline.pattern参数来指定正则表达式匹配多行日志的起始行。同时,我们还使用了multiline.match参数来指定匹配到起始行之后的所有行都是多行日志。

####8. Filebeat采集JSON格式日志

有些应用的日志可能是JSON格式,比如Spring Boot应用。在这种情况下,我们需要使用Filebeat的JSON解析功能来采集JSON格式日志。

假设我们要采集一个Spring Boot应用的JSON格式日志,那么我们可以将Filebeat的配置修改为以下内容:

yaml
filebeat.inputs:
- type: log
  paths:
    -/var/log/myapp.log
  processors:
    - decode_json_fields:
        fields:["message"]
        target:""
        overwrite_keys: true

上面的配置中,我们使用了processors参数来指定对日志进行处理。其中,decode_json_fields表示对JSON格式的message字段进行解析,并将解析结果写入到顶层字段中。

####9.总结

本文详细介绍了在Kubernetes环境下使用Filebeat采集应用日志的方法。我们从Filebeat的安装和配置开始,逐步讲解了如何在Kubernetes环境下部署Filebeat,并提供了Deployment、DaemonSet和Sidecar三种部署方式。同时,我们还讲解了Filebeat采集多行日志和JSON格式日志的方法。希望本文能对大家在Kubernetes环境下进行应用日志管理有所帮助。