applicaiton.yml 日志配置_底层基于Apache Hudi的DLA最佳实践 海量、低成本日志分析...
背景信息
日志作為一種特殊的數據,對處理歷史數據、診斷問題以及了解系統活動等有著非常重要的作用。對數據分析人員、開發人員或者運維人員而言,日志都是其工作過程中必不可缺的數據來源。
通常情況下,為節約成本,我們會將日志設定一定的保存時間,只分析該時間段內的日志,此類日志稱之為“熱”日志。這種做法,短期內可以滿足使用需求,但從長期來看,大量的歷史日志被擱置,無法發揮其價值。
對于許多企業而言,對日志分析的需求特征通常為低時效和低頻率。并且在一個企業中,為偶發性的日志分析去構建一套完整的日志分析系統,無論在經濟成本還是運維成本上都是不劃算的。如何在降低存儲成本的同時滿足大批量日志的分析需求,是擺在企業面前的一道難題。
實施方案
阿里云從用戶角度出發,研發了一整套小而精的歷史日志數據分析方案。利用阿里云日志服務 LOG(Log Service,簡稱LOG/原SLS)來投遞日志,阿里云對象存儲服務(Object Storage Service,簡稱OSS)來存儲日志,Data Lake Analytics(DLA)來分析日志。該方案有以下三個優勢:
LOG是針對實時數據一站式服務,在阿里集團經歷大量大數據場景錘煉而成。提供日志類數據采集、智能查詢分析、消費與投遞等功能,全面提升海量日志處理/分析能力。LOG強大的日志投遞能力,能夠從源頭對接各種類型的日志格式,并且穩定地將日志投遞到指定的位置。
OSS低廉的存儲成本,能夠讓您的日志文件存儲任意長的時間。
DLA強大的分析能力,Serverless的架構,按掃描量收費。DLA可以對投遞到OSS上的日志按年、按月、按日進行多維度的分區,提高日志的命中率,降低掃描量,從而以極低的成本、極高的性能來完成大數據量歷史日志分析。
例如,服務部署在云服務器ECS(Elastic Compute Service,簡稱ECS)集群上,該集群的每臺機器上都有一個記錄訪問情況的日志access.log。我們需要提取access.log中的信息,并將過濾后的信息存儲至OSS上。本文檔將以此為例,詳細為您介紹實施步驟。
前提條件
在開始實施步驟之前,需要先完成以下準備工作。
參考文檔LOG快速入門,開通日志服務、創建項目、創建日志庫。
開通OSS服務、在日志服務項目所在的地域創建存儲空間。
開通并初始化DLA服務。
實施步驟
步驟一:通過Logtail采集ECS日志
詳細操作請參見通過Logtail采集ECS日志。
根據本示例中的日志文件特點,Logtail配置如下所示。
模式選擇完整正則模式,需要提供完整正則表達式。
步驟二:投遞日志到OSS
詳細操作請參見投遞日志到OSS,并且日志服務投遞OSS使用Parquet存儲的相關配置。
在OSS投遞功能頁面,配置各項參數:
參數說明:
OSS Bucket和OSS Prefix設置日志投遞到OSS的哪個目錄。
修改分區格式,將分區列的名字填入到目錄中,格式為分區列名=分區列值。
如圖所示,修改分區格式默認值,即一級分區列的列名為year,列值為%Y;二級分區列的列名為month,列值為%m;三級分區列的列名為day,列值為%d。
存儲格式設置為parquet。
壓縮方式設置為snappy,使用snappy算法對數據做壓縮,可以減少OSS Bucket存儲空間使用量。
日志數據投遞到OSS中以后,就可以通過DLA讀取并分析OSS中的日志。
步驟三:在DLA中創建OSS連接
登錄DLA控制臺,登錄DMS,在DLA中創建一個到OSS的連接。語法如下:
CREATE SCHEMA oss_log_schema with DBPROPERTIES( catalog='oss', location = 'oss://myappbucket/sls_parquet/' );location:日志文件所在的OSS Bucket的目錄,需以/結尾表示目錄。myappbucket是OSS Bucket名字。
步驟四:在DLA中創建指向OSS日志文件的外表(分區表)
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文件中設置的列名一致。
分區列的名稱、順序需要和步驟二:投遞日志到OSS中的分區列一致。更多創建分區表信息,請參見通過DLA創建OSS分區表。
步驟五:使用MSCK命令更新分區信息
外表創建成功后,執行MSCK REPAIR TABLE將分區信息同步到DLA中。MSCK命令只能識別符合DLA分區列命名規則的目錄,即分區列的目錄名為分區列名=分區列值。
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;">步驟六:查詢分區表數據
分區信息同步完成后,使用SELECT語句對日志進行查詢分析。例如,得到某一天查詢最慢的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;">后續操作
上述示例中,日志數據投遞OSS的存儲格式為Parquet格式,除了Parquet格式,LOG還可以將投遞文件的格式設置為JSON和CSV。詳細的配置,請參見JSON格式和CSV格式。
JSON格式
當投遞文件的格式設置為JSON且無壓縮時,建表語句為:
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/';當投遞文件的格式設置為JSON且使用標準Snappy壓縮時,建表語句為:
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格式
當投遞文件的格式設置為CSV,不包含header,使用標準Snappy壓縮時,建表語句為:
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' );當投遞文件的格式設置為CSV無壓縮,且包含header時,建表語句為:
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化的交互式聯邦查詢服務。使用標準SQL即可輕松分析與集成對象存儲(OSS)、數據庫(PostgreSQL/MySQL等)、NoSQL(TableStore等)數據源的數據。
Data Lake Analytics產品詳情頁:https://www.aliyun.com/product/datalakeanalytics
Data Lake Analytics 1元購入口:https://common-buy.aliyun.com/?commodityCode=openanalytics_post#/buy
與50位技術專家面對面20年技術見證,附贈技術全景圖總結
以上是生活随笔為你收集整理的applicaiton.yml 日志配置_底层基于Apache Hudi的DLA最佳实践 海量、低成本日志分析...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 阿里云centos服务器rdp远程桌面规
- 下一篇: 页面怎么把关键字保留下来_怎么做seo优