ELK日志收集--收集k8s集群中以pod方式运行的应用日志

07-12 1707阅读

文章目录

  • 前言
  • 环境
      • 一、准备tomcat数据目录
      • 二、编写tomcat应用资源清单文件
      • 三、编写logstash配置文件
      • 四、应用tomcat资源清单文件
      • 五、验证Pod 中tomcat及filebeat是否正常
      • 六、再kiana页面中添加索引

        前言

        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"
        

        ELK日志收集--收集k8s集群中以pod方式运行的应用日志

        四、应用tomcat资源清单文件

        master主机操作

        kubectl apply -f tomcat-logs.yaml
        

        等一会因为需要下载镜像

        然后查看pod

        注:需要vpn

        kubectl get deployment.apps
        kubectl get pods
        

        ELK日志收集--收集k8s集群中以pod方式运行的应用日志

        ELK日志收集--收集k8s集群中以pod方式运行的应用日志

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

        查看tomcat产生日志 (-c: container)

        ELK日志收集--收集k8s集群中以pod方式运行的应用日志

        查看filebeat收集日志

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

        ELK日志收集--收集k8s集群中以pod方式运行的应用日志

        六、再kiana页面中添加索引

        宿主机浏览器访问

        192.168.10.17:5601
        

        ELK日志收集--收集k8s集群中以pod方式运行的应用日志

        ELK日志收集--收集k8s集群中以pod方式运行的应用日志

        ELK日志收集--收集k8s集群中以pod方式运行的应用日志

        ELK日志收集--收集k8s集群中以pod方式运行的应用日志

        ELK日志收集--收集k8s集群中以pod方式运行的应用日志

        ELK日志收集--收集k8s集群中以pod方式运行的应用日志

        ELK日志收集--收集k8s集群中以pod方式运行的应用日志

        可以看到已经看到日志了

        ELK日志收集--收集k8s集群中以pod方式运行的应用日志

        完成

        如果对您有帮助可以点下关注

VPS购买请点击我

文章版权声明:除非注明,否则均为主机测评原创文章,转载或复制请以超链接形式并注明出处。

目录[+]