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

news2025/1/18 9:18:39

问题

        项目里使用了 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,选择合适的区域和运行时堆栈(通常是 .NETNode.js)。
    • 在 Function App 中,创建一个新的 Event Hub Trigger 函数,以便在日志数据到达 Event Hub 时自动触发。
  • 编写函数代码

    • 在函数代码中,你可以使用以下技术解析日志数据:

      • 解析日志内容:提取你需要的字段(如操作类型、文件名、时间戳、请求者 IP 等)。
      • 使用 JSON 处理库:如果日志是 JSON 格式,你可以使用相关库(如 JSON.parse().NETJsonSerializer)来解析数据。
      • 创建 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
                  };
      
                  // 将数据发送到 Elasticsearch
                  await 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" }
            }
        }
    }
    
  • 创建 Kibana 仪表板

    • 在 Kibana 中,创建新的索引模式(Index Pattern),指向 storage-logs 索引。
    • 然后,使用 Kibana 创建查询、仪表板和可视化,帮助你对存储日志进行实时分析。
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)-CSDN博客

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




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

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

相关文章

X-12-ARIMA:季节性调整(Seasonal Adjustment)的强大工具,介绍数学原理

X-12-ARIMA:季节性调整的强大工具 在经济学、金融学以及各类统计数据分析中,季节性调整(Seasonal Adjustment)是一个至关重要的步骤。许多经济指标,如GDP、失业率和零售销售数据等,往往会受到季节性因素的…

.netframwork模拟启动webapi服务并编写对应api接口

在.NET Framework环境中模拟启动Web服务,可以使用几种不同的方法。一个常见的选择是利用HttpListener类来创建一个简单的HTTP服务器,或者使用Owin/Katana库来自托管ASP.NET Web API或MVC应用。下面简要介绍Owin/Katana示例代码。这种方法更加灵活&#x…

网络安全构成要素

一、防火墙 组织机构内部的网络与互联网相连时,为了避免域内受到非法访问的威胁,往往会设置防火墙。 使用NAT(NAPT)的情况下,由于限定了可以从外部访问的地址,因此也能起到防火墙的作用。 二、IDS入侵检…

免费送源码:Java+ssm+MySQL 基于PHP在线考试系统的设计与实现 计算机毕业设计原创定制

摘 要 信息化社会内需要与之针对性的信息获取途径,但是途径的扩展基本上为人们所努力的方向,由于站在的角度存在偏差,人们经常能够获得不同类型信息,这也是技术最为难以攻克的课题。针对在线考试等问题,对如何通过计算…

html中鼠标位置信息

pageX:鼠标距离页面的最左边的距离,包括滚动条的长度。clientX:鼠标距离浏览器视口的左距离,不包括滚动条。offsetX:鼠标到事件源左边的距离。movementX:鼠标这次触发的事件的位置相对于上一次触发事件的位…

光谱相机的光谱分辨率可以达到多少?

多光谱相机 多光谱相机的光谱分辨率相对较低,波段数一般在 10 到 20 个左右,光谱分辨率通常在几十纳米到几百纳米之间,如常见的多光谱相机光谱分辨率为 100nm 左右。 高光谱相机 一般的高光谱相机光谱分辨率可达 2.5nm 到 10nm 左右&#x…

RAG 切块Chunk技术总结与自定义分块实现思路

TrustRAG项目地址🌟:https://github.com/gomate-community/TrustRAG 可配置的模块化RAG框架 切块简介 在RAG(Retrieval-Augmented Generation)任务中,Chunk切分是一个关键步骤,尤其是在处理结构复杂的PDF文…

Java基础——概念和常识(语言特点、JVM、JDK、JRE、AOT/JIT等介绍)

我是一个计算机专业研0的学生卡蒙Camel🐫🐫🐫(刚保研) 记录每天学习过程(主要学习Java、python、人工智能),总结知识点(内容来自:自我总结网上借鉴&#xff0…

Low-Level 大一统:如何使用Diffusion Models完成视频超分、去雨、去雾、降噪等所有Low-Level 任务?

Diffusion Models专栏文章汇总:入门与实战 前言:视频在传输过程中常常因为各种因素(如恶劣天气、噪声、压缩和传感器分辨率限制)而出现质量下降,这会严重影响计算机视觉任务(如目标检测和视频监控&#xff…

矩阵碰一碰发视频源码技术开发全解析,支持OEM

在当今数字化内容传播迅速发展的时代,矩阵碰一碰发视频功能以其便捷、高效的特点,为用户分享视频提供了全新的体验。本文将深入探讨矩阵碰一碰发视频源码的技术开发过程,从原理到实现,为开发者提供全面的技术指引。 一、技术原理 …

测试工程师的linux 命令学习(持续更新中)

1.ls """1.ls""" ls -l 除文件名称外,亦将文件型态、权限、拥有者、文件大小等资讯详细列出 ls -l等同于 ll第一列共10位,第1位表示文档类型,d表示目录,-表示普通文件,l表示链接文件。…

HJ34 图片整理(Java版)

一、试题地址 图片整理_牛客题霸_牛客网 二、试题描述 描述 对于给定的由大小写字母和数字组成的字符串,请按照 ASCIIASCII 码值将其从小到大排序。 如果您需要了解更多关于 ASCIIASCII 码的知识,请参考下表。 输入描述: 在一行上输入一…

web开发工具之:三、JWT的理论知识,java的支持,封装的工具类可以直接使用

文章目录 前言一、JWT的理论知识1. 什么是 JWT(JSON Web Token)?2. **JWT 的组成**3. **JWT 的特点**4. **JWT 的使用场景**5. **JWT 的生命周期**6. **JWT 的优点**7. **JWT 的注意事项**5. **JWT 示例**总结 二、java的springboot支持1. po…

电路笔记(信号):Python 滤波器设计分析工具pyfda

目录 滤波器设置(3步实现滤波器设计)数据分析与使用pyfda功能界面数字滤波器数学表示线性相位线性相位的定义线性相位的特性 冲击响应quartus数据加载 CG 滤波器设置(3步实现滤波器设计) pip install pyfda #安装python依赖,详见https://pyfda.readthedocs.io/en/la…

【15】Word:互联网发展状况❗

目录 题目​ NO2 NO3 NO4 NO5 NO6 NO7.8.9 NO7 NO8 NO9 NO10 题目 NO2 布局→页面设置→纸张:A4→页边距:上下左右→版式:页眉/页脚页码范围:多页:对称页边距→内侧/外侧→装订线 NO3 首先为文档应用内置…

Web前端开发技术之HTMLCSS知识点总结

学习路线 一、新闻网界面1. 代码示例2. 效果展示3. 知识点总结3.1 HTML标签和字符实体3.2 超链接、颜色描述与标题元素3.3 关于图片和视频标签:3.4 CSS引入方式3.5 CSS选择器优先级 二、flex布局1. 代码示例2. 效果展示3. 知识点总结3.1 span标签和flex容器的区别3.…

BUUCTF Web

[极客大挑战 2019]LoveSQL union注入 是sql注入类型 输入1 发现不是数字型注入,那就是字符型注入。判断字段数,输入order by 4 #发现错误,就存在三个字段数 判断回显点:1 union select 1,2,3 # 判断回显点为2,3 判断数据库名 …

Kinova仿生机械臂Gen3搭载BOTA 力矩传感器SeneOne:彰显机器人触觉 AI 与六维力传感的融合力量

随着工业4.0时代的到来,自动化和智能化成为制造业的趋势。机器人作为实现这一趋势的重要工具,其性能和智能水平直接影响到生产效率和产品质量。然而,传统的机器人系统在应对复杂任务时往往缺乏足够的灵活性和适应性。为了解决这一问题&#x…

【数据库】MySQL数据库SQL语句汇总

目录 1.SQL 通用语法 2.SQL 分类 2.1.DDL 2.2.DML 2.3.DQL 2.4.DCL 3.DDL 3.1.数据库操作 3.1.1.查询 3.1.2.创建 3.1.3.删除 3.1.4.使用 3.2.表操作 3.2.1.查询 3.2.2.创建 3.2.3.数据类型 3.2.3.1.数值类型 3.2.3.2.字符串类型 3.2.3.3.日期时间类型 3.2…

《汽车与驾驶维修》是什么级别的期刊?是正规期刊吗?能评职称吗?

​问题解答: 问:《汽车与驾驶维修》是不是核心期刊? 答:不是,是知网收录的第二批认定学术期刊。 问:《汽车与驾驶维修》级别? 答:省级。主管单位:中国机械工业联合会…