Elasticsearch表達式
使用腳本,可以在Elasticsearch中評估自定義表達式蒋腮。
例如可以使用腳本來返回“腳本字段”作為搜索請求的一部分池摧,或評估查詢的自定義分數(shù)作彤。
“painless”為默認的腳本語言宦棺。painless代咸、expression為Elasticsearch內(nèi)置支持呐芥。
在Elasticsearch API中使用腳本都遵循相同的格式:
"script": {
# 指定腳本表達式的語言
"lang": "painless|expression|groovy|javascript|mustach|python|java",
# 加載腳本的方式:source源碼思瘟,id已經(jīng)存在的腳本,file存儲在文件中的腳本
"source" | "id" | "file": ".....",
"params": { ..... }
}
painless和expression是默認內(nèi)置的腳本表達式够话。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將腳本存儲在集群中或者使用已經(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
- 默認情況下,所有腳本都是被緩存的菇晃,因此僅在更新時才需要重新編譯它們磺送,它沒有過期時間。script.cache.expire
- 默認情況下,腳本沒有超時期限甲捏,但是可以使用 script.cache.expire 設置更改此行為
- 默認情況下司顿,腳本緩存大小為100大溜∏辗埽可以使用 script.cache.max_size 設置配置此緩存的大小付材。
腳本引擎
ScriptEngine是用于實現(xiàn)腳本語言的后端厌衔。它也可以用于編寫需要使用腳本內(nèi)部高級功能的腳本捍岳。例如锣夹,一個腳本希望在評分時使用詞頻晕城。需要實現(xiàn)ScriptEngine砖顷,同時應實現(xiàn)ScriptPlugin接口并覆蓋getScriptEngine方法滤蝠。
Elasticsearch插件
Elastic SQL插件
Elasticsearch SQL是一個X-Pack組件物咳,它允許針對Elasticsearch實時執(zhí)行類似SQL的查詢。無論使用REST接口,命令行還是JDBC芯肤,任何客戶端都可以使用SQ搜索或聚合數(shù)據(jù)巷折。可以將Elasticsearch 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需要單獨安裝推穷。
$ 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擴展,將安全性类咧,警報馒铃,監(jiān)控,報告轮听,機器學習和圖形功能捆綁到一個易于安裝的軟件包中骗露。要使用X-Pack,必須在Elasticsearch中安裝與Elasticsearch版本相匹配的X-Pack血巍。如果在群集上首次安裝X-Pack萧锉,則必須執(zhí)行完整群集重新啟動。安裝X-Pack后述寡,必須在群集中的所有節(jié)點上啟用安全性和安全性才能使群集正常運行。
在線安裝
$ ./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螟炫,可以重復使用該文件波附。
配置插件
1. 安全設置
配置xpack.security可以進行啟用匿名訪問和執(zhí)行查詢的身份驗證,設置文檔和字段級安全性昼钻,配置領域以及使用SSL加密通信等設置掸屡。
屬性 | 作用描述 |
---|---|
xpack.security.enabled | 設置為true(默認值)在節(jié)點上啟用X-Pack安全設置 |
xpack.security.authc.accept_default_password | 設置為false可禁用對默認密碼“ changeme”的支持 |
xpack.security.authc.anonymous.username | 匿名用戶的用戶名。默認為_es_anonymous_user |
xpack.security.authc.anonymous.roles | 與匿名用戶關聯(lián)的角色然评。必須 |
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 | 每個節(jié)點上必須相同且長度超過8個字符的密碼短語碎罚。該密碼短語用于導出加密密鑰磅废,使用該密鑰將對令牌進行加密和認證 |
xpack.security.authc.token.timeout | 令牌有效的時間。默認值為20m荆烈。最大值為1小時 |
2.審核設置
屬性 | 作用描述 |
---|---|
xpack.security.audit.enabled | 設置為true在節(jié)點上啟用審核还蹲。默認值為false |
xpack.security.audit.outputs | 指定輸出審核日志的位置。例如:[索引耙考,日志文件]。缺省值為logfile潭兽,審核事件會放入節(jié)點上專用的<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 | 用于存儲事件的索引的設置缤底。如:將審計索引的分片和副本數(shù)設置為1。 |
3.監(jiān)控設置
默認情況下番捂,X-Pack監(jiān)控被啟用个唧,但是數(shù)據(jù)收集被禁用,高級監(jiān)控設置使你能夠控制收集數(shù)據(jù)的頻率设预、配置超時以及為本地存儲的監(jiān)控索引設置保留期徙歼,還可以調(diào)整監(jiān)控數(shù)據(jù)的顯示方式。
屬性 | 作用描述 |
---|---|
xpack.monitoring.enabled | 設置為false可禁用Elasticsearch對節(jié)點上的監(jiān)控 |
xpack.monitoring.collection.cluster.state.timeout | 收集集群狀態(tài)的超時時間鳖枕。默認為10秒 |
xpack.monitoring.collection.cluster.stats.timeout | 收集集群統(tǒng)計信息的超時時間魄梯。默認為10秒。 |
xpack.monitoring.collection.indices | 設定監(jiān)控從哪個索引收集數(shù)據(jù)宾符。默認為所有索引酿秸。多個索引以逗號分隔,如:test1魏烫,test2辣苏,test3;可以使用通配符哄褒,如:test 稀蟋;可以在索引名前面加上+表示包括某個索引,或在索引名之前加上-表示排除某個索引呐赡,如:+test退客,-test3。 |
xpack.monitoring.collection.index.stats.timeout | 收集索引統(tǒng)計信息的超時時間链嘀。默認為10秒井辜。 |
xpack.monitoring.collection.index.recovery.active_only | 控制是否收集所有恢復。設置為true僅收集活動的恢復管闷。默認為false粥脚。 |
xpack.monitoring.collection.index.recovery.timeout | 收集恢復信息的超時時間。默認為10秒包个。 |
xpack.monitoring.collection.interval | 控制收集數(shù)據(jù)的頻率刷允。默認為10秒。如果修改收集間隔碧囊,也需要將kibana.yml中的xpack.monitoring.min_interval_seconds選項設為相同的值树灶。設置為-1可暫時禁用數(shù)據(jù)收集。 |
xpack.monitoring.history.duration | 收集的數(shù)據(jù)保留期限糯而,超過該期限將自動刪除天通。默認為7天。 |
xpack.monitoring.exporters | |
配置存儲監(jiān)視數(shù)據(jù)的代理熄驼。默認情況下像寒,代理使用本地導出程序烘豹,該導出程序在本地群集上的建立數(shù)據(jù)索引。使用HTTP導出器將數(shù)據(jù)發(fā)送到單獨的監(jiān)視集群诺祸。 |
使用插件
安裝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
用戶管理
# 創(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個字符筷笨。必填憔鬼。
- roles 用戶所屬的一組角色。必填胃夏。
- full_name
- metadata 用戶元數(shù)據(jù)轴或。
角色管理
使用角色映射API,可以添加仰禀,刪除和檢索角色映射侮叮。要使用此API,必須至少擁有manage_security權限悼瘾。
# 創(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
權限管理
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 | 所有集群管理操作,如快照砂沛,節(jié)點關閉/重新啟動烫扼,設置更新,重新路由或管理用戶和角色 |
monitor | 所有集群只讀操作碍庵,如集群運行狀況映企,熱線程,節(jié)點信息静浴,節(jié)點和集群統(tǒng)計信息堰氓,快照/恢復狀態(tài),等待集群任務 |
monitor_ml | 所有只讀機器學習操作苹享,例如獲取有關數(shù)據(jù)傳輸双絮,作業(yè),模型快照或結果的信息 |
monitor_watcher | 所有只讀操作得问,例如獲取watch和watcher統(tǒng)計信息 |
manage | 構建monitor并添加更改集群中值的集群操作囤攀。這包括快照,更新設置和重新路由宫纬。此特權不包括管理安全性的能力 |
manage_index_templates | 索引模板上的所有操作 |
manage_ml | 所有機器學習操作焚挠,例如創(chuàng)建和刪除數(shù)據(jù)傳輸,作業(yè)和模型快照漓骚。數(shù)據(jù)處理以具有提升特權的系統(tǒng)用戶身份運行蝌衔,包括讀取所有索引的權限 |
manage_pipeline | 攝取管道的所有操作 |
manage_security | 所有與安全相關的操作榛泛,例如對用戶和角色的CRUD操作以及緩存清除 |
manage_watcher | 所有觀察者操作,例如放置watches胚委,執(zhí)行挟鸠,激活或確認。Watches作為具有提升特權的系統(tǒng)用戶運行亩冬,包括讀取和寫入所有索引的權限艘希。Watches作為具有提升特權的系統(tǒng)用戶運行,包括讀取和寫入所有索引的權限 |
transport_client | |
傳輸客戶端連接所需的所有權限硅急。遠程群集需要啟用跨級群搜索 |
索引權限
屬性 | 作用描述 |
---|---|
all | 索引上的所有操作 |
monitor | 監(jiān)控所有操作(恢復覆享,細分信息,索引統(tǒng)計信息和狀態(tài)) |
manage | 所有monitor權限加索引管理(別名营袜,分析撒顿,緩存清除,關閉荚板,刪除凤壁,存在,刷新跪另,映射拧抖,打開,強制合并免绿,刷新唧席,設置,搜索分片嘲驾,模板淌哟,驗證) |
view_index_metadata | 對索引元數(shù)據(jù)(別名,別名存在辽故,獲取索引徒仓,存在,字段映射誊垢,映射蓬衡,搜索分片,類型存在彤枢,驗證狰晚,warmers,設置)進行只讀訪問缴啡。此權限主要供Kibana用戶使用 |
read | 只讀操作(計數(shù)壁晒,解釋,獲取业栅,mget秒咐,獲取索引腳本谬晕,更多像這樣,多滲透/搜索/ termvector携取,滲透攒钳,滾動,clear_scroll雷滋,搜索不撑,建議,tv) |
read_cross_cluster | 對來自遠程集群的搜索操作提供只讀訪問 |
index | 索引和更新文件晤斩。還授予對更新映射操作的訪問權限 |
create | 索引文件焕檬。還授予對更新映射操作的訪問權限 |
delete | 刪除文件 |
write | 對文檔執(zhí)行所有寫入操作的權限,包括索引澳泵,更新和刪除文檔以及執(zhí)行批量操作的權限实愚。還授予對更新映射操作的訪問權限 |
delete_index | 刪除索引 |
create_index | 創(chuàng)建索引。創(chuàng)建索引請求可能包含在創(chuàng)建索引時添加到索引的別名兔辅。在這種情況下腊敲,該請求最好有manage權限,同時設置索引和別名 |
字段和文檔級安全
可以通過向角色添加字段和文檔級別的安全權限來控制對索引內(nèi)數(shù)據(jù)的訪問维苔。字段級別的安全權限將限制對文檔中特定字段的訪問碰辅。文檔級安全權限限制了對索引中特定文檔的訪問。角色可以基于每個索引的字段和文檔級別設定權限蕉鸳,未指定字段級別權限的角色將授予對所有字段的訪問權限。同樣忍法,不指定文檔級別權限的角色將授予對索引中所有文檔的訪問權限潮尝。
"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.*" ]
}
}]