将 AzureBlob 的日志通过 Azure Event Hubs 发给 Elasticsearch(1.标准版)
问题
项目里使用了 AzureBlob 存储了用户上传的各种资源文件,近期 AzureBlob 的流量费用增长很快,想通过分析Blob的日志,获取一些可用的信息,所以有了这个需求:将存储账户的日志(读写,审计,监控等)通过Azure Event Hubs 发送到我的 elasticsearch, 并且发送给elasticsearch的日志进行必要的加工,即从中解析出一些特别的字段,方便分析。
实现步骤
1. 配置 Azure Blob 存储日志记录
Azure Blob 存储提供日志记录功能,你可以启用存储帐户的活动日志(例如:读取、写入、审计等)以便后续处理。具体步骤如下:
- 启用日志记录:
- 进入 Azure 门户,选择你的存储账户。
- 在 监控 部分,选择 诊断设置。
- 创建一个新的诊断设置,启用 Blob 存储 服务的相关日志项(例如,读取、写入、删除、审计日志等)。
- 选择将日志输出到 Event Hubs,并选择一个已配置的 Event Hub 实例作为目标。
2. 创建 Azure Event Hubs
Event Hubs 将会作为一个中介,接收来自 Azure Blob 存储的日志并将其转发到 Elasticsearch。具体步骤如下:
- 创建 Event Hubs 命名空间:
- 在 Azure 门户中,选择 创建资源,然后选择 Event Hubs。
- 创建一个新的 Event Hubs 命名空间并选择合适的区域。
- 在命名空间下创建一个新的 Event Hub 实例。
3. 配置 Azure Function 解析日志
为了根据你的需要解析日志数据并发送到 Elasticsearch,你可以使用 Azure Function。此函数将从 Event Hubs 获取日志数据,解析日志内容并将它们转发到 Elasticsearch。你可以选择编写自定义代码来实现日志解析。
-
创建 Azure Function:
- 在 Azure 门户中,选择 创建资源,然后选择 Function App。
- 创建一个新的 Function App,选择合适的区域和运行时堆栈(通常是 .NET 或 Node.js)。
- 在 Function App 中,创建一个新的 Event Hub Trigger 函数,以便在日志数据到达 Event Hub 时自动触发。
-
编写函数代码:
-
在函数代码中,你可以使用以下技术解析日志数据:
- 解析日志内容:提取你需要的字段(如操作类型、文件名、时间戳、请求者 IP 等)。
- 使用 JSON 处理库:如果日志是 JSON 格式,你可以使用相关库(如
JSON.parse()
或.NET
的JsonSerializer
)来解析数据。 - 创建 Elasticsearch 客户端:使用 Azure Function 的客户端库或 Elastic Search .NET 客户端(或其他语言的客户端)将解析后的日志发送到 Elasticsearch。
示例代码(JavaScript,Node.js 环境):
const { Client } = require('@elastic/elasticsearch'); const client = new Client({ node: 'http://your-elasticsearch-server:9200' });module.exports = async function (context, eventHubMessages) {for (const message of eventHubMessages) {try {const logData = JSON.parse(message.body);// 提取你需要的字段const logEntry = {timestamp: logData.timestamp,operation: logData.operationName,blobName: logData.blobName,requestor: logData.requestorIp};// 将数据发送到 Elasticsearchawait client.index({index: 'storage-logs',document: logEntry});} catch (err) {context.log('Error processing message: ', err);}} };
-
-
部署 Azure Function:部署并运行该 Azure Function,它将自动从 Event Hubs 获取日志消息,进行解析,并将结果推送到 Elasticsearch。
4. 配置 Elasticsearch 和 Kibana
在 Elasticsearch 中,你需要创建合适的索引模板和映射,以便于后续检索和分析。你还可以使用 Kibana 来可视化日志数据。
-
配置索引模板和映射:
- 在 Elasticsearch 中,你可以为
storage-logs
索引定义自定义映射,确保字段类型(如时间戳、IP 地址等)符合预期,方便查询。
示例映射(适用于上述日志):
PUT /storage-logs {"mappings": {"properties": {"timestamp": { "type": "date" },"operation": { "type": "keyword" },"blobName": { "type": "text" },"requestor": { "type": "ip" }}} }
- 在 Elasticsearch 中,你可以为
-
创建 Kibana 仪表板:
- 在 Kibana 中,创建新的索引模式(Index Pattern),指向
storage-logs
索引。 - 然后,使用 Kibana 创建查询、仪表板和可视化,帮助你对存储日志进行实时分析。
- 在 Kibana 中,创建新的索引模式(Index Pattern),指向
5. 使用 Logstash (可选)
如果你不想使用 Azure Function 来解析日志数据,另一个选择是使用 Logstash,它是 Elastic Stack 的一部分,可以帮助你从 Event Hubs 中提取数据并进行解析,然后将其发送到 Elasticsearch。
-
配置 Logstash:
- 安装 Logstash 并配置它从 Azure Event Hubs 获取数据。可以使用 Event Hub Input Plugin 连接到 Event Hub。
- 在 Logstash 配置中,使用过滤器(如
json
过滤器)来解析日志数据并转换字段,最后将数据输出到 Elasticsearch。
示例 Logstash 配置文件:
input {azure_event_hubs {connection_string => "your-event-hub-connection-string"codec => json} }filter {json {source => "message"}mutate {add_field => {"timestamp" => "%{[timestamp]}""operation" => "%{[operationName]}"}} }output {elasticsearch {hosts => ["http://your-elasticsearch-server:9200"]index => "storage-logs"document_type => "_doc"} }
6. 测试和监控
- 测试:在你配置完成之后,开始生成一些 Azure Blob 存储的日志(例如,进行文件操作)。确保这些日志通过 Event Hub 传递到 Azure Function 或 Logstash,成功解析并被发送到 Elasticsearch。
- 监控:通过 Azure Monitor、Event Hubs 和 Elasticsearch 的监控工具来查看系统的运行状态和日志处理情况。
注意事项
- 性能:Event Hubs 可以支持高吞吐量的日志数据传输,但要确保 Event Hubs 的吞吐量单位(TU)配置合理,以处理日志的高并发传输。
- 数据延迟:从 Blob 存储到 Elasticsearch 的数据传输可能存在一定的延迟,尤其是在高负载情况下。可以通过优化 Event Hubs 和 Azure Function 的配置来减少延迟。
- 日志解析:在解析日志时,要确保正则表达式、JSON 解析等操作高效执行,避免性能瓶颈。
- 安全性:确保在使用 Event Hubs 和 Elasticsearch 时启用适当的身份验证和加密,避免敏感数据泄露。
- 索引管理:Elasticsearch 中的日志数据可能会迅速增长,因此需要定期管理索引,如设置索引生命周期管理(ILM)以避免索引膨胀。
通过这种方式,你可以实现将 Azure Blob 存储的日志通过 Event Hubs 发送到 Elasticsearch,并根据需要解析并优化日志的结构,以便在 Elasticsearch 中进行更高效的查询和分析。
前情后续:
将 AzureBlob 的日志通过 Azure Event Hubs 发给 Elasticsearch(1.标准版)-CSDN博客
将 AzureBlob 的日志通过 Azure Event Hubs 发给 Elasticsearch(2.换掉付费的Event Hubs)-CSDN博客
将 AzureBlob 的日志通过 Azure Event Hubs 发给 Elasticsearch(3.纯python的实惠版)-CSDN博客
相关文章:

将 AzureBlob 的日志通过 Azure Event Hubs 发给 Elasticsearch(1.标准版)
问题 项目里使用了 AzureBlob 存储了用户上传的各种资源文件,近期 AzureBlob 的流量费用增长很快,想通过分析Blob的日志,获取一些可用的信息,所以有了这个需求:将存储账户的日志(读写,审计&…...
pthread_exit函数
pthread_exit 是 POSIX 线程库(pthread)中的一个函数,用于显式地终止调用线程。与 exit 函数不同,pthread_exit 仅影响调用它的线程,而不是整个进程。使用 pthread_exit 可以确保线程在退出时能够正确地释放线程相关的…...

1月21日星期二今日早报简报微语报早读
1月21日星期二,农历腊月廿二,早报#微语早读。 1、多地官宣:2025年可有序、限时或在限定区域燃放烟花爆竹; 2、TikTok恢复在美服务;特朗普提出继续运营TikTok方案,外交部:若涉及收购中国企业应…...

【2024年终总结】我与CSDN的一年
👉作者主页:心疼你的一切 👉作者简介:大家好,我是心疼你的一切。Unity3D领域新星创作者🏆,华为云享专家🏆 👉记得点赞 👍 收藏 ⭐爱你们,么么哒 文章目录 …...

openssl 正确生成v3带SAN的证书
初级代码游戏的专栏介绍与文章目录-CSDN博客 我的github:codetoys,所有代码都将会位于ctfc库中。已经放入库中我会指出在库中的位置。 这些代码大部分以Linux为目标但部分代码是纯C的,可以在任何平台上使用。 源码指引:github源…...

Golang Gin系列-5:数据模型和数据库
在这篇Gin教程的博客中,我们将探索如何将模型和数据库与Gin框架无缝集成,使你能够构建健壮且可扩展的web应用程序。通过利用流行的库并遵循最佳实践,你将学习如何定义模型、建立数据库连接、执行CRUD操作以及确保基于gin的项目中的数据完整性…...

比简单工厂更好的 - 工厂方法模式(Factory Method Pattern)
工厂方法模式(Factory Method Pattern) 工厂方法模式(Factory Method Pattern)工厂方法模式(Factory Method Pattern)概述工厂方法模式(Factory Method Pattern)结构图工厂方法模式&…...

分布式搜索引擎02
1. DSL查询文档 elasticsearch的查询依然是基于JSON风格的DSL来实现的。 1.1. DSL查询分类 Elasticsearch提供了基于JSON的DSL(Domain Specific Language)来定义查询。常见的查询类型包括: 查询所有:查询出所有数据,…...

阿里云安装mikrotik7配置内网互通
阿里云近期推出了200M不限量机器,对于没有公网接入的中小企业可以借助这个机器对多地分支机构进行内网互通。目前已经有很多机构用这个搞跨云k8s,跨云集群了。 mikrotik作为一个商用的软件,操作性比一些开源的软件好用不少。 本文使用的网段为172.16.1…...

Docker网段和服务器ip冲突导致无法访问网络的解决方法
若宿主机所在网络的网段为172.[17-31].xx.xx,则会与Docker本身内部网络间出现冲突,此时需要重新配置Docker默认地址池 一:查看docker的默认网段 route 二:修改docker的默认网段 etc/docker/daemon.json文件增加修改网段信息 {…...

Kubernetes 集群中安装和配置 Kubernetes Dashboard
前言 上篇成功部署Kubernetes集群后,为了方便管理和监控集群资源,安装Kubernetes Dashboard显得尤为重要。Kubernetes Dashboard 是一个通用的、基于 Web 的 UI,旨在让用户轻松地部署容器化应用到 Kubernetes 集群,并对这些应用进…...
Android开发之Spinner
Android开发之Spinner 1. 概述2. Spinner3. 适配器3.1 ArrayAdapter3.2 SimpleAdapter 1. 概述 Android开发学习笔记。学习下拉框控件Spinner和适配器(数组适配器ArrayAdapter、简单适配器SimpleAdapter)的使用。 2. Spinner 下拉框控件,用…...

【c++继承篇】--继承之道:在C++的世界中编织血脉与传承
目录 引言 一、定义二、继承定义格式2.1定义格式2.2继承关系和访问限定符2.3继承后子类访问权限 三、基类和派生类赋值转换四、继承的作用域4.1同名变量4.2同名函数 五、派生类的默认成员构造函数5.1**构造函数调用顺序:**5.2**析构函数调用顺序:**5.3调…...

分布式系统通信解决方案:Netty 与 Protobuf 高效应用
分布式系统通信解决方案:Netty 与 Protobuf 高效应用 一、引言 在现代网络编程中,数据的编解码是系统设计的一个核心问题,特别是在高并发和低延迟的应用场景中,如何高效地序列化和传输数据对于系统的性能至关重要。随着分布式系…...

计算机网络 (54)系统安全:防火墙与入侵检测
前言 计算机网络系统安全是确保网络通信和数据不受未经授权访问、泄露、破坏或篡改的关键。防火墙和入侵检测系统(IDS)是维护网络系统安全的两大核心组件。 一、防火墙 定义与功能 防火墙是一种用来加强网络之间访问控制的特殊网络互联设备,它…...
stack底层实现细节
一、stack 和 queue 在 STL 中 stack 和 queue 已经不算是容器了,而是容器适配器,适配器模式也是常用的模式之一,体现在 stack 和 queue 中就是他们两个的实现不是单独写的,而是复用了前面合适的优秀的STL 容器的代码而实现的具有…...

工业相机 SDK 二次开发-Halcon 插件
本文介绍了 Halcon 连接相机时插件的使用。通过本套插件可连接海康 的工业相机。 一. 环境配置 1. 拷贝动态库 在 用 户 安 装 MVS 目 录 下 按 照 如 下 路 径 Development\ThirdPartyPlatformAdapter 找到目录为 HalconHDevelop 的文 件夹,根据 Halcon 版本找到对…...

map和set的使用(一)详解
文章目录 序列式容器和关联式容器map和set的介绍set构造和迭代器遍历和insertfinderaseswapclearcountlower_bound和upper_boundmultiset和set的对比 set的二个题目题目解析算法原理代码介绍一个找差集的算法同步算法题目解析算法原理代码 map构造遍历initiaizer_list 序列式容…...

ARP 表、MAC 表、路由表、跨网段 ARP
文章目录 一、ARP 表1、PC2、路由器 - AR22203、交换机 - S57004、什么样的设备会有 ARP 表? 二、MAC 表什么样的设备会有 MAC 表? 三、路由表什么样的设备会有路由表? 四、抓取跨网段 ARP 包 所谓 “透明” 就是指不用做任何配置 一、ARP 表…...
37.构造回文字符串问题|Marscode AI刷题
1.题目 问题描述 小C手中有一个由小写字母组成的字符串 s。她希望构造另一个字符串 t,并且这个字符串需要满足以下几个条件: t 由小写字母组成,且长度与 s 相同。t 是回文字符串,即从左到右与从右到左读取相同。t 的字典序要小…...
RK3588 Opencv-ffmpeg-rkmpp-rkrga编译与测试
RK3588 Opencv-ffmpeg-rkmpp-rkrga编译与测试 硬件背景说明编译环境准备1. 编译MPP(媒体处理平台)2. 编译RGA(图形加速库)3. 构建支持硬件加速的FFmpeg重要代码修改说明4. 验证安装5.FFmpeg转码测试OpenCV编译集成Python OpenCV+FFmpeg测试硬件背景说明 RK3588是瑞芯微推出…...
ubuntu 安装上传的 ffmpeg_7.1.1.orig.tar.xz并使用
在 Ubuntu 系统上离线安装 make 需要提前准备好所有依赖包。以下是详细的操作步骤: 准备工作:在有网络的机器上下载所需软件包 查找依赖关系 在有网络的 Ubuntu 机器上(需与目标机器相同版本)执行: # 获取 make 及其依…...

MySql--定义表存储引擎、字符集和排序规则
示例: CREATE TABLE users (id INT PRIMARY KEY,name VARCHAR(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci,email VARCHAR(100) ) ENGINEInnoDB DEFAULT CHARSETutf8mb4 COLLATEutf8mb4_0900_ai_ci;注意事项: 字符集和排序规则可以按列覆盖表…...

git查看commit属于那个tag
1. 快速确认commit原始分支及合入tag # git describe 213b4b3bbef2771f7a1b8166f6e6989442ca67c8 查看commit合入tag # git describe 213b4b3bbef2771f7a1b8166f6e6989442ca67c8 --all 查看commit原始分支 2.查看分支与master关系 # git show --all 0.5.67_0006 --stat 以缩…...

vue3 ElMessage提示语换行渲染
在 ElMessage.error 中使用换行符 \n 并不会实现换行,因为 ElMessage 默认会将字符串中的换行符忽略。要实现换行显示,可以使用 HTML 标签 <br> 并结合 ElMessage 的 dangerouslyUseHTMLString 选项。以下是实现换行提示的代码示例: i…...

MySQL之约束和表的增删查改
MySQL之约束和表的增删查改 一.数据库约束1.1数据库约束的概念1.2NOT NULL 非空约束1.3DEFAULT 默认约束1.4唯一约束1.5主键约束和自增约束1.6自增约束1.7外键约束1.8CHECK约束 二.表的增删查改2.1Create创建2.2Retrieve读取2.3Update更新2.4Delete删除和Truncate截断 一.数据库…...
Java 中的 ThreadLocal 详解:从基础到源码
Java 中的 ThreadLocal 详解:从基础到源码 引言 在 Java 多线程编程中,ThreadLocal是一个经常被提及的概念。它提供了一种线程局部变量的机制,使得每个线程都可以独立地存储和访问自己的变量副本,而不会与其他线程产生冲突。本文…...
静态资源js,css免费CDN服务比较
静态资源js,css免费CDN服务比较 分析的 CDN 服务列表: BootCDN (https://cdn.bootcdn.net/ajax/libs)jsDelivr (主域名) (https://cdn.jsdelivr.net/npm)jsDelivr (Gcore 镜像) (https://gcore.jsdelivr.net/npm)UNPKG (https://unpkg.com)ESM (https://esm.sh)By…...

Linux——数据链路层
1. 认识以太网 认知:以太网是用于局域网数据通信的协议标准,定义了同一局域网内通过电缆/无线怎么在设备之间传输数据帧。 注:整个网络世界可以具象看出由许许多多的局域网组成, • 家庭中的设备A and 家庭中的设备B and 家庭路由…...
HTTP代理的实际用处有哪些?HTTP代理强在哪里?
嘿,小伙伴们!今天咱们来聊聊 HTTP 代理。大家可能会经常在网页上看到类似“HTTP 代理”的关键词,是不是会心生疑惑:这不就是个技术名词吗?它到底有啥用呢?别急,听我娓娓道来。 一、什么是HTTP代…...