百億級數(shù)據(jù)搜索引擎,Elasticsearch腳本與插件

Elasticsearch表達(dá)式

使用腳本,可以在Elasticsearch中評估自定義表達(dá)式。
例如可以使用腳本來返回“腳本字段”作為搜索請求的一部分,或評估查詢的自定義分?jǐn)?shù)。
“painless”為默認(rèn)的腳本語言。painless、expression為Elasticsearch內(nèi)置支持。
在Elasticsearch API中使用腳本都遵循相同的格式:

"script": {
    # 指定腳本表達(dá)式的語言
    "lang": "painless|expression|groovy|javascript|mustach|python|java",
    # 加載腳本的方式:source源碼,id已經(jīng)存在的腳本,file存儲在文件中的腳本
    "source" | "id" | "file": ".....",
    "params": { ..... }
}

painless和expression是默認(rèn)內(nèi)置的腳本表達(dá)式。painless是默認(rèn)的腳本語言。查詢示例:

curl -XGET localhost:9200/shakespeare/_search?pretty -d'
{
    "script_fields": {
       "my_field": {
          "script": {
             "lang": "painless",
             "source": "doc.line_id.value * params.value",
             "params": {
                 "value": 2
             }
          }
       }
   }
}'
已存儲的腳本

使用_scripts RestAPI將腳本存儲在集群中或者使用已經(jīng)存儲在集群中的腳本。

創(chuàng)建存儲腳本
$ curl -XPOST localhost:9200/_scripts/my_score?pretty -d'
{
  "script": {
     "lang": "painless",
     "source": "doc.line_id.value * params.value"
  }
}'

$ curl -XGET localhost:9200/_scripts/my_score?pretty

$ curl -XGET localhost:9200/shakespeare/_search?pretty -d'
{
   "script_fields": {
      "my_field": {
         "script": {
            "id": "my_score",
            "params": {
           "value": 2
        }
         }
      }
   }
}'
刪除存儲腳本
$ curl -XDELETE localhost:9200/_scripts/calculate-score?pretty
  • 默認(rèn)情況下,所有腳本都是被緩存的,因此僅在更新時(shí)才需要重新編譯它們,它沒有過期時(shí)間。script.cache.expire
  • 默認(rèn)情況下,腳本沒有超時(shí)期限,但是可以使用 script.cache.expire 設(shè)置更改此行為
  • 默認(rèn)情況下,腳本緩存大小為100。可以使用 script.cache.max_size 設(shè)置配置此緩存的大小。
腳本引擎

ScriptEngine是用于實(shí)現(xiàn)腳本語言的后端。它也可以用于編寫需要使用腳本內(nèi)部高級功能的腳本。例如,一個(gè)腳本希望在評分時(shí)使用詞頻。需要實(shí)現(xiàn)ScriptEngine,同時(shí)應(yīng)實(shí)現(xiàn)ScriptPlugin接口并覆蓋getScriptEngine方法。

Elasticsearch插件

Elastic SQL插件

Elasticsearch SQL是一個(gè)X-Pack組件,它允許針對Elasticsearch實(shí)時(shí)執(zhí)行類似SQL的查詢。無論使用REST接口,命令行還是JDBC,任何客戶端都可以使用SQ搜索或聚合數(shù)據(jù)??梢詫lasticsearch SQL看作是一種翻譯器,它可以將SQL解釋成Elasticsearch可以理解的查詢語言,并利用Elasticsearch完成大規(guī)模讀取和處理數(shù)據(jù)。

安裝插件
$ ./elasticsearch-plugin install https://github.com/NLPchina/elasticsearch-sql/releases/download/5.6.16.0/elasticsearch-sql-5.6.16.0.zip
使用插件

6.2及以上版本,Elastic SQL被集成到X-Pack中。

$ curl -XGET -u elastic:abcd_123 localhost:9200/_xpack/_sql -d'
{
   "query":"select * from shakespeare"
}'

6.2以下,Elastic SQL需要單獨(dú)安裝。

$ curl -XGET -u elastic:abcd_123 localhost:9200/_sql \
    -H'Content-Type:application/json' -d'select * from shakespeare'
    
$ curl -XGET -u elastic:abcd_123 localhost:9200/_sql/_explain \
    -H'Content-Type:application/json' -d'select * from shakespeare'
X-Pack插件

X-Pack是一個(gè)Elastic Stack擴(kuò)展,將安全性,警報(bào),監(jiān)控,報(bào)告,機(jī)器學(xué)習(xí)和圖形功能捆綁到一個(gè)易于安裝的軟件包中。要使用X-Pack,必須在Elasticsearch中安裝與Elasticsearch版本相匹配的X-Pack。如果在群集上首次安裝X-Pack,則必須執(zhí)行完整群集重新啟動(dòng)。安裝X-Pack后,必須在群集中的所有節(jié)點(diǎn)上啟用安全性和安全性才能使群集正常運(yùn)行。

在線安裝
$ ./elasticsearh-plugin install x-pack
離線安裝
# 下載離線安裝包
$ wget https://artifacts.elastic.co/downloads/packs/x-pack/x-pack-5.6.16.zip

# 安裝離線安裝包
$ ./elasticsearh-plugin install file:///path/to/x-pack-5.6.16.zip

Elasticsearch,Kibana和Logstash的X-Pack插件包含在同一zip文件中。如果已經(jīng)下載該文件,想在其他產(chǎn)品上安裝X-Pack,可以重復(fù)使用該文件。

配置插件
1. 安全設(shè)置

配置xpack.security可以進(jìn)行啟用匿名訪問和執(zhí)行查詢的身份驗(yàn)證,設(shè)置文檔和字段級安全性,配置領(lǐng)域以及使用SSL加密通信等設(shè)置。

屬性 作用描述
xpack.security.enabled 設(shè)置為true(默認(rèn)值)在節(jié)點(diǎn)上啟用X-Pack安全設(shè)置
xpack.security.authc.accept_default_password 設(shè)置為false可禁用對默認(rèn)密碼“ changeme”的支持
xpack.security.authc.anonymous.username 匿名用戶的用戶名。默認(rèn)為_es_anonymous_user
xpack.security.authc.anonymous.roles 與匿名用戶關(guān)聯(lián)的角色。必須
xpack.security.authc.anonymous.authz_exception 設(shè)置為true,如果匿名用戶沒有適當(dāng)權(quán)限返回HTTP 403。設(shè)置為false時(shí),將返回HTTP 401。默認(rèn)為true
xpack.security.dls_fls.enabled 設(shè)置為false表示阻止文檔和字段級別的訪問控制。默認(rèn)是true
xpack.security.authc.token.enabled 設(shè)置為false表示禁用token服務(wù)。默認(rèn)true
xpack.security.authc.token.passphrase 每個(gè)節(jié)點(diǎn)上必須相同且長度超過8個(gè)字符的密碼短語。該密碼短語用于導(dǎo)出加密密鑰,使用該密鑰將對令牌進(jìn)行加密和認(rèn)證
xpack.security.authc.token.timeout 令牌有效的時(shí)間。默認(rèn)值為20m。最大值為1小時(shí)
2.審核設(shè)置
屬性 作用描述
xpack.security.audit.enabled 設(shè)置為true在節(jié)點(diǎn)上啟用審核。默認(rèn)值為false
xpack.security.audit.outputs 指定輸出審核日志的位置。例如:[索引,日志文件]。缺省值為logfile,審核事件會放入節(jié)點(diǎn)上專用的<clustername> _access.log文件中
xpack.security.audit.logfile.events.include 指定要包含在審核輸出中的事件。默認(rèn)值為:access_denied,access_granted,anonymous_access_denied,authentication_failed,connection_denied,tampered_request,run_as_denied,run_as_granted
xpack.security.audit.logfile.events.exclude 從輸出中排除指定的事件。默認(rèn)不排除任何事件
xpack.security.audit.logfile.events.emit_request_body 是否在某些事件類型上(如authentication_failed)包括REST請求的Body。默認(rèn)值為false
xpack.security.audit.index.bulk_size 將多個(gè)審核事件分配到一個(gè)寫入中。默認(rèn)值為1000
xpack.security.audit.index.flush_interval 被緩沖的事件刷新到索引的頻率。默認(rèn)值為1s
xpack.security.audit.index.rollover 控制滾動(dòng)索引的頻率:小時(shí),天,周或月。默認(rèn)值為日
xpack.security.audit.index.events.include 指定要增加索引的審計(jì)事件。默認(rèn)值是anonymous_access_denied,authentication_failed,realm_authentication_failed,access_granted,access_denied,tampered_request,connection_granted,connection_denied,run_as_granted,run_as_denied
xpack.security.audit.index.events.exclude 從索引中排除指定的審核事件。默認(rèn)不排除任何事件
xpack.security.audit.index.events.emit_request_body 是否在某些事件類型上(如authentication_failed)包括REST請求的主體。默認(rèn)值為false。
xpack.security.audit.index.settings 用于存儲事件的索引的設(shè)置。如:將審計(jì)索引的分片和副本數(shù)設(shè)置為1。
3.監(jiān)控設(shè)置

默認(rèn)情況下,X-Pack監(jiān)控被啟用,但是數(shù)據(jù)收集被禁用,高級監(jiān)控設(shè)置使你能夠控制收集數(shù)據(jù)的頻率、配置超時(shí)以及為本地存儲的監(jiān)控索引設(shè)置保留期,還可以調(diào)整監(jiān)控?cái)?shù)據(jù)的顯示方式。

屬性 作用描述
xpack.monitoring.enabled 設(shè)置為false可禁用Elasticsearch對節(jié)點(diǎn)上的監(jiān)控
xpack.monitoring.collection.cluster.state.timeout 收集集群狀態(tài)的超時(shí)時(shí)間。默認(rèn)為10秒
xpack.monitoring.collection.cluster.stats.timeout 收集集群統(tǒng)計(jì)信息的超時(shí)時(shí)間。默認(rèn)為10秒。
xpack.monitoring.collection.indices 設(shè)定監(jiān)控從哪個(gè)索引收集數(shù)據(jù)。默認(rèn)為所有索引。多個(gè)索引以逗號分隔,如:test1,test2,test3;可以使用通配符,如:test ;可以在索引名前面加上+表示包括某個(gè)索引,或在索引名之前加上-表示排除某個(gè)索引,如:+test,-test3。
xpack.monitoring.collection.index.stats.timeout 收集索引統(tǒng)計(jì)信息的超時(shí)時(shí)間。默認(rèn)為10秒。
xpack.monitoring.collection.index.recovery.active_only 控制是否收集所有恢復(fù)。設(shè)置為true僅收集活動(dòng)的恢復(fù)。默認(rèn)為false。
xpack.monitoring.collection.index.recovery.timeout 收集恢復(fù)信息的超時(shí)時(shí)間。默認(rèn)為10秒。
xpack.monitoring.collection.interval 控制收集數(shù)據(jù)的頻率。默認(rèn)為10秒。如果修改收集間隔,也需要將kibana.yml中的xpack.monitoring.min_interval_seconds選項(xiàng)設(shè)為相同的值。設(shè)置為-1可暫時(shí)禁用數(shù)據(jù)收集。
xpack.monitoring.history.duration 收集的數(shù)據(jù)保留期限,超過該期限將自動(dòng)刪除。默認(rèn)為7天。
xpack.monitoring.exporters
配置存儲監(jiān)視數(shù)據(jù)的代理。默認(rèn)情況下,代理使用本地導(dǎo)出程序,該導(dǎo)出程序在本地群集上的建立數(shù)據(jù)索引。使用HTTP導(dǎo)出器將數(shù)據(jù)發(fā)送到單獨(dú)的監(jiān)視集群。
使用插件

安裝X-Pack后,插件提供了三個(gè)默認(rèn)賬戶:

  • elastic/changeme
  • kibana/changeme
  • logstash/changeme
$ curl -XGET -u elastic:changeme localhost:9200/_xpack/license?pretty
$ curl -XGET -u kibana:changeme localhost:9200/_xpack/license?pretty
$ curl -XGET -u logstash_system:changeme localhost:9200/_xpack/license?pretty
用戶管理
# 創(chuàng)建用戶
$ curl -XPOST -u elastic:abcd_123 localhost:9200/_xpack/security/user/yunxi -d'
{
   "password": "abcd_123",
   "roles": ["admin", "other_role1"],
   "full_name": "yunxi",
   "email": "abcd_123@test.com"
}'

# 查看用戶 
$ curl -XGET -u elastic:abcd_123 localhost:9200/_xpack/security/user?pretty

# 禁用用戶
$ curl -XPOST -u elastic:abcd_123 localhost:9200/_xpack/security/user/yunxi/_disabled

# 啟用用戶
$ curl -XPOST -u elastic:abcd_123 localhost:9200/_xpack/security/user/yunxi/_enabled

# 刪除用戶
$ curl -XDELETE -u elastic:abcd_123 localhost:9200/_xpack/security/user/yunxi
  • password 用戶密碼,最少6個(gè)字符。必填。
  • roles 用戶所屬的一組角色。必填。
  • full_name
  • email
  • metadata 用戶元數(shù)據(jù)。
角色管理

使用角色映射API,可以添加,刪除和檢索角色映射。要使用此API,必須至少擁有manage_security權(quán)限。

# 創(chuàng)建角色
$ curl -XPOST -u elastic:changeme localhost:9200/_xpack/security/role/my_role -d'
{
  "cluster": ["all"],
  "indices": [{
      "names": [ "news", "blog" ],
      "privileges": ["all"],
      "field_security" : {
        "grant" : [ "title", "body" ]
      },
      "query": "{\"match\": {\"title\": \"foo\"} }"
  }],
  "run_as": [ "other_user" ],
  "metadata" : { 
    "version" : 1
  }
}'
# 查看角色
$ curl -XGET -u elastic:abcd_123 localhost:9200/_xpack/security/role?pretty
$ curl -XGET -u elastic:abcd_123 localhost:9200/_xpack/security/role/my_role,ingest_admin?pretty
$ curl -XGET -u elastic:abcd_123 localhost:9200/_xpack/security/role?pretty
權(quán)限管理

has_privileges可以確定登錄的用戶具有的特權(quán)列表。所有用戶都可以使用此API,但只能查看自己的特權(quán)。

curl -XPOST -u elastic:abcd_123 localhost:9200/_xpack/security/role_mapping/administrator -d '
{
   "roles": ["user", "admin"],
   "enabled": true,
   "rules": {
      "field": { "username": ["admin01", "admin02"] }
   }
}'

$ curl -XGET -u elastic:abcd_123 localhost:9200/_xpack/security/role_mapping/administrator?pretty

$ curl -XGET -u elastic:abcd_123 localhost:9200/_xpack/security/role_mapping?pretty
集群權(quán)限
屬性 作用描述
all 所有集群管理操作,如快照,節(jié)點(diǎn)關(guān)閉/重新啟動(dòng),設(shè)置更新,重新路由或管理用戶和角色
monitor 所有集群只讀操作,如集群運(yùn)行狀況,熱線程,節(jié)點(diǎn)信息,節(jié)點(diǎn)和集群統(tǒng)計(jì)信息,快照/恢復(fù)狀態(tài),等待集群任務(wù)
monitor_ml 所有只讀機(jī)器學(xué)習(xí)操作,例如獲取有關(guān)數(shù)據(jù)傳輸,作業(yè),模型快照或結(jié)果的信息
monitor_watcher 所有只讀操作,例如獲取watch和watcher統(tǒng)計(jì)信息
manage 構(gòu)建monitor并添加更改集群中值的集群操作。這包括快照,更新設(shè)置和重新路由。此特權(quán)不包括管理安全性的能力
manage_index_templates 索引模板上的所有操作
manage_ml 所有機(jī)器學(xué)習(xí)操作,例如創(chuàng)建和刪除數(shù)據(jù)傳輸,作業(yè)和模型快照。數(shù)據(jù)處理以具有提升特權(quán)的系統(tǒng)用戶身份運(yùn)行,包括讀取所有索引的權(quán)限
manage_pipeline 攝取管道的所有操作
manage_security 所有與安全相關(guān)的操作,例如對用戶和角色的CRUD操作以及緩存清除
manage_watcher 所有觀察者操作,例如放置watches,執(zhí)行,激活或確認(rèn)。Watches作為具有提升特權(quán)的系統(tǒng)用戶運(yùn)行,包括讀取和寫入所有索引的權(quán)限。Watches作為具有提升特權(quán)的系統(tǒng)用戶運(yùn)行,包括讀取和寫入所有索引的權(quán)限
transport_client
傳輸客戶端連接所需的所有權(quán)限。遠(yuǎn)程群集需要啟用跨級群搜索
索引權(quán)限
屬性 作用描述
all 索引上的所有操作
monitor 監(jiān)控所有操作(恢復(fù),細(xì)分信息,索引統(tǒng)計(jì)信息和狀態(tài))
manage 所有monitor權(quán)限加索引管理(別名,分析,緩存清除,關(guān)閉,刪除,存在,刷新,映射,打開,強(qiáng)制合并,刷新,設(shè)置,搜索分片,模板,驗(yàn)證)
view_index_metadata 對索引元數(shù)據(jù)(別名,別名存在,獲取索引,存在,字段映射,映射,搜索分片,類型存在,驗(yàn)證,warmers,設(shè)置)進(jìn)行只讀訪問。此權(quán)限主要供Kibana用戶使用
read 只讀操作(計(jì)數(shù),解釋,獲取,mget,獲取索引腳本,更多像這樣,多滲透/搜索/ termvector,滲透,滾動(dòng),clear_scroll,搜索,建議,tv)
read_cross_cluster 對來自遠(yuǎn)程集群的搜索操作提供只讀訪問
index 索引和更新文件。還授予對更新映射操作的訪問權(quán)限
create 索引文件。還授予對更新映射操作的訪問權(quán)限
delete 刪除文件
write 對文檔執(zhí)行所有寫入操作的權(quán)限,包括索引,更新和刪除文檔以及執(zhí)行批量操作的權(quán)限。還授予對更新映射操作的訪問權(quán)限
delete_index 刪除索引
create_index 創(chuàng)建索引。創(chuàng)建索引請求可能包含在創(chuàng)建索引時(shí)添加到索引的別名。在這種情況下,該請求最好有manage權(quán)限,同時(shí)設(shè)置索引和別名
字段和文檔級安全

可以通過向角色添加字段和文檔級別的安全權(quán)限來控制對索引內(nèi)數(shù)據(jù)的訪問。字段級別的安全權(quán)限將限制對文檔中特定字段的訪問。文檔級安全權(quán)限限制了對索引中特定文檔的訪問。角色可以基于每個(gè)索引的字段和文檔級別設(shè)定權(quán)限,未指定字段級別權(quán)限的角色將授予對所有字段的訪問權(quán)限。同樣,不指定文檔級別權(quán)限的角色將授予對索引中所有文檔的訪問權(quán)限。

"indices": [{
      "names": [ "news-*" ],
      "privileges": [ "read" ],
      "field_security" : {
        "grant" : [ "title", "@timestamp", "body" ]
      }
  }]

"indices": [{
      "names": [ "*" ],
      "privileges": [ "read" ],
      "field_security" : {
        "grant" : [ "title-*" ]
      }
  }]
  
  
  "indices": [{
      "names": [ "*" ],
      "privileges": [ "read" ],
      "field_security" : {
        "grant" : [ "*" ],
        "except": [ "news.*" ]
      }
  }]
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容