594
windows
投遞日誌到OSS__logshipper_用戶指南_日誌服務-阿裏雲
日誌服務可以把Logstore中的數據自動歸檔到OSS,以發揮日誌更多的效用:
- OSS數據支持自由設置生命周期,可以對日誌進行長期存儲。
- 可以通過自建程序和更多係統(如E-MapReduce)消費OSS數據。
通過日誌服務投遞日誌數據到OSS具有如下優勢:
- 使用非常簡單。隻需要完成幾步配置即可以把日誌服務Logstore的數據同步到OSS。
- 避免重複收集工作。日誌服務的日誌收集過程已經完成不同機器上的日誌集中化,無需重複在不同機器上收集日誌導入OSS。
- 充分複用日誌服務內的日誌分類管理工作。用戶可讓日誌服務不同項目(Project)、不同類型(Logstore)的日誌自動投遞到不同的OSS Bucket目錄,方便管理OSS數據。
以一個例子說明如何使用日誌服務的OSS投遞功能,假設兩個阿裏雲用戶主賬號A、B:
- A和B可以是相同賬號,這種情況下RAM授權最為便捷。
- 日誌服務Project和OSS的Bucket必須位於相同Region,不支持跨Region投遞數據。
主賬號A在日誌服務深圳Region開通project-a,並創建了一個Logstore存放nginx訪問日誌。
主賬號B在OSS深圳Region創建了bucket-b。
用戶希望將日支服務project-a的nginx訪問日誌歸檔到bucket-b的prefix-b目錄下。
使用日誌服務投遞OSS功能,需要完成RAM授權、投遞規則配置兩個步驟。
訪問控製(RAM)授權
快捷授權
主賬號B登陸阿裏雲控製台,免費開通訪問控製RAM。
點擊權限控製RAM快捷授權頁,確認授予寫OSS所有Bucket權限,日誌服務將替A扮演角色寫B的OSS Bucket。
查看、修改角色
主賬號B登陸阿裏雲控製台訪問控製RAM,進入“角色管理”並查看角色(快捷授權默認創建的角色是AliyunLogDefaultRole)。
若A、B不相同,請修改Role。若A、B相同,則快捷授權創建的角色直接可用。
記錄角色的Arn(如acs:ram::1323431815622349:role/aliyunlogdefaultrole),該Arn需要提供給主賬號A創建OSS投遞規則時使用。
快捷授權默認會授予寫B的所有OSS Bucket權限,如需更精細化的權限控製,請修改Policy。
使用子賬號創建投遞規則授權
在B創建角色、授權完成之後,主賬號A有權限使用主賬號B創建的角色寫數據到OSS Bucket,但這僅限於主賬號A本身創建投遞規則。
如果主賬號A的子賬號a_1希望使用該角色創建投遞規則,請進行PassRole授權。
日誌服務用戶配置OSS投遞規則
登陸日誌服務控製台,選擇Logstore,查看“日誌消費模式”並“創建投遞規則”,需要設置的參數如下:
參數 | 語義 |
---|---|
OSS Bucket | OSS Bucket名稱,需要保證OSS的Bucket與日誌服務Project位於相同Region |
OSS Prefix | 從日誌服務同步到OSS的數據將存放到Bucket的該目錄下 |
RAM角色 | 用於訪問權限控製,OSS Bucket擁有者創建角色的標示,如“acs:ram::1323431815622349:role/aliyunlogdefaultrole” |
投遞大小 | 自動控製投遞任務創建間隔並設置OSS的一個Object大小(以未壓縮計算)上限,單位:MB |
投遞時間 | 相隔多長時間生成一次投遞任務,默認值300,單位:秒 |
是否壓縮 | OSS數據存儲的壓縮方式,支持:none、snappy。其中,none表示原始數據不壓縮,snappy表示使用snappy算法對數據做壓縮,可以減少OSS Bucket存儲空間使用量 |
日誌服務在後端並發執行數據投遞,如果您的數據量較大,可能會多個投遞線程進行服務。每一個投遞線程都會根據大小、時間共同決定任務生成的頻率,當任一條件滿足時,投遞線程即會創建任務。
投遞任務管理
在啟動“OSS投遞功能”後,日誌服務後台會定期啟動投遞任務。用戶可以在控製台上看到這些投遞任務的狀態。
參考日誌投遞任務管理了解更多控製台操作細節。
如果投遞任務執行失敗,控製台上會顯示相應的錯誤信息,係統會按照策略默認為你重試,你也可以手動重試。
任務重試
一般情況下,日誌數據在寫入Logstore後的30分鍾內同步到OSS。
日誌服務默認會按照退火策略重試最近兩天之內的任務,重試等待的最小間隔是15分鍾。當任務執行失敗時,第一次失敗需要等待15分鍾再試,第二次失敗需要等待30分鍾(2乘以15)再試,第三次失敗需要等待60分鍾(2乘以30)再試,以此類推。
如需立即重試失敗任務,可以通過控製台點擊“重試”按鈕或通過API/SDK方式指定任務進行重試。
失敗任務錯誤
常見失敗任務的錯誤信息如下:
錯誤信息 | 處理方法 |
---|---|
UnAuthorized | 沒有權限,請確認:1. OSS用戶是否已創建角色;2. 角色描述的賬號ID是否正確; 3. 角色是否授予OSS Bucket寫權限; 4. role-arn是否配置正確。 |
ConfigNotExist | 配置不存在,一般是由於刪除投遞規則導致,如又重新創建了規則,可以通過重試來解決。 |
InvalidOssBucket | OSS Bucket不存在,請確認:1. OSS Bucket所在Region是否與日誌服務Project一致; 2. Bucket名稱是否配置正確。 |
InternalServerError | 日誌服務內部錯誤,通過重試來解決。 |
OSS中查看數據
可以通過控製台、API/SDK或其它方式訪問到OSS數據。
如使用web管理控製台訪問,進入OSS服務,選擇Bucket,點擊“Object管理”即可看到有日誌服務投遞過來的數據。
更多OSS使用細節請參考OSS文檔。
Object地址
- 地址格式
oss:// OSS-BUCKET/OSS-PREFIX/YEAR/MONTH/DAY/HOUR/MINUTE_NANOSECOND_INCREMENTID(.snappy)
例如:
oss://oss-shipper-shenzhen/ecs_test/2016/01/26/20/54_1453812893059571256_937
oss://oss-shipper-shenzhen/ecs_test/2016/01/26/19/54_1453809273944944933_5.snappy
- 字段
OSS-BUCKET、OSS-PREFIX表示OSS的Bucket名稱和目錄前綴,由用戶配置,INCREMENTID是係統添加的隨機數。
YEAR,MONTH,DAY,HOUR,MINUTE,NANOSECOND分別表示年、月、日、小時、分鍾、納秒,由本次投遞任務的服務端創建時間計算得到。
假設5分鍾數據投遞一次OSS,2016-06-23 00:00:00創建的投遞任務,它投遞是數據是2016-06-22 23:55左右後寫入日誌服務的數據。如需分析完整的2016-06-22全天日誌,除了2016/06/22目錄下的全部object以外,還需要檢查2016/06/23/00/目錄下前十分鍾的object是否有包含2016-06-22時間的日誌。
根據文件後綴,分兩種格式:raw(不壓縮,無文件後綴),snappy(壓縮,文件後綴為.snappy)。
raw格式(不壓縮)
Object由多條日誌拚接而成,文件的每一行是一條日誌,json格式,樣例如下:
{"__time__":1453809242,"__topic__":"","__source__":"10.170.148.237","ip":"10.200.98.220","time":"26/Jan/2016:19:54:02 +0800","url":"POST /PutData?Category=YunOsAccountOpLog&AccessKeyId=U0UjpekFQOVJW45A&Date=Fri%2C%2028%20Jun%202013%2006%3A53%3A30%20GMT&Topic=raw&Signature=pD12XYLmGxKQ%2Bmkd6x7hAgQ7b1c%3D HTTP/1.1","status":"200","user-agent":"aliyun-sdk-java"}
json由用戶日誌自定義key-value和日誌服務的保留字段組成,其中,日誌服務添加的保留字段有如下幾個:
日誌服務保留字段 | 語義 |
---|---|
__time__ | 日誌的Unix時間戳(是從1970年1月1日開始所經過的秒數),由用戶日誌字段的time計算得到 |
__topic__ | 日誌的topic |
__source__ | 日誌來源的客戶端IP |
snappy格式(壓縮)
采用snappy官網的C++實現(Snappy.Compress方法),對none格式數據做文件級別的壓縮得到。對.snappy文件解壓縮後即可得到對應的none格式文件。
- 使用C++ Lib解壓縮
snappy官網右側下載Lib,執行Snappy.Uncompress方法解壓。
- 使用Java Lib
xerial snappy-java,可以使用Snappy.Uncompress或Snappy.SnappyInputStream(不支持SnappyFramedInputStream)。
<dependency>
<groupId>org.xerial.snappy</groupId>
<artifactId>snappy-java</artifactId>
<version>1.0.4.1</version>
<type>jar</type>
<scope>compile</scope>
</dependency>
注:1.1.2.1版本存在bug可能無法解壓部分壓縮文件,至1.1.2.6版本修複。
Snappy.Uncompress
String fileName = "C:\我的下載\36_1474212963188600684_4451886.snappy";
RandomAccessFile randomFile = new RandomAccessFile(fileName, "r");
int fileLength = (int) randomFile.length();
randomFile.seek(0);
byte[] bytes = new byte[fileLength];
int byteread = randomFile.read(bytes);
System.out.println(fileLength);
System.out.println(byteread);
byte[] uncompressed = Snappy.uncompress(bytes);
String result = new String(uncompressed, "UTF-8");
System.out.println(result);
Snappy.SnappyInputStream
String fileName = "C:\我的下載\36_1474212963188600684_4451886.snappy";
SnappyInputStream sis = new SnappyInputStream(new FileInputStream(fileName));
byte[] buffer = new byte[4096];
int len = 0;
while ((len = sis.read(buffer)) != -1) {
System.out.println(new String(buffer, 0, len));
}
- Linux環境解壓工具
針對Linux環境,我們提供了工具進行解壓snappy文件,點擊下載snappy_tool。
./snappy_tool 03_1453457006548078722_44148.snappy 03_1453457006548078722_44148
compressed.size: 2217186
snappy::Uncompress return: 1
uncompressed.size: 25223660
RAM授權進階
授權Role管理
通過快捷授權,OSS用戶主賬號B默認創建的AliyunLogDefaultRole角色描述如下:
{
"Statement": [
{
"Action": "sts:AssumeRole",
"Effect": "Allow",
"Principal": {
"Service": [
"log.aliyuncs.com"
]
}
}
],
"Version": "1"
}
如日誌服務用戶主賬號A與OSS用戶主賬號B相同,保持默認角色描述即可,”log.aliyuncs.com”等價於”B_ALIYUN_ID@log.aliyuncs.com”。
否則,請登陸賬號管理->安全設置查看A賬號ID並修改角色描述,添加”A_ALIYUN_ID@log.aliyuncs.com”(支持添加多個),假設A的主賬號ID為1654218965343050:
{
"Statement": [
{
"Action": "sts:AssumeRole",
"Effect": "Allow",
"Principal": {
"Service": [
"1654218965343050@log.aliyuncs.com",
"log.aliyuncs.com"
]
}
}
],
"Version": "1"
}
該角色描述A有權限通過日誌服務獲取臨時Token來操作B的資源(細節請參考權限控製STS)。
授權Policy管理
通過快捷授權,角色AliyunLogDefaultRole默認被授予AliyunLogRolePolicy,具有寫用戶B所有OSS Bucket的權限。
AliyunLogRolePolicy的授權描述如下:
{
"Version": "1",
"Statement": [
{
"Action": [
"oss:PutObject"
],
"Resource": "*",
"Effect": "Allow"
}
]
}
若希望更精細的訪問控製粒度,請解除角色AliyunLogDefaultRole的AliyunLogRolePolicy授權,並參考OSS授權創建更細粒度的Policy,授權給角色AliyunLogDefaultRole。
主子賬號Role授權
默認情況下,OSS用戶主賬號B為日誌服務主賬號A創建角色、授權後,由A使用角色在日誌服務創建OSS投遞配置。
如果A的子賬號a_1需要使用該角色創建日誌投遞數據到OSS規則,那麼,主賬號A需要為子賬號a_1授予PassRole權限。
進入阿裏雲“訪問控製”控製台,主賬號A可以為子賬號a_1授予AliyunRAMFullAccess權限。如此,a1將具備RAM所有權限,可以使用B為A創建的角色來配置日誌服務投遞OSS規則。
AliyunRAMFullAccess權限較大,如果A需要控製a_1的權限範圍,隻授予投遞OSS的必須權限,可以修改授權策略的Action、Resource,如下示例:
{
"Statement": [
{
"Action": "ram:PassRole",
"Effect": "Allow",
"Resource": "acs:ram::1323431815622349:role/aliyunlogdefaultrole"
}
],
"Version": "1"
}
最後更新:2016-11-24 11:23:47
上一篇:
通過StreamCompute消費__loghub-消費_用戶指南_日誌服務-阿裏雲
下一篇:
投遞日誌到ODPS__logshipper_用戶指南_日誌服務-阿裏雲
文件類型占比__資源監控接口_API 手冊_CDN-阿裏雲
實例被安全鎖定時API的行為__附錄_API 參考_雲服務器 ECS-阿裏雲
InitiateMultipartUpload__關於MultipartUpload的操作_API 參考_對象存儲 OSS-阿裏雲
查詢時刻網絡帶寬__資源監控接口_API 手冊_CDN-阿裏雲
SSH 連接時出現如下錯誤:pam_unix(sshdsession) session closed for user__遠程登錄 (SSH)_Linux操作運維問題_雲服務器 ECS-阿裏雲
消費消息示例代碼__Java SDK_SDK使用手冊_消息服務-阿裏雲
阿裏雲攜手德施曼等ICA聯盟企業聯合發布《中國智能鎖應用與發展白皮書》!
LogHub-協同消費組__Getting-Started_日誌服務-阿裏雲
性能監控__用戶指南_雲數據庫 Redis 版-阿裏雲
創建報警任務__報警任務_用戶指南_彈性伸縮-阿裏雲
相關內容
常見錯誤說明__附錄_大數據計算服務-阿裏雲
發送短信接口__API使用手冊_短信服務-阿裏雲
接口文檔__Android_安全組件教程_移動安全-阿裏雲
運營商錯誤碼(聯通)__常見問題_短信服務-阿裏雲
設置短信模板__使用手冊_短信服務-阿裏雲
OSS 權限問題及排查__常見錯誤及排除_最佳實踐_對象存儲 OSS-阿裏雲
消息通知__操作指南_批量計算-阿裏雲
設備端快速接入(MQTT)__快速開始_阿裏雲物聯網套件-阿裏雲
查詢API調用流量數據__API管理相關接口_API_API 網關-阿裏雲
使用STS訪問__JavaScript-SDK_SDK 參考_對象存儲 OSS-阿裏雲