applicaiton.yml 日志配置_底层基于Apache Hudi的DLA最佳实践 海量、低成本日志分析...
背景信息
日志作為一種特殊的數(shù)據(jù),對(duì)處理歷史數(shù)據(jù)、診斷問題以及了解系統(tǒng)活動(dòng)等有著非常重要的作用。對(duì)數(shù)據(jù)分析人員、開發(fā)人員或者運(yùn)維人員而言,日志都是其工作過程中必不可缺的數(shù)據(jù)來源。
通常情況下,為節(jié)約成本,我們會(huì)將日志設(shè)定一定的保存時(shí)間,只分析該時(shí)間段內(nèi)的日志,此類日志稱之為“熱”日志。這種做法,短期內(nèi)可以滿足使用需求,但從長(zhǎng)期來看,大量的歷史日志被擱置,無法發(fā)揮其價(jià)值。
對(duì)于許多企業(yè)而言,對(duì)日志分析的需求特征通常為低時(shí)效和低頻率。并且在一個(gè)企業(yè)中,為偶發(fā)性的日志分析去構(gòu)建一套完整的日志分析系統(tǒng),無論在經(jīng)濟(jì)成本還是運(yùn)維成本上都是不劃算的。如何在降低存儲(chǔ)成本的同時(shí)滿足大批量日志的分析需求,是擺在企業(yè)面前的一道難題。
實(shí)施方案
阿里云從用戶角度出發(fā),研發(fā)了一整套小而精的歷史日志數(shù)據(jù)分析方案。利用阿里云日志服務(wù) LOG(Log Service,簡(jiǎn)稱LOG/原SLS)來投遞日志,阿里云對(duì)象存儲(chǔ)服務(wù)(Object Storage Service,簡(jiǎn)稱OSS)來存儲(chǔ)日志,Data Lake Analytics(DLA)來分析日志。該方案有以下三個(gè)優(yōu)勢(shì):
LOG是針對(duì)實(shí)時(shí)數(shù)據(jù)一站式服務(wù),在阿里集團(tuán)經(jīng)歷大量大數(shù)據(jù)場(chǎng)景錘煉而成。提供日志類數(shù)據(jù)采集、智能查詢分析、消費(fèi)與投遞等功能,全面提升海量日志處理/分析能力。LOG強(qiáng)大的日志投遞能力,能夠從源頭對(duì)接各種類型的日志格式,并且穩(wěn)定地將日志投遞到指定的位置。
OSS低廉的存儲(chǔ)成本,能夠讓您的日志文件存儲(chǔ)任意長(zhǎng)的時(shí)間。
DLA強(qiáng)大的分析能力,Serverless的架構(gòu),按掃描量收費(fèi)。DLA可以對(duì)投遞到OSS上的日志按年、按月、按日進(jìn)行多維度的分區(qū),提高日志的命中率,降低掃描量,從而以極低的成本、極高的性能來完成大數(shù)據(jù)量歷史日志分析。
例如,服務(wù)部署在云服務(wù)器ECS(Elastic Compute Service,簡(jiǎn)稱ECS)集群上,該集群的每臺(tái)機(jī)器上都有一個(gè)記錄訪問情況的日志access.log。我們需要提取access.log中的信息,并將過濾后的信息存儲(chǔ)至OSS上。本文檔將以此為例,詳細(xì)為您介紹實(shí)施步驟。
前提條件
在開始實(shí)施步驟之前,需要先完成以下準(zhǔn)備工作。
參考文檔LOG快速入門,開通日志服務(wù)、創(chuàng)建項(xiàng)目、創(chuàng)建日志庫(kù)。
開通OSS服務(wù)、在日志服務(wù)項(xiàng)目所在的地域創(chuàng)建存儲(chǔ)空間。
開通并初始化DLA服務(wù)。
實(shí)施步驟
步驟一:通過Logtail采集ECS日志
詳細(xì)操作請(qǐng)參見通過Logtail采集ECS日志。
根據(jù)本示例中的日志文件特點(diǎn),Logtail配置如下所示。
模式選擇完整正則模式,需要提供完整正則表達(dá)式。
步驟二:投遞日志到OSS
詳細(xì)操作請(qǐng)參見投遞日志到OSS,并且日志服務(wù)投遞OSS使用Parquet存儲(chǔ)的相關(guān)配置。
在OSS投遞功能頁面,配置各項(xiàng)參數(shù):
參數(shù)說明:
OSS Bucket和OSS Prefix設(shè)置日志投遞到OSS的哪個(gè)目錄。
修改分區(qū)格式,將分區(qū)列的名字填入到目錄中,格式為分區(qū)列名=分區(qū)列值。
如圖所示,修改分區(qū)格式默認(rèn)值,即一級(jí)分區(qū)列的列名為year,列值為%Y;二級(jí)分區(qū)列的列名為month,列值為%m;三級(jí)分區(qū)列的列名為day,列值為%d。
存儲(chǔ)格式設(shè)置為parquet。
壓縮方式設(shè)置為snappy,使用snappy算法對(duì)數(shù)據(jù)做壓縮,可以減少OSS Bucket存儲(chǔ)空間使用量。
日志數(shù)據(jù)投遞到OSS中以后,就可以通過DLA讀取并分析OSS中的日志。
步驟三:在DLA中創(chuàng)建OSS連接
登錄DLA控制臺(tái),登錄DMS,在DLA中創(chuàng)建一個(gè)到OSS的連接。語法如下:
CREATE SCHEMA oss_log_schema with DBPROPERTIES( catalog='oss', location = 'oss://myappbucket/sls_parquet/' );location:日志文件所在的OSS Bucket的目錄,需以/結(jié)尾表示目錄。myappbucket是OSS Bucket名字。
步驟四:在DLA中創(chuàng)建指向OSS日志文件的外表(分區(qū)表)
CREATE EXTERNAL TABLE sls_parquet ( content STRING, client STRING, process_id STRING, start_time STRING, total_time STRING, status STRING, original_sql STRING, rewritten_sql STRING ) PARTITIONED BY (year STRING, month STRING, day STRING) STORED AS PARQUET LOCATION 'oss://myappbucket/sls_parquet/';“
注意:
新建表中的列名要和生成的parquet文件中設(shè)置的列名一致。
分區(qū)列的名稱、順序需要和步驟二:投遞日志到OSS中的分區(qū)列一致。更多創(chuàng)建分區(qū)表信息,請(qǐng)參見通過DLA創(chuàng)建OSS分區(qū)表。
步驟五:使用MSCK命令更新分區(qū)信息
外表創(chuàng)建成功后,執(zhí)行MSCK REPAIR TABLE將分區(qū)信息同步到DLA中。MSCK命令只能識(shí)別符合DLA分區(qū)列命名規(guī)則的目錄,即分區(qū)列的目錄名為分區(qū)列名=分區(qū)列值。
class="code-tools"> class="theme-switch-btn">class="copy-btn">class="prettyprint linenums prettyprinted" style="">class="linenums">class="L0">class="lang-sql hljs">class="pln">MSCK class="hljs-keyword">REPAIR class="hljs-keyword">TABLE sls_parquetclass="pun">;class="pre-scrollbar-track" style="display: none;width: 100%;height: 4px;margin-bottom: 16px;"> class="pre-scrollbar-thumb" style="height: 100%;background-color: #d7d8d9;position: relative;">步驟六:查詢分區(qū)表數(shù)據(jù)
分區(qū)信息同步完成后,使用SELECT語句對(duì)日志進(jìn)行查詢分析。例如,得到某一天查詢最慢的5條語句。
class="code-tools"> class="theme-switch-btn">class="copy-btn">class="prettyprint linenums prettyprinted" style="">class="linenums">class="L0">class="lang-sql hljs">class="pln">class="hljs-keyword">SELECT original_sqlclass="pun">,class="pln"> total_time class="L1">class="lang-sql hljs">class="pln">FROM sls_parquet class="L2">class="lang-sql hljs">class="pln">WHERE clientclass="pun">!=class="str">''class="pln"> class="L3">class="lang-sql hljs">class="pln">ORDER BY total_time DESC class="L4">class="lang-sql hljs">class="pln">LIMIT class="lit">5class="pun">;class="pre-scrollbar-track" style="display: none;width: 100%;height: 4px;margin-bottom: 16px;"> class="pre-scrollbar-thumb" style="height: 100%;background-color: #d7d8d9;position: relative;">后續(xù)操作
上述示例中,日志數(shù)據(jù)投遞OSS的存儲(chǔ)格式為Parquet格式,除了Parquet格式,LOG還可以將投遞文件的格式設(shè)置為JSON和CSV。詳細(xì)的配置,請(qǐng)參見JSON格式和CSV格式。
JSON格式
當(dāng)投遞文件的格式設(shè)置為JSON且無壓縮時(shí),建表語句為:
CREATE EXTERNAL TABLE sls_json ( content STRING, client STRING, process_id STRING, start_time STRING, total_time STRING, status STRING, original_sql STRING, rewritten_sql STRING ) PARTITIONED BY (year STRING, month STRING, day STRING) STORED AS JSON LOCATION 'oss://myappbucket/sls_json/';當(dāng)投遞文件的格式設(shè)置為JSON且使用標(biāo)準(zhǔn)Snappy壓縮時(shí),建表語句為:
CREATE EXTERNAL TABLE sls_json_snappy ( content STRING, client STRING, process_id STRING, start_time STRING, total_time STRING, status STRING, original_sql STRING, rewritten_sql STRING ) PARTITIONED BY (year STRING, month STRING, day STRING) STORED AS JSON LOCATION 'oss://myappbucket/sls_json_snappy/' TBLPROPERTIES( 'text.compression'='snappy', 'io.compression.snappy.native'='true' );CSV格式
當(dāng)投遞文件的格式設(shè)置為CSV,不包含header,使用標(biāo)準(zhǔn)Snappy壓縮時(shí),建表語句為:
CREATE EXTERNAL TABLE sls_csv_snappy ( content STRING, client STRING, process_id STRING, start_time STRING, total_time STRING, status STRING, original_sql STRING, rewritten_sql STRING ) PARTITIONED BY (year STRING, month STRING, day STRING) ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.OpenCSVSerde' WITH SERDEPROPERTIES( 'separatorChar'=',', 'quoteChar'='"', 'escapeChar'='\\' ) STORED AS TEXTFILE LOCATION 'oss://myappbucket/sls_csv_snappy/' TBLPROPERTIES( 'text.compression'='snappy', 'io.compression.snappy.native'='true', 'skip.header.line.count'='0' );當(dāng)投遞文件的格式設(shè)置為CSV無壓縮,且包含header時(shí),建表語句為:
CREATE EXTERNAL TABLE sls_csv ( content STRING, client STRING, process_id STRING, start_time STRING, total_time STRING, status STRING, original_sql STRING, rewritten_sql STRING ) PARTITIONED BY (year STRING, month STRING, day STRING) ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.OpenCSVSerde' WITH SERDEPROPERTIES( 'separatorChar'=',', 'quoteChar'='"', 'escapeChar'='\\' ) STORED AS TEXTFILE LOCATION 'oss://myappbucket/sls_csv/' TBLPROPERTIES( 'skip.header.line.count'='1' );推薦
阿里云Data Lake Analytics是Serverless化的交互式聯(lián)邦查詢服務(wù)。使用標(biāo)準(zhǔn)SQL即可輕松分析與集成對(duì)象存儲(chǔ)(OSS)、數(shù)據(jù)庫(kù)(PostgreSQL/MySQL等)、NoSQL(TableStore等)數(shù)據(jù)源的數(shù)據(jù)。
Data Lake Analytics產(chǎn)品詳情頁:https://www.aliyun.com/product/datalakeanalytics
Data Lake Analytics 1元購(gòu)入口:https://common-buy.aliyun.com/?commodityCode=openanalytics_post#/buy
與50位技術(shù)專家面對(duì)面20年技術(shù)見證,附贈(zèng)技術(shù)全景圖總結(jié)
以上是生活随笔為你收集整理的applicaiton.yml 日志配置_底层基于Apache Hudi的DLA最佳实践 海量、低成本日志分析...的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 阿里云centos服务器rdp远程桌面规
- 下一篇: 页面怎么把关键字保留下来_怎么做seo优