CLI使用案例3:輕鬆跨庫查詢資料並下載到本地

成喆發表於2018-01-31

當你需要查詢資料或者下載到本地時, 是否遇到一些困難:

  • Web查詢不支援跨多個logstore查詢?
  • 現在的Web控制檯只能一頁一頁的下載?
  • SDK提供的介面需要用起來有些複雜, 例如大資料量分頁如何控制, 調整資料的輸出格式化? 需要重試不精確查詢.

如果是的, 你可以使用日誌服務的CLI輕鬆解決這些問題.

查詢日誌

介紹

查詢資料(GetLog)指的是針對索引資料, 在特定時間範圍內搜尋特定的日誌.

查詢日誌的特點是:

  1. 針對獲取索引的資料
  2. 按照索引獲取, 跨分割槽, 支援跨多個logstore查詢
  3. 可以按照主題, 全文分詞, 特定索引域等查詢條件獲取.
  4. 按照日誌資深時間查詢, 而不是伺服器接收.

參考查詢語法以瞭解如何開啟索引以及查詢的相關語法.

查詢日誌

根據設定好的查詢語句查詢資料, 即可通過CLI輕鬆查詢資料. 下面例子查詢某個時間範圍, 某臺伺服器響應速度大於5秒的訪問日誌.

aliyunlog log get_log_all --project_name="p1" --logstore_name="l1" --query="host:test.com and response_time>5000" --from_time="2018-01-24 16:00:00+8:00" --to_time="2018-01-24 17:00:00 +8:00"

這裡拉取從時間2018-01-24 16:00:00+8:002018-01-24 17:00:00+8:00在內滿足條件host:test.com and response_time>5000的日誌, 例如:

{"count": 101, "logs": [{"k1":"a1", "k2":"a2"}, {"k1":"b1", "k2":"b2"}, ... ]}

注意:

  • 這裡也可以使用子命令get_log(s)並傳入size=-1, 但如果資料量特別多時, 例如總行數100萬行的時候, 推薦使用get_log_all.

轉換格式並儲存到檔案

如果期望將資料按照一行一條的形式儲存下來, 一般需要加入jmes-filter進行處理. 如果期望儲存到檔案, 這直接使用>>重定向到檔案即可.

例如:

aliyunlog log get_log_all --project_name="p1" --logstore_name="l1" --query="host:test.com and response_time>5000" --from_time="2018-01-24 16:00:00+8:00" --to_time="2018-01-24 17:00:00 +8:00" --jmes-filter="join(`
`, map(&to_string(@), @))" >> ~/Desktop/test.data

輸出將被儲存在檔案test.data中, 格式為:

{"k1":"a1", "k2":"a2"}
{"k1":"b1", "k2":"b2"}
...

時間格式

時間格式推薦是%Y-%m-%d %H:%M:%S %Z, 如2018-01-24 17:00:00+8:00, 但也支援其他合法的時間格式, 例如:Jan 01 2018 10:10:10+8:00

時間範圍

命令get_log(s)get_log_all傳入的時間範圍, 需要注意幾點:

  1. 這裡的時間指的是解析出的日誌時間(日誌配置沒有指定的情況下, 伺服器接收日誌的時間會設為這個時間).
  2. 時間的範圍是左閉右閉[], 上面例子中16:00:0017:00:00時間的日誌都會獲得.

跨庫查詢

使用介面get_project_logs可以跨庫查詢日誌. 例如:

aliyunlog log get_project_logs --request="{"project":"p1", "query":"select count(1) from logstore1, logstore2, logstore3 where __date__ >`2017-11-10 00:00:00` and __date__ < `2017-11-13 00:00:00`"}"

具體細節可以參考跨庫查詢.

進一步參考


相關文章