---
# System prepended metadata

title: 拋轉地端欄位資料至雲端
tags: [流量監控作業程序]

---

---
tags: 流量監控作業程序
---
# 拋轉地端欄位資料至雲端
將由名為EsmEdgeApp.jar的JAVA程式進行拋轉動作

執行ScheduleTask(進入點)中的三個排程
1. run-透過JAVA_API向Elasticsearch搜索其告警資料並送出至雲端的RabbitMQ，其區間段為前3分30秒~前31秒，並標記其送出資料狀態為已送出(dump_status=1)，週期為3分鐘一次
2. runCheckData-檢查雲端資料是否一次，透過API去比對雲端存取的資料及Edge端是否相同，若比對後皆以存在則標註狀態為已存在(dump_status=3)，若無則再傳送一次並標誌狀態為檢查後重送(dump_status=1.1)，其週期為開啟後延遲10秒執行，之後每1小時執行一次
3. runCheckDataForDay-檢查前一天到前三十天之內的資料是否有送出，狀態為非3、或非1.2的一律送出，並再標注狀態為檢查後重送、並不再補送(dump_status=1.2)，其週期為每天凌晨0時0分執行一次

## run
依照Elasticsearch的ingest_timestamp時間區間及dump_status去收尋特定的index資料，所以當未設定此欄位資料可能會導致抓不到資料亦或抓到所有的ES資料

將抓取的資料打包成json字串成一個清單(EX:alert_data_detail)及設定key值來讓雲端RabbitMQ監聽存取
```
map.put(SystexConstants.JSON_KEY_ALERT_DATA_DETAIL, sList);

map.put(SystexConstants.JSON_KEY_WINLOG_DATA_DETAIL, sList2);
```
此map傳輸到雲端RabbitMQ後會轉換成JSON的字串，雲端的RabbitMQ監聽器會依造這個map的key去對應將資料打到指定的index

|Edge端ES(xxx=202008)的index key|傳送到RabbitMQ的key|雲端ES(xxx=202008) 的index key|
|-|-|-|
|suricata-xxx|alert_data_detail|soc_r_suricata-xxx|
|winlog-xxx|winlog_data_detail|soc_r_winlog-xxx|

## runCheckData

檢查雲端與Edge端資料是否一致，若無需補送資料且更改dump_status欄位

|狀態編碼(dump_status)|代表含意|
|-|-|
|0|初始化表示一定要送|
|1|已送達RabbitMQ|
|1.1|已補送，還可能在進行處理|
|1.2|每日補送，未來不在處理|
|3|確定已存在，並不在處理|

會依據ingest_timestamp的時間區間(66m30s~6m30s前)以及儲存於location.properties及環境變數中的三階層組織代碼，使用雲端API抓取雲端上Elasticsearch的edge_index及edge_es_id兩個欄位的資料

比對地端Edge此兩筆欄位資料
若已存在則將Edge端dump_status改為3

再以相同的ingest_timestamp時間區間，過濾雲端ES已存在的資料，找尋dump_status非1.2及1.3的資料，將之送出並更改dump_status為1.1

## runCheckDataForDay
抓取ingest_timestamp時間區間為前31天到前1天的資料，尋找dump_status非1.2以及非3的資料將這些資料都送出，並更改dump_status為1.2






