轉載請註明出處:
get 直接查詢 索引名稱時,會返回 該 索引得 mapping 和 settings 得設定,上述返回得結構如下:
{ "terra-syslog_2023-07-12" : { "aliases" : { }, "mappings" : { "properties" : { "@timestamp" : { "type" : "date" }, "@version" : { "type" : "text", "fields" : { "keyword" : { "type" : "keyword", "ignore_above" : 256 } } }, "host" : { "type" : "text", "fields" : { "keyword" : { "type" : "keyword", "ignore_above" : 256 } } }, "message" : { "type" : "text", "fields" : { "keyword" : { "type" : "keyword", "ignore_above" : 256 } } }, "received_at" : { "type" : "date" }, "received_from" : { "type" : "text", "fields" : { "keyword" : { "type" : "keyword", "ignore_above" : 256 } } }, "syslog_facility" : { "type" : "text", "fields" : { "keyword" : { "type" : "keyword", "ignore_above" : 256 } } }, "syslog_facility_code" : { "type" : "long" }, "syslog_hostname" : { "type" : "text", "fields" : { "keyword" : { "type" : "keyword", "ignore_above" : 256 } } }, "syslog_message" : { "type" : "text", "fields" : { "keyword" : { "type" : "keyword", "ignore_above" : 256 } } }, "syslog_program" : { "type" : "text", "fields" : { "keyword" : { "type" : "keyword", "ignore_above" : 256 } } }, "syslog_severity" : { "type" : "text", "fields" : { "keyword" : { "type" : "keyword", "ignore_above" : 256 } } }, "syslog_severity_code" : { "type" : "long" }, "syslog_timestamp" : { "type" : "text", "fields" : { "keyword" : { "type" : "keyword", "ignore_above" : 256 } } }, "tags" : { "type" : "text", "fields" : { "keyword" : { "type" : "keyword", "ignore_above" : 256 } } }, "type" : { "type" : "text", "fields" : { "keyword" : { "type" : "keyword", "ignore_above" : 256 } } }, "user" : { "type" : "text", "fields" : { "keyword" : { "type" : "keyword", "ignore_above" : 256 } } } } }, "settings" : { "index" : { "creation_date" : "1689137630855", "number_of_shards" : "1", "number_of_replicas" : "1", "uuid" : "Qew4uoNUQ9q8-JQDPTWVPw", "version" : { "created" : "7080199" }, "provided_name" : "terra-syslog_2023-07-12" } } } }
該dsl 為:
GET terra-syslog_2023-07-15/_search { "size": 0, "query": { "bool": { "must": [ { "wildcard": { "syslog_program.keyword": { "wildcard": "*SSH_USER_LOGIN*", "boost": 1 } } } ], "adjust_pure_negative": true, "boost": 1 } }, "aggregations": { "time_agg": { "date_histogram": { "field": "received_at", "format": "EEE", "fixed_interval": "1d", "offset": 0, "order": { "_key": "asc" }, "keyed": false, "min_doc_count": 0 }, "aggregations": { "user_agg": { "terms": { "field": "user.keyword", "size": 10, "min_doc_count": 1, "shard_min_doc_count": 0, "show_term_doc_count_error": false, "order": [ { "_count": "desc" }, { "_key": "asc" } ] } } } } } }
這段 DSL 具有以下作用:
"size": 0
: 設定返回的結果集大小為 0,即只返回聚合結果,不返回匹配的檔案。
query
部分:構建了一個布林查詢,包含多個 exists
和 range
子查詢,用於過濾符合條件的檔案。
exists
子查詢檢查指定欄位是否存在,這裡依次檢查了 source.ip
、source.port
、destination.ip
、destination.port
、host.name
和 flow.rep_tags
欄位的存在。
range
子查詢指定了對 @timestamp
欄位進行範圍篩選,從給定的時間戳範圍中選擇滿足條件的檔案。
aggregations
部分:定義了聚合操作,通過 terms
聚合按照 host.name
欄位進行分組,並計算每個組內的檔案數。
terms
聚合將按照 host.name
欄位的值進行分組。設定 size
為最大整數 2147483647
,以確保返回所有分組。
min_doc_count
設定為 1,表示只返回至少擁有一個檔案的分組。
shard_min_doc_count
設定為 0,表示在單個分片上沒有要求檔案數量的最小要求。
show_term_doc_count_error
設定為 false,不顯示術語檔案計數錯誤。
order
指定了排序規則,首先按照分組中的檔案數 _count
降序排序,然後按照 host.name
欄位的值升序排序。
在 terms
聚合內部定義了一個子聚合 cardinality
,用於計算每個分組內唯一組合的數量。這裡通過拼接 source.ip
、source.port
、destination.ip
和 destination.port
欄位的值來作為唯一標識。
該 DSL 查詢的作用是在給定時間範圍內,統計滿足一系列條件(存在指定欄位)的檔案,並按照 host.name
進行分組並計算每個組內唯一組合的數量。
另外,在查詢時,使用 _search 可以執行DSL, 如果沒有_search 時,可以查詢該索引得檔案結構型別,以及該索引得副本、分片等資訊
將前面的對映中的 syslog_timestamp
欄位型別修改為日期型別(date),需要更新對映定義並重新建立索引。
刪除現有的索引,或者建立一個新的索引。
更新對映定義,將 syslog_timestamp
的型別更改為 "date"。以下是更新後的對映範例:
{ "mappings": { "_doc": { "properties": { // 其他欄位... "syslog_timestamp": { "type": "date" }, // 其他欄位... } } } }
PUT terra-syslog_2023-07-15 { "mappings": { "_doc": { "properties": { // 其他欄位... "syslog_timestamp": { "type": "date" }, // 其他欄位... } } } }
這樣,syslog_timestamp
欄位的型別就會被修改為日期型別,並可以儲存、索引和查詢日期值。根據資料的格式和需求,Elasticsearch 會自動解析日期字串並將其轉換為適當的日期物件。