Python实现日志采集功能

目录

    • 一、技术栈选型
    • 二、系统架构图
    • 三、代码实现
      • 1. 日志采集系统的类设计
      • 2. Python 代码实现
      • 3. 代码解析
        • 1. `Logger` 类
        • 2. `LogCollector` 类
        • 3. `LogProcessor` 类
      • 4. 示例运行
      • 5. 整合 Filebeat 和 Fluentd
    • 四、总结

在本文中,我们将基于上一篇文章的设计方案,选择合适的技术栈,并通过Python实现日志采集功能。我们会采用面向对象的编程思想,设计一个简化版的日志采集器,并通过 FilebeatFluentd 配合 Python 来完成日志的采集与传输。

一、技术栈选型

根据之前的设计,我们选择以下技术栈来实现日志采集功能:

  • Python:用作核心编程语言,负责日志生成和采集。
  • Filebeat:轻量级日志采集器,用于从本地文件采集日志。
  • Fluentd:灵活的日志处理工具,将日志传输到中央存储系统。
  • Elasticsearch:用于存储和查询日志数据,便于后续的分析。

二、系统架构图

简化后的日志采集系统架构如下:

  1. 应用日志生成器(Python程序):生成模拟日志并输出到本地文件。
  2. Filebeat:从本地文件采集日志,传输给Fluentd。
  3. Fluentd:接收Filebeat传输的日志,并处理后将其存储到Elasticsearch中。

三、代码实现

我们通过Python来实现一个简单的日志生成器,并设计一个日志采集器类,模拟应用程序的日志生成和采集过程。

1. 日志采集系统的类设计

我们将创建一个面向对象的日志采集系统,包括以下类:

  • Logger:负责生成模拟日志。
  • LogCollector:负责从本地采集日志。
  • LogProcessor:模拟日志的处理和传输。

2. Python 代码实现

import os
import time
import random
import logging# 模拟日志的产生器类
class Logger:def __init__(self, log_file):self.log_file = log_fileself.logger = self._setup_logger()def _setup_logger(self):logger = logging.getLogger('ApplicationLogger')logger.setLevel(logging.INFO)handler = logging.FileHandler(self.log_file)formatter = logging.Formatter('%(asctime)s - %(levelname)s - %(message)s')handler.setFormatter(formatter)logger.addHandler(handler)return loggerdef generate_log(self):log_levels = ['INFO', 'WARNING', 'ERROR', 'DEBUG']while True:level = random.choice(log_levels)if level == 'INFO':self.logger.info('This is an info message.')elif level == 'WARNING':self.logger.warning('This is a warning message.')elif level == 'ERROR':self.logger.error('This is an error message.')elif level == 'DEBUG':self.logger.debug('This is a debug message.')time.sleep(1)# 日志采集器类
class LogCollector:def __init__(self, log_file):self.log_file = log_filedef collect_logs(self):if os.path.exists(self.log_file):with open(self.log_file, 'r') as f:logs = f.readlines()# 模拟传输到LogProcessorLogProcessor().process_logs(logs)else:print("Log file does not exist.")# 日志处理器类,模拟处理传输日志
class LogProcessor:def process_logs(self, logs):print("Processing logs...")for log in logs:print(log.strip())# 主程序,模拟运行日志生成和日志采集
if __name__ == "__main__":log_file = "application.log"# 生成日志logger = Logger(log_file)# 在一个线程中生成日志,可以使用多线程或异步处理try:# 模拟日志生成和采集的流程print("Starting log generation...")logger.generate_log()  # 持续生成日志# 模拟日志采集器定期采集日志collector = LogCollector(log_file)while True:print("Collecting logs...")collector.collect_logs()time.sleep(5)  # 模拟每隔5秒采集一次日志except KeyboardInterrupt:print("Log generation and collection stopped.")

3. 代码解析

1. Logger

Logger 类负责日志的生成。通过 Python 的 logging 模块,我们将日志信息写入本地文件 application.loggenerate_log 方法会模拟生成不同级别的日志(INFO、WARNING、ERROR、DEBUG),并每隔一秒写入一条。

2. LogCollector

LogCollector 类负责从本地日志文件中读取日志,并将其传递给 LogProcessor 进行处理。每隔 5 秒,LogCollector 会读取日志文件中的所有内容,并模拟将其传输到下游的日志处理模块。

3. LogProcessor

LogProcessor 类简单模拟了对日志的处理。它接收到日志后,将日志打印到控制台,后续可以扩展为传输到 Fluentd 或 Elasticsearch。

4. 示例运行

当我们运行代码时,系统会模拟不断生成日志并持续采集、处理这些日志:

$ python log_collector.py
Starting log generation...
Collecting logs...
Processing logs...
2023-09-21 10:00:00 - INFO - This is an info message.
2023-09-21 10:00:01 - ERROR - This is an error message.
Collecting logs...
Processing logs...
2023-09-21 10:00:06 - DEBUG - This is a debug message.

5. 整合 Filebeat 和 Fluentd

上述 Python 实现的日志生成和采集流程可以与 FilebeatFluentd 集成:

  1. Filebeat 配置:通过配置 Filebeat 采集本地日志文件,并将日志传输到 Fluentd。
  2. Fluentd 配置:在 Fluentd 中配置接收 Filebeat 日志,并将其处理后存储到 Elasticsearch。

示例 Filebeat 配置:

filebeat.inputs:- type: logpaths:- /path/to/application.logoutput:logstash:hosts: ["localhost:5044"]  # 发送到 Fluentd 或 Logstash

示例 Fluentd 配置:

<source>@type forwardport 5044
</source><match **>@type elasticsearchhost localhostport 9200index_name logs
</match>

四、总结

通过本文的实现,我们完成了日志采集系统的一个基础功能模块,模拟了日志生成、采集、处理等流程。采用面向对象的思想,设计了 LoggerLogCollectorLogProcessor 类,清晰地将日志的生成、采集和处理功能分离。同时,我们还展示了如何通过 FilebeatFluentd 实现日志的集中采集和传输。

这个系统可以进一步扩展,添加日志的传输、存储和分析功能,最终形成一个完善的日志搜集分析平台。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

美畅物联丨技术前沿探索:H.265编码与畅联云平台JS播放器的融合应用

一、H.265 编码&#xff1a;视频压缩技术的重大变革 H.265&#xff0c;即被熟知为高效视频编码&#xff08;HEVC&#xff0c;High Efficiency Video Coding&#xff09;&#xff0c;由国际电信联盟电信标准化部门视频编码专家组&#xff08;ITU-T VCEG&#xff09;与国际标准化…

俄罗斯OZON新生儿产品好不好卖,OZON新生儿产品

Top1 遥控水球坦克 Танк на радиоуправлении стреляющий орбизами PANAWEALTH 商品id&#xff1a;1384249985 月销量&#xff1a;692 欢迎各位OZON卖家朋友点击这里选品&#xff1a; &#x1f449; D。DDqbt。COm/74rD 遥控射击水…

Java中Set的巧妙用法---查找重复元素/去重/排序

目录 1. Set特性&#xff1a; 3. TreeSet 3.1定制排序&#xff08;比较器排序&#xff09; 3.2自然排序&#xff1a; 4. LinkedHashSet 在日常开发中不可避免会遇到需要去重&#xff0c;或者查找重复元素&#xff0c;下面给介绍一种效率比较高的方法&#xff0c;时间复杂度…

Git使用教程-将idea本地文件配置到gitte上的保姆级别教程

&#x1f939;‍♀️潜意识起点&#xff1a;个人主页 &#x1f399;座右铭&#xff1a;得之坦然&#xff0c;失之淡然。 &#x1f48e;擅长领域&#xff1a;前端 是的&#xff0c;我需要您的&#xff1a; &#x1f9e1;点赞❤️关注&#x1f499;收藏&#x1f49b; 是我持…

weblogic CVE-2018-2894 靶场攻略

漏洞描述 Weblogic Web Service Test Page中⼀处任意⽂件上传漏洞&#xff0c;Web Service Test Page 在 "⽣产模式"下默认不开启&#xff0c;所以该漏洞有⼀定限制。 漏洞版本 weblogic 10.3.6.0 weblogic 12.1.3.0 weblogic 12.2.1.2 28 weblogic 12.2.1.3 …

传统美业通过小魔推短视频矩阵系统,实现逆势增长?

许多美甲店在经营过程中常常陷入一个误区&#xff1a;他们认为自己缺少的是客户&#xff0c;但实际上&#xff0c;他们真正缺少的是有效的营销策略&#xff0c;美甲店经营者普遍面临的两大难题包括&#xff1a; 1. 高客户流失率&#xff1a; 据研究显示&#xff0c;约70%的顾…

初识linux(2)

接着上篇的初识linux(1)来接着说没看过的可以去看看 cp指令 语法&#xff1a;cp [选项] 源文件或目录 目标文件或目录 功能: 复制文件或目录 说明: cp指令用于复制文件或目录&#xff0c;如同时指定两个以上的文件或目录&#xff0c;且最后的目的地是一个已经存在的目录&#…

Python和C++及R相关系数数学统计学可视化和神经模型及评估指标

&#x1f3af;要点 较少统计样本显著性评估和变量关系梳理功能磁共振成像一致性分析检测非单调关联性结构随机变量动力学相关性热图和矩阵图基因疫苗非线性变量相关性 Python相关矩阵 相关矩阵 n n n 个随机变量 X 1 , … , X n X_1, \ldots, X_n X1​,…,Xn​ 的相关矩阵…

CTF流量分析题目一把梭,零基础入门到精通,收藏这一篇就够了

https://github.com/Arinue/CTF-NetA CTF-NetA是一款专门针对CTF比赛的网络流量分析工具&#xff0c;可以对常见的网络流量进行分析&#xff0c;快速自动获取flag。而且是有gui图形界面的&#xff0c;有了它即使小白也能轻松应对流量分析题目&#xff0c;不得不说这CTF工具太专…

论文笔记:交替单模态适应的多模态表征学习

整理了CVPR2024 Multimodal Representation Learning by Alternating Unimodal Adaptation&#xff09;论文的阅读笔记 背景MLA框架实验Q1 与之前的方法相比&#xff0c;MLA能否克服模态懒惰并提高多模态学习性能?Q2 MLA在面临模式缺失的挑战时表现如何?Q3 所有模块是否可以有…

Java 多态(难)

1. 即同一方法可以根据发送对象的不同而采用多种不同的行为方式。 2&#xff0e;一个对象的实际类型是确定的&#xff0c;但可以指向对象的引用的类型有很多。 举例说明&#xff1a;新建两个类&#xff0c;Person类和Student类&#xff0c;Student类继承Person类&#xff1a…

【学习笔记】数据结构(六 ①)

树和二叉树 &#xff08;一&#xff09; 文章目录 树和二叉树 &#xff08;一&#xff09;6.1 树(Tree)的定义和基本术语6.2 二叉树6.2.1 二叉树的定义1、斜树2、满二叉树3、完全二叉树4、二叉排序树5、平衡二叉树&#xff08;AVL树&#xff09;6、红黑树 6.2.2 二叉树的性质6.…

Linux启动流程,0,1,2进程,init进程,idle进程,内核态到用户态的kernel_execve(一)

&#xff1f;是&#xff0c;如果定义了&#xff0c;就按Makefile的&#xff0c;如果如下make编译时&#xff0c;就按如下 linux内核入口 进程0在用户空间看不到&#xff0c;因为他是内核进程 进程2就是守护进程&#xff0c;维护内涵运转的 一生二&#xff0c;二生三&#xff…

Redis中Hash(哈希)类型的基本操作

文章目录 一、 哈希简介二、常用命令hsethgethexistshdelhkeyshvalshgetallhmgethlenhsetnxhincrbyhincrbyfloathstrlen 三、命令小结四、哈希内部编码方式五、典型应用场景六、 字符串&#xff0c;序列化&#xff0c;哈希对比 一、 哈希简介 几乎所有的主流编程语言都提供了哈…

CANopen开源库canfestival的移植

本文记录将CANopen开源库CANfestival移植到GD32F470单片机的过程。CANopen协议理解请参考博客&#xff1a;CANopen协议的理解-CSDN博客 CANfestival开源库下载链接 CSDN链接&#xff1a; https://download.csdn.net/download/heqiunong/89774627 官网链接&#xff1a;https:/…

智能BI项目第五期

本期主要内容 系统问题分析异步化业务流程分析线程池讲解&#xff08;入门 原理 实战&#xff09;系统异步化改造开发 1.系统问题分析 当系统面临大量用户请求时&#xff0c;我们后端的 AI 处理能力有限&#xff0c;例如服务器的内存、CPU、网络带宽等资源有限&#xff0c…

基于微信小程序的游泳馆管理系统--论文源码调试讲解

2 关键技术介绍 2.1 SSM框架 开发信息管理系统的主流框架是SSM&#xff08;Spring Spring MVC MyBatis&#xff09;&#xff0c;SSM框架web层使用Spring MVC框架&#xff0c;使传输前后端数据变得简单&#xff1b;对于业务层使用Spring作为轻量级控制反转和面向切面的容器框…

redis分布式锁(看门枸机制)

分布式锁确保在同一时间只有一个节点能获得对共享资源的独占访问权限&#xff0c;从而解决并发访问问题。 Redisson锁(简称看门狗) 它可以实现锁的延长&#xff0c;确保某个线程执行完才能让其他线程进行抢锁操作 引入看门狗机制后 如何使用&#xff1f; 1、引入依赖包 <…

Java数据结构专栏介绍

专栏导读 在软件工程的世界里&#xff0c;数据结构是构建高效、可靠程序的基石。"Java数据结构"专栏致力于为Java开发者提供一个全面、深入的学习平台&#xff0c;帮助他们掌握各种数据结构的原理、实现及其在Java中的应用。通过这个专栏&#xff0c;读者将能够提升…

【第34章】Spring Cloud之SkyWalking分布式日志

文章目录 前言一、准备1. 引入依赖 二、日志配置1. 打印追踪ID2. gRPC 导出 三、完整日志配置四、日志展示1. 前端2. 后端 总结 前言 前面已经完成了请求的链路追踪&#xff0c;这里我们通过SkyWalking来处理分布式日志&#xff1b; 场景描述&#xff1a;我们有三个服务消费者…