作者:Seth Payne
特別聲明:截止撰寫該博文,在目前的公開發(fā)行版中,該功能還不能公開測試。這個(gè)功能將在未來的發(fā)行版中發(fā)布。
長期以來,Elastic Platform 一直被視為搜索用例和機(jī)器生成數(shù)據(jù)的分析系統(tǒng)。 分析專注于處理攝入的數(shù)據(jù),其中重要的思想是如何在 Elasticsearch 中索引數(shù)據(jù)時(shí)優(yōu)化結(jié)構(gòu)數(shù)據(jù)。 Kibana 公開 Elasticsearch 聚合并使用它們來創(chuàng)建交互式儀表板、可視化和警報(bào)。
但隨著 Elastic Platform 被更廣泛地用作搜索、安全、可觀察性和通用分析平臺,分析師用戶需要能夠?qū)?shù)據(jù)作為攝入的數(shù)據(jù),對其進(jìn)行轉(zhuǎn)換以適應(yīng)攝入后的調(diào)查需求,并從底層 Elasticsearch 索引數(shù)據(jù)中獲得洞察力 。 他們需要一個(gè)簡潔、集成和高效的工作流,由豐富且富有表現(xiàn)力的查詢支持,其中搜索、過濾、聚合和轉(zhuǎn)換通過單個(gè)查詢表達(dá)式執(zhí)行,幾乎沒有 UI 上下文切換。
為了解決這些挑戰(zhàn),Elastic 團(tuán)隊(duì)目前正在開發(fā) Elasticsearch 查詢語言 (ESQL)。 ESQL 為 Elastic 用戶提供了一種靈活、強(qiáng)大且健壯的查詢表達(dá)式語言來查詢數(shù)據(jù)。 ESQL 還提供具有后攝取處理功能的卓越查詢 UX,從根本上轉(zhuǎn)變和擴(kuò)展 Elasticsearch 的分析和數(shù)據(jù)處理功能。
使用新的 Elasticsearch 查詢語言 ESQL 實(shí)現(xiàn) joins、管道等
新的查詢和聚合計(jì)算架構(gòu)
ESQL 不僅僅是一種語言。 它代表了對 Elasticsearch 中新計(jì)算功能的重大投資。 要同時(shí)滿足 ESQL 的功能和性能要求,有必要構(gòu)建一個(gè)全新的計(jì)算體系結(jié)構(gòu)。 ESQL 搜索、聚合和轉(zhuǎn)換功能直接在 Elasticsearch 本身內(nèi)執(zhí)行。 查詢表達(dá)式不會轉(zhuǎn)換為 QueryDSL 來執(zhí)行。 相反,我們在 Elasticsearch 中構(gòu)建了對 ESQL 函數(shù)的本地支持。
ESQL 為不同角色和不同技能水平的用戶引入了分布式計(jì)算功能。 這些計(jì)算能力使 ESQL 能夠以多種關(guān)鍵方式簡化用戶工作流程。
使用 ESQL,你可以:
- 利用卓越的查詢 UX:ESQL 查詢表達(dá)式支持復(fù)雜的分析和數(shù)據(jù)處理。 它們易于學(xué)習(xí)、閱讀和分享。
- 將 Elasticsearch 的過濾、聚合和轉(zhuǎn)換功能與子查詢和查找結(jié)合使用,新的 Elasticsearch 計(jì)算和數(shù)據(jù)處理功能使之成為可能。
- 在 Discover、Kibana Lens 和 Elastic Solutions 中跨 Kibana 使用 ESQL,為你提供無縫的工作流程。 你將能夠可視化 ESQL 查詢,在儀表板上與團(tuán)隊(duì)共享它們或作為查詢,并使用查詢來創(chuàng)建自定義警報(bào)。
如何使用 ESQL
ESQL 是一種管道查詢語言,其中用戶通過一系列由管道分隔的命令來處理 Elasticsearch 數(shù)據(jù)。 一個(gè)命令的輸出成為下一個(gè)命令的輸入,以定義邏輯數(shù)據(jù)管道。 ESQL 表達(dá)式是線性的、邏輯的并且易于閱讀。 它們非常簡單,可以由所有經(jīng)驗(yàn)水平的分析師編寫、使用和修改。 一個(gè)簡單的例子:
search index_name
| eval field_c = (field_a + field_b)
| sort field_c desc
上面的表達(dá)式從索引中檢索所有數(shù)據(jù),為每條記錄創(chuàng)建一個(gè)新的 fieldC,它是 fieldA 和 fieldB 的總和。 最后,結(jié)果在 fieldC 上排序。
在安全搜索中使用 ESQL
ESQL 對安全分析師進(jìn)行臨時(shí)威脅搜尋特別有用。 分析師可能首先查詢?nèi)罩緮?shù)據(jù)以顯示由 powershell.exe?生成的獨(dú)特進(jìn)程,并按命令行參數(shù)的字符串長度排序。
from winlog
| where host.os.family == ‘windows’
| where process.name == "powershell.exe"
| unique process.command_line
| sort len(process.command_lin) desc
| limit 3
host.os.family | process.name | process.command_line |
---|---|---|
windows | powershell.exe | (get-acl \\smb_file\share).access | ft IdentityReference,FileSystemRights,AccessControlType,IsInherited,InheritanceFlags -auto |
windows | powershell.exe | Get-ADComputer -property * -filter { ipv4address -eq ‘172.16.0.3’} |
windows | powershell.exe | Get-ADGroupMember -identity Helpdesk |
結(jié)果表明,PowerShell 被用于檢索文件系統(tǒng)信息以及有關(guān) Active Directory 的信息。 這可能是正常的系統(tǒng)行為,但也可能表示惡意活動。
為了進(jìn)一步調(diào)查,修改查詢以過濾 Active Directory 和文件系統(tǒng)相關(guān)的命令行參數(shù)。 然后它計(jì)算 process.command_line 的唯一值并按 hostname 分組。
from winlog
| where host.os.family == ‘windows’
| where process.name == "powershell.exe"
| where process.command_line in (‘*get-acl*’, ‘*Get-AD*’)
| stats count(unique process.command_line) as cl_count by hostname
| sort cl_count desc
| limit 3
cl_count | hostname |
---|---|
155 | host2 |
74 | host1 |
67 | host3 |
結(jié)果表明,與其他主機(jī)相比,host2 調(diào)用文件和 AD 相關(guān)命令行參數(shù)的 powershell 進(jìn)程要多得多。 分析師可以繼續(xù)修改和擴(kuò)展 ESQL 查詢表達(dá)式以確定 host2 是否存在惡意活動。 這項(xiàng)調(diào)查最終會導(dǎo)致對威脅向量的理解,以便可以采取補(bǔ)救措施以及將來如何預(yù)防這種威脅。
使用 ESQL 進(jìn)行搜索
你知道,Elasticsearch 一直并將永遠(yuǎn)用于搜索。 因此,ESQL 支持搜索、相關(guān)性和排名功能,這些功能長期以來一直是 Elasticsearch 的一部分。 ESQL 使訪問這些搜索功能的全部功能變得極其簡單。
考慮一個(gè)簡單的術(shù)語聚合,我們想要生成包含流派(genre)字段中前三個(gè)術(shù)語的桶,按文檔計(jì)數(shù)排序。
from music
| stats terms((genre), 3, doc_count, unwind)
| sort doc_count desc
doc_count | term |
---|---|
6 | electronic |
3 | rock |
2 | jazz |
還支持日期直方圖等分桶聚合。 在此查詢中,我們根據(jù)價(jià)格字段使用 50 的間隔從銷售指數(shù)創(chuàng)建直方圖。
from sales
| stats histogram(price, 50)
| sort bucket desc
doc_count | bucket |
---|---|
3 | 200 |
2 | 150 |
0 | 100 |
1 | 50 |
1 | 0 |
ESQL 還使以類似于當(dāng)今管道聚合的方式處理數(shù)據(jù)變得極其簡單。 例如,假設(shè)你要計(jì)算導(dǎo)數(shù)的導(dǎo)數(shù)。 以最簡單的形式:
from sales
| eval (stats derivative(sales)) as fist_der
| eval (stats derivative(first_der)) as second_der
使用 ESQL 實(shí)現(xiàn)可觀察性
站點(diǎn)可靠性工程師 (SRE) 在處理海量數(shù)據(jù)時(shí)面臨著挑戰(zhàn)。 他們負(fù)責(zé)使用這些數(shù)據(jù)來防止和修復(fù)系統(tǒng)停機(jī)和其他相關(guān)問題。 他們監(jiān)控?cái)?shù)千個(gè)生成重要跟蹤、日志和指標(biāo)數(shù)據(jù)的系統(tǒng)。 然后 SRE 使用此數(shù)據(jù)來識別問題并實(shí)施措施以防止將來系統(tǒng)或應(yīng)用程序中斷。 因此,對于 SRE 而言,結(jié)合對多個(gè)數(shù)據(jù)集的理解來分析系統(tǒng)行為的能力至關(guān)重要。
可觀察性攝取的數(shù)據(jù)本質(zhì)上是不可預(yù)測的。 ESQL 為 SRE 提供了關(guān)聯(lián)和重塑數(shù)據(jù)的方法,以更深入地了解系統(tǒng)和應(yīng)用程序行為。 它擴(kuò)展了他們在發(fā)現(xiàn)問題后執(zhí)行事后分析的能力,并且這種寶貴的洞察力可直接用于防止將來出現(xiàn)類似問題。
下面關(guān)于數(shù)據(jù)處理的部分將使用可觀察性示例。
使用新的 Elasticsearch 計(jì)算功能探索一種全新的數(shù)據(jù)處理方式
ESQL 表達(dá)式在從索引數(shù)據(jù)中釋放洞察力方面既靈活又強(qiáng)大。 但這些表達(dá)式背后的繁重工作發(fā)生在 Elasticsearch 本身。 我們構(gòu)建了一個(gè)新的計(jì)算引擎來支持 ESQL 公開的數(shù)據(jù)處理功能。 最值得注意的是,改進(jìn)了攝取后數(shù)據(jù)處理、中間數(shù)據(jù)狀態(tài)、查找函數(shù)和子查詢。
ESQL 完全依賴于 Elasticsearch 中的新計(jì)算和處理功能。 ESQL 不是通過轉(zhuǎn)換來解釋和執(zhí)行的。 相反,ESQL 表達(dá)式完全在 Elasticsearch 本身內(nèi)處理。
攝取后處理
ESQL 集成在整個(gè) Kibana 中,可以快速輕松地訪問最常見、最有用的聚合和預(yù)測。 想象一下使用指標(biāo)數(shù)據(jù)的索引。 分析師可能想要計(jì)算比率或?qū)z取的數(shù)據(jù)執(zhí)行聚合。 使用 ESQL,這些可以很容易地從基礎(chǔ)索引中派生出來。
from network_flow
| stats count(*) filter (where transport == ‘udp’) as udp_count
| stats count(*) filter (where transport == ‘tcp’) as tcp_count
| eval total_transport_events = udp_count + tcp_count
| eval udp_per_total = udp_count / total_transport_events
通過支持快速輕松地聚合和轉(zhuǎn)換基礎(chǔ)索引,ESQL 在分析師塑造和探索數(shù)據(jù)時(shí)開辟了重要的新見解。 這簡化了數(shù)據(jù)攝取,因?yàn)?ESQL 允許分析師從一組廣泛的基礎(chǔ)索引中獲得新的結(jié)構(gòu)和見解。
數(shù)據(jù)管道和中間數(shù)據(jù)
支持 ESQL 表達(dá)式的另一個(gè)關(guān)鍵部分是處理處于中間狀態(tài)的數(shù)據(jù)。 在數(shù)據(jù)通過不同的管道階段時(shí)處理和修改數(shù)據(jù)的能力是 ESQL 公開的處理能力的核心。
考慮以下查詢,我們在其中搜索指標(biāo)索引以查找具有最高 CPU 使用率峰值的五個(gè)主機(jī)名。
from metrics
| stats max(system.process.cpu.total.pct) as max_cpu by hostname
| where max_cpu > .800 and hostname == '*web*'
| sort max_cpu desc
| limit 5
此數(shù)據(jù)管道的每個(gè)階段都會生成表格輸出。 最初的 from metrics 命令檢索所有索引數(shù)據(jù)。 然后該表在 system.process.cpu.total.pct 上聚合并按 hostname 分組,從而產(chǎn)生一個(gè)唯一的表。 然后對這些表格結(jié)果進(jìn)行過濾和排序以生成所需的輸出。
max_cpu | hostname |
---|---|
.989 | 1webapache |
.978 | 1websftp |
.964 | nfsweb |
.955 | 2webredis |
.943 | web_staging_primary |
然后可以將此輸出用作可視化或警報(bào)的基礎(chǔ)。
查找和子查詢
ESQL 還向 Elasticsearch 引入了查找和子查詢功能。
ESQL 可以在單獨(dú)的查找索引中查找值。 這最常用于在查詢時(shí)豐富結(jié)果。 查找類似于 SQL 左連接,因?yàn)樗鼈兪褂弥付ǖ逆I從外部索引返回字段。
例如,查找索引包含有關(guān)由唯一鍵標(biāo)識的系統(tǒng)用戶的信息。 ESQL 表達(dá)式可以在這些索引中查找數(shù)據(jù)以在結(jié)果中返回這些外部數(shù)據(jù)。 此查詢使用來自 user_info_lookup 索引的用戶數(shù)據(jù)豐富了 access_logs 索引的結(jié)果。 具體來說,將返回查找索引中的電子郵件和狀態(tài)字段。
from access_logs where user != 'root'
| lookup user_info_lookup['email', 'state'] on userid
userid | [ … access_logs … ] | state | userid | |
3455 | … | bob | NY | 3455 |
子查詢使用戶能夠?qū)⒉煌牟樵冏鳛閰?shù)嵌入到其他查詢中。 例如,SRE 可能希望使用聚合作為針對同一索引的查詢中的參數(shù)。 在這里,SRE 使用總登錄次數(shù)來計(jì)算特定用戶的登錄百分比。
from user_login where userid = 1234
| eval stats count(*) as 1234_logins
| eval total_logins = [from logs where userid = *| stats count(*) as total_logins]
| eval round((1234_logins / total_logins), 2) as 1234_pct
通過使用查找和子查詢,分析師和 SRE 等人可以利用他們所有的 Elasticsearch 來生成極其豐富的數(shù)據(jù)結(jié)構(gòu),并從 Elasticsearch 中的數(shù)據(jù)中獲得新的見解。
ESQL 從根本上改變并改進(jìn)了你與 Elastic Search Platform 中的數(shù)據(jù)交互的方式。 ESQL 以快速轉(zhuǎn)換和連接大型數(shù)據(jù)集的強(qiáng)大功能釋放數(shù)據(jù)的價(jià)值; 搜索、過濾和處理大量數(shù)據(jù); 并最終減少響應(yīng)和解決時(shí)間。 我們期待看到你將其付諸實(shí)踐!
加入我們的分析之旅
對 ESQL、轉(zhuǎn)換和連接以及使用多步查詢感到興奮嗎? 我們也是。 隨著 Elastic 團(tuán)隊(duì)繼續(xù)開發(fā)和準(zhǔn)備發(fā)布這些功能,請密切關(guān)注更多新聞。
有興趣先于其他人試用此解決方案嗎? 你可以通過討論論壇或我們的 Elastic 社區(qū) Slack 頻道與我們聯(lián)系。 我們期待你的反饋,以幫助塑造我們新的查詢語言、計(jì)算引擎和基于查詢的調(diào)查工作流的方向。
本博文中描述的任何特性或功能的發(fā)布和時(shí)間安排均由 Elastic 自行決定。 當(dāng)前不可用的任何特性或功能可能無法按時(shí)交付或根本無法交付。文章來源:http://www.zghlxwxcb.cn/news/detail-421971.html
原文:https://www.elastic.co/blog/introduction-to-esql-new-query-language-flexible-iterative-analytics文章來源地址http://www.zghlxwxcb.cn/news/detail-421971.html
到了這里,關(guān)于Elasticsearch:ESQL 簡介 — 一種用于靈活、迭代分析的新查詢語言的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!