百億級數據搜索引擎,Elasticsearch腳本與插件

Elasticsearch表達式

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

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

painless和expression是默認內置的腳本表達式。painless是默認的腳本語言。查詢示例:

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將腳本存儲在集群中或者使用已經存儲在集群中的腳本。

創建存儲腳本
$ 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
  • 默認情況下,所有腳本都是被緩存的,因此僅在更新時才需要重新編譯它們,它沒有過期時間。script.cache.expire
  • 默認情況下,腳本沒有超時期限,但是可以使用 script.cache.expire 設置更改此行為
  • 默認情況下,腳本緩存大小為100。可以使用 script.cache.max_size 設置配置此緩存的大小。
腳本引擎

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

Elasticsearch插件

Elastic SQL插件

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

安裝插件
$ ./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需要單獨安裝。

$ 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是一個Elastic Stack擴展,將安全性,警報,監控,報告,機器學習和圖形功能捆綁到一個易于安裝的軟件包中。要使用X-Pack,必須在Elasticsearch中安裝與Elasticsearch版本相匹配的X-Pack。如果在群集上首次安裝X-Pack,則必須執行完整群集重新啟動。安裝X-Pack后,必須在群集中的所有節點上啟用安全性和安全性才能使群集正常運行。

在線安裝
$ ./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文件中。如果已經下載該文件,想在其他產品上安裝X-Pack,可以重復使用該文件。

配置插件
1. 安全設置

配置xpack.security可以進行啟用匿名訪問和執行查詢的身份驗證,設置文檔和字段級安全性,配置領域以及使用SSL加密通信等設置。

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

默認情況下,X-Pack監控被啟用,但是數據收集被禁用,高級監控設置使你能夠控制收集數據的頻率、配置超時以及為本地存儲的監控索引設置保留期,還可以調整監控數據的顯示方式。

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

安裝X-Pack后,插件提供了三個默認賬戶:

  • 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
用戶管理
# 創建用戶
$ 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個字符。必填。
  • roles 用戶所屬的一組角色。必填。
  • full_name
  • email
  • metadata 用戶元數據。
角色管理

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

# 創建角色
$ 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
權限管理

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

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

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

"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.*" ]
      }
  }]
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容