前言

Filebeat+ELK的构建与解释参考
链接: k8s学习–基于k8s的ELK日志收集的详细过程
本章不再重复描述

环境

虚拟机

Ip主机名cpu内存硬盘
192.168.10.11master012cpu双核4G100G
192.168.10.12worker012cpu双核4G100G
192.168.10.13worker022cpu双核4G100G
192.168.10.17ELK1cpu双核4G100G

版本 centos7.9
已部署k8s-1.27
ELK服务器已部署Filebeat+ELK

通过在应用程序Pod中运行filebeat(sidecar边车)实现,本次将以tomcat为例进行说明。

一、准备tomcat数据目录

默认tomcat容器中没有网站首页文件,不添加会导致pod中容器无法正常运行。

work01主机操作

mkdir /opt/tomcatwebroot
echo "tomcat is running" > /opt/tomcatwebroot/index.html

二、编写tomcat应用资源清单文件

master主机操作

vim tomcat-logs.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: tomcat-demo
  namespace: default
spec:
  replicas: 2
  selector:
    matchLabels:
      project: www
      app: tomcat-demo
  template:
    metadata:
      labels:
        project: www
        app: tomcat-demo
    spec:
      nodeName: worker01
      containers:
      - name: tomcat
        image: tomcat:latest
        imagePullPolicy: IfNotPresent
        ports:
        - containerPort: 8080
          name: web
          protocol: TCP
        resources:
          requests:
            cpu: 0.5
            memory: 500Mi
          limits:
            cpu: 1
            memory: 1Gi
        livenessProbe:
          httpGet:
            path: /
            port: 8080
          initialDelaySeconds: 60
          timeoutSeconds: 20
        readinessProbe:
          httpGet:
            path: /
            port: 8080
          initialDelaySeconds: 60
          timeoutSeconds: 20
        volumeMounts:
        - name: tomcat-logs
          mountPath: /usr/local/tomcat/logs
        - name: tomcatwebroot
          mountPath: /usr/local/tomcat/webapps/ROOT

      - name: filebeat
        image: docker.io/elastic/filebeat:7.17.2
        imagePullPolicy: IfNotPresent
        args: [
          "-c", "/etc/filebeat.yml",
          "-e",
        ]
        resources:
          limits:
            memory: 500Mi
          requests:
            cpu: 100m
            memory: 100Mi
        securityContext:
          runAsUser: 0
        volumeMounts:
        - name: filebeat-config
          mountPath: /etc/filebeat.yml
          subPath: filebeat.yml
        - name: tomcat-logs
          mountPath: /usr/local/tomcat/logs
      volumes:
      - name: tomcat-logs
        emptyDir: {}
      - name: tomcatwebroot
        hostPath:
          path: /opt/tomcatwebroot
          type: Directory
      - name: filebeat-config
        configMap:
          name: filebeat-config
---
apiVersion: v1
kind: ConfigMap
metadata:
  name: filebeat-config
  namespace: default

data:
  filebeat.yml: |-
    filebeat.inputs:
    - type: log
      paths:
        - /usr/local/tomcat/logs/catalina.*

      fields:
        app: www
        type: tomcat-catalina
      fields_under_root: true
      multiline:
        pattern: '^\['
        negate: true
        match: after

    setup.ilm.enabled: false
    setup.template.name: "tomcat-catalina"
    setup.template.pattern: "tomcat-catalina-*"

    output.logstash:
      hosts: ['192.168.10.17:5056']

这个yaml定义了一个 Tomcat 和 Filebeat 的 Deployment 以及 Filebeat 的配置文件,让我们依次解释一下
部署文件 (Deployment)部分

apiVersion: apps/v1
kind: Deployment
metadata:
  name: tomcat-demo
  namespace: default
spec:
  replicas: 2
  selector:
    matchLabels:
      project: www
      app: tomcat-demo
  template:
    metadata:
      labels:
        project: www
        app: tomcat-demo
    spec:
      nodeName: worker01
      containers:
      - name: tomcat
        image: tomcat:latest
        imagePullPolicy: IfNotPresent
        ports:
        - containerPort: 8080
          name: web
          protocol: TCP
        resources:
          requests:
            cpu: 0.5
            memory: 500Mi
          limits:
            cpu: 1
            memory: 1Gi
        livenessProbe:
          httpGet:
            path: /
            port: 8080
          initialDelaySeconds: 60
          timeoutSeconds: 20
        readinessProbe:
          httpGet:
            path: /
            port: 8080
          initialDelaySeconds: 60
          timeoutSeconds: 20
        volumeMounts:
        - name: tomcat-logs
          mountPath: /usr/local/tomcat/logs
        - name: tomcatwebroot
          mountPath: /usr/local/tomcat/webapps/ROOT

      - name: filebeat
        image: docker.io/elastic/filebeat:7.17.2
        imagePullPolicy: IfNotPresent
        args: [
          "-c", "/etc/filebeat.yml",
          "-e",
        ]
        resources:
          limits:
            memory: 500Mi
          requests:
            cpu: 100m
            memory: 100Mi
        securityContext:
          runAsUser: 0
        volumeMounts:
        - name: filebeat-config
          mountPath: /etc/filebeat.yml
          subPath: filebeat.yml
        - name: tomcat-logs
          mountPath: /usr/local/tomcat/logs
      volumes:
      - name: tomcat-logs
        emptyDir: {}
      - name: tomcatwebroot
        hostPath:
          path: /opt/tomcatwebroot
          type: Directory
      - name: filebeat-config
        configMap:
          name: filebeat-config

metadata: 定义了 Deployment 的名称和命名空间。
spec: 包含 Deployment 的详细规范。
replicas: 指定了副本数量,即运行两个 Tomcat 实例。
selector: 定义了选择器,用于匹配 Pod 标签。
template: 描述了 Pod 模板,包括 metadata 和 spec。
nodeName: 指定了 Pod 运行的节点名称(worker01)。
containers: 定义了两个容器:Tomcat 和 Filebeat。

Tomcat 容器:
image: 使用 tomcat:latest 镜像。
ports: 暴露 8080 端口。
resources: 定义了资源请求和限制。
livenessProbe 和 readinessProbe: 用于健康检查。
volumeMounts: 挂载了两个卷。

Filebeat 容器:
image: 使用 filebeat:7.17.2 镜像。
args: 指定了启动参数。
resources: 定义了资源请求和限制。
securityContext: 以 root 用户运行。
volumeMounts: 挂载了两个卷。

volumes:
tomcat-logs: 使用 emptyDir 卷。
tomcatwebroot: 使用 hostPath 卷。
filebeat-config: 使用 ConfigMap 卷。


配置文件 (ConfigMap)部分

apiVersion: v1
kind: ConfigMap
metadata:
  name: filebeat-config

解释
metadata: 定义了 ConfigMap 的名称。
data: 应包含 Filebeat 的配置内容(在此省略)。

三、编写logstash配置文件

elk主机配置
编写logstash配置文件,不影响以往配置文件

vim /etc/logstash/conf.d/tomcat-logstash-to-elastic.conf
input {
  beats {
    host => "0.0.0.0"
    port => "5056"
  }
}

filter {

}


output {
    elasticsearch {
      hosts => "192.168.10.17:9200"
      index => "tomcat-catalina-%{+yyyy.MM.dd}"
    }
}

运行

/usr/share/logstash/bin/logstash -f /etc/logstash/conf.d/tomcat-logstash-to-elastic.conf --path.data /usr/share/logstash/data3 &

验证端口是否启动

ss -anput | grep ":5056"

在这里插入图片描述

四、应用tomcat资源清单文件

master主机操作

kubectl apply -f tomcat-logs.yaml

等一会因为需要下载镜像
然后查看pod
注:需要vpn

kubectl get deployment.apps
kubectl get pods

在这里插入图片描述
在这里插入图片描述

五、验证Pod 中tomcat及filebeat是否正常

查看tomcat产生日志 (-c: container)
在这里插入图片描述
查看filebeat收集日志

 kubectl logs tomcat-demo-664584f857-k8whd -c filebeat

在这里插入图片描述

六、再kiana页面中添加索引

宿主机浏览器访问

192.168.10.17:5601

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
可以看到已经看到日志了
在这里插入图片描述
完成
如果对您有帮助可以点下关注

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐