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

文章目录


前言

Filebeat+ELK的构建与解释参考

链接: k8s学习--基于k8s的ELK日志收集的详细过程

本章不再重复描述

环境

虚拟机

Ip 主机名 cpu 内存 硬盘
192.168.10.11 master01 2cpu双核 4G 100G
192.168.10.12 worker01 2cpu双核 4G 100G
192.168.10.13 worker02 2cpu双核 4G 100G
192.168.10.17 ELK 1cpu双核 4G 100G

版本 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







可以看到已经看到日志了

完成

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

相关推荐
小灰灰搞电子5 分钟前
Rust 相关容器(集合)详解
开发语言·容器·rust
上学的小垃圾6 小时前
基于docker安装MySQL(openEuler系统)
linux·mysql·docker·容器
小淮AI6 小时前
从“刷题”到“追问”:AI课堂正在重塑哪些学习旧习惯?
人工智能·学习
wixzjsh8 小时前
TCP通信与HTTP协议学习笔记:粘包、三次握手、四次挥手与C/S、B/S模型
学习·tcp/ip·http
ZhiMuZhiLing8 小时前
拓客软件学习成本实测方法论:从注册到出第一批名单要多久
学习·流量运营·用户运营
程序员大雄学编程8 小时前
微积分46. 无穷级数四大核心性质:从理论到实践的全方位解析
python·学习·微积分·学习工具
指针常量10 小时前
【RL系列文章】难样本学习等
学习·大语言模型·rl·后训练
wuyk55511 小时前
从零吃透Modbus通信|第7章:终极工程整合(模块化架构、双模式主机从机、RTOS适配、量产级模板)
c语言·stm32·学习·架构
一条破秋裤12 小时前
STM32 学习笔记:PWM 驱动 LED 呼吸灯与舵机代码
笔记·stm32·学习
kyrie_sakura13 小时前
python学习笔记11 -- 进程和线程
笔记·python·学习