對比Elasticsearch,使用Doris進行高效日誌分析(下)
來源:Java學研大本營
介紹對比使用Elasticsearch和Apache Doris進行日誌分析。
3 使用案例中的效能表現
一家遊戲公司已經從ELK技術棧轉向了Apache Doris解決方案。他們基於Doris的日誌系統所需的儲存空間只有之前的1/6。
一家網路安全公司利用Apache Doris中的倒排索引構建了他們的日誌分析系統,支援每秒寫入30萬行資料,僅使用以前所需的1/5伺服器資源。
4 實踐指南
現在按照以下三個步驟來構建一個基於Apache Doris的日誌分析系統。
在開始之前,從官方網站下載Apache Doris 2.0或更新版本,並部署叢集。
4.1 步驟1:建立表格
這是一個表格建立的示例。
對配置的解釋:
將DATETIMEV2時間欄位指定為鍵,以加快對最新N條日誌記錄的查詢速度。
為頻繁訪問的欄位建立索引,並使用解析器引數指定需要進行全文搜尋的欄位。
"PARTITION BY RANGE"意味著根據時間欄位將資料按範圍進行分割槽,啟用動態分割槽以進行自動管理。
"DISTRIBUTED BY RANDOM BUCKETS AUTO"意味著將資料隨機分佈到桶中,系統會根據叢集大小和資料量自動決定桶的數量。
"log_policy_1day"和"log_s3"意味著將超過1天的日誌移動到S3儲存。
CREATE DATABASE log_db;
USE log_db;
CREATE RESOURCE "log_s3"
PROPERTIES
(
"type" = "s3",
"s3.endpoint" = "your_endpoint_url",
"s3.region" = "your_region",
"s3.bucket" = "your_bucket",
"s3.root.path" = "your_path",
"s3.access_key" = "your_ak",
"s3.secret_key" = "your_sk"
);
CREATE STORAGE POLICY log_policy_1day
PROPERTIES(
"storage_resource" = "log_s3",
"cooldown_ttl" = "86400"
);
CREATE TABLE log_table
(
``ts` DATETIMEV2,
``clientip` VARCHAR(20),
``request` TEXT,
``status` INT,
``size` INT,
INDEX idx_size (`size`) USING INVERTED,
INDEX idx_status (`status`) USING INVERTED,
INDEX idx_clientip (`clientip`) USING INVERTED,
INDEX idx_request (`request`) USING INVERTED PROPERTIES("parser" = "english")
)
ENGINE = OLAP
DUPLICATE KEY(`ts`)
PARTITION BY RANGE(`ts`) ()
DISTRIBUTED BY RANDOM BUCKETS AUTO
PROPERTIES (
"replication_num" = "1",
"storage_policy" = "log_policy_1day",
"deprecated_dynamic_schema" = "true",
"dynamic_partition.enable" = "true",
"dynamic_partition.time_unit" = "DAY",
"dynamic_partition.start" = "-3",
"dynamic_partition.end" = "7",
"dynamic_partition.prefix" = "p",
"dynamic_partition.buckets" = "AUTO",
"dynamic_partition.replication_num" = "1"
);
4.2 步驟2:匯入日誌
Apache Doris支援多種資料匯入方法。對於實時日誌,推薦以下三種方法:
從Kafka訊息佇列中拉取日誌:Routine Load
Logstash:透過HTTP API將日誌寫入Doris
自定義編寫程式:透過HTTP API將日誌寫入Doris
使用Kafka進行資料攝取
對於寫入Kafka訊息佇列的JSON日誌,建立常規載入(Routine Load),以便Doris從Kafka中拉取資料。以下是示例。property.*
配置為可選配置:
-- 準備Kafka叢集和主題("log_topic")
-- 建立常規載入,從Kafka的 log_topic 載入資料到 "log_table"
CREATE ROUTINE LOAD load_log_kafka ON log_db.log_table
COLUMNS(ts, clientip, request, status, size)
PROPERTIES (
"max_batch_interval" = "10",
"max_batch_rows" = "1000000",
"max_batch_size" = "109715200",
"strict_mode" = "false",
"format" = "json"
)
FROM KAFKA (
"kafka_broker_list" = "host:port",
"kafka_topic" = "log_topic",
"property.group.id" = "your_group_id",
"property.security.protocol"="SASL_PLAINTEXT",
"property.sasl.mechanism"="GSSAPI",
"property.sasl.kerberos.service.name"="kafka",
"property.sasl.kerberos.keytab"="/path/to/xxx.keytab",
"property.sasl.kerberos.principal"="xxx@yyy.com"
);
可以透過SHOW ROUTINE LOAD
命令檢視常規載入的執行情況。
透過Logstash進行資料匯入
配置Logstash的HTTP輸出,然後透過HTTP Stream Load將資料傳送到Doris。
1) 在logstash.yml
中指定批次大小和批次延遲,以提高資料寫入效能。
pipeline.batch.size: 100000
pipeline.batch.delay: 10000
2) 在日誌收集配置檔案testlog.conf
中新增HTTP輸出,URL為Doris中的Stream Load地址。
由於Logstash不支援HTTP重定向,應該使用後端地址而不是FE地址。
頭部中的授權是
http basic auth
,使用echo -n 'username:password' | base64
進行計算。頭部中的
load_to_single_tablet
可以減少資料攝取中的小檔案數量。
output {
http {
follow_redirects => true
keepalive => false
http_method => "put"
url => "
headers => [
"format", "json",
"strip_outer_array", "true",
"load_to_single_tablet", "true",
"Authorization", "Basic cm9vdDo=",
"Expect", "100-continue"
]
format => "json_batch"
}
}
透過自定義程式進行資料攝取
以下是透過HTTP Stream Load將資料攝取到Doris的示例。
注意:
使用
basic auth
進行HTTP授權,使用echo -n 'username:password' | base64
進行計算。http header "format:json"
:指定資料型別為JSON。http header "read_json_by_line:true"
:每行都是一個JSON記錄。http header "load_to_single_tablet:true"
:每次寫入一個分片(tablet)。對於資料寫入客戶端,建議批次大小為100MB~1GB。未來的版本將在伺服器端啟用Group Commit,並減小客戶端的批次大小。
curl \
--location-trusted \
-u username:password \
-H "format:json" \
-H "read_json_by_line:true" \
-H "load_to_single_tablet:true" \
-T logfile.json \
http://fe_host:fe_http_port/api/log_db/log_table/_stream_load
4.3 步驟3:執行查詢
Apache Doris支援標準SQL,因此可以透過MySQL客戶端或JDBC連線到Doris,然後執行SQL查詢。
mysql -h fe_host -P fe_mysql_port -u root -Dlog_db
一些常見的日誌分析查詢:
檢查最新的10條記錄。
SELECT * FROM log_table ORDER BY ts DESC LIMIT 10;
檢查Client IP為"8.8.8.8"的最新的10條記錄。
SELECT * FROM log_table WHERE clientip = '8.8.8.8' ORDER BY ts DESC LIMIT 10;
檢索在"request"欄位中包含"error"或"404"的最新的10條記錄。MATCH_ANY是Doris中的透過全文搜尋來查詢包含指定關鍵詞中任意一個的記錄。
SELECT * FROM log_table WHERE request MATCH_ANY 'error 404' ORDER BY ts DESC LIMIT 10;
檢索在"request"欄位中同時包含"image"和"faq"的最新的10條記錄。MATCH_ALL也是Doris中的全文搜尋語法關鍵詞,表示查詢同時包含所有指定關鍵詞的記錄。
SELECT * FROM log_table WHERE request MATCH_ALL 'image faq' ORDER BY ts DESC LIMIT 10;
5 總結
如果需要一種高效的日誌分析解決方案,Apache Doris是非常友好的選擇,尤其適合那些具備SQL知識的讀者。相比ELK堆疊,使用Apache Doris可以獲得更好的無模式支援,實現更快的資料寫入和查詢,並且減少儲存負擔。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70027827/viewspace-2998589/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 對比Elasticsearch,使用Doris進行高效日誌分析(上)Elasticsearch
- ABP 使用ElasticSearch、Kibana、Docker 進行日誌收集ElasticsearchDocker
- 使用Java和Elastic Stack進行日誌分析JavaAST
- WINDOWS下對NIGNX日誌檔案進行限制Windows
- 使用shell指令碼對Nginx日誌進行切分指令碼Nginx
- Java常用的日誌框架對比和分析Java框架
- 在Linux中,如何使用ELK進行日誌管理和分析?Linux
- 【ElasticSearch】 使用AWS雲ES服務來分析程式日誌Elasticsearch
- Elasticsearch+Kibana日誌分析系統搭建Elasticsearch
- ELK 日誌分析系統 ----------- 部署ElasticSearch群集Elasticsearch
- 使用Fluentd + Elasticsearch收集訪問日誌Elasticsearch
- 兩組資料量相對大時,如何高效進行比對
- Gin 框架 - 使用 logrus 進行日誌記錄框架
- 日誌收集工具簡單對比
- Laravel 使用 Elasticsearch 作為日誌儲存LaravelElasticsearch
- 日誌分析-apache日誌分析Apache
- 微服務下,使用ELK做日誌收集及分析微服務
- Lumen日誌接入 ElasticsearchElasticsearch
- Elasticsearch+kibana+logstash 搭建日誌收集分析平臺Elasticsearch
- SLS 查詢新正規化:使用 SPL 對日誌進行互動式探索
- .Net Core中使用DiagnosticSource進行日誌記錄
- Netflix 如何使用eBPF流日誌進行網路洞察?eBPF
- elasticsearch日誌刪除命令Elasticsearch
- Elasticsearch 的事務日誌Elasticsearch
- 如何基於 Apache Doris 構建簡易高效的使用者行為分析平臺?Apache
- [日誌分析篇]-利用ELK分析jumpserver日誌-日誌拆分篇Server
- .NetCore使用Docker安裝ElasticSearch、Kibana 記錄日誌NetCoreDockerElasticsearch
- 在雲環境上使用SLF4J對Java程式進行日誌記錄Java
- 對一次 GC日誌的分析GC
- SelectDB肖康:Apache Doris在日誌儲存與分析場景的實踐Apache
- 日誌分析平臺ELK之搜尋引擎Elasticsearch叢集Elasticsearch
- 日誌分析系統 - k8s部署ElasticSearch叢集K8SElasticsearch
- 使用 logzero 在 Python 中進行簡單日誌記錄Python
- 日誌服務之分析使用者訪問行為
- 【知識分享】什麼是伺服器日誌如何進行分析伺服器
- Pandas使用DataFrame進行資料分析比賽進階之路(一)
- 從 Elasticsearch 到 SelectDB,觀測雲實現日誌儲存與分析的 10 倍價效比提升Elasticsearch
- 利用DNS日誌進行MySQL盲注DNSMySql