百亿级数据搜索引擎,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.*" ]
      }
  }]
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,242评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,769评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,484评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,133评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,007评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,080评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,496评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,190评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,464评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,549评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,330评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,205评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,567评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,889评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,160评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,475评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,650评论 2 335

推荐阅读更多精彩内容