將 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,選擇合適的區域和運行時堆棧(通常是 .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};// 將數據發送到 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" }}}
    }
    
  • 創建 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.pswp.cn/web/66319.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/66319.shtml
英文地址,請注明出處:http://en.pswp.cn/web/66319.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

ESP32S3基于espidf接入網絡獲取NTP時間

ESP32S3基于espidf接入網絡獲取NTP時間 📌 相關篇《ESP32S3基于espidf接入網絡配置介紹》📍官方相關SNTP 時間同步介紹文檔:https://docs.espressif.com/projects/esp-idf/zh_CN/stable/esp32/api-reference/system/system_time.html?highli…

性能測試 - Locust WebSocket client

Max.Bai 2024.10 0. 背景 Locust 是性能測試工具,但是默認只支持http協議,就是默認只有http的client,需要其他協議的測試必須自己擴展對于的client,比如下面的WebSocket client。 1. WebSocket test Client “”“ Max.Bai W…

【藍橋杯選拔賽真題63】C++奇數 第十四屆藍橋杯青少年創意編程大賽 算法思維 C++編程選拔賽真題解

目錄 C++奇數 一、題目要求 1、編程實現 2、輸入輸出 二、算法分析 三、程序編寫 四、運行結果 五、考點分析 七、推薦資料 C++奇數 第十四屆藍橋杯青少年創意編程大賽C++選拔賽真題 一、題目要求 1、編程實現 給定兩個正整數N和M(10≤N<M≤10000),請找出N到M…

KubeSphere 與 Pig 微服務平臺的整合與優化:全流程容器化部署實踐

一、前言 近年來,為了滿足越來越復雜的業務需求,我們從傳統單體架構系統升級為微服務架構,就是把一個大型應用程序分割成可以獨立部署的小型服務,每個服務之間都是松耦合的,通過 RPC 或者是 Rest 協議來進行通信,可以按照業務領域來劃分成獨立的單元。但是微服務系統相對…

(學習總結20)C++11 可變參數模版、lambda表達式、包裝器與部分新內容添加

C11 可變參數模版、lambda表達式、包裝器與部分新內容添加 一、可變參數模版基本語法及原理包擴展emplace系列接口 二、lambda表達式lambda表達式語法捕捉列表lambda的原理lambda的應用 三、包裝器bindfunction 四、部分新內容添加新的類功能1.默認的移動構造和移動賦值2.聲明時…

Linux的常用命令(一)

目錄 一、文件處理命令 1.文件處理命令ls 2.文件處理命令cd 3.文件處理命令pwd 4.文件處理命令touch 5.文件處理命令mkdir 6.文件處理命令cp 7.文件處理命令mv 8.文件處理命令rm 9.文件處理命令cat 10.文件處理命令more 11.文件處理命令head 12.文件處理命令tail …

東芝e-STUDIO2829A復印機提示“維護”該如何操作

東芝e-STUDIO2829A復印機基本參數: 產品類型 數碼復合機 顏色類型 黑白 涵蓋功能 復印/打印/掃描 最大原稿尺寸 A3 處 理 器 500MHz 內存容量 標配:512MB,選配:1GB 供紙容量 標配紙盒:350頁(A4),最大容…

春秋杯-WEB

SSTI 可以看到主頁那里有個登錄測試之后為ssti {{4*4}} fenjing梭哈即可得到payload {{((g.pop.__globals__.__builtins__.__import__(os)).popen(cat flag)).read()}}file_copy 看到題目名字為file_copy&#xff0c; 當輸入路徑時會返回目標文件的大小&#xff0c; 通…

警惕IDEA 2024版重大Bug問題:LomBok失效、Gradle沖突、Spring Boot啟動錯誤

一直以來我認為工具類的軟件是越新越好&#xff0c;因為工具代表著一定的先進性&#xff1b;但是IDEA 2024好好的給我上了一課&#xff0c;比如lombok 不起作用、比如Spring Boot 3.4.x 啟動報錯、再比如MyBatis log plus沖突、再比如Gradle插件沖突. 一、Lombok 失效問題 請不…

《深度學習神經網絡訓練:數據集下載資源列表》

深度學習神經網絡訓練&#xff1a;數據集下載資源列表 一、數據集下載的重要性 在當今數字化時代&#xff0c;數據集下載對于各個領域的研究與發展都具有不可忽視的重要意義。尤其在機器學習、深度學習以及各類數據驅動的科研項目中&#xff0c;數據集更是起到了基礎性的支撐…

GPT-5 傳言:一場正在幕后發生的 AI 變革

新的一年&#xff0c;讓我們從一個引人入勝的話題開始&#xff1a;如果我告訴你&#xff0c;GPT-5 并非虛構&#xff0c;而是真實存在呢&#xff1f;它不僅真實存在&#xff0c;而且正在你看不見的地方悄然塑造著世界。我的基本假設是&#xff1a;OpenAI 已經秘密開發出 GPT-5&…

【Unity3D】利用Hinge Joint 2D組件制作繩索效果

目錄 一、動態繩索 &#xff08;可移動根節點&#xff09; 二、靜態繩索 三、利用Skinning Editor(Unity2022.3.15f1正常使用) 四、注意事項 一、動態繩索 &#xff08;可移動根節點&#xff09; 動態繩索 DynamicRope空物體 Anchor和whitecircle是相同位置的物體&#xff…

【12】Word:張老師學術論文?

目錄 題目 ?NO2 NO3 NO4 NO5 NO6 NO7.8 題目 NO2 布局→頁面設置→紙張&#xff1a;A4→頁邊距&#xff1a;上下左右邊距→文檔網格&#xff1a;只指定行網格→版式&#xff1a;頁眉和頁腳&#xff1a;頁腳距邊界&#xff1a;1.4cm居中設置論文頁碼&#xff1a;插入…

OpenCV相機標定與3D重建(56)估計物體姿態(即旋轉和平移)的函數solvePnPRansac()的使用

操作系統&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 編程語言&#xff1a;C11 算法描述 使用RANSAC方案從3D-2D點對應關系中找到物體的姿態。 cv::solvePnPRansac 是 OpenCV 中用于估計物體姿態&#xff08;即旋轉和平移&#xff09;的…

怎么用python寫個喚醒睡眠電腦的腳本?

環境&#xff1a; win10 python3.12 問題描述&#xff1a; 怎么用python寫個喚醒睡眠電腦的腳本&#xff1f; 解決方案&#xff1a; 1.喚醒處于睡眠狀態的電腦通常不是通過編程直接實現的&#xff0c;而是依賴于硬件和操作系統提供的特性。對于Windows系統&#xff0c;可…

基于 HTML5 Canvas 制作一個精美的 2048 小游戲--day 1

基于 HTML5 Canvas 制作一個精美的 2048 小游戲 在這個快節奏的生活中&#xff0c;簡單而富有挑戰性的游戲總能給我們帶來樂趣。2048 是一款受歡迎的益智游戲&#xff0c;不僅考驗智力&#xff0c;還能讓人回味無窮。今天&#xff0c;我帶領大家將一起學習如何使用 HTML5 Canv…

每日進步一點點(網安)

今日練習題目是PHP反序列化&#xff0c;也學習一下說明是序列化和反序列化 1.PHP序列化 序列化是指將數據結構或對象轉換為可傳輸或可儲存的格式的過程。這通常需要將數據轉換為字節流或者其他編碼格式&#xff0c;以便在不同系統和應用程序之間進行傳輸或存儲 在PHP中&…

MySQL數據庫入門到大蛇尚硅谷宋紅康老師筆記 基礎篇 part 5

第05章_排序與分頁 排序 #第05章_排序與分頁#1. 排序# 如果沒有使用排序操作&#xff0c;默認情況下查詢返回的數據是按照添加數據的順序顯示的。 SELECT * FROM employees;# 1.1 基本使用 # 使用 ORDER BY 對查詢到的數據進行排序操作。 # 升序&#xff1a;ASC (ascend) # 降…

【專題一 遞歸】21. 合并兩個有序鏈表

1.題目解析 2.講解算法原理 解法:遞歸-> 重復的子問題 重復子問題 ->函數頭的設計 合并兩個有序鏈表--->Node dfs(l1&#xff0c;l2) 只關心某一個子問題在做什么事情 ->函數體的設計 比大小l1→next dfs( l1.next, l2)return l1 遞歸的出口 if(l1null)return l2…

OpenCV基礎:獲取子矩陣的幾種方式

目錄 相關閱讀 方法一&#xff1a;使用切片操作 方法二&#xff1a;使用高級索引 方法三&#xff1a;使用條件篩選 方法四&#xff1a;使用 numpy 的 take 函數 相關閱讀 OpenCV基礎&#xff1a;矩陣的創建、檢索與賦值-CSDN博客 OpenCV基礎&#xff1a;圖像運算-CSDN博客…