
背景
使用日志服務是不是常常遇到如下煩惱?
- 開啟了字段索引卻無法對曆史日志起作用,而手動重建索引又很困難怎麼辦?
- 需要遷移資料,複制資料到其他區域logstore,寫代碼實作大并發複制又很複雜怎麼辦?
- 投遞日志到OSS/ODPS僅僅對新資料起作用,又想投遞曆史日志怎麼辦?
現在使用CLI就可以幫你輕松實作這些操作。
介紹
複制資料(CopyData)支援将特定時間範圍内的logstore的資料複制到特定logstore中去。其具備如下一些特點:
- 沒有索引的資料也可以同步.
- 速度快, 易并發, 且支援傳輸壓縮.
- 拉取的資料按照伺服器接受的時間排序.
- 支援跨域、跨項目庫複制。
- 支援複制資料到同一個logstore(重新索引)。
前提
這裡假設已經完成了CLI的
安裝.
配置多區域賬戶
首先CLI中配置多個區域賬戶, 以便後續操作, 這一步也是一次性的. 如果之前已經做過, 這裡可以跳過.
這裡配置2個域的賬戶, 一個杭州公有雲, 一個北京公有雲.
> aliyunlog configure AKID****123 AKKEY****123 cn-hangzhou.log.aliyuncs.com
> aliyunlog configure AKID****123 AKKEY****123 cn-beijing.log.aliyuncs.com bj
注意: 這裡的最後一個參數, 僅僅用于表明這個賬戶的名字, 以便後續使用. 不傳入預設是
main
, 也是預設使用的賬戶, 這裡使用杭州的賬戶作為預設賬戶.
參考:
重新索引
如果因為某些特定原因,某個時間範圍内的日志沒有建立索引,無法被查詢和統計。可以如下操作将日志重新寫入,就可以實作重新索引的效果。
例如:
aliyunlog log copy_data --project="源project" --logstore="源logstore" --from_time="2018-09-05 0:0:0+8:00" --to_time="2018-09-06 0:0:0+8:00"
這裡将杭州區域的
源project
的
源logstore
中伺服器在時間範圍["2018-09-05 0:0:0+8:00","2018-09-06 0:0:0+8:00")内接收到的資料,重新寫入到
源logstore
中去。
注意:
這裡僅僅是複制一份資料進入目标logstore,并在寫入時自動對其索引,原來的沒有被索引的日志依然存在。
跨區域複制資料
有時需要将某一個logstore的日志遷移到另外一個logstore中去時,可以如下操作:
準備好目标logstore
假設目标logstore已經建立好了,并且配置好了索引。這一步操作可以在Web控制台完成,也可以通過CLI的
複制logstore配置來完成,或者使用CLI的
create_logstore建立日志庫,再配置索引,通過指令
get_index_config擷取索引,調用指令
create_index來實作。
複制資料
aliyunlog log copy_data --project="源項目" --logstore="源logstore" --from_time="2018-09-05 0:0:0+8:00" --to_time="2018-09-06 0:0:0+8:00" --to_project="目标project" --to_logstore="目标logstore" --to_client="bj"
源project
源logstore
中伺服器在時間範圍["2018-09-05 0:0:0+8:00","2018-09-06 0:0:0+8:00")内接收到的資料,寫入到
北京
區域的
目标project
目标logstore
注意:
這裡用
--to_client
指定操作目标project的賬戶為
bj
,是前面前提中配置的賬戶名。
投遞曆史日志到OSS/ODPS
日志服務的投遞任務配置好後,僅僅對新接受資料産生作用。這裡也可以借助複制資料來實作投遞曆史日志的效果:
- 建立一個臨時的logstore(不需要配置索引)
- 在臨時logstore上配置投遞OSS/ODPS的任務
- 複制需要投遞的日志到目标logstore
- 投遞結束後,删除臨時logstore
時間格式
時間格式推薦是
%Y-%m-%d %H:%M:%S %Z
, 如
2018-01-24 17:00:00+8:00
, 但也支援其他合法的時間格式, 例如:
Jan 01 2018 10:10:10+8:00
+8:00
是時區資訊.
CLI還支援更多其他格式的時間格式,例如
2 day ago
等,參考
這裡時間範圍
傳入的時間範圍, 需要注意幾點:
- 這裡的時間指的是伺服器接受日志的時間
- 時間的範圍是左閉右開
, 上面例子中[)
伺服器接受到的日志會被拉取到, 但是16:00:00
伺服器所接受到的日志不會.17:00:00
特殊的時間範圍
有時我們不關心資料的某一邊界, 例如期望獲得所有存儲的資料到某一天日期位置. 或者擷取從某一天開始到目前存儲的資料為止的話, 就可以使用特殊遊标.
特殊遊标包括
begin
和
end
. 例如:
aliyunlog log copy_data --project="p1" --logstore="l1" --from_time="begin" --to_time="2018-01-24 17:00:00+8:00" --to_logstore="l2"
這裡複制所有
2018-01-24 17:00:00+8:00
之前伺服器接收到的日志到logstore
l2
。
又例如:
aliyunlog log copy_data --project="p1" --logstore="l1" --from_time="2018-01-24 17:00:00+8:00" --to_time="end" --to_logstore="l2"
2018-01-24 17:00:00+8:00
開始及之後伺服器接收到的日志到logstore
l2
進一步參考
- 阿裡雲日志服務
- 阿裡雲日志服務CLI (Github開源)
- 掃碼加入官方釘釘群 (11775223):
CLI使用案例7:使用CLI進行高速跨域日志複制、曆史資料重新索引與數倉投遞