Filebeat k8s 部署(Deployment)采集 PVC 日志发送至 Kafka——日志处理(二)

文章目录

  • 前言
  • Filebeat Configmap 配置
  • Filebeat Deployment
  • 验证
  • 总结

前言

在上篇文章中总结了 Django 日志控制台输出、文件写入按天拆分文件,自定义 Filter 增加 trace_id 以及过滤——日志处理(一),将日志以 JSON 格式写入日志文件。
我们的项目服务是部署在 k8s 上的,日志是挂载在 PVC 中的,接下来我们需要使用 Filebeat 去采集 PVC 中的日志,发送至 kafka 中,本文将总结如何在 k8s 上部署 Filebeat, 来采集 PVC 中的日志。

Filebeat Configmap 配置

使用 k8s 的 configmap 来保存 Filebeat 的配置信息:

apiVersion: v1
kind: ConfigMap
metadata:name: filebeat-config
data:filebeat.yml: |-filebeat.inputs:- type: logenabled: truepaths:# 日志文件路径- /home/dfuser/addcdata/logs/*.logoutput.kafka:# kafka 集群的连接地址hosts: ["kafka.cluster.address:9092"]# 将要发送的 kafka topic, 注意确保该 topic 存在topic: "filebeat_logs"# 连接 kafka 的用户名和密码username: "admin"password: "admin"sasl.mechanism: PLAINcompression: gzip# 这里可以将 timeout 设置长一点,默认好像是几秒timeout: 60sbroker_timeout: 60sretry.backoff: 5s# 日志消息的发送响应要求一般不会特别高,设置为 1就够了required_acks: 1max_message_bytes: 104857600channel_buffer_size: 256keep_alive: 30s
  • 配置文件中定义了 input 信息:采集日志文件路径,以及 output 信息:kafka 连接配置信息等。

关于kafka Producer 配置信息不太熟悉的可以看我之前写的这篇文章:
kafka 生产者 API 实践总结

Filebeat Deployment

apiVersion: apps/v1
kind: Deployment
metadata:labels:workload.user.cattle.io/workloadselector: apps.deployment-addcdata-filebeatname: filebeatnamespace: addcdata
spec:replicas: 1selector:matchLabels:workload.user.cattle.io/workloadselector: apps.deployment-addcdata-filebeattemplate:metadata:labels:workload.user.cattle.io/workloadselector: apps.deployment-addcdata-filebeatnamespace: addcdataspec:containers:- name: filebeatresources:limits:memory: 3000Miimage: elastic/filebeat:7.6.2args: [ "-e", "-c", "/etc/filebeat/filebeat.yml" ]volumeMounts:- mountPath: /home/dfuser/addcdata/logsname: addcdata-logs-pvcsubPath: logs- name: filebeat-configmountPath: /etc/filebeat/filebeat.ymlsubPath: filebeat.ymlimagePullSecrets:- name: addcdata-harborrestartPolicy: AlwaysterminationGracePeriodSeconds: 30volumes:- name: addcdata-logs-pvcpersistentVolumeClaim:claimName: addcdata-pvc- name: filebeat-configconfigMap:name: filebeat-config
  • 这里挂载了两个 volumes:
    • addcdata-pvc: 是我们项目在 k8s 上挂载日志的 PVC,其中日志挂载在 /home/dfuser/addcdata/logs 目录下
    • filebeat-config:是上边 Filebeat 的configMap 配置名称
  • 这里我们使用的镜像是 elastic/filebeat:7.6.2,这个是官方的,没有外网可能不好拉取,我把该镜像上传至了阿里云的镜像仓库,可以从该地址拉取:registry.cn-shenzhen.aliyuncs.com/zhouzy_space/filebeat:7.6.2, 从阿里云镜像仓库拉取 docker 需要先登录阿里云仓库。

验证

如果我们的配置正确,并且上边的 Deployment 部署成功,通过查看 Filebeat Pod 日志如下:
image.png
如果我们的 kafka 配置不正确或者网络连接不上,日志会报错误信息。
接下来我们通过 CMAK 看下 kafka 的 Topic 是否写入:
image.png
可以发现已经有消息写入。
我们写个 Python 脚本消费几条数据看下:
将下边脚本的 kafka 连接信息替换为自己的集群信息

from confluent_kafka import Consumer, KafkaExceptiondef consume_messages(topic):# 创建 Kafka 消费者配置conf = {'bootstrap.servers': 'kafka.address:9092',  # Kafka 服务器地址'group.id': 'my-consumer-group',  # 消费者组ID'auto.offset.reset': 'earliest',  # 自动重置偏移量'enable.auto.commit': False,  # 禁用自动提交偏移量'session.timeout.ms': 6000,  # 会话超时时间}# 如果 Kafka 启用了 SASL 认证,添加 SASL 相关配置conf.update({'security.protocol': 'SASL_PLAINTEXT','sasl.mechanism': 'PLAIN','sasl.username': 'admin','sasl.password': 'admin',})consumer = Consumer(conf)try:consumer.subscribe([topic])while True:msg = consumer.poll(1.0)  # 每秒轮询一次if msg is None:continueif msg.error():raise KafkaException(msg.error())else:print('Received message: {}'.format(msg.value().decode('utf-8')))except KeyboardInterrupt:passfinally:consumer.close()if __name__ == '__main__':topic = 'filebeat_logs'  # 你的 Kafka 主题名称consume_messages(topic)

下边放几条看下:

Received message: {"@timestamp":"2024-07-19T03:31:24.040Z","@metadata":{"beat":"filebeat","type":"_doc","version":"7.6.2"},"log":{"offset":32682537,"file":{"path":"/home/dfuser/addcdata/logs/info.log"}},"input":{"type":"log"},"ecs":{"version":"1.4.0"},"host":{"name":"filebeat-7674bf8777-kdhs2"},"agent":{"ephemeral_id":"b0211f50-71f4-471d-8d01-def1e3b1c303","hostname":"filebeat-7674bf8777-kdhs2","id":"edaefbbb-2d08-4b6c-95aa-46ebdbebd0cc","version":"7.6.2","type":"filebeat"},"message":"{\"time\": \"2024-07-19 11:31:23\", \"thread\": \"ThreadPoolExecutor-0_14\", \"level\": \"INFO\", \"func\": \"apps.data_report.views.views.report_data_v1:65\", \"trace_id\": \"9794977c-c8f5-4f75-a450-655eda5f58c4\",  \"message\": \"======================\"}"}
Received message: {"@timestamp":"2024-07-19T03:31:25.043Z","@metadata":{"beat":"filebeat","type":"_doc","version":"7.6.2"},"host":{"name":"filebeat-7674bf8777-kdhs2"},"agent":{"ephemeral_id":"b0211f50-71f4-471d-8d01-def1e3b1c303","hostname":"filebeat-7674bf8777-kdhs2","id":"edaefbbb-2d08-4b6c-95aa-46ebdbebd0cc","version":"7.6.2","type":"filebeat"},"log":{"offset":32689465,"file":{"path":"/home/dfuser/addcdata/logs/info.log"}},"message":"{\"time\": \"2024-07-19 11:31:24\", \"thread\": \"ThreadPoolExecutor-0_4\", \"level\": \"INFO\", \"func\": \"apps.data_report.views.views.report_data_v1:64\", \"trace_id\": \"26c55b5c-a660-4420-ab27-72e7cf9d1f1a\",  \"message\": \"params: <QueryDict: {'car_type': ['H97C'], 'path': ['H97C/2024071911/LDP95H966PE302771/204_31da1b2e254481914d851f9740a1f580_1721351130419507_slave/31da1b2e254481914d851f9740a1f580_1_1_1721354458372069_1.data'], 'env': ['prod'], 'sync': ['0']}>\"}","input":{"type":"log"},"ecs":{"version":"1.4.0"}}
Received message: {"@timestamp":"2024-07-19T03:31:25.043Z","@metadata":{"beat":"filebeat","type":"_doc","version":"7.6.2"},"message":"{\"time\": \"2024-07-19 11:31:24\", \"thread\": \"ThreadPoolExecutor-0_38\", \"level\": \"INFO\", \"func\": \"apps.data_report.views.views.report_data_v1:63\", \"trace_id\": \"7f754755-fb70-4212-9a80-55ba19f5e5c9\",  \"message\": \"=====data report======\"}","log":{"offset":32695607,"file":{"path":"/home/dfuser/addcdata/logs/info.log"}},"input":{"type":"log"},"ecs":{"version":"1.4.0"},"host":{"name":"filebeat-7674bf8777-kdhs2"},"agent":{"ephemeral_id":"b0211f50-71f4-471d-8d01-def1e3b1c303","hostname":"filebeat-7674bf8777-kdhs2","id":"edaefbbb-2d08-4b6c-95aa-46ebdbebd0cc","version":"7.6.2","type":"filebeat"}}

可以发现 filebeat 采集我们的日志往 kafka 里发的时候,会加上一些它自己的字段信息,比如说 timestamp, metadata 等,但是我们并不关心这些信息,我们最需要的是 message 字段,也就是我们自己的日志信息:
image.png

总结

filebeat 的 k8s 部署还是比较简单的,只需要部署一个 configmap,通过部署一个 Deployment 就可以采集我们 PVC 中的日志,但是需要确保我们的 kafka 配置信息正确 (确保写入 Topic 存在) 和日志挂载路径一致。

网上很多都是通过 DaemonSet 或者 sidecar 的方式部署 Filebeat,个人觉得没必要,太过复杂,只要我们的日志是挂载到 PVC 中的,简单部署一个 Deployment 就足够了,目前我们的服务每天会产生百万条日志,都是正常发送至 kafka 的。

日志搜集至 kafka 不是最终目的,我们的最终目标是要能够分析日志,排查问题,以及做出一些指标看板和错误告警等。接下来我会总结,如何使用 Flink SQL 实时的将 kafka 中的日志写入 Clickhouse 进行日志分析,以及如何结合 Superset 使用 Clickhouse 数据源查询日志数据,做出指标看板。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/3250488.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

object-C 解答算法:移动零(leetCode-283)

移动零(leetCode-283) 题目如下图:(也可以到leetCode上看完整题目,题号283) 解题思路: 本质就是把非0的元素往前移动,接下来要考虑的是怎么移动,每次移动多少? 这里需要用到双指针,i 记录每次遍历的元素值, j 记录“非0元素值”需要移动到的位置; 当所有“非0元素值”都移…

【IC前端虚拟项目】reference model编写与合入

【IC前端虚拟项目】数据搬运指令处理模块前端实现虚拟项目说明-CSDN博客 本来按照规划,这一篇应该写ral model的生成与合入,不过因为前面在这一篇文章中已经介绍了mvu的寄存器体系: 【IC前端虚拟项目】MVU寄存器文档编写与RTL代码生成-CSDN博客文章浏览阅读209次。那可就多…

VLAN 划分案例详解

vlan 的应用在网络项目中是非常广泛的&#xff0c;基本上大部分的项目都需要划分 vlan&#xff0c;这里从基础的 vlan 的知识开始&#xff0c;了解 vlan 的划分原理。 为什么需要 vlan&#xff1a; 1、什么是 VLAN&#xff1f; VLAN&#xff08;Virtual LAN&#xff09;&…

MySQL练习01

题目 步骤 创建数据库 create database mydb6_product; #创建数据库 use mydb6_product; #使用数据库 创建表 employees表 create table employees(id int primary key,-> name varchar(50) not null,-> age int,-> gender varchar(10) not null default&qu…

开关电源中的局部放电

一、局部放电现象 局部放电&#xff08;partial discharge&#xff0c;简称PD&#xff09;现象&#xff0c;通常主要指的是高压电气设备绝缘层在足够强的电场作用下局部范围内发生的放电&#xff0c;某个区域的电场强度一旦达到其介质击穿场强时&#xff0c;该区域就会出现放电…

牛客TOP101:链表中环的入口结点

文章目录 1. 题目描述2. 解题思路3. 代码实现 1. 题目描述 2. 解题思路 3. 代码实现 /* struct ListNode {int val;struct ListNode *next;ListNode(int x) :val(x), next(NULL) {} }; */ class Solution { public:ListNode* hasCycle(ListNode *head) {if(head nullptr) retu…

Python 工程师对 3D 高斯溅射的介绍(第 2 部分)

理解并编码如何在 3D 高斯溅射中使用高斯 欢迎来到雲闪世界现在开始讨论高斯&#xff01;这是每个人最喜欢的分布。如果您刚刚加入我们&#xff0c;我们已经在第1 部分中介绍了如何根据相机的位置获取 3D 点并将其转换为 2D 。在本文中&#xff0c;我们将讨论高斯分布的高斯部分…

口袋奇兵游戏攻略:云手机辅助战锤入侵策略指南!

在《口袋奇兵》中&#xff0c;战锤入侵是一个重要的游戏环节&#xff0c;了解如何有效地参与战锤入侵能够帮助玩家获取更多的资源和提升自己的战力。本文将详细介绍战锤入侵的策略和技巧&#xff0c;帮助玩家在战锤入侵活动中取得更好的成绩。除了找到强力的游戏辅助&#xff0…

【JVM】JVM调优练习-随笔

JVM实战笔记-随笔 前言字节码如何查看字节码文件jclasslibJavapArthasArthurs监控面板Arthus查看字节码信息 内存调优内存溢出的常见场景解决内存溢出发现问题Top命令VisualVMArthas使用案例 Prometheus Grafana案例 堆内存情况对比内存泄漏的原因:代码中的内存泄漏并发请求问…

vmware配置centos+配置静态ip联网+更换镜像

centos7配置参考【实战】VMware17虚拟机以及Centos7详细安装教程-CSDN博客 ip配置步骤&#xff1a; 先更改编辑虚拟网络编辑器中的内容 就按照还原默认设置来&#xff0c;设定后就是以上内容&#xff0c;然后一定要记住子网ip和子网掩码 接下来就是NAT设置&#xff1a; 网关…

国产麒麟、UOS在线打开pdf加盖印章

PageOffice支持两种电子印章方案&#xff0c;可实现对Word、Excel、PDF文档加盖PageOffice自带印章或ZoomSeal电子印章&#xff08;全方位保护、防篡改、防伪造&#xff09;。Word和Excel的盖章功能请参考&#xff1a;Word和Excel加盖印章和签字功能 &#xff08;目前只支持win…

PHP pwn 学习 (2)

文章目录 A. 逆向分析A.1 基本数据获取A.2 函数逆向zif_addHackerzif_removeHackerzif_displayHackerzif_editHacker A.3 PHP 内存分配 A.4 漏洞挖掘B. 漏洞利用B.1 PHP调试B.2 exp 上一篇blog中&#xff0c;我们学习了一些PHP extension for C的基本内容&#xff0c;下面结合一…

磷酸制备除杂,提高磷酸纯度的工艺

在化肥生产领域&#xff0c;磷酸作为一种关键的生产原料&#xff0c;其纯度对化肥的品质和性能有着直接的影响。然而&#xff0c;在实际生产过程中&#xff0c;磷酸原料中常常含有各种杂质&#xff0c;如金属离子、有机物等&#xff0c;这些杂质的存在会严重影响磷酸的纯度&…

如何在web页面下做自动化测试?

自动化测试是在软件开发中非常重要的一环&#xff0c;它可以提高测试效率并减少错误率。在web页面下进行自动化测试&#xff0c;可以帮助我们验证网页的功能和交互&#xff0c;并确保它们在不同浏览器和平台上的一致性。本文将从零开始&#xff0c;详细介绍如何在web页面下进行…

MySQL相关知识

一、什么是数据库&#xff1f; 数据库&#xff08;Database&#xff0c;简称DB&#xff09;概念&#xff1a; 长期存放在计算机内&#xff0c;有组织、可共享的大量数据的集合&#xff0c;是一个 数据“仓库”。 二、数据库的特点&#xff1a; 1.结构化&#xff1a;数据在数…

如何在Ubuntu上安装并启动SSH服务(Windows连接)

在日常的开发和管理工作中&#xff0c;通过SSH&#xff08;Secure Shell&#xff09;连接到远程服务器是一个非常常见的需求。如果你在尝试通过SSH连接到你的Ubuntu系统时遇到了问题&#xff0c;可能是因为SSH服务未安装或未正确配置。本文将介绍如何在Ubuntu上安装并启动SSH服…

GitHub私有派生仓库(fork仓库) | 派生仓库改为私有

GitHub私有派生仓库 前言解决方案 前言 在GitHub上Fork的派生仓库默认为公有仓库&#xff0c;且无法修改为私有仓库。 若想创建私有的派生仓库&#xff0c;可通过GitHub的导入仓库功能实现&#xff0c;具体步骤请参见下文解决方案。 解决方案 打开GitHub页面&#xff0c;在个…

C#医学影像管理系统源码 PACS系统源码带三维重建,全院级数字医学影像系统

C#医学影像管理系统源码 医学影像存储与传输系统源码 PACS系统源码带三维重建&#xff0c;三甲以下医院都能满足。 PACS系统模块组成 &#xff1a; 工作站&#xff1a; 分诊工作站、超声工作站、放射工作站、内镜工作站、病理工作站。 基本信息维护&#xff1a; 输入模板、输入…

Token Labeling(NeurIPS 2021, ByteDance)论文解读

paper&#xff1a;All Tokens Matter: Token Labeling for Training Better Vision Transformers official implementation&#xff1a;https://github.com/zihangJiang/TokenLabeling 出发点 ViTs的局限性&#xff1a;尽管ViTs在捕捉长距离依赖方面表现出色&#xff0c; 但…

windows程序设计基础--学习记录

一、Windows程序的Hello world #include<windows.h>int WINAPI WinMain(HINSTANCE hInstance, //程序实例句柄HINSTANCE hPreHinstance, //上一个程序的实例句柄&#xff08;被遗弃&#xff0c;参数始终为NULL&#xff09;LPSTR lpCmdeLine, //命令行参数int nCmdeSh…