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

将 AzureBlob 的日志通过 Azure Event Hubs 发给 Elasticsearch(2 换掉付费的Event Hubs)

前情回顾:

将 AzureBlob 的日志通过 Azure Event Hubs 发给 Elasticsearch(1)-CSDN博客

前边的方案是挺好的,但 Azure Event Hubs 是付费服务,我这里只是一个获取日志进行必要的分析,并且不要求实时性,关键 没钱,那怎么办呢?

替代方案:

如果对实时性没有严格要求,并且希望避免使用付费的 Azure Event Hubs 服务,可以采用更经济的方式,比如将 Azure Blob 存储的日志直接发送到 Elasticsearch 或通过 Azure Storage QueueAzure Function 来实现。这些方法可以有效减少成本,同时满足日志解析和分析需求。

1. 直接从 Azure Blob 存储读取日志并处理

思路

直接从 Azure Blob 存储 中读取生成的日志文件,解析所需字段后发送到 Elasticsearch。这种方式适合没有实时性需求的场景,定期运行任务即可。

实现步骤
  1. 启用 Azure 存储日志记录

    • 在存储账户中启用 诊断设置
    • 将日志记录输出到同一存储账户的 Blob 容器中,例如 insights-logs
  2. 使用 Azure Function 或定时任务读取日志

    • 编写脚本(可以用 Python、PowerShell、C# 等语言),从指定的 Blob 容器中下载日志文件。
    • 解析日志文件,根据需要提取字段并格式化为 Elasticsearch 可接受的 JSON 数据。
    • 将数据批量发送到 Elasticsearch。
  3. 示例代码

    • 使用 Pythonazure-storage-blob 库:
    from azure.storage.blob import BlobServiceClient
    from elasticsearch import Elasticsearch
    import json# Azure Blob Storage 配置
    storage_account_name = "your_storage_account"
    storage_account_key = "your_storage_account_key"
    container_name = "insights-logs"# Elasticsearch 配置
    es = Elasticsearch("http://your-elasticsearch-server:9200")def process_blob_logs():blob_service_client = BlobServiceClient(account_url=f"https://{storage_account_name}.blob.core.windows.net",credential=storage_account_key)container_client = blob_service_client.get_container_client(container_name)# 列出日志文件blobs = container_client.list_blobs()for blob in blobs:blob_client = container_client.get_blob_client(blob)log_data = blob_client.download_blob().readall().decode('utf-8')# 假设日志是 JSON 格式for line in log_data.splitlines():try:log_entry = json.loads(line)# 提取你需要的字段parsed_entry = {"timestamp": log_entry["time"],"operation": log_entry["operationName"],"blobName": log_entry.get("blobName"),"requestorIp": log_entry.get("requestorIpAddress"),}# 写入 Elasticsearches.index(index="storage-logs", document=parsed_entry)except Exception as e:print(f"Error processing log entry: {e}")if __name__ == "__main__":process_blob_logs()
    
  4. 设置定时运行

    • 如果使用 Azure Function,配置 Timer Trigger 定期运行该脚本。
    • 如果使用本地脚本,使用 cron(Linux)或计划任务(Windows)实现定时任务。

2. 使用 Azure Storage Queue

思路

利用 Azure Storage Queue 作为消息队列替代 Event Hubs,用于暂存日志文件元数据或小型消息,然后由处理程序(如 Azure Function 或脚本)消费队列消息,读取并处理日志。

实现步骤
  1. 启用日志记录

    • 将日志写入 Blob 存储。
  2. 配置 Azure Storage Queue

    • 创建一个 Azure Queue
    • 编写脚本将日志的元数据(例如 Blob 的路径)写入队列。
  3. 编写处理脚本

    • 消费队列消息,根据消息中的 Blob 路径读取并解析日志文件。
  4. 示例代码

    • 使用 Python 和 azure-storage-queue
    from azure.storage.queue import QueueClient
    from azure.storage.blob import BlobServiceClient
    import jsonqueue_name = "your-queue"
    storage_account_name = "your_storage_account"
    storage_account_key = "your_storage_account_key"def process_queue_messages():queue_client = QueueClient(account_url=f"https://{storage_account_name}.queue.core.windows.net",credential=storage_account_key,queue_name=queue_name)blob_service_client = BlobServiceClient(account_url=f"https://{storage_account_name}.blob.core.windows.net",credential=storage_account_key)messages = queue_client.receive_messages()for msg in messages:blob_path = msg.content  # 假设队列消息中存储的是 Blob 路径container_name, blob_name = blob_path.split('/', 1)blob_client = blob_service_client.get_blob_client(container_name, blob_name)log_data = blob_client.download_blob().readall().decode('utf-8')# 解析日志并发送到 Elasticsearch(同上)print(f"Processing blob: {blob_path}")queue_client.delete_message(msg)  # 删除已处理消息if __name__ == "__main__":process_queue_messages()
    

3. 直接读取和解析日志文件后推送到 Elasticsearch

这种方法可以完全避开队列服务,直接通过脚本定期从存储账户下载日志文件并解析后推送到 Elasticsearch。

注意事项
  • 定时任务频率:根据日志生成的频率设定脚本运行的时间间隔。
  • 日志存储策略:Blob 日志文件可能会快速增长,考虑启用存储生命周期管理规则定期删除过期日志文件。
  • 安全性:确保存储帐户密钥或连接字符串的安全性,可使用 Azure 的 Managed Identity 替代密钥。

比较与选择

方案适用场景实现复杂度成本
直接从 Blob 存储读取数据量不大,无实时性需求
使用 Storage Queue有一定的队列需求,异步处理较低
使用 Azure Event Hubs需要高吞吐量和实时性

推荐:

  • 如果数据量不大,选择 直接从 Blob 存储读取
  • 如果需要解耦消息和处理程序,可以选择 Azure Storage Queue


前情后续:

将 AzureBlob 的日志通过 Azure Event Hubs 发给 Elasticsearch(1)-CSDN博客

将 AzureBlob 的日志通过 Azure Event Hubs 发给 Elasticsearch(2)-CSDN博客

将 AzureBlob 的日志通过 Azure Event Hubs 发给 Elasticsearch(3)-CSDN博客




相关文章:

将 AzureBlob 的日志通过 Azure Event Hubs 发给 Elasticsearch(2 换掉付费的Event Hubs)

前情回顾: 将 AzureBlob 的日志通过 Azure Event Hubs 发给 Elasticsearch(1)-CSDN博客 前边的方案是挺好的,但 Azure Event Hubs 是付费服务,我这里只是一个获取日志进行必要的分析,并且不要求实时性&am…...

idea 如何安装 github copilot

idea 如何安装 github copilot 要在 IntelliJ IDEA 中安装 GitHub Copilot,可以按照以下步骤操作: 打开 IntelliJ IDEA: 启动 IntelliJ IDEA。 打开插件管理器: 点击菜单栏中的 File。 选择 Settings(Windows/Linux)或 Prefere…...

1.17学习

crypto nssctf-[SWPUCTF 2021 新生赛]crypto8 不太认识这是什么编码,搜索一下发现是一个UUENCODE编码,用在线工具UUENCODE解码计算器—LZL在线工具解码就好 misc buuctf-文件中的秘密 下载附件打开后发现是一个图片,应该是一个图片隐写&…...

Redis系列之底层数据结构整数集IntSet

Redis系列之底层数据结构整数集IntSet 什么是IntSet IntSet,整数集合,是Redis集合类型的一种底层数据结构,当一个集合只包含整数值元素,并且这个集合的元素数量不多时,redis就会选用intset作为底层实现。 IntSet的数…...

外包公司名单一览表(成都)

大家好,我是苍何。 之前写了一篇武汉的外包公司名单,评论区做了个简单统计,很多人说,在外包的日子很煎熬,不再想去了。 有小伙伴留言说有些外包会强制离职,不行就转岗,让人极度没有安全感。 这…...

个人vue3-学习笔记

声明:这只是我个人的学习笔记(黑马),供以后复习用 。一天学一点,随时学随时更新。明天会更好的! 这里只给代码,不给运行结果,看不出来代码的作用我也该进厂了。。。。。 Day1 使用create-vue创建项目。 1.检查版本。 node -v 2.创建项目 npm init vue@latest 可…...

STM32 FreeRTOS消息队列

队列简介 队列是任务间通信的主要形式。 它们可以用于在任务之间以及中断和任务之间发送消息。 队列是线程安全的数据结构,任务可以通过队列在彼此之间传递数据。有以下关键特点: FIFO顺序:队列采用先进先出 (FIFO) 的顺序,即先…...

Datawhale-self-llm-Phi-4 Langchain接入教程

本项目是一个围绕开源大模型、针对国内初学者、基于 AutoDL 平台的中国宝宝专属大模型教程,针对各类开源大模型提供包括环境配置、本地部署、高效微调等技能在内的全流程指导,简化开源大模型的部署、使用和应用流程,让更多的普通学生、研究者…...

窥探QCC518x/308x系列与手机之间的蓝牙HCI记录与分析 - 手机篇

今天要介绍给大家的是, 当我们在开发高通耳机时如果遇到与手机之间相容性问题, 通常会用Frontline或Ellisys的Bluetooth Analyzer来截取资料分析, 如果手边没有这样的仪器, 要如何窥探Bluetooth的HCI log.这次介绍的是手机篇. 这次跟QCC518x/QCC308x测试的手机是Samsung S23 U…...

Golang Gin系列-1:Gin 框架总体概述

本文介绍了Gin框架,探索了它的关键特性,并建立了简单入门的应用程序。在这系列教程里,我们会探索Gin的主要特性,如路由、中间件、数据库集成等,最终能使用Gin框架构建健壮的web应用程序。 总体概述 Gin是Go编程语言的…...

CF986 div2 ABCD补题

//***不知道在不在进步 A 注意点&#xff1a;其实这个暴力就行&#xff0c;但有个限制&#xff0c;就是最多走100遍如果不到那就一定到不了。其实我感觉10遍就可以了&#xff0c;但WA了。不管怎么说&#xff0c;100遍不超时而且稳对。 代码&#xff1a; #include<bits/s…...

Ubuntu 22.04 上安装和使用 ComfyUI

在 Ubuntu 22.04 上安装和使用 ComfyUI可以按照以下步骤进行&#xff1a; 安装前的准备 确保系统更新到最新 打开终端并运行&#xff1a; sudo apt update sudo apt upgrade安装 Python 3 和 pip 如果没有安装 Python 3 和 pip&#xff0c;可以通过以下命令进行安装&#xff1…...

用户中心项目教程(一)--Ant design pro初始化的学习和使用

文章目录 1.项目定位2.项目开发流程3.需求分析4.技术选型5.Ant design pro初始化5.1快速使用5.2初始化过程 6.项目依赖的报错处理6.1项目出现的问题6.2怎么查看问题6.3怎么解决报错6.4关于pnpm的安装 7.项目启动和运行7.1项目如何启动7.2双击跳转7.3登录和注册7.4页面分析7.5关…...

分频器code

理论学习 数字电路中时钟占有非常重要的地位。时间的计算都依靠时钟信号作为基本单元。一般而言&#xff0c;一块板子只有一个晶振&#xff0c;即只有一种频率的时钟&#xff0c;但是数字系统中&#xff0c;经常需要对基准时钟进行不同倍数的分频&#xff0c;进而得到各模块所需…...

C#中字符串方法

字符串属性&#xff1a;Lenght 长度比最大索引大1 string str "frerfgd"; 1.可以通过索引&#xff0c;获取字符串中的某一个字符&#xff0c;下标“0&#xff0c;1.......” Console.WriteLine(str[0]);//f Console.WriteLine(str[1]);//r //Console.WriteLine(s…...

Python毕业设计选题:基于django+vue的二手电子设备交易平台设计与开发

开发语言&#xff1a;Python框架&#xff1a;djangoPython版本&#xff1a;python3.7.7数据库&#xff1a;mysql 5.7数据库工具&#xff1a;Navicat11开发软件&#xff1a;PyCharm 系统展示 管理员登录 管理员功能界面 用户管理 设备类型管理 设备信息管理 系统首页 设备信息…...

【愚公系列】《微信小程序与云开发从入门到实践》059-迷你商城小程序的开发(加入购物车与创建订单功能开发)

标题详情作者简介愚公搬代码头衔华为云特约编辑,华为云云享专家,华为开发者专家,华为产品云测专家,CSDN博客专家,CSDN商业化专家,阿里云专家博主,阿里云签约作者,腾讯云优秀博主,腾讯云内容共创官,掘金优秀博主,亚马逊技领云博主,51CTO博客专家等。近期荣誉2022年度…...

Mac Android studio :gradle 配置、代理设置、及各种环境变量配置;

mac 安装 AS&#xff0c;最烦人的就是这些配置了&#xff08;吐槽一下&#xff1a;这软件真是垃圾的一批&#xff0c;同样的代码换了电脑就没法用&#xff0c;比 vscode 甚至比低评分的xcode还差劲&#xff01;&#xff09; --------------------- 一、 gradle 下载及环境变量…...

unity——Preject3——开始界面拼面板

目录 1.创建panel&#xff0c;去掉panel自带的image&#xff0c;自己加一个image&#xff0c;使用锚点分配好 2.锚点&#xff08;快捷键点击后 ALTShift&#xff09; 锚点是什么&#xff1f; 锚点的实际例子 例子1&#xff1a;固定在父容器的中心 例子2&#xff1a;对齐到…...

【达梦数据库(Oracle模式)】如何将视图中的数据导出

在某些情况下&#xff0c;我们需要将生产环境某个模式下的数据导入到开发电脑中&#xff0c;因为正式环境无法连接外网数据。 方式一&#xff1a;将视图查询出来&#xff0c;然后右键导出所有查询结果&#xff08;不推荐&#xff09; 优点&#xff1a;方便快捷 缺点&#xff1…...

Java 语言特性(面试系列1)

一、面向对象编程 1. 封装&#xff08;Encapsulation&#xff09; 定义&#xff1a;将数据&#xff08;属性&#xff09;和操作数据的方法绑定在一起&#xff0c;通过访问控制符&#xff08;private、protected、public&#xff09;隐藏内部实现细节。示例&#xff1a; public …...

高等数学(下)题型笔记(八)空间解析几何与向量代数

目录 0 前言 1 向量的点乘 1.1 基本公式 1.2 例题 2 向量的叉乘 2.1 基础知识 2.2 例题 3 空间平面方程 3.1 基础知识 3.2 例题 4 空间直线方程 4.1 基础知识 4.2 例题 5 旋转曲面及其方程 5.1 基础知识 5.2 例题 6 空间曲面的法线与切平面 6.1 基础知识 6.2…...

CSS设置元素的宽度根据其内容自动调整

width: fit-content 是 CSS 中的一个属性值&#xff0c;用于设置元素的宽度根据其内容自动调整&#xff0c;确保宽度刚好容纳内容而不会超出。 效果对比 默认情况&#xff08;width: auto&#xff09;&#xff1a; 块级元素&#xff08;如 <div>&#xff09;会占满父容器…...

LangChain知识库管理后端接口:数据库操作详解—— 构建本地知识库系统的基础《二》

这段 Python 代码是一个完整的 知识库数据库操作模块&#xff0c;用于对本地知识库系统中的知识库进行增删改查&#xff08;CRUD&#xff09;操作。它基于 SQLAlchemy ORM 框架 和一个自定义的装饰器 with_session 实现数据库会话管理。 &#x1f4d8; 一、整体功能概述 该模块…...

基于Java+VUE+MariaDB实现(Web)仿小米商城

仿小米商城 环境安装 nodejs maven JDK11 运行 mvn clean install -DskipTestscd adminmvn spring-boot:runcd ../webmvn spring-boot:runcd ../xiaomi-store-admin-vuenpm installnpm run servecd ../xiaomi-store-vuenpm installnpm run serve 注意&#xff1a;运行前…...

HubSpot推出与ChatGPT的深度集成引发兴奋与担忧

上周三&#xff0c;HubSpot宣布已构建与ChatGPT的深度集成&#xff0c;这一消息在HubSpot用户和营销技术观察者中引发了极大的兴奋&#xff0c;但同时也存在一些关于数据安全的担忧。 许多网络声音声称&#xff0c;这对SaaS应用程序和人工智能而言是一场范式转变。 但向任何技…...

【p2p、分布式,区块链笔记 MESH】Bluetooth蓝牙通信 BLE Mesh协议的拓扑结构 定向转发机制

目录 节点的功能承载层&#xff08;GATT/Adv&#xff09;局限性&#xff1a; 拓扑关系定向转发机制定向转发意义 CG 节点的功能 节点的功能由节点支持的特性和功能决定。所有节点都能够发送和接收网格消息。节点还可以选择支持一个或多个附加功能&#xff0c;如 Configuration …...

掌握 HTTP 请求:理解 cURL GET 语法

cURL 是一个强大的命令行工具&#xff0c;用于发送 HTTP 请求和与 Web 服务器交互。在 Web 开发和测试中&#xff0c;cURL 经常用于发送 GET 请求来获取服务器资源。本文将详细介绍 cURL GET 请求的语法和使用方法。 一、cURL 基本概念 cURL 是 "Client URL" 的缩写…...

android RelativeLayout布局

<?xml version"1.0" encoding"utf-8"?> <RelativeLayout xmlns:android"http://schemas.android.com/apk/res/android"android:layout_width"match_parent"android:layout_height"match_parent"android:gravity&…...

华为OD最新机试真题-数组组成的最小数字-OD统一考试(B卷)

题目描述 给定一个整型数组,请从该数组中选择3个元素 组成最小数字并输出 (如果数组长度小于3,则选择数组中所有元素来组成最小数字)。 输入描述 行用半角逗号分割的字符串记录的整型数组,0<数组长度<= 100,0<整数的取值范围<= 10000。 输出描述 由3个元素组成…...