【Python】 基于Python实现日志聚合与分析工具:利用Logstash与Fluentd构建高效分布式日志系统
《Python OpenCV从菜鸟到高手》带你进入图像处理与计算机视觉的大门!
解锁Python编程的无限可能:《奇妙的Python》带你漫游代码世界
在分布式系统中,日志数据的生成速度和数量呈指数级增长,传统的日志管理方式已无法满足现代企业对实时性、可扩展性和高效性的需求。本文深入探讨了如何使用Python结合Logstash和Fluentd等开源工具,构建一个高效的日志聚合与分析系统。通过详细的代码示例和中文注释,本文涵盖了日志收集、传输、存储、分析和可视化的全流程。我们将介绍Logstash和Fluentd的基本原理与配置方法,展示如何利用Python脚本实现日志的自定义处理与分析,并探讨在分布式环境下的优化策略。最后,本文还提供了一个完整的示例项目,帮助读者快速上手并应用于实际生产环境中。通过本文的学习,读者将能够掌握构建高效、可扩展日志管理系统的关键技术,为提升系统运维效率和业务决策能力提供有力支持。
目录
- 引言
- 日志聚合与分析概述
- 工具介绍:Logstash与Fluentd
- 环境搭建与配置
- 4.1 安装与配置Logstash
- 4.2 安装与配置Fluentd
- 使用Python进行日志收集
- 5.1 Python日志模块简介
- 5.2 自定义日志收集脚本
- 使用Python与Logstash集成
- 6.1 Logstash输入插件配置
- 6.2 Logstash过滤插件配置
- 6.3 Logstash输出插件配置
- 6.4 Python与Logstash的交互示例
- 使用Python与Fluentd集成
- 7.1 Fluentd输入插件配置
- 7.2 Fluentd过滤插件配置
- 7.3 Fluentd输出插件配置
- 7.4 Python与Fluentd的交互示例
- 日志数据的存储与索引
- 8.1 Elasticsearch简介
- 8.2 Logstash与Elasticsearch的集成
- 8.3 Fluentd与Elasticsearch的集成
- 日志分析与可视化
- 9.1 Kibana简介与配置
- 9.2 使用Kibana进行日志可视化
- 9.3 Python进行日志数据分析
- 9.4 可视化分析示例
- 实时监控与报警
- 10.1 实时日志监控的重要性
- 10.2 使用Elasticsearch Watcher进行报警
- 10.3 Python实现自定义报警机制
- 案例分析:分布式系统日志分析
- 11.1 系统架构概述
- 11.2 日志收集与聚合流程
- 11.3 日志分析与故障排查
- 优化与性能调优
- 12.1 日志系统的性能瓶颈
- 12.2 Logstash与Fluentd的优化策略
- 12.3 Python脚本的性能优化
- 安全性与合规性考虑
- 13.1 日志数据的安全传输
- 13.2 日志数据的访问控制
- 13.3 合规性要求与日志管理
- 示例项目实战
- 14.1 项目结构
- 14.2 配置文件详解
- 14.3 Python脚本实现
- 14.4 系统部署与测试
- 总结与展望
1. 引言
在现代分布式系统中,日志是运维人员和开发者排查问题、优化性能的重要依据。随着系统规模的扩大和复杂度的增加,日志数据的生成速度和数量也急剧上升,传统的手工收集和分析方式已经无法满足需求。为了高效地管理和利用日志数据,构建一个自动化、可扩展的日志聚合与分析系统显得尤为重要。本文将介绍如何基于Python实现一个全面的日志聚合与分析工具,结合Logstash和Fluentd等开源工具,打造一个高效的分布式日志系统。
2. 日志聚合与分析概述
日志聚合与分析系统旨在收集分布式系统中各个组件生成的日志数据,进行集中存储、处理和分析,以便于实时监控、故障排查和业务分析。一个典型的日志系统通常包括以下几个核心功能:
- 日志收集:从不同来源收集日志数据,包括应用程序日志、系统日志、网络日志等。
- 日志传输:将收集到的日志数据传输到集中存储或处理平台。
- 日志存储:高效地存储大量日志数据,支持快速检索和查询。
- 日志分析:对存储的日志数据进行处理和分析,提取有价值的信息。
- 日志可视化:通过图表和仪表盘展示分析结果,帮助用户直观理解日志数据。
- 实时监控与报警:实时监控日志数据中的异常情况,并在发现问题时及时报警。
为了实现上述功能,业界常用的工具包括Logstash、Fluentd、Elasticsearch和Kibana等。本文将详细介绍如何使用这些工具,并结合Python脚本,实现一个完整的日志聚合与分析系统。
3. 工具介绍:Logstash与Fluentd
在日志管理领域,Logstash和Fluentd是两款广受欢迎的日志收集和处理工具。它们各自有着不同的特点和优势。
3.1 Logstash
Logstash是由Elastic公司开发的开源数据收集引擎,广泛应用于日志收集、处理和传输。它支持多种输入源、过滤器和输出目标,能够灵活地处理各种类型的数据。Logstash与Elasticsearch和Kibana(统称为ELK Stack)结合使用,可以实现强大的日志分析和可视化功能。
主要特点:
- 多种输入源:支持文件、网络协议(如TCP、UDP)、消息队列(如Kafka)、数据库等多种数据源。
- 强大的过滤能力:内置多种过滤器,如grok、date、mutate等,支持自定义插件扩展。
- 灵活的输出目标:支持Elasticsearch、文件、数据库、消息队列等多种输出方式。
- 可扩展性:通过插件机制,可以方便地扩展Logstash的功能。
3.2 Fluentd
Fluentd是由Treasure Data开发的开源数据收集器,旨在为日志收集和处理提供统一的解决方案。Fluentd拥有轻量级、高性能和高度可扩展的特点,广泛应用于云原生和微服务架构中。
主要特点:
- 统一的数据模型:Fluentd使用统一的数据格式(称为Event),简化了不同数据源和目标之间的集成。
- 插件生态丰富:拥有超过500个插件,支持各种输入、输出和过滤功能。
- 高性能:采用高效的多线程架构,支持高吞吐量的数据处理。
- 易于扩展:通过编写Ruby或C语言插件,可以轻松扩展Fluentd的功能。
3.3 Logstash与Fluentd的比较
特性 | Logstash | Fluentd |
---|---|---|
语言 | JRuby(基于Java) | C语言和Ruby |
性能 | 较高的内存消耗,适合中等规模日志 | 高性能,适合大规模分布式系统 |
插件生态 | 丰富,但主要集中在ELK Stack | 非常丰富,适用于各种场景 |
配置文件 | 使用专有的配置语法 | 使用统一的配置格式(YAML) |
易用性 | 配置较为复杂 | 配置简洁,易于上手 |
根据具体需求,开发者可以选择适合的工具,或者将两者结合使用,以充分发挥各自的优势。
4. 环境搭建与配置
在开始实现日志聚合与分析系统之前,需要搭建相关的环境,并安装配置所需的工具。本文将以Logstash和Fluentd为例,介绍它们的安装与基本配置。
4.1 安装与配置Logstash
步骤1:下载和安装Logstash
首先,访问Logstash官网下载适用于操作系统的Logstash安装包。以Ubuntu为例,可以使用以下命令安装:
# 导入Elastic GPG key
wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -# 安装apt-transport-https
sudo apt-get install apt-transport-https# 添加Elastic仓库
echo "deb https://artifacts.elastic.co/packages/7.x/apt stable main" | sudo tee -a /etc/apt/sources.list.d/elastic-7.x.list# 更新包索引并安装Logstash
sudo apt-get update
sudo apt-get install logstash
步骤2:配置Logstash
Logstash的配置文件通常位于/etc/logstash/conf.d/
目录下,文件扩展名为.conf
。一个基本的配置文件包含三个部分:输入(input)、过滤(filter)和输出(output)。
创建一个名为logstash.conf
的配置文件:
sudo nano /etc/logstash/conf.d/logstash.conf
在文件中添加以下内容:
input {beats {port => 5044}
}filter {grok {match => { "message" => "%{COMMONAPACHELOG}" }}date {match => [ "timestamp" , "dd/MMM/yyyy:HH:mm:ss Z" ]}
}output {elasticsearch {hosts => ["localhost:9200"]index => "logstash-%{+YYYY.MM.dd}"}stdout { codec => rubydebug }
}
配置说明:
- Input部分:使用Beats输入插件,监听5044端口,接收来自Filebeat等Beats客户端发送的日志数据。
- Filter部分:使用Grok过滤器解析Apache日志格式,并使用Date过滤器将时间戳转换为标准格式。
- Output部分:将处理后的日志数据发送到本地Elasticsearch实例,并在控制台输出调试信息。
步骤3:启动Logstash
启动并启用Logstash服务:
sudo systemctl start logstash
sudo systemctl enable logstash
4.2 安装与配置Fluentd
步骤1:安装Fluentd
Fluentd有多种安装方式,可以通过包管理器、Docker或源码安装。以使用td-agent
(Fluentd的稳定发行版)为例,在Ubuntu上安装:
# 导入Treasure Data的GPG key
curl -L https://toolbelt.treasuredata.com/sh/install-ubuntu-bionic-td-agent4.sh | sh
步骤2:配置Fluentd
Fluentd的配置文件通常位于/etc/td-agent/td-agent.conf
。编辑配置文件:
sudo nano /etc/td-agent/td-agent.conf
添加以下内容作为示例配置:
<source>@type forwardport 24224
</source><match **>@type elasticsearchhost localhostport 9200logstash_format trueinclude_tag_key truetag_key @log_name
</match>
配置说明:
- Source部分:使用Forward输入插件,监听24224端口,接收来自Fluentd客户端发送的日志数据。
- Match部分:将所有匹配的日志数据发送到本地Elasticsearch实例,使用Logstash格式进行索引。
步骤3:启动Fluentd
启动并启用Fluentd服务:
sudo systemctl start td-agent
sudo systemctl enable td-agent
5. 使用Python进行日志收集
Python作为一门强大的编程语言,拥有丰富的标准库和第三方库,适合用于日志的收集、处理和分析。本文将介绍如何使用Python进行日志收集,并将其集成到Logstash和Fluentd中。
5.1 Python日志模块简介
Python内置的logging
模块提供了强大的日志记录功能,支持多种日志级别、日志格式和输出目标。通过合理配置,可以将日志数据发送到不同的目的地,如文件、控制台、远程服务器等。
基本用法示例:
import logging# 配置日志
logging.basicConfig(level=logging.INFO,format='%(asctime)s %(levelname)s %(message)s',filename='app.log',filemode='a'
)# 记录日志
logging.info('这是一个信息日志')
logging.error('这是一个错误日志')
5.2 自定义日志收集脚本
为了实现更灵活的日志收集,开发者可以编写自定义的Python脚本,收集特定的日志数据,并通过网络协议(如HTTP、TCP)发送到Logstash或Fluentd。
以下是一个简单的示例,演示如何使用Python收集系统日志并通过HTTP发送到Logstash。
步骤1:安装必要的库
pip install requests
步骤2:编写日志收集与发送脚本
import logging
import requests
import time
import json# 配置日志
logging.basicConfig(level=logging.INFO,format='%(asctime)s %(levelname)s %(message)s',filename='system.log',filemode='a'
)def send_log_to_logstash(log_data, logstash_url):"""通过HTTP将日志数据发送到Logstash:param log_data: 字典格式的日志数据:param logstash_url: Logstash的HTTP输入端点"""headers = {'Content-Type': 'application/json'}try:response = requests.post(logstash_url, data=json.dumps(log_data), headers=headers)if response.status_code == 200:logging.info('日志成功发送到Logstash')else:logging.error(f'发送日志失败,状态码: {response.status_code}')except Exception as e:logging.error(f'发送日志时发生异常: {e}')def collect_system_metrics():"""模拟收集系统指标数据:return: 字典格式的系统指标"""# 这里可以集成psutil等库收集实际的系统指标return {'timestamp': time.strftime("%Y-%m-%d %H:%M:%S"),'cpu_usage': 55.5, # 示例数据'memory_usage': 70.2 # 示例数据}if __name__ == "__main__":logstash_http_url = 'http://localhost:8080/logs' # 替换为实际的Logstash HTTP输入端点while True:metrics = collect_system_metrics()send_log_to_logstash(metrics, logstash_http_url)logging.info(f'收集并发送系统指标: {metrics}')time.sleep(60) # 每60秒收集一次
代码说明:
- send_log_to_logstash函数:将日志数据通过HTTP POST请求发送到Logstash的HTTP输入端点。
- collect_system_metrics函数:模拟收集系统指标数据,可以使用
psutil
库获取实际的CPU和内存使用率。 - 主程序:每60秒收集一次系统指标,并将其发送到Logstash,同时记录日志到本地文件。
步骤3:运行脚本
确保Logstash的HTTP输入插件已正确配置,并启动Logstash服务。然后运行Python脚本:
python log_sender.py
6. 使用Python与Logstash集成
Logstash作为一个强大的数据收集和处理工具,可以与Python脚本无缝集成,实现灵活的日志处理流程。本文将介绍如何通过Python与Logstash进行集成,包括输入插件、过滤插件和输出插件的配置,以及如何通过Python脚本发送日志数据到Logstash。
6.1 Logstash输入插件配置
Logstash支持多种输入插件,用于接收不同来源的数据。本文以HTTP输入插件为例,展示如何配置Logstash以接收来自Python脚本发送的日志数据。
配置示例:
input {http {port => 8080codec => json}
}
说明:
- http输入插件监听8080端口,接收HTTP POST请求。
- codec设置为
json
,表示接收的数据为JSON格式,并自动解析为Logstash事件。
6.2 Logstash过滤插件配置
过滤插件用于对输入的数据进行处理和转换。常用的过滤插件包括Grok、Date、Mutate等。以下示例展示如何使用Grok和Date过滤器处理日志数据。
配置示例:
filter {grok {match => { "message" => "%{TIMESTAMP_ISO8601:timestamp} %{WORD:metric} %{NUMBER:value}" }}date {match => [ "timestamp", "ISO8601" ]}
}
说明:
- Grok过滤器:解析消息字段,将其拆分为
timestamp
、metric
和value
三个字段。 - Date过滤器:将
timestamp
字段转换为标准的时间格式。
6.3 Logstash输出插件配置
输出插件用于将处理后的数据发送到指定的目标。本文以Elasticsearch和控制台输出为例,展示如何配置输出插件。
配置示例:
output {elasticsearch {hosts => ["localhost:9200"]index => "python-logstash-%{+YYYY.MM.dd}"}stdout { codec => rubydebug }
}
说明:
- Elasticsearch输出插件:将日志数据发送到本地的Elasticsearch实例,并按照日期创建索引。
- Stdout输出插件:将日志数据输出到控制台,便于调试和查看。
6.4 Python与Logstash的交互示例
以下示例展示了如何使用Python脚本通过HTTP发送日志数据到Logstash。
import requests
import json
import time
import logging# 配置日志
logging.basicConfig(level=logging.INFO,format='%(asctime)s %(levelname)s %(message)s',filename='logstash_sender.log',filemode='a'
)def send_log_to_logstash(log_data, logstash_url):"""通过HTTP将日志数据发送到Logstash:param log_data: 字典格式的日志数据:param logstash_url: Logstash的HTTP输入端点"""headers = {'Content-Type': 'application/json'}try:response = requests.post(logstash_url, data=json.dumps(log_data), headers=headers)if response.status_code == 200:logging.info('日志成功发送到Logstash')else:logging.error(f'发送日志失败,状态码: {response.status_code}')except Exception as e:logging.error(f'发送日志时发生异常: {e}')def collect_application_logs():"""模拟收集应用日志数据:return: 字典格式的应用日志"""return {'timestamp': time.strftime("%Y-%m-%dT%H:%M:%S"),'metric': 'cpu_usage','value': 65.3 # 示例数据}if __name__ == "__main__":logstash_http_url = 'http://localhost:8080' # Logstash HTTP输入端点while True:log_entry = collect_application_logs()send_log_to_logstash(log_entry, logstash_http_url)logging.info(f'收集并发送应用日志: {log_entry}')time.sleep(30) # 每30秒发送一次
代码说明:
- send_log_to_logstash函数:通过HTTP POST请求将日志数据发送到Logstash的HTTP输入端点。
- collect_application_logs函数:模拟收集应用日志数据,可以根据实际需求修改为收集真实的应用日志。
- 主程序:每30秒收集一次应用日志,并发送到Logstash,同时记录日志到本地文件。
运行脚本:
确保Logstash服务已启动,并正确配置了HTTP输入插件。然后运行Python脚本:
python logstash_integration.py
通过上述步骤,Python脚本将定期发送日志数据到Logstash,Logstash将其处理后存储到Elasticsearch,并在控制台输出调试信息。
7. 使用Python与Fluentd集成
Fluentd作为一款高性能的日志收集工具,可以与Python脚本无缝集成,实现高效的日志传输和处理。本文将介绍如何通过Python与Fluentd进行集成,包括输入插件、过滤插件和输出插件的配置,以及如何通过Python脚本发送日志数据到Fluentd。
7.1 Fluentd输入插件配置
Fluentd支持多种输入插件,用于接收不同来源的数据。本文以Forward输入插件为例,展示如何配置Fluentd以接收来自Python脚本发送的日志数据。
配置示例:
<source>@type forwardport 24224
</source>
说明:
- forward输入插件监听24224端口,接收来自Fluentd客户端发送的日志数据。
7.2 Fluentd过滤插件配置
过滤插件用于对输入的数据进行处理和转换。常用的过滤插件包括Parser、Grep、Record Transformer等。以下示例展示如何使用Parser和Record Transformer过滤器处理日志数据。
配置示例:
<filter **>@type parserformat jsonkey_name messagereserve_data true
</filter><filter **>@type record_transformer<record>hostname "#{Socket.gethostname}"</record>
</filter>
说明:
- Parser过滤器
相关文章:
【Python】 基于Python实现日志聚合与分析工具:利用Logstash与Fluentd构建高效分布式日志系统
《Python OpenCV从菜鸟到高手》带你进入图像处理与计算机视觉的大门! 解锁Python编程的无限可能:《奇妙的Python》带你漫游代码世界 在分布式系统中,日志数据的生成速度和数量呈指数级增长,传统的日志管理方式已无法满足现代企业对实时性、可扩展性和高效性的需求。本文深…...
汽车网络安全基线安全研究报告
一、引言 随着汽车行业朝着智能网联方向飞速发展,汽车网络安全已成为保障用户安全和行业健康发展的关键要素。本报告将深入探讨汽车网络安全相关内容,以及国际、国内重要的汽车网络安全标准基线和相应防护措施等内容。 二、汽车网络安全的重要性 &…...
[pdf、epub]260道《软件方法》强化自测题业务建模需求分析共216页(202412更新)
DDD领域驱动设计批评文集 做强化自测题获得“软件方法建模师”称号 《软件方法》各章合集 260道《软件方法》强化自测题业务建模需求分析共216页(202412更新) 已上传到本CSDN账号的资源 如果下载不到,也可以访问以下链接: ht…...
工业4.0和MES(制造执行系统)方案(附实践资料)
工业4.0和MES(制造执行系统)方案是智能制造领域中的关键组成部分,它们共同推动着制造业的数字化转型。以下是工业4.0和MES方案的一些核心要点: 智能制造背景: 工业4.0是第四次工业革命,它结合了信息通信技术…...
机器视觉中的单线程、多线程与跨线程:原理与应用解析
在机器视觉应用中,程序的运行效率直接影响到系统的实时性和稳定性。随着任务复杂度的提高,单线程处理往往无法满足高性能需求,多线程技术因此被广泛应用。此外,跨线程操作(如在多线程中更新界面或共享资源)…...
性能测试瓶颈:CPU 问题的深度分析和调优
🍅 点击文末小卡片 ,免费获取软件测试全套资料,资料在手,涨薪更快 我们做性能测试的时候,除了使用工具编写脚本并执行之外,最核心的工作就是做性能测试结果分析和问题调优。然后在做性能测试的时候…...
云手机与Temu矩阵:跨境电商运营新引擎
云手机与 Temu 矩阵结合的基础 云手机技术原理 云手机基于先进的 ARM 虚拟化技术,在服务器端运行 APP。通过在服务器上利用容器虚拟化软件技术,能够虚拟出多个独立的手机操作系统实例,每个实例等同于一部单独的手机,可独立运行各…...
Oracle考试多少分算通过?
OCP和OCM认证的考试及格分数并不是固定的,而是根据考试的难度和考生的整体表现来确定。对于OCP认证,考生需要全面掌握考试要求的知识和技能,并在考试中表现出色才有可能通过。而对于OCM认证,考生则需要在每个模块中都达到一定的水…...
【UE5.3.2】安装metahuman插件
Unable to find plugin ‘MetaHuman’报错 Unable to find plugin MetaHuman (referenced via RPect_5_3.uproject). Install it and try again, or remove it from the required plugin list. 10>Microsoft.MakeFile.Targets(44,5): Error MSB3073 :...
python lambda函数用法
在Python中,lambda函数是一种用于创建匿名函数的简便方式。它允许你快速定义一个简单的函数,而不需要使用传统的def语句。lambda函数通常用于一次性的操作或作为参数传递给其他函数。 lambda函数的语法: lambda 参数1, 参数2, ... : 表达式l…...
acitvemq AMQP:因为消息映射策略配置导致的MQTT接收JMS消息乱码问题 x-opt-jms-dest x-opt-jms-msg-type
使用ActiveMQ(5.14.5)作消息系统服务的场景下, 当我用Apache Qpid Proton发送消息(使用AMQP协议)发送JMS消息,用Paho MQTT接收消息的时候, 收到的消息前面总是有一串乱码,大概就是这样: 4Sp?AS…...
ida的使用
一.ida的基本设置 在IDA的安装根目录下有许多文件夹,各个文件夹存储不同的内容 1.目录结构 cfg:包含各种配置文件,基本IDA配置文件ida.cfg,GUI配置文件idagui.cfg,文本模式用户界面配置文件idatui.cfg, idc:包含…...
archery docker安装
#下载Archery-1.11.3.tar.gz https://codeload.github.com/hhyo/Archery/tar.gz/refs/tags/v1.11.3 cd /root tar -zxvf Archery-1.11.3.tar.gz cd /root/Archery-1.11.3/src/docker-compose #启动 docker compose -f docker-compose.yml up -d#表结构初始化 docker exec -ti a…...
【zookeeper核心源码解析】第四课:客户端与服务端读写的io核心流程
系列文章目录 【zookeeper核心源码解析】第一课:zk启动类核心流程序列图 【zookeeper核心源码解析】第二课:俯瞰QuorumPeer启动核心流程,实现选举关键流程 【zookeeper核心源码解析】第三课:leader与follower何时开始同步&#…...
影刀进阶指令 | Kimi (对标ChatGPT)
文章目录 影刀进阶指令 | Kimi (对标ChatGPT)一. 需求二. 流程三. 实现3.1 流程概览3.2 流程步骤讲解1\. 确定问题2\. 填写问题并发送3\. 检测答案是否出完 四. 运维 影刀进阶指令 | Kimi (对标ChatGPT) 简单讲讲RPA调用kimi实现…...
Linux第99步_Linux之点亮LCD
主要学习如何在Linux开发板点亮屏,以及modetest命令的实现。 很多人踩坑,我也是一样。关键是踩坑后还是实现不了,这样的人确实很多,从群里可以知道。也许其他人没有遇到这个问题,我想是他运气好。 1、修改设备树 1)、…...
【C++决策和状态管理】从状态模式,有限状态机,行为树到决策树(三):基于BT行为树实现复杂敌人BOSS-AI
前言 (题外话)nav2系列教材,yolov11部署,系统迁移教程我会放到年后一起更新,最近年末手头事情多,还请大家多多谅解。回顾我们整个学习历程,我们已经学习了很多C的代码特性,也学习了很多ROS2的跨…...
SpringCloudAlibaba技术栈-Higress
1、什么是Higress? 云原生网关,干啥的?用通俗易懂的话来说,微服务架构下Higress 就像是一个智能的“交通警察”,它站在你的网络世界里,负责指挥和调度所有进出的“车辆”(也就是数据流量)。它的…...
《信息传播:人工智能助力驱散虚假信息阴霾》
在信息爆炸的时代,虚假信息和谣言如同脱缰野马,肆意传播,对社会秩序和公众生活造成了严重影响。人工智能作为一种强大的技术工具,正逐渐成为信息传播的有力助手,为防止虚假信息和谣言扩散提供了新的途径。 虚假信息和…...
玩客云v1.0 刷机时无法识别USB
v1.0刷机时公对公插头掉了,刷机失败,再次刷机,一直提示无法识别的USB设备,此时LED一直不亮,就像是刷成砖了一样,查了好多文章最后发现正面还有一个地方需要短接。 背面的短接点 【免费】玩客云刷机包s805-…...
STM32F103RCT6学习之五:ADC
1.ADC基础 ADC(Analog-Digital Converter)模拟-数字转换器ADC可以将引脚上连续变化的模拟电压转换为内存中存储的数字变量,建立模拟电路到数字电路的桥梁12位逐次逼近型ADC,1us转换时间 输入电压范围:0~3.3Vÿ…...
通过Cephadm工具搭建Ceph分布式存储以及通过文件系统形式进行挂载的步骤
1、什么是Ceph Ceph是一种开源、分布式存储系统,旨在提供卓越的性能、可靠性和可伸缩性。它是为了解决大规模数据存储问题而设计的,使得用户可以在无需特定硬件支持的前提下,通过普通的硬件设备来部署和管理存储解决方案。Ceph的灵活性和设计…...
flink+kafka实现流数据处理学习
在应用系统的建设过程中,通常都会遇到需要实时处理数据的场景,处理实时数据的框架有很多,本文将以一个示例来介绍flinkkafka在流数据处理中的应用。 1、概念介绍 flink:是一个分布式、高可用、高可靠的大数据处理引擎,…...
SpringBoot使用外置的Servlet容器(详细步骤)
嵌入式Servlet容器:应用打成可执行的jar 优点:简单、便携; 缺点:默认不支持JSP、优化定制比较复杂.; 外置的Servlet容器:外面安装Tomcat---应用war包的方式打包; 操作步骤: 方式一&…...
C# 中的委托与事件:实现灵活的回调机制
C#中的委托(Delegate)和事件(Event)。委托和事件是C#中非常重要的特性,它们允许你实现回调机制和发布-订阅模式,从而提高代码的灵活性和解耦程度。通过使用委托和事件,你可以编写更加模块化和可…...
大模型辅助测试的正确打开方式?
测试的基本目的之一,是对被测对象进行质量评估。换言之,是要提供关于被测对象质量的“确定性”。因此,我们很忌讳在测试设计中引入“不确定性”,比如采用不可靠的测试工具、自动化测试代码逻辑复杂易错、测试选择假设过于主观等等…...
设计模式之代理模式
代理模式代码示例:https://blog.csdn.net/weixin_39865508/article/details/141924680 代理模式的左右,一定程度上不暴露被代课对象的内容,更安全,也减少系统的耦合性 静态代理 代理对象和被代理对象都继承同一个接口 在代理对象…...
win11中win加方向键失效的原因
1、可能是你把win键锁了: 解决办法:先按Fn键,再按win键 2、可能是可能是 贴靠窗口设置 中将贴靠窗口关闭了,只需要将其打开就好了...
Html——11. 页面跳转
<!DOCTYPE html> <html><head><meta charset"UTF-8"><title>页面跳转</title><meta http-equiv"refresh" content"5; urlhttps://www.51zxw.net"/><!--<meta http-equiv"refresh" co…...
要查询 `user` 表中 `we_chat_open_id` 列不为空的用户数量
要查询 user 表中 we_chat_open_id 列不为空的用户数量,你可以使用以下 SQL 查询语句: SELECT COUNT(*) FROM user WHERE we_chat_open_id IS NOT NULL AND we_chat_open_id ! ;解释: SELECT COUNT(*): 表示要计算符合条件的行数。FROM us…...
docker-compos mysql5.7主从配置
docker-compos mysql5.7主从配置 docker-compose目录结构 配置文件 master/my.cnf [client] port 3306 socket /var/run/mysqld/mysqld.sock[mysqld_safe] pid-file /var/run/mysqld/mysqld.pid socket /var/run/mysqld/mysqld.sock nice 0…...
关于无线AP信道调整的优化(锐捷)
目录 一、信道优化的基本原则二、2.4G频段信道优化三、5G频段信道优化四、信道优化代码具体示例五、其他优化措施 一、信道优化的基本原则 信道优化旨在减少信道间的干扰,提高网络覆盖范围和信号质量。基本原则包括: 1. 选择合适的信道:根据…...
Flask入门一(介绍、Flask安装、Flask运行方式及使用、虚拟环境、调试模式、配置文件、路由系统)
文章目录 一、Flask介绍二、Flask创建和运行 1.安装2.快速使用3.Flask小知识4.flask的运行方式 三、Werkzeug介绍四、Jinja2介绍五、Click CLI 介绍六、Flask安装 介绍watchdog使用python–dotenv使用(操作环境变量) 七、虚拟环境 介绍Mac/linux创建虚拟…...
解决Docker国内网络问题
6月后以来,大量Docker镜像网站停服,Docker无法下载安装 本仓库致力于解决国内网络原因无法使用Docker的问题。 特点: 使用Github Action将官网的安装脚本/安装包定时下载到本项目Release,供国内使用官方安装包,安全可…...
Anaconda 安装与虚拟环境创建完整指南
Anaconda 安装与虚拟环境创建完整指南 Anaconda 是目前最流行的 Python 和数据科学工具集之一,它不仅可以轻松管理 Python 包,还能提供强大的虚拟环境功能,避免项目之间的依赖冲突。如果你是机器学习、数据科学或计算机视觉的开发者…...
【Java数据结构】LinkedList与链表
认识LinkedList LinkedList就是一个链表,它也是实现List接口的一个类。LinkedList就是通过next引用将所有的结点链接起来,所以不需要数组。LinkedList也是以泛型的方法实现的,所以使用这个类都需要实例化对象。 链表分为很多种,比…...
Linux 搭建 nginx+keepalived 高可用 | Nginx反向代理
注意:本文为 “Linux 搭建 nginxkeepalived (主备双主模式) 高可用 | Nginx反向代理” 相关文章合辑。 KeepalivedNginx实现高可用(HA) xyang0917 于 2016-09-17 00:24:15 发布 keepalived 的 HA 分为抢占模式和非抢占模式,抢占…...
17_HTML5 Web 存储 --[HTML5 API 学习之旅]
HTML5 Web 存储(Web Storage)是 HTML5 引入的一种在用户浏览器中存储数据的机制。它提供了比传统的 cookies 更加方便和强大的功能,包括更大的存储空间、更好的性能以及更简单的 API。Web 存储主要分为两种类型:localStorage 和 s…...
uni-app(优医咨询)项目实战 - 第7天
学习目标: 能够基于 WebSocket 完成问诊全流程 能够使用 uniCloud 云存储上传文件 能够完成查看电子处方的功能 能够完成医生评价的功能 一、问诊室 以对话聊天的方式向医生介绍病情并获取诊断方案,聊天的内容支持文字和图片两种形式。 首先新建一…...
今日总结 2024-12-28
今天全身心投入到鸿蒙系统下 TCPSocket 的学习中。从最基础的 TCP 协议三次握手、四次挥手原理重新梳理,深刻理解其可靠连接建立与断开机制,这是后续运用 TCPSocket 无误通信的根基。在深入鸿蒙体系时,仔细研读了其为 TCPSocket 封装的 API&a…...
ip归属地怎么判定?如何查看自己ip属地
在当今数字化时代,IP地址作为互联网通信的基础,扮演着至关重要的角色。而IP归属地的判定与查看,不仅关乎网络安全、隐私保护,还直接影响到社交平台的信任机制与信息传播的真实性。本文将深入探讨IP归属地的判定原理以及如何查看自…...
4.采用锁操作并支持等待功能的线程安全队列
分析 书接上文 修改push()似乎并不困难:在函数末尾加上对data_cond.notify_one()的调用即可,与代码清单1(第一篇文章)一样。事情其实没那么简单,我们之所以采用精细粒度的锁,目的是尽可能提高并发操作的数量。如果在notify_one()调用期间&a…...
螺杆支撑座在运用中会出现哪些问题?
螺杆支撑座是一种用于支撑滚珠螺杆的零件,通常用于机床、数控机床、自动化生产线等高精度机械设备中。在运用中可能会出现多种问题,这些问题源于多个方面,以下是对可能出现的问题简单了解下: 1、安装不当:安装过程中没…...
OSI 七层模型 | TCP/IP 四层模型
注:本文为 “OSI 七层模型 | TCP/IP 四层模型” 相关文章合辑。 未整理去重。 OSI 参考模型(七层模型) BeretSEC 于 2020-04-02 15:54:37 发布 OSI 的概念 七层模型,亦称 OSI(Open System Interconnection…...
秒鲨后端之MyBatis【2】默认的类型别名、MyBatis的增删改查、idea中设置文件的配置模板、MyBatis获取参数值的两种方式、特殊SQL的执行
别忘了请点个赞收藏关注支持一下博主喵!!!! ! ! 下篇更新: 秒鲨后端之MyBatis【3】自定义映射resultMap、动态SQL、MyBatis的缓存、MyBatis的逆向工程、分页插件。 默认的类型别名 MyBatis的增删改查 添加 <!--int insertUs…...
快云服务器小助手getdetail存在任意文件文件读取漏洞
免责声明: 本文旨在提供有关特定漏洞的深入信息,帮助用户充分了解潜在的安全风险。发布此信息的目的在于提升网络安全意识和推动技术进步,未经授权访问系统、网络或应用程序,可能会导致法律责任或严重后果。因此,作者不对读者基于本文内容所采取的任何行为承担责任。读者在…...
尚硅谷Vue3入门到实战 —— 02 编写 App 组件
根目录下的 index.html 是项目的入口文件,默认的具体内容如下: src 文件夹分析 <!DOCTYPE html> <html lang""><head><meta charset"UTF-8"><link rel"icon" href"/favicon.ico"&…...
Java - 日志体系_Simple Logging Facade for Java (SLF4J)日志门面_SLF4J实现原理分析
文章目录 官网SLF4J 简单使用案例分析SLF4J 获取 Logger 的原理获取 ILoggerFactory 的过程获取 Logger 的过程SLF4J 与底层日志框架的集成 小结 官网 https://slf4j.org/ Simple Logging Facade for Java (SLF4J) 用作各种日志记录框架(e.g…...
Flutter 调试环境下浏览器网络请求跨域问题解决方案
本篇文章主要讲解,Flutter调试环境情况下,浏览器调试报错跨域问题的解决方法,通过本篇文章你可以快速掌握Flutter调试环境情况下的跨域问题。 日期:2024年12月28日 作者:任聪聪 报错现象: 报文信息…...
python编译为可执行文件
1.用py2exe生成可执行文件 目前,在py2exe 0.9.2版本已经支持python3.x,它可以将python程序打包为windows下独立的可执行文件。 要使用py2exe,首先要编写一个编译程序(例如编写一个名为setup.py的程序),然后在python中运行…...