当前位置: 首页 > news >正文

k8s中用filebeat文件如何收集不同service的日志

以下是一个详细的从在 Kubernetes 集群中部署 Filebeat,到实现按web-oper、web-api微服务分离日志并存储到不同索引的完整方案:

理解需求:按服务分离日志索引

  • 在 Kubernetes 集群中,有web-oper和web-api两种微服务,希望通过 Filebeat
    将它们的日志分别收集到不同的索引中。 这样在后续查看和分析日志时,可以更方便地根据服务进行区分,例如在 Elasticsearch
    中通过不同的索引来查询web-api和web-oper的日志。

准备工作:已成功部署好es与Kibana

  1. 准备 Filebeat 配置文件

创建一个名为 filebeat.yml 的配置文件,内容如下:

filebeat.inputs:- type: containerpaths:- /var/log/containers/*.logprocessors:- add_kubernetes_metadata:host: ${NODE_NAME}matchers:- logs_path:logs_path: "/var/log/containers/"output.elasticsearch:hosts: ["elasticsearch-cluster-ip:9200"]  # 替换为实际的Elasticsearch集群IP和端口indices:- index: "web-api-log-%{+yyyy.MM.dd}"when:equals:kubernetes:labels:app: web-api- index: "web-oper-log-%{+yyyy.MM.dd}"when:equals:kubernetes:labels:app: web-oper

上述配置文件作用解析:
● filebeat.inputs 部分指定了从容器日志路径(/var/log/containers/*.log,这是 Kubernetes 默认存放容器日志之处)收集日志,并通过 add_kubernetes_metadata 处理器添加 Kubernetes 相关元数据,便于后续精准筛选。

● output.elasticsearch 部分定义了输出目标为 Elasticsearch 集群,重点是 indices 小节,使用 when 条件语句搭配 equals 判断机制。如果容器的 kubernetes.labels.app 标签值为 web-api,日志将发送至 web-api-log-%{+yyyy.MM.dd} 索引;若标签值是 web-oper,则发送到 web-oper-log-%{+yyyy.MM.dd} 索引。

  1. 创建 Filebeat 的 DaemonSet 资源定义文件

新建一个名为 filebeat-daemonset.yaml 的 YAML 文件,用于在 Kubernetes 中部署 Filebeat:

apiVersion: apps/v1
kind: DaemonSet
metadata:name: filebeatnamespace: kube-system  # 推荐部署到kube-system命名空间,便于统一管理系统级组件
spec:selector:matchLabels:app: filebeattemplate:metadata:labels:app: filebeatspec:containers:- name: filebeatimage: docker.elastic.co/beats/filebeat:7.14.0  # 按需选择Filebeat版本镜像volumeMounts:- name: varlogcontainersmountPath: /var/log/containers- name: varlogpodsmountPath: /var/log/pods- name: filebeat-configmountPath: /usr/share/filebeat/filebeat.yml # 挂载filebeat文件readOnly: truevolumes:- name: varlogcontainershostPath:path: /var/log/containers- name: varlogpodshostPath:path: /var/log/pods- name: filebeat-configconfigMap:name: filebeat-config

DaemonSet 控制器确保所有(或一部分)的节点都运行了一个指定的 Pod 副本

  • 每当向集群中添加一个节点时,指定的 Pod 副本也将添加到该节点上。
  • 当节点从集群中移除时,Pod 也就被垃圾回收了。
  • 删除一个 DaemonSet 可以清理所有由其创建的 Pod。
    在这里插入图片描述

这个 DaemonSet 配置解析如下:

  • metadata 定义了 DaemonSet 的名称 filebeat 以及所属命名空间。
  • spec 里的 selector 和 template 标签配合,确保每个节点上都运行符合 app: filebeat 标签的 Pod。
  • containers 中定义Filebeat 容器,挂载了容器日志目录(/var/log/containers 和
    /var/log/pods)用于读取日志,同时挂载了之前创建的 filebeat.yml 配置文件(通过 configMap
    方式挂载,下面步骤会创建),设置为只读,防止容器内意外修改配置。
  • volumes 部分对应上述 volumeMounts,声明了hostPath 类型的本地日志目录挂载以及 configMap 类型挂载,用于配置文件挂载。
  • /var/log/pods目录存储了 Pod 级别的日志,这些日志可能包含了关于 Pod 启动、停止以及内部容器之间交互的一些详细信息。例如,Pod 初始化容器(init container)的日志可能会在这里有记录。初始化容器用于在主容器启动之前执行一些初始化任务,如配置环境、检查依赖等,其日志对于排查 Pod 启动问题非常重要。
  1. 创建 ConfigMap 用于挂载配置文件

    执行以下命令创建包含 filebeat.yml 的 ConfigMap:

kubectl create configMap filebeat-config --from-file=filebeat.yml -n kube-system

此命令会将 filebeat.yml 文件内容封装进名为 filebeat-config 的 ConfigMap 里,供 Filebeat 容器挂载使用。

  • 在 Kubernetes 集群中部署 Filebeat
    使用以下命令部署 Filebeat:
kubectl apply -f filebeat-daemonset.yaml

这条命令将依据 filebeat-daemonset.yaml 描述在集群中启动 Filebeat。

  1. 验证部署与日志收集效果
    ● 查看 Filebeat 容器日志:
    通过 kubectl logs -n kube-system (filebeat-pod-name 可通过 kubectl get pods -n kube-system | grep filebeat 查到),检查有无报错信息,排查配置或启动过程中可能出现的问题。
    ● 在 Elasticsearch 端检查索引:利用 Elasticsearch 的 API 或者 Kibana 工具,查看是否成功创建了 web-api-log-%{+yyyy.MM.dd} 和 web-oper-log-%{+yyyy.MM.dd} 两个索引,索引内是否陆续接收到对应服务的日志。

通过以上步骤,即可在 Kubernetes 集群中成功部署 Filebeat,并实现按 web-oper、web-api 服务分离日志存储到不同索引,方便后续日志分析运维工作。
需留意配置文件中的 Elasticsearch 集群地址、Filebeat 镜像版本等关键信息,依实际情况调整适配。

相关文章:

k8s中用filebeat文件如何收集不同service的日志

以下是一个详细的从在 Kubernetes 集群中部署 Filebeat,到实现按web-oper、web-api微服务分离日志并存储到不同索引的完整方案: 理解需求:按服务分离日志索引 在 Kubernetes 集群中,有web-oper和web-api两种微服务,希…...

Mysql数据库中,什么情况下设置了索引但无法使用?

在MySQL数据库中,即使已经正确设置了索引,但在某些情况下索引可能无法被使用。 以下是一些常见的情况: 1. 数据分布不均匀 当某个列的数据分布非常不均匀时,索引可能无法有效地过滤掉大部分的数据,导致索引失效。 …...

QT6学习第十一天 Qt Quick控件 Control

QT6学习第十一天 Qt Quick控件控件基类 Control按钮类控件指示器类控件输入类控件日期类控件 Qt Quick控件 Qt Quick本身是为了移动触摸界面而生的,但Qt的跨平台性也决定了它需要支持多种系统。为了支持桌面平台开发,从Qt 5.1开始,增加了新的…...

【唐叔学算法】第16天:枚举-探索所有可能性的艺术

大家好,我是唐叔。今天我们要探讨的是一个看似简单却非常实用的概念——枚举(Enumeration)。它不仅仅是一种数据类型,在算法设计中也是一种解决问题的策略。通过系统地遍历所有可能的情况,我们可以找到满足特定条件的答…...

【OpenCV】基于GrabCut算法的交互式前景提取

介绍 GrabCut 算法是一种用于图像分割的交互式前景提取技术,它结合了图割(Graph Cut)方法和迭代优化过程。该算法最初由 Rother, Kolmogorov 和 Blake 在 2004 年提出,并因其高效性和准确性而被广泛应用于计算机视觉领域。OpenCV…...

【Flask+OpenAI】利用Flask+OpenAI Key实现GPT4-智能AI对话接口demo - 从0到1手把手全教程(附源码)

文章目录 前言环境准备安装必要的库 生成OpenAI API代码实现详解导入必要的模块创建Flask应用实例配置OpenAI API完整代码如下(demo源码)代码解析 利用Postman调用接口 了解更多AI内容结尾 前言 Flask作为一个轻量级的Python Web框架,凭借其…...

最短路----Dijkstra算法详解

简介 迪杰斯特拉(Dijkstra)算法是一种用于在加权图中找到单个源点到所有其他顶点的最短路径的算法。它是由荷兰计算机科学家艾兹格迪科斯彻(Edsger Dijkstra)在1956年提出的。Dijkstra算法适用于处理带有非负权重的图。迪杰斯特拉…...

ORB-SLAM3源码学习:G2oTypes.cc: void EdgeInertial::computeError 计算预积分残差

前言 这部分函数涉及了g2o的内容以及IMU相关的推导内容,需要你先去进行这部分的学习。 1.函数声明 void EdgeInertial::computeError() 2.函数定义 涉及到的IMU的公式: {// TODO Maybe Reintegrate inertial measurments when difference between …...

Unity协程机制详解

Unity的协程(Coroutine)是一种异步编程的机制,允许在多个帧之间分割代码的执行,而不阻塞主线程。与传统的多线程不同,Unity的协程在主线程中运行,并不会开启新的线程。 什么是协程? 协程是一种…...

2024年【高压电工】最新解析及高压电工考试总结

高压电工考试是电力行业从业人员必须通过的资格考试之一,它不仅检验了考生对高压电技术的掌握程度,还考验了考生在实际操作中的安全意识和应急处理能力。为了帮助广大考生更好地备考,本文整理了10道2024年高压电工考试的最新解析及总结试题&a…...

OELOVE 6.0城市列表模板

研究了好久OELOVE6.0源码,一直想将城市列表给单独整出来,做地区排名,但是PHP程序都是加密的,非常难搞,做二开都是要命的处理不了,在这里有一个简单方法可以处理城市列表,并且可以自定义TDK&…...

如何将你的 Ruby 应用程序从 OpenSearch 迁移到 Elasticsearch

作者:来自 Elastic Fernando Briano 将 Ruby 代码库从 OpenSearch 客户端迁移到 Elasticsearch 客户端的指南。 OpenSearch Ruby 客户端是从 7.x 版 Elasticsearch Ruby 客户端分叉而来的,因此代码库相对相似。这意味着当将 Ruby 代码库从 OpenSearch 迁…...

day1数据结构,关键字,内存空间存储与动态分区,释放

小练习 在堆区空间连续申请5个int类型大小空间,用来存放从终端输入的5个学生成绩,然后显示5个学生成绩,再将学生成绩升序排序,排序后,再次显示学生成绩。显示和排序分别用函数完成(两种排序方法&#xff0…...

1_linux系统网络性能如何优化——几种开源网络协议栈比较

之前合集《计算机网络从入门到放弃》第一阶段算是已经完成了。都是理论,没有实操,让“程序猿”很难受,操作性不如 Modbus发送的报文何时等到应答和 tcp通信测试报告单1——connect和send。开始是想看linux内核网络协议栈的源码,然…...

【问题记录】07 MAC电脑,使用FileZilla(SFTP)连接堡垒机不成功

项目场景: 使用MAC电脑,以子账号(非root)的形式登录,连接堡垒机CLB(传统型负载均衡),使用FileZilla(SFTP)进行FTP文件传输。 问题描述: MAC电脑…...

前端报错npm ERR cb() never called问题

环境使用node版本v14.21.3&#xff0c;npm版本6.14.18 1.问题描述 1.1使用npm install后报错 npm ERR! cb() never called!npm ERR! This is an error with npm itself. Please report this error at: npm ERR! ? ? <https://npm.community>npm ERR! A complete log…...

康谋方案 | 多源相机数据采集与算法集成测试方案

目录 一、相机组成 二、多源相机采集与测试方案 三、应用案例分享 四、结语 在智能化技术快速发展当下&#xff0c;图像数据的采集与处理逐渐成为自动驾驶、工业等领域的一项关键技术。高质量的图像数据采集与算法集成测试都是确保系统性能和可靠性的关键。随着技术的不断进…...

Graspness 端到端抓取点估计 | 环境搭建 | 模型推理测试

在复杂场景中实现抓取检测&#xff0c;Graspness是一种端到端的方法&#xff1b; 输入点云数据&#xff0c;输出抓取角度、抓取深度、夹具宽度等信息。 开源地址&#xff1a;https://github.com/rhett-chen/graspness_implementation?tabreadme-ov-file 论文地址&#xff1…...

交换机是如何避免数据碰撞的(详细解释 + 示例)

交换机是如何避免数据碰撞的&#xff08;详细解释 示例&#xff09; 1. 独立冲突域 交换机的每个端口都形成一个独立的冲突域。这意味着通过交换机连接的每个设备都拥有自己的通信通道&#xff0c;互不干扰。 示例&#xff1a; 假设一个交换机有4个端口&#xff0c;分别连接…...

魅族手机刷官方系统

从魅族官网下载固件 https://flyme.cn/firmware.html 找到自己的型号&#xff0c;里面有历史版本、最新版&#xff0c;按照需求下载。 下载的是update.zip&#xff0c;改名就不能升级了 方法1 直接点击下载的update.zip包就可以升级。 方法2 将文件移动到文件管理的根目录&a…...

突破不可导策略的训练难题:零阶优化与强化学习的深度嵌合

强化学习&#xff08;Reinforcement Learning, RL&#xff09;是工业领域智能控制的重要方法。它的基本原理是将最优控制问题建模为马尔可夫决策过程&#xff0c;然后使用强化学习的Actor-Critic机制&#xff08;中文译作“知行互动”机制&#xff09;&#xff0c;逐步迭代求解…...

从WWDC看苹果产品发展的规律

WWDC 是苹果公司一年一度面向全球开发者的盛会&#xff0c;其主题演讲展现了苹果在产品设计、技术路线、用户体验和生态系统构建上的核心理念与演进脉络。我们借助 ChatGPT Deep Research 工具&#xff0c;对过去十年 WWDC 主题演讲内容进行了系统化分析&#xff0c;形成了这份…...

【WiFi帧结构】

文章目录 帧结构MAC头部管理帧 帧结构 Wi-Fi的帧分为三部分组成&#xff1a;MAC头部frame bodyFCS&#xff0c;其中MAC是固定格式的&#xff0c;frame body是可变长度。 MAC头部有frame control&#xff0c;duration&#xff0c;address1&#xff0c;address2&#xff0c;addre…...

vscode(仍待补充)

写于2025 6.9 主包将加入vscode这个更权威的圈子 vscode的基本使用 侧边栏 vscode还能连接ssh&#xff1f; debug时使用的launch文件 1.task.json {"tasks": [{"type": "cppbuild","label": "C/C: gcc.exe 生成活动文件"…...

电脑插入多块移动硬盘后经常出现卡顿和蓝屏

当电脑在插入多块移动硬盘后频繁出现卡顿和蓝屏问题时&#xff0c;可能涉及硬件资源冲突、驱动兼容性、供电不足或系统设置等多方面原因。以下是逐步排查和解决方案&#xff1a; 1. 检查电源供电问题 问题原因&#xff1a;多块移动硬盘同时运行可能导致USB接口供电不足&#x…...

Java - Mysql数据类型对应

Mysql数据类型java数据类型备注整型INT/INTEGERint / java.lang.Integer–BIGINTlong/java.lang.Long–––浮点型FLOATfloat/java.lang.FloatDOUBLEdouble/java.lang.Double–DECIMAL/NUMERICjava.math.BigDecimal字符串型CHARjava.lang.String固定长度字符串VARCHARjava.lang…...

AI编程--插件对比分析:CodeRider、GitHub Copilot及其他

AI编程插件对比分析&#xff1a;CodeRider、GitHub Copilot及其他 随着人工智能技术的快速发展&#xff0c;AI编程插件已成为提升开发者生产力的重要工具。CodeRider和GitHub Copilot作为市场上的领先者&#xff0c;分别以其独特的特性和生态系统吸引了大量开发者。本文将从功…...

ios苹果系统,js 滑动屏幕、锚定无效

现象&#xff1a;window.addEventListener监听touch无效&#xff0c;划不动屏幕&#xff0c;但是代码逻辑都有执行到。 scrollIntoView也无效。 原因&#xff1a;这是因为 iOS 的触摸事件处理机制和 touch-action: none 的设置有关。ios有太多得交互动作&#xff0c;从而会影响…...

图表类系列各种样式PPT模版分享

图标图表系列PPT模版&#xff0c;柱状图PPT模版&#xff0c;线状图PPT模版&#xff0c;折线图PPT模版&#xff0c;饼状图PPT模版&#xff0c;雷达图PPT模版&#xff0c;树状图PPT模版 图表类系列各种样式PPT模版分享&#xff1a;图表系列PPT模板https://pan.quark.cn/s/20d40aa…...

九天毕昇深度学习平台 | 如何安装库?

pip install 库名 -i https://pypi.tuna.tsinghua.edu.cn/simple --user 举个例子&#xff1a; 报错 ModuleNotFoundError: No module named torch 那么我需要安装 torch pip install torch -i https://pypi.tuna.tsinghua.edu.cn/simple --user pip install 库名&#x…...