CloudWatch 的 Filter 功能,主要的目的好像是用來觀察指定的事件在某個時間區段中的發生狀況
所以總歸來說,適用在想要把結果劃成折線圖那種的狀況。
例如 AWS 官網給的範例 [2],都是屬於建立 Filter 去偵測某個特定樣式的 log 是否出現
出現的話,在 Metric 上會反應出「事件出現次數 +1」
然後最後在 CloudWatch 的 Metrics 那邊,就能夠以折線圖的形式,看到例如每分鐘這個事件的發生狀況。
Software entities (class, modules, functions, etc.) should be open for extension, but closed for modification.
- Bertrand Meyer
Junior programmers create simple solutions to simple problems. Senior programmers create complex solutions to complex problems. Great programmers find simple solutions to complex problems.
- Charles Connell
註1:本部落格的範例程式碼在 2015 年以前的文章中,大多是以全型空白做縮排。如需服用,請自行用文字編輯器的取代功能把全型空白取代成半型空白。
註2:本部落格的內容授權請參閱部落格底部的授權宣告。
CloudWatch 的 Filter 功能,主要的目的好像是用來觀察指定的事件在某個時間區段中的發生狀況
所以總歸來說,適用在想要把結果劃成折線圖那種的狀況。
例如 AWS 官網給的範例 [2],都是屬於建立 Filter 去偵測某個特定樣式的 log 是否出現
出現的話,在 Metric 上會反應出「事件出現次數 +1」
然後最後在 CloudWatch 的 Metrics 那邊,就能夠以折線圖的形式,看到例如每分鐘這個事件的發生狀況。
DynamoDB 上的紀錄,都會有像是 {“S”: “XXX”} 之類的格式,用以表示它在 DynamoDB 裡的型態
不過程式在處理時,這樣很麻煩~。
實務上,AWS SDK 裡提供了一些方法,可以幫我們去掉那些多餘的東西。
具體來說,例如以下的程式碼:
1 2 3 4 5 6 7 8 |
ScanRequest scan = new ScanRequest(); ScanResult result = dynamodbClient.scan(scan); Gson gson = new GsonBuilder().build(); for (Map item : result.getItems()) { JsonElement json = gson.toJsonTree(InternalUtils.toSimpleMapValue(item)); } |
上述的程式碼,是假設對一個 DynamoDB 的表格做 scan 操作
操作完以後,要把 scan 出來的結果,用 GSON 轉成 JsonElement 的型態。
這裡透過 com.amazonaws.services.dynamodbv2.document.internal.InternalUtils 這個套件
就能夠去掉欄位型態這個東西,讓結果成為單純的 JSON。
一般來說,Lambda 都是透過中介服務去觸發的
例如透過 DynamoDB Stream、SNS、Kinesis、S3 等等的
當這些服務發生變更時,發送訊息觸發 Lambda。
不過實務上,Lambda 本身只要具備 Invoke 權限,就能夠直接透過 AWS 的 Lambda API 去觸發另一個 Lambda。
在使用 SNS 時,需要考慮如果接收端處理 message 失敗了該怎麼辦?
如果沒有做特殊的設定,預設 SNS 是會直接走 Backoff Phase,重試三次、每次延遲 20 秒。
不過如果想要更多一點的重試,或者想設定比較複雜的行為,就需要稍微了解一下 SNS 的 Delivery Policy。
因為想要監控 Elasticsearch,所以就試著安裝了 X-Pack。
X-Pack 安裝流程請直接參考官方文件 [1] XD
因為只有幾個動作而已,這裡就省略了。
以我的狀況來說,因為我的 Elasticsearch 有使用一些有限定版本的擴充套件
因此要避免 yum 不小心幫我把 Elasticsearch 升級。
要作到這個效果,可以使用 versionlock 這個工具
例如以下這樣,可以把 elasticsearch 和 kibana 套件鎖在目前安裝的版本上。
1 2 3 |
yum install yum - plugin - versionlock yum versionlock elasticsearch - * yum versionlock kibana - * |
在書上的範例中,提到用鐵達尼號的資料做分析
不過書上範例所指的資料位址已經無法存取了。
稍微搜尋了一下,發現 Kaggle 也有提供這個資料 [1],而且是免費的。
從 [1] 下載資料下來之後,假設是放在 D:\test\data\titanic 這個資料夾裡,訓練用的資料命名為 train.csv
1 2 3 4 5 6 7 |
import pandas training_data_path = "D:\\test\\data\\titanic\\train.csv" # Read training data. training_data = pandas.read_csv(training_data_path) print (training_data) |
路徑要記得跳脫,才能正確找到檔案。
1 |
conda create --name tensorflow python=3.5 anaconda |
1 |
activate tensorflow |
1 |
pip install tensorflow |
1 |
conda install --force html5lib |
1 |
pip install keras |