好的想法是十分钱一打,真正无价的是能够实现这些想法的人。

使用极限网关来进行 Elasticsearch 跨集群跨版本查询及所有其它请求

使用场景

如果你的业务需要用到有多个集群,并且版本还不一样,是不是管理起来很麻烦,如果能够通过一个 API 来进行查询就方便了,聪明的你相信已经想到了 CCS,没错用 CCS 可以实现跨集群的查询,不过 Elasticsearch 提供的 CCS 对版本有一点的限制,并且需要提前做好 mTLS,也就是需要提前配置好两个集群之间的证书互信,这个免不了要重启维护,好像有点麻烦,那么问题来咯,有没有更好的方案呢?

😁 有办法,今天我就给大家介绍一个基于极限网关的方案,极限网关的网址:http://极限网关.com/

假设现在有两个集群,一个集群是 v2.4.6,有不少业务数据,舍不得删,里面有很多好东西 :)还有一个集群是 v7.14.0,版本还算比较新,业务正在做的一个新的试点,没什么好东西,但是也得用 :(,现在老板们的的需求是希望通过在一个统一的接口就能访问这些数据,程序员懒得很,懂得都懂。

集群信息

  • v2.4.6 集群的访问入口地址:192.168.3.188:9202
  • v7.14.0 集群的访问入口地址:192.168.3.188:9206

这两个集群都是 http 协议的。

实现步骤

今天用到的是极限网关的 switch 过滤器:https://极限网关.com/docs/references/filters/switch/

网关下载下来就两个文件,一个主程序,一个配置文件,记得下载对应操作系统的包。

定义两个集群资源

elasticsearch:
  - name: v2
    enabled: true
    endpoint: http://192.168.3.188:9202
  - name: v7
    enabled: true
    endpoint: http://192.168.3.188:9206

上面定义了两个集群,分别命名为 v2v7,待会会用到这些资源。

定义一个服务入口

entry:
  - name: my_es_entry
    enabled: true
    router: my_router
    max_concurrency: 1000
    network:
      binding: 0.0.0.0:8000
    tls:
      enabled: true

这里定义了一个名为 my_es_entry 的资源入口,并引用了一个名为 my_router 的请求转发路由,同时绑定了网卡的 0.0.0.0:8000 也就是所有本地网卡监听 IP 的 8000 端口,访问任意 IP 的 8000 端口就能访问到这个网关了。

另外老板也说了,Elasticsearch 用 HTTP 协议简直就是裸奔,通过这里开启 tls,可以让网关对外提供的是 HTTPS 协议,这样用户连接的 Elasticsearch 服务就自带 buffer 了,后端的 es 集群和网关直接可以做好网络流量隔离,集群不用动,简直完美。

为什么定义 TLS 不用指定证书,好用的软件不需要这么麻烦,就这样,不解释。

最后,通过设置 max_concurrency 为 1000,限制下并发数,避免野猴子把我们的后端的 Elasticsearch 给压挂了。

定义一个请求路由

router:
  - name: my_router
    default_flow: cross-cluster-search

这里的名称 my_router 就是表示上面的服务入口的router 参数指定的值。

另外设置一个 default_flow 来将所有的请求都转发给一个名为 cross-cluster-search 的请求处理流程,还没定义,别急,马上。

定义请求处理流程

来啦,来啦,先定义两个 flow,如下,分别名为 v2-flowv7-flow,每节配置的 filter 定义了一系列过滤器,用来对请求进行处理,这里就用了一个 elasticsearch 过滤器,也就是转发请求给指定的 Elasticsearch 后端服务器,了否?

flow:
  - name: v2-flow
    filter:
      - elasticsearch:
          elasticsearch: v2
  - name: v7-flow
    filter:
      - elasticsearch:
          elasticsearch: v7

然后,在定义额外一个名为 cross-cluster-search 的 flow,如下:

  - name: cross-cluster-search
    filter:
      - switch:
          path_rules:
            - prefix: "v2:"
              flow: v2-flow
            - prefix: "v7:"
              flow: v7-flow

这个 flow 就是通过请求的路径的前缀来进行路由的过滤器,如果是 v2:开头的请求,则转发给 v2-flow 继续处理,如果是 v7: 开头的请求,则转发给 v7-flow 来处理,使用的用法和 CCS 是一样的。so easy!

对了,那是不是每个请求都需要加前缀啊,费事啊,没事,在这个 cross-cluster-search 的 filter 最后再加上一个 elasticsearch filter,前面前缀匹配不上的都会走它,假设默认都走 v7,最后完整的 flow 配置如下:

flow:
  - name: v2-flow
    filter:
      - elasticsearch:
          elasticsearch: v2
  - name: v7-flow
    filter:
      - elasticsearch:
          elasticsearch: v7
  - name: cross-cluster-search
    filter:
      - switch:
          path_rules:
            - prefix: "v2:"
              flow: v2-flow
            - prefix: "v7:"
              flow: v7-flow
      - elasticsearch:
          elasticsearch: v7              

然后就没有然后了,因为就配置这些就行了。

启动网关

假设配置文件的路径为 sample-configs/cross-cluster-search.yml,运行如下命令:

➜  gateway git:(master) ✗ ./bin/gateway -config sample-configs/cross-cluster-search.yml
   ___   _   _____  __  __    __  _       
  / _ \ /_\ /__   \/__\/ / /\ \ \/_\ /\_/\
 / /_\///_\\  / /\/_\  \ \/  \/ //_\\\_ _/
/ /_\\/  _  \/ / //__   \  /\  /  _  \/ \ 
\____/\_/ \_/\/  \__/    \/  \/\_/ \_/\_/ 

[GATEWAY] A light-weight, powerful and high-performance elasticsearch gateway.
[GATEWAY] 1.0.0_SNAPSHOT, 2021-10-15 16:25:56, 3d0a1cd
[10-16 11:00:52] [INF] [app.go:228] initializing gateway.
[10-16 11:00:52] [INF] [instance.go:24] workspace: data/gateway/nodes/0
[10-16 11:00:52] [INF] [api.go:260] api listen at: http://0.0.0.0:2900
[10-16 11:00:52] [INF] [reverseproxy.go:257] elasticsearch [v7] hosts: [] => [192.168.3.188:9206]
[10-16 11:00:52] [INF] [entry.go:225] auto generating cert files
[10-16 11:00:52] [INF] [actions.go:223] elasticsearch [v2] is available
[10-16 11:00:52] [INF] [actions.go:223] elasticsearch [v7] is available
[10-16 11:00:53] [INF] [entry.go:296] entry [my_es_entry] listen at: https://0.0.0.0:8000
[10-16 11:00:53] [INF] [app.go:309] gateway is running now.

可以看到网关输出了启动成功的日志,网关服务监听在 https://0.0.0.0:8000

试试访问网关

直接访问网关的 8000 端口,因为是网关自签的证书,加上 -k 来跳过证书的校验,如下:

➜  loadgen git:(master) ✗ curl -k   https://localhost:8000  
{
  "name" : "LENOVO",
  "cluster_name" : "es-v7140",
  "cluster_uuid" : "npWjpIZmS8iP_p3GK01-xg",
  "version" : {
    "number" : "7.14.0",
    "build_flavor" : "default",
    "build_type" : "zip",
    "build_hash" : "dd5a0a2acaa2045ff9624f3729fc8a6f40835aa1",
    "build_date" : "2021-07-29T20:49:32.864135063Z",
    "build_snapshot" : false,
    "lucene_version" : "8.9.0",
    "minimum_wire_compatibility_version" : "6.8.0",
    "minimum_index_compatibility_version" : "6.0.0-beta1"
  },
  "tagline" : "You Know, for Search"
}

正如前面配置所配置的一样,默认请求访问的就是 v7 集群。

访问 v2 集群

➜  loadgen git:(master) ✗ curl -k   https://localhost:8000/v2:/    
{
  "name" : "Solomon O'Sullivan",
  "cluster_name" : "es-v246",
  "cluster_uuid" : "cqlpjByvQVWDAv6VvRwPAw",
  "version" : {
    "number" : "2.4.6",
    "build_hash" : "5376dca9f70f3abef96a77f4bb22720ace8240fd",
    "build_timestamp" : "2017-07-18T12:17:44Z",
    "build_snapshot" : false,
    "lucene_version" : "5.5.4"
  },
  "tagline" : "You Know, for Search"
}

查看集群信息:

➜  loadgen git:(master) ✗ curl -k   https://localhost:8000/v2:_cluster/health\?pretty
{
  "cluster_name" : "es-v246",
  "status" : "yellow",
  "timed_out" : false,
  "number_of_nodes" : 1,
  "number_of_data_nodes" : 1,
  "active_primary_shards" : 5,
  "active_shards" : 5,
  "relocating_shards" : 0,
  "initializing_shards" : 0,
  "unassigned_shards" : 5,
  "delayed_unassigned_shards" : 0,
  "number_of_pending_tasks" : 0,
  "number_of_in_flight_fetch" : 0,
  "task_max_waiting_in_queue_millis" : 0,
  "active_shards_percent_as_number" : 50.0
}

插入一条文档:

➜  loadgen git:(master) ✗ curl-json -k   https://localhost:8000/v2:medcl/doc/1 -d '{"name":"hello world"}'
{"_index":"medcl","_type":"doc","_id":"1","_version":1,"_shards":{"total":2,"successful":1,"failed":0},"created":true}%  

执行一个查询

➜  loadgen git:(master) ✗ curl -k   https://localhost:8000/v2:medcl/_search\?q\=name:hello                
{"took":78,"timed_out":false,"_shards":{"total":5,"successful":5,"failed":0},"hits":{"total":1,"max_score":0.19178301,"hits":[{"_index":"medcl","_type":"doc","_id":"1","_score":0.19178301,"_source":{"name":"hello world"}}]}}% 

可以看到,所有的请求,不管是集群的操作,还是索引的增删改查都可以,而 Elasticsearch 自带的 CCS 是只读的,只能进行查询。

访问 v7 集群

➜  loadgen git:(master) ✗ curl -k   https://localhost:8000/v7:/
{
  "name" : "LENOVO",
  "cluster_name" : "es-v7140",
  "cluster_uuid" : "npWjpIZmS8iP_p3GK01-xg",
  "version" : {
    "number" : "7.14.0",
    "build_flavor" : "default",
    "build_type" : "zip",
    "build_hash" : "dd5a0a2acaa2045ff9624f3729fc8a6f40835aa1",
    "build_date" : "2021-07-29T20:49:32.864135063Z",
    "build_snapshot" : false,
    "lucene_version" : "8.9.0",
    "minimum_wire_compatibility_version" : "6.8.0",
    "minimum_index_compatibility_version" : "6.0.0-beta1"
  },
  "tagline" : "You Know, for Search"
}

Kibana 里面访问

完全没问题,有图有真相:

Jietu20211016-114041.jpg

其他操作也类似,就不重复了。

完整的配置

path.data: data
path.logs: log

entry:
  - name: my_es_entry
    enabled: true
    router: my_router
    max_concurrency: 10000
    network:
      binding: 0.0.0.0:8000
    tls:
      enabled: true

flow:
  - name: v2-flow
    filter:
      - elasticsearch:
          elasticsearch: v2
  - name: v7-flow
    filter:
      - elasticsearch:
          elasticsearch: v7
  - name: cross-cluster-search
    filter:
      - switch:
          path_rules:
            - prefix: "v2:"
              flow: v2-flow
            - prefix: "v7:"
              flow: v7-flow
      - elasticsearch:
          elasticsearch: v7

router:
  - name: my_router
    default_flow: cross-cluster-search

elasticsearch:
  - name: v2
    enabled: true
    endpoint: http://192.168.3.188:9202
  - name: v7
    enabled: true
    endpoint: http://192.168.3.188:9206

小结

好了,今天给大家分享的如何使用极限网关来进行 Elasticsearch 跨集群跨版本的操作就到这里了,希望大家周末玩的开心。😁

继续阅读 »

使用场景

如果你的业务需要用到有多个集群,并且版本还不一样,是不是管理起来很麻烦,如果能够通过一个 API 来进行查询就方便了,聪明的你相信已经想到了 CCS,没错用 CCS 可以实现跨集群的查询,不过 Elasticsearch 提供的 CCS 对版本有一点的限制,并且需要提前做好 mTLS,也就是需要提前配置好两个集群之间的证书互信,这个免不了要重启维护,好像有点麻烦,那么问题来咯,有没有更好的方案呢?

😁 有办法,今天我就给大家介绍一个基于极限网关的方案,极限网关的网址:http://极限网关.com/

假设现在有两个集群,一个集群是 v2.4.6,有不少业务数据,舍不得删,里面有很多好东西 :)还有一个集群是 v7.14.0,版本还算比较新,业务正在做的一个新的试点,没什么好东西,但是也得用 :(,现在老板们的的需求是希望通过在一个统一的接口就能访问这些数据,程序员懒得很,懂得都懂。

集群信息

  • v2.4.6 集群的访问入口地址:192.168.3.188:9202
  • v7.14.0 集群的访问入口地址:192.168.3.188:9206

这两个集群都是 http 协议的。

实现步骤

今天用到的是极限网关的 switch 过滤器:https://极限网关.com/docs/references/filters/switch/

网关下载下来就两个文件,一个主程序,一个配置文件,记得下载对应操作系统的包。

定义两个集群资源

elasticsearch:
  - name: v2
    enabled: true
    endpoint: http://192.168.3.188:9202
  - name: v7
    enabled: true
    endpoint: http://192.168.3.188:9206

上面定义了两个集群,分别命名为 v2v7,待会会用到这些资源。

定义一个服务入口

entry:
  - name: my_es_entry
    enabled: true
    router: my_router
    max_concurrency: 1000
    network:
      binding: 0.0.0.0:8000
    tls:
      enabled: true

这里定义了一个名为 my_es_entry 的资源入口,并引用了一个名为 my_router 的请求转发路由,同时绑定了网卡的 0.0.0.0:8000 也就是所有本地网卡监听 IP 的 8000 端口,访问任意 IP 的 8000 端口就能访问到这个网关了。

另外老板也说了,Elasticsearch 用 HTTP 协议简直就是裸奔,通过这里开启 tls,可以让网关对外提供的是 HTTPS 协议,这样用户连接的 Elasticsearch 服务就自带 buffer 了,后端的 es 集群和网关直接可以做好网络流量隔离,集群不用动,简直完美。

为什么定义 TLS 不用指定证书,好用的软件不需要这么麻烦,就这样,不解释。

最后,通过设置 max_concurrency 为 1000,限制下并发数,避免野猴子把我们的后端的 Elasticsearch 给压挂了。

定义一个请求路由

router:
  - name: my_router
    default_flow: cross-cluster-search

这里的名称 my_router 就是表示上面的服务入口的router 参数指定的值。

另外设置一个 default_flow 来将所有的请求都转发给一个名为 cross-cluster-search 的请求处理流程,还没定义,别急,马上。

定义请求处理流程

来啦,来啦,先定义两个 flow,如下,分别名为 v2-flowv7-flow,每节配置的 filter 定义了一系列过滤器,用来对请求进行处理,这里就用了一个 elasticsearch 过滤器,也就是转发请求给指定的 Elasticsearch 后端服务器,了否?

flow:
  - name: v2-flow
    filter:
      - elasticsearch:
          elasticsearch: v2
  - name: v7-flow
    filter:
      - elasticsearch:
          elasticsearch: v7

然后,在定义额外一个名为 cross-cluster-search 的 flow,如下:

  - name: cross-cluster-search
    filter:
      - switch:
          path_rules:
            - prefix: "v2:"
              flow: v2-flow
            - prefix: "v7:"
              flow: v7-flow

这个 flow 就是通过请求的路径的前缀来进行路由的过滤器,如果是 v2:开头的请求,则转发给 v2-flow 继续处理,如果是 v7: 开头的请求,则转发给 v7-flow 来处理,使用的用法和 CCS 是一样的。so easy!

对了,那是不是每个请求都需要加前缀啊,费事啊,没事,在这个 cross-cluster-search 的 filter 最后再加上一个 elasticsearch filter,前面前缀匹配不上的都会走它,假设默认都走 v7,最后完整的 flow 配置如下:

flow:
  - name: v2-flow
    filter:
      - elasticsearch:
          elasticsearch: v2
  - name: v7-flow
    filter:
      - elasticsearch:
          elasticsearch: v7
  - name: cross-cluster-search
    filter:
      - switch:
          path_rules:
            - prefix: "v2:"
              flow: v2-flow
            - prefix: "v7:"
              flow: v7-flow
      - elasticsearch:
          elasticsearch: v7              

然后就没有然后了,因为就配置这些就行了。

启动网关

假设配置文件的路径为 sample-configs/cross-cluster-search.yml,运行如下命令:

➜  gateway git:(master) ✗ ./bin/gateway -config sample-configs/cross-cluster-search.yml
   ___   _   _____  __  __    __  _       
  / _ \ /_\ /__   \/__\/ / /\ \ \/_\ /\_/\
 / /_\///_\\  / /\/_\  \ \/  \/ //_\\\_ _/
/ /_\\/  _  \/ / //__   \  /\  /  _  \/ \ 
\____/\_/ \_/\/  \__/    \/  \/\_/ \_/\_/ 

[GATEWAY] A light-weight, powerful and high-performance elasticsearch gateway.
[GATEWAY] 1.0.0_SNAPSHOT, 2021-10-15 16:25:56, 3d0a1cd
[10-16 11:00:52] [INF] [app.go:228] initializing gateway.
[10-16 11:00:52] [INF] [instance.go:24] workspace: data/gateway/nodes/0
[10-16 11:00:52] [INF] [api.go:260] api listen at: http://0.0.0.0:2900
[10-16 11:00:52] [INF] [reverseproxy.go:257] elasticsearch [v7] hosts: [] => [192.168.3.188:9206]
[10-16 11:00:52] [INF] [entry.go:225] auto generating cert files
[10-16 11:00:52] [INF] [actions.go:223] elasticsearch [v2] is available
[10-16 11:00:52] [INF] [actions.go:223] elasticsearch [v7] is available
[10-16 11:00:53] [INF] [entry.go:296] entry [my_es_entry] listen at: https://0.0.0.0:8000
[10-16 11:00:53] [INF] [app.go:309] gateway is running now.

可以看到网关输出了启动成功的日志,网关服务监听在 https://0.0.0.0:8000

试试访问网关

直接访问网关的 8000 端口,因为是网关自签的证书,加上 -k 来跳过证书的校验,如下:

➜  loadgen git:(master) ✗ curl -k   https://localhost:8000  
{
  "name" : "LENOVO",
  "cluster_name" : "es-v7140",
  "cluster_uuid" : "npWjpIZmS8iP_p3GK01-xg",
  "version" : {
    "number" : "7.14.0",
    "build_flavor" : "default",
    "build_type" : "zip",
    "build_hash" : "dd5a0a2acaa2045ff9624f3729fc8a6f40835aa1",
    "build_date" : "2021-07-29T20:49:32.864135063Z",
    "build_snapshot" : false,
    "lucene_version" : "8.9.0",
    "minimum_wire_compatibility_version" : "6.8.0",
    "minimum_index_compatibility_version" : "6.0.0-beta1"
  },
  "tagline" : "You Know, for Search"
}

正如前面配置所配置的一样,默认请求访问的就是 v7 集群。

访问 v2 集群

➜  loadgen git:(master) ✗ curl -k   https://localhost:8000/v2:/    
{
  "name" : "Solomon O'Sullivan",
  "cluster_name" : "es-v246",
  "cluster_uuid" : "cqlpjByvQVWDAv6VvRwPAw",
  "version" : {
    "number" : "2.4.6",
    "build_hash" : "5376dca9f70f3abef96a77f4bb22720ace8240fd",
    "build_timestamp" : "2017-07-18T12:17:44Z",
    "build_snapshot" : false,
    "lucene_version" : "5.5.4"
  },
  "tagline" : "You Know, for Search"
}

查看集群信息:

➜  loadgen git:(master) ✗ curl -k   https://localhost:8000/v2:_cluster/health\?pretty
{
  "cluster_name" : "es-v246",
  "status" : "yellow",
  "timed_out" : false,
  "number_of_nodes" : 1,
  "number_of_data_nodes" : 1,
  "active_primary_shards" : 5,
  "active_shards" : 5,
  "relocating_shards" : 0,
  "initializing_shards" : 0,
  "unassigned_shards" : 5,
  "delayed_unassigned_shards" : 0,
  "number_of_pending_tasks" : 0,
  "number_of_in_flight_fetch" : 0,
  "task_max_waiting_in_queue_millis" : 0,
  "active_shards_percent_as_number" : 50.0
}

插入一条文档:

➜  loadgen git:(master) ✗ curl-json -k   https://localhost:8000/v2:medcl/doc/1 -d '{"name":"hello world"}'
{"_index":"medcl","_type":"doc","_id":"1","_version":1,"_shards":{"total":2,"successful":1,"failed":0},"created":true}%  

执行一个查询

➜  loadgen git:(master) ✗ curl -k   https://localhost:8000/v2:medcl/_search\?q\=name:hello                
{"took":78,"timed_out":false,"_shards":{"total":5,"successful":5,"failed":0},"hits":{"total":1,"max_score":0.19178301,"hits":[{"_index":"medcl","_type":"doc","_id":"1","_score":0.19178301,"_source":{"name":"hello world"}}]}}% 

可以看到,所有的请求,不管是集群的操作,还是索引的增删改查都可以,而 Elasticsearch 自带的 CCS 是只读的,只能进行查询。

访问 v7 集群

➜  loadgen git:(master) ✗ curl -k   https://localhost:8000/v7:/
{
  "name" : "LENOVO",
  "cluster_name" : "es-v7140",
  "cluster_uuid" : "npWjpIZmS8iP_p3GK01-xg",
  "version" : {
    "number" : "7.14.0",
    "build_flavor" : "default",
    "build_type" : "zip",
    "build_hash" : "dd5a0a2acaa2045ff9624f3729fc8a6f40835aa1",
    "build_date" : "2021-07-29T20:49:32.864135063Z",
    "build_snapshot" : false,
    "lucene_version" : "8.9.0",
    "minimum_wire_compatibility_version" : "6.8.0",
    "minimum_index_compatibility_version" : "6.0.0-beta1"
  },
  "tagline" : "You Know, for Search"
}

Kibana 里面访问

完全没问题,有图有真相:

Jietu20211016-114041.jpg

其他操作也类似,就不重复了。

完整的配置

path.data: data
path.logs: log

entry:
  - name: my_es_entry
    enabled: true
    router: my_router
    max_concurrency: 10000
    network:
      binding: 0.0.0.0:8000
    tls:
      enabled: true

flow:
  - name: v2-flow
    filter:
      - elasticsearch:
          elasticsearch: v2
  - name: v7-flow
    filter:
      - elasticsearch:
          elasticsearch: v7
  - name: cross-cluster-search
    filter:
      - switch:
          path_rules:
            - prefix: "v2:"
              flow: v2-flow
            - prefix: "v7:"
              flow: v7-flow
      - elasticsearch:
          elasticsearch: v7

router:
  - name: my_router
    default_flow: cross-cluster-search

elasticsearch:
  - name: v2
    enabled: true
    endpoint: http://192.168.3.188:9202
  - name: v7
    enabled: true
    endpoint: http://192.168.3.188:9206

小结

好了,今天给大家分享的如何使用极限网关来进行 Elasticsearch 跨集群跨版本的操作就到这里了,希望大家周末玩的开心。😁

收起阅读 »

给Zblogphp插上Elasticsearch的翅膀

# 给Zblogphp插上Elasticsearch的翅膀



找遍了zblog的应用中心,未发现有使用Elasticsearch搜索引擎的插件。国庆闲来无事,根据zblogphp的机制,开发了一个基于Elasticsearch的插件。

本插件使用简单,需要有一个Elasticsearch7.x的环境(基于7.x版本开发),Elasticsearch 安装[IK](https://github.com/medcl/elasticsearch-analysis-ik)、[pinyin](https://github.com/medcl/elast ... pinyin),[中文简繁體转换](https://github.com/medcl/elast ... onvert) 插件。安装好该插件后,只需要配置好账号密码,点击创建索引模板即可。发布和编辑文章时,会自动根据索引模板,创建post索引,同步文章数据。搜索时,直接接管原有的搜索逻辑,无需调整程序和模板。

后台配置截图:


123.jpg



配置好连接,端口,账号和密码,点击“测试连接”,弹出连接成功,展示版本号,即可点击保存配置,如果这4项错误,连接不上Elasticsearch,获取不到ES的版本号,将无法保存配置。



Dingtalk_20211009115321.jpg




看到这个提示,便可以点击“保持配置”。这里有一项“切换搜索 Elasticsearch”,开启,前端搜索即切换到了Elastisearch搜索引擎。


234.jpg



在配置好了基本设置以后,点击索引模板,可以预览到索引模板,点击“创建索引模板”,即可在Elasticsearch服务器创建好索引模板,成功后,会在说明栏展示绿色的“已创建”,如果未创建,展示红色的“未创建”。发布和编辑文章时,会根据该索引模板,自动创建好索引,同步文章。



以下是搜索效果截图:

345.jpg

继续阅读 »
# 给Zblogphp插上Elasticsearch的翅膀



找遍了zblog的应用中心,未发现有使用Elasticsearch搜索引擎的插件。国庆闲来无事,根据zblogphp的机制,开发了一个基于Elasticsearch的插件。

本插件使用简单,需要有一个Elasticsearch7.x的环境(基于7.x版本开发),Elasticsearch 安装[IK](https://github.com/medcl/elasticsearch-analysis-ik)、[pinyin](https://github.com/medcl/elast ... pinyin),[中文简繁體转换](https://github.com/medcl/elast ... onvert) 插件。安装好该插件后,只需要配置好账号密码,点击创建索引模板即可。发布和编辑文章时,会自动根据索引模板,创建post索引,同步文章数据。搜索时,直接接管原有的搜索逻辑,无需调整程序和模板。

后台配置截图:


123.jpg



配置好连接,端口,账号和密码,点击“测试连接”,弹出连接成功,展示版本号,即可点击保存配置,如果这4项错误,连接不上Elasticsearch,获取不到ES的版本号,将无法保存配置。



Dingtalk_20211009115321.jpg




看到这个提示,便可以点击“保持配置”。这里有一项“切换搜索 Elasticsearch”,开启,前端搜索即切换到了Elastisearch搜索引擎。


234.jpg



在配置好了基本设置以后,点击索引模板,可以预览到索引模板,点击“创建索引模板”,即可在Elasticsearch服务器创建好索引模板,成功后,会在说明栏展示绿色的“已创建”,如果未创建,展示红色的“未创建”。发布和编辑文章时,会根据该索引模板,自动创建好索引,同步文章。



以下是搜索效果截图:

345.jpg

收起阅读 »

通过python脚本迁移ES的template模板

通过python脚本迁移ES的template模板

通过python脚本迁移ES的template模板,从192.168.0.1 迁移到 192.168.0.2

import base64
import json

import requests

def putTemplate(templateName, templateDslJson):
    print("{0} 索引模板正在迁移中".format(templateName))

    res = requests.put("http://192.168.0.2:9200/_template/{0}".format(templateName), json=templateDslJson)
    print(res.status_code)
    print(res.content)

def getTemplateDslJson():
    username = "elastic"
    password = "123456"
    user_info_str = username + ":" + password
    user_info = base64.b64encode(user_info_str.encode())  # 这个得到是个字节类型的数据
    headers = {
        "Authorization": "Basic {0}".format(user_info.decode())  # 这个就是需要验证的信息
    }
    url = "http://192.168.0.1:9200/_template/*_template"
    res = requests.get(url, headers=headers)
    print(res.status_code)
    return json.loads(res.content)

if __name__ == '__main__':
    jsonTemplate = getTemplateDslJson()
    if isinstance(jsonTemplate, dict):
        for templateName in jsonTemplate:
            templateDslJson = jsonTemplate[templateName]
            putTemplate(templateName, templateDslJson)
继续阅读 »

通过python脚本迁移ES的template模板

通过python脚本迁移ES的template模板,从192.168.0.1 迁移到 192.168.0.2

import base64
import json

import requests

def putTemplate(templateName, templateDslJson):
    print("{0} 索引模板正在迁移中".format(templateName))

    res = requests.put("http://192.168.0.2:9200/_template/{0}".format(templateName), json=templateDslJson)
    print(res.status_code)
    print(res.content)

def getTemplateDslJson():
    username = "elastic"
    password = "123456"
    user_info_str = username + ":" + password
    user_info = base64.b64encode(user_info_str.encode())  # 这个得到是个字节类型的数据
    headers = {
        "Authorization": "Basic {0}".format(user_info.decode())  # 这个就是需要验证的信息
    }
    url = "http://192.168.0.1:9200/_template/*_template"
    res = requests.get(url, headers=headers)
    print(res.status_code)
    return json.loads(res.content)

if __name__ == '__main__':
    jsonTemplate = getTemplateDslJson()
    if isinstance(jsonTemplate, dict):
        for templateName in jsonTemplate:
            templateDslJson = jsonTemplate[templateName]
            putTemplate(templateName, templateDslJson)
收起阅读 »

Elastic:使用 docker 来安装 Elastic Stack 8.0-alpha2

Elastic Stack 8.0.0-alpha2 刚刚发布,这是一个快速(非官方)的启动和运行指南。 更多功能、文档和公告即将发布,但冒险者已经开始:在几分钟内启动并运行 Docker 上的 Elasticsearch、Kibana 和 Agent。

请注意:

这是一个 alpha 发布版。 仅将其用于测试,不要指望最终能够升级到 8.0.0 版本最终版本。
期待将会有一些这样或者那样的 bug。 这就是我们再次运行 Elastic Pioneer Program  的原因,以便我们可以解决尽可能多的问题。
这是保持简单的最小示例,例如跳过 TLS 证书(尽管这可能会改变)。 请不要将其用作生产环境。
在今天的文章中,我将详细地介绍如何安装 Elastic Stack 8.0-alpha2 版本。

原文链接:https://blog.csdn.net/UbuntuTo ... 24770
继续阅读 »
Elastic Stack 8.0.0-alpha2 刚刚发布,这是一个快速(非官方)的启动和运行指南。 更多功能、文档和公告即将发布,但冒险者已经开始:在几分钟内启动并运行 Docker 上的 Elasticsearch、Kibana 和 Agent。

请注意:

这是一个 alpha 发布版。 仅将其用于测试,不要指望最终能够升级到 8.0.0 版本最终版本。
期待将会有一些这样或者那样的 bug。 这就是我们再次运行 Elastic Pioneer Program  的原因,以便我们可以解决尽可能多的问题。
这是保持简单的最小示例,例如跳过 TLS 证书(尽管这可能会改变)。 请不要将其用作生产环境。
在今天的文章中,我将详细地介绍如何安装 Elastic Stack 8.0-alpha2 版本。

原文链接:https://blog.csdn.net/UbuntuTo ... 24770 收起阅读 »

Elastic 7.15 版:数秒之内打造强大的个性化搜索体验

我们很高兴地宣布 Elastic 7.15 版正式发布,这个版本为 Elastic Search Platform(包括 Elasticsearch 和 Kibana)及其三个内置解决方案(Elastic Enterprise Search、Elastic 可观测性和 Elastic 安全)带来一系列广泛的全新功能。

在 Elastic 7.15 版中,正式推出了 Elastic App Search 网络爬虫,并与 Google Cloud 实现了更加紧密的集成 — 这让我们的客户和社区能够更快地打造强大的新网络搜索体验,更快速、更安全地采集数据,并更轻松地利用搜索的力量让数据发挥作用。

此外,借助 Elastic 可观测性中新增的 APM 关联功能,DevOps 团队可以通过自动显现与高延迟或错误事务关联的属性,加快根本原因分析的速度并缩短平均解决时间 (MTTR)。

而且,俗话说得好,一不做二不休,如果打算要观测……何不(同时)保护呢?

为此,在 Elastic 7.15 版中,Elastic 安全对 Limitless XDR(扩展检测与响应)进行了增强,既能够为几乎所有的操作系统提供恶意行为保护功能,又能够为云原生 Linux 环境提供一键式主机隔离功能。
 
https://elasticstack.blog.csdn ... 82102
继续阅读 »
我们很高兴地宣布 Elastic 7.15 版正式发布,这个版本为 Elastic Search Platform(包括 Elasticsearch 和 Kibana)及其三个内置解决方案(Elastic Enterprise Search、Elastic 可观测性和 Elastic 安全)带来一系列广泛的全新功能。

在 Elastic 7.15 版中,正式推出了 Elastic App Search 网络爬虫,并与 Google Cloud 实现了更加紧密的集成 — 这让我们的客户和社区能够更快地打造强大的新网络搜索体验,更快速、更安全地采集数据,并更轻松地利用搜索的力量让数据发挥作用。

此外,借助 Elastic 可观测性中新增的 APM 关联功能,DevOps 团队可以通过自动显现与高延迟或错误事务关联的属性,加快根本原因分析的速度并缩短平均解决时间 (MTTR)。

而且,俗话说得好,一不做二不休,如果打算要观测……何不(同时)保护呢?

为此,在 Elastic 7.15 版中,Elastic 安全对 Limitless XDR(扩展检测与响应)进行了增强,既能够为几乎所有的操作系统提供恶意行为保护功能,又能够为云原生 Linux 环境提供一键式主机隔离功能。
 
https://elasticstack.blog.csdn ... 82102 收起阅读 »

Elasticsearch:分页搜索结果

随着时间点 API(Point in time API)的推出,根据 Elastic 的官方博客 “使用 Elasticsearch 时间点读取器获得随时间推移而保持一致的数据视图”,Scroll 接口将不被推荐作为对搜索结果的分页。

默认情况下,搜索会返回前 10 个匹配的匹配项。 要翻阅更大的结果集,你可以使用搜索 API 的 from 和 size 参数。 from 参数定义要跳过的命中数,默认为 0。 size 参数是要返回的最大命中数。 这两个参数共同定义了一页结果。比如:

GET /twitter/_search
{
  "from": 5,
  "size": 20,
  "query": {
    "match": {
      "city": "北京"
    }
  }
}

避免使用 from 和 size 来分页太深或一次请求太多结果。 搜索请求通常跨越多个分片。 每个分片必须将其请求的命中和任何先前页面的命中加载到内存中。 对于深页面或大型结果集,这些操作会显着增加内存和 CPU 使用率,从而导致性能下降或节点故障。这里的原因是 index.max_result_window 的默认值是 10K,也就是说 from+size 的最大值是1万。搜索请求占用堆内存和时间与 from+size 成比例,这限制了内存。假如你想 hit 从 990 到 1000,那么每个 shard 至少需要 1000 个文档:

原文链接:https://elasticstack.blog.csdn ... 32811
继续阅读 »
随着时间点 API(Point in time API)的推出,根据 Elastic 的官方博客 “使用 Elasticsearch 时间点读取器获得随时间推移而保持一致的数据视图”,Scroll 接口将不被推荐作为对搜索结果的分页。

默认情况下,搜索会返回前 10 个匹配的匹配项。 要翻阅更大的结果集,你可以使用搜索 API 的 from 和 size 参数。 from 参数定义要跳过的命中数,默认为 0。 size 参数是要返回的最大命中数。 这两个参数共同定义了一页结果。比如:

GET /twitter/_search
{
  "from": 5,
  "size": 20,
  "query": {
    "match": {
      "city": "北京"
    }
  }
}

避免使用 from 和 size 来分页太深或一次请求太多结果。 搜索请求通常跨越多个分片。 每个分片必须将其请求的命中和任何先前页面的命中加载到内存中。 对于深页面或大型结果集,这些操作会显着增加内存和 CPU 使用率,从而导致性能下降或节点故障。这里的原因是 index.max_result_window 的默认值是 10K,也就是说 from+size 的最大值是1万。搜索请求占用堆内存和时间与 from+size 成比例,这限制了内存。假如你想 hit 从 990 到 1000,那么每个 shard 至少需要 1000 个文档:

原文链接:https://elasticstack.blog.csdn ... 32811 收起阅读 »

使用 Elasticsearch 时间点读取器获得随时间推移而保持一致的数据视图

总结一下:如果可行,我们推荐您使用 Elasticsearch 的全新时间点功能。对于深度分页,我们不再推荐使用滚动 API(虽然它仍然有效)。

大多数数据都不断变化。在 Elasticsearch 中查询索引,实际上是在一个给定的时间点搜索数据。由于索引不断变化(在大多数可观测性和安全性用例中皆如此),在不同的时间执行两个相同的查询将返回不同的结果,因为数据会随着时间而变化。那么,如果需要消除时间变量的影响,该怎么做呢?

Elasticsearch 7.10 中引入的时间点读取器可以让您反复查询某个索引,仿佛该索引处于某个特定的时间点。

从这个高度概括的介绍看,时间点功能似乎与滚动 API 类似,后者会检索下一批结果以完成滚动搜索。但两者间有一个微妙的差别,可以清楚表明为何时间点在未来将是“有状态”查询不可或缺的部分。
 
https://elasticstack.blog.csdn ... 25187
继续阅读 »
总结一下:如果可行,我们推荐您使用 Elasticsearch 的全新时间点功能。对于深度分页,我们不再推荐使用滚动 API(虽然它仍然有效)。

大多数数据都不断变化。在 Elasticsearch 中查询索引,实际上是在一个给定的时间点搜索数据。由于索引不断变化(在大多数可观测性和安全性用例中皆如此),在不同的时间执行两个相同的查询将返回不同的结果,因为数据会随着时间而变化。那么,如果需要消除时间变量的影响,该怎么做呢?

Elasticsearch 7.10 中引入的时间点读取器可以让您反复查询某个索引,仿佛该索引处于某个特定的时间点。

从这个高度概括的介绍看,时间点功能似乎与滚动 API 类似,后者会检索下一批结果以完成滚动搜索。但两者间有一个微妙的差别,可以清楚表明为何时间点在未来将是“有状态”查询不可或缺的部分。
 
https://elasticstack.blog.csdn ... 25187 收起阅读 »

将ES索引从一个集群迁移到另一个集群的python脚本

将索引从一个集群(ip:192.168.0.1)迁移到另一个集群(ip:192.168.0.2),新集群需要配置白名单:

# elasticsearch.yml
reindex.remote.whitelist: ['192.168.0.1:9200']
import json

import requests

import base64

# 迁移索引数据
def reindex(index):
    print("{0} 索引正在迁移中".format(index))
    jsonData = {
        "source": {
            "remote": {
                "host": "http://192.168.0.1:9200",
                "socket_timeout": "30s",
                "connect_timeout": "30s",
                "username": "elastic",
                "password": "123456"
            },
            "index": index
        },
        "dest": {
            "index": index
        }
    }
    res = requests.post("http://192.168.0.2:9200/_reindex", json=jsonData)
    print(res.status_code)
    print(res.content)

# 获取创建索引的语句
def getIndexDslJson(index):

    username = "elastic"
    password = "123456"
    user_info_str = username + ":" + password
    user_info = base64.b64encode(user_info_str.encode())  # 这个得到是个字节类型的数据
    headers = {
        "Authorization": "Basic {0}".format(user_info.decode())  # 这个就是需要验证的信息
    }

    res = requests.get("http://192.168.0.1:9200/{0}".format(index),
                       headers=headers)
    print(res.status_code)
    jsonIndex = json.loads(res.content)
    print(jsonIndex[index])
    del jsonIndex[index]['settings']['index']['creation_date']
    del jsonIndex[index]['settings']['index']['provided_name']
    del jsonIndex[index]['settings']['index']['uuid']
    del jsonIndex[index]['settings']['index']['version']
    jsonIndex[index]['settings']['index']['number_of_shards'] = 1
    jsonIndex[index]['settings']['index']['number_of_replicas'] = 0
    return jsonIndex[index]

# 创建索引
def createIndex(index, dslJson):
    res = requests.put("http://192.168.0.2:9200/{0}".format(index), json=dslJson)
    print(res.status_code)
    print(res.content)

if __name__ == '__main__':
    # 需要创建的索引
    indexList = [
        "index1_v1", "index2_v1"
    ]
    for index in indexList:
        dslJson = getIndexDslJson(index) # 获取原索引的结构
        createIndex(index, dslJson) # 根据原索引结构,在新集群创建索引
        reindex(index) # 将原集群索引迁移到新集群
继续阅读 »

将索引从一个集群(ip:192.168.0.1)迁移到另一个集群(ip:192.168.0.2),新集群需要配置白名单:

# elasticsearch.yml
reindex.remote.whitelist: ['192.168.0.1:9200']
import json

import requests

import base64

# 迁移索引数据
def reindex(index):
    print("{0} 索引正在迁移中".format(index))
    jsonData = {
        "source": {
            "remote": {
                "host": "http://192.168.0.1:9200",
                "socket_timeout": "30s",
                "connect_timeout": "30s",
                "username": "elastic",
                "password": "123456"
            },
            "index": index
        },
        "dest": {
            "index": index
        }
    }
    res = requests.post("http://192.168.0.2:9200/_reindex", json=jsonData)
    print(res.status_code)
    print(res.content)

# 获取创建索引的语句
def getIndexDslJson(index):

    username = "elastic"
    password = "123456"
    user_info_str = username + ":" + password
    user_info = base64.b64encode(user_info_str.encode())  # 这个得到是个字节类型的数据
    headers = {
        "Authorization": "Basic {0}".format(user_info.decode())  # 这个就是需要验证的信息
    }

    res = requests.get("http://192.168.0.1:9200/{0}".format(index),
                       headers=headers)
    print(res.status_code)
    jsonIndex = json.loads(res.content)
    print(jsonIndex[index])
    del jsonIndex[index]['settings']['index']['creation_date']
    del jsonIndex[index]['settings']['index']['provided_name']
    del jsonIndex[index]['settings']['index']['uuid']
    del jsonIndex[index]['settings']['index']['version']
    jsonIndex[index]['settings']['index']['number_of_shards'] = 1
    jsonIndex[index]['settings']['index']['number_of_replicas'] = 0
    return jsonIndex[index]

# 创建索引
def createIndex(index, dslJson):
    res = requests.put("http://192.168.0.2:9200/{0}".format(index), json=dslJson)
    print(res.status_code)
    print(res.content)

if __name__ == '__main__':
    # 需要创建的索引
    indexList = [
        "index1_v1", "index2_v1"
    ]
    for index in indexList:
        dslJson = getIndexDslJson(index) # 获取原索引的结构
        createIndex(index, dslJson) # 根据原索引结构,在新集群创建索引
        reindex(index) # 将原集群索引迁移到新集群
收起阅读 »

使用docker安装es环境

创建es账号并授权

# 创建账号
adduser es

# 修改密码
passwd es   

# 授权
chmod -v u+w /etc/sudoers
vim /etc/sudoers

#新增
es ALL=(ALL) ALL

# wq保存退出,这时候要记得将写权限收回
chmod -v u-w /etc/sudoers

创建docker网络

docker network create tx

安装Elasticsearch

docker pull elasticsearch:6.7.1
在/home/es 中创建 config,data,plugins目录
在plugins目录中下载es相关插件,如:ik,pinyin等
在config中创建elasticsearch.yml配置,创建analysis\synonym.txt 同义词
给data配置权限 sudo chmod 777 /home/es/data/
将/home/es 目录及其子目录的用户改为es:chown -R es:root /home/es/
# elasticsearch.yml
cluster.name: "my-docker-cluster"
node.name: "es-node1"
network.host: 0.0.0.0
http.port: 9200
http.cors.enabled: true
http.cors.allow-origin: "*"
http.cors.allow-headers: "Authorization,X-Requested-With,Content-Length,Content-Type"
node.master: true
reindex.remote.whitelist: ['other:9200']

xpack.security.enabled: true
xpack.security.authc.api_key.enabled: true
#xpack.security.transport.ssl.enabled: true
#xpack.security.transport.ssl.verification_mode: certificate 
#xpack.security.transport.ssl.keystore.path: elastic-certificates.p12
#xpack.security.transport.ssl.truststore.path: elastic-certificates.p12
docker run -d --net tx --name my_elasticsearch -p 9201:9200 -p 9301:9300 -v /home/es/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml -v /home/es/config/analysis:/usr/share/elasticsearch/config/analysis -v /home/es/config/elastic-certificates.p12:/usr/share/elasticsearch/config/elastic-certificates.p12 -v /home/es/data:/usr/share/elasticsearch/data -v /home/es/plugins:/usr/share/elasticsearch/plugins -e "discovery.type=single-node" -i -t --privileged=true elasticsearch:6.7.1

安装kibana

docker pull kibana:6.7.1
# kibana.yml配置文件
server.name: kibana
server.host: 0.0.0.0
elasticsearch.hosts: ["http://my_elasticsearch:9200"]
i18n.locale: "zh-CN"
elasticsearch.username: "elastic"
elasticsearch.password: "123456"
xpack.graph.enabled : true
xpack.ml.enabled : true
xpack.monitoring.enabled : true
xpack.reporting.enabled : true
xpack.security.enabled : true
xpack.watcher.enabled : true
docker run -d --name kibana --net tx -p 5601:5601 -v  /home/kibana/kibana.yml:/usr/share/kibana/config/kibana.yml kibana:6.7.1
继续阅读 »

创建es账号并授权

# 创建账号
adduser es

# 修改密码
passwd es   

# 授权
chmod -v u+w /etc/sudoers
vim /etc/sudoers

#新增
es ALL=(ALL) ALL

# wq保存退出,这时候要记得将写权限收回
chmod -v u-w /etc/sudoers

创建docker网络

docker network create tx

安装Elasticsearch

docker pull elasticsearch:6.7.1
在/home/es 中创建 config,data,plugins目录
在plugins目录中下载es相关插件,如:ik,pinyin等
在config中创建elasticsearch.yml配置,创建analysis\synonym.txt 同义词
给data配置权限 sudo chmod 777 /home/es/data/
将/home/es 目录及其子目录的用户改为es:chown -R es:root /home/es/
# elasticsearch.yml
cluster.name: "my-docker-cluster"
node.name: "es-node1"
network.host: 0.0.0.0
http.port: 9200
http.cors.enabled: true
http.cors.allow-origin: "*"
http.cors.allow-headers: "Authorization,X-Requested-With,Content-Length,Content-Type"
node.master: true
reindex.remote.whitelist: ['other:9200']

xpack.security.enabled: true
xpack.security.authc.api_key.enabled: true
#xpack.security.transport.ssl.enabled: true
#xpack.security.transport.ssl.verification_mode: certificate 
#xpack.security.transport.ssl.keystore.path: elastic-certificates.p12
#xpack.security.transport.ssl.truststore.path: elastic-certificates.p12
docker run -d --net tx --name my_elasticsearch -p 9201:9200 -p 9301:9300 -v /home/es/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml -v /home/es/config/analysis:/usr/share/elasticsearch/config/analysis -v /home/es/config/elastic-certificates.p12:/usr/share/elasticsearch/config/elastic-certificates.p12 -v /home/es/data:/usr/share/elasticsearch/data -v /home/es/plugins:/usr/share/elasticsearch/plugins -e "discovery.type=single-node" -i -t --privileged=true elasticsearch:6.7.1

安装kibana

docker pull kibana:6.7.1
# kibana.yml配置文件
server.name: kibana
server.host: 0.0.0.0
elasticsearch.hosts: ["http://my_elasticsearch:9200"]
i18n.locale: "zh-CN"
elasticsearch.username: "elastic"
elasticsearch.password: "123456"
xpack.graph.enabled : true
xpack.ml.enabled : true
xpack.monitoring.enabled : true
xpack.reporting.enabled : true
xpack.security.enabled : true
xpack.watcher.enabled : true
docker run -d --name kibana --net tx -p 5601:5601 -v  /home/kibana/kibana.yml:/usr/share/kibana/config/kibana.yml kibana:6.7.1
收起阅读 »

Elastic:如何使用 Elasticsearch PHP 客户端创建简单的搜索引擎

如果你正在寻找快速、强大的搜索功能,Elasticsearch 是合乎逻辑的选择。 这种可扩展的搜索引擎可以执行快速、高效的全文搜索和其他复杂查询。 你可以使用 PHP 创建一个简单的搜索引擎来演示 Elasticsearch 的功能。 在本教程中,我们将通过使用 Elasticsearch 构建一个简单的搜索引擎,向你展示如何使用 PHP 创建和索引文档。

原文链接:https://blog.csdn.net/UbuntuTo ... 02174
继续阅读 »
如果你正在寻找快速、强大的搜索功能,Elasticsearch 是合乎逻辑的选择。 这种可扩展的搜索引擎可以执行快速、高效的全文搜索和其他复杂查询。 你可以使用 PHP 创建一个简单的搜索引擎来演示 Elasticsearch 的功能。 在本教程中,我们将通过使用 Elasticsearch 构建一个简单的搜索引擎,向你展示如何使用 PHP 创建和索引文档。

原文链接:https://blog.csdn.net/UbuntuTo ... 02174 收起阅读 »

Elastic:Elastic Stack 8.0.0-alpha1 发布

虽然 7.x 次要版本继续提供一个又一个功能,但我们很高兴地宣布 8.0.0 的第一个公开 alpha。

在我们继续这个令人兴奋的消息之前,我们想提醒你这是一个 alpha 版本。 我们建议你与生产保持一定的距离。 不保证 8.0.0-alpha1 将与其他预览版本或 8.0.0 通用版 (GA) 兼容。

此外,8.0.0-alpha1 将不会在 Elastic Cloud 上可用。 但是,我们希望在未来几个月内提供预览版。
https://elasticstack.blog.csdn ... 31726
继续阅读 »
虽然 7.x 次要版本继续提供一个又一个功能,但我们很高兴地宣布 8.0.0 的第一个公开 alpha。

在我们继续这个令人兴奋的消息之前,我们想提醒你这是一个 alpha 版本。 我们建议你与生产保持一定的距离。 不保证 8.0.0-alpha1 将与其他预览版本或 8.0.0 通用版 (GA) 兼容。

此外,8.0.0-alpha1 将不会在 Elastic Cloud 上可用。 但是,我们希望在未来几个月内提供预览版。
https://elasticstack.blog.csdn ... 31726 收起阅读 »

Elastic 7.14.0 版推出业界首个免费开放的 Limitless XDR

我们非常高兴地宣布 Elastic 7.14 版正式发布,包括我们基于 Elastic Stack(包括 Elasticsearch 和 Kibana)构建的 Elastic 企业搜索、可观测性和安全解决方案。 

Elastic 7.14 版为组织提供了首个免费开放的 Limitless XDR,能够在一个平台中提供一体化的 SIEM 和 Endpoint Security 功能。 

使用最新版本,能够更加容易地管理和监测来自越来越多的不同来源的数据。有了 Elastic 代理,安全从业人员可以从他们所有主机上的集成的勒索软件和恶意软件防御及修复功能中获益。Elastic 可观测性的用户可以通过 Elastic 代理更好地洞察他们的应用程序和基础架构,实现安全的集中化代理管理。现在,通过 Kibana 中集中管理的 Elastic 企业搜索,每个人都可以利用方便易用的单一管理界面来管理所有 Elastic 解决方案。

Elastic 7.14 版现已在 Elastic Cloud 上正式推出,这是唯一一个包含此最新版所有新功能的托管型 Elasticsearch 产品。您也可以下载 Elastic Stack 以及我们的云编排产品(Elastic Cloud Enterprise 和 Elastic Cloud for Kubernetes)进行自管型部署。
 
Elastic 7.14.0 版推出业界首个免费开发的 Limitless XDR
 
https://elasticstack.blog.csdn ... 77512
继续阅读 »
我们非常高兴地宣布 Elastic 7.14 版正式发布,包括我们基于 Elastic Stack(包括 Elasticsearch 和 Kibana)构建的 Elastic 企业搜索、可观测性和安全解决方案。 

Elastic 7.14 版为组织提供了首个免费开放的 Limitless XDR,能够在一个平台中提供一体化的 SIEM 和 Endpoint Security 功能。 

使用最新版本,能够更加容易地管理和监测来自越来越多的不同来源的数据。有了 Elastic 代理,安全从业人员可以从他们所有主机上的集成的勒索软件和恶意软件防御及修复功能中获益。Elastic 可观测性的用户可以通过 Elastic 代理更好地洞察他们的应用程序和基础架构,实现安全的集中化代理管理。现在,通过 Kibana 中集中管理的 Elastic 企业搜索,每个人都可以利用方便易用的单一管理界面来管理所有 Elastic 解决方案。

Elastic 7.14 版现已在 Elastic Cloud 上正式推出,这是唯一一个包含此最新版所有新功能的托管型 Elasticsearch 产品。您也可以下载 Elastic Stack 以及我们的云编排产品(Elastic Cloud Enterprise 和 Elastic Cloud for Kubernetes)进行自管型部署。
 
Elastic 7.14.0 版推出业界首个免费开发的 Limitless XDR
 
https://elasticstack.blog.csdn ... 77512 收起阅读 »

Observability:使用 APM 中的 Service Map 了解和调试应用程序

在 Kibana 中,有一个可观测性的应用叫做 APM,也就是应用性能监控 (Application Performance Monitoring)。它是构建于 Elastic Stack 之上的。它可以很轻松地让我定位并且对应用的性能进行调优。在本文章中,我将介绍分布式追踪到底是什么以及如何使用 Service Map 来快速地展示你一个系统的整个架构。
 

e1.png


e2.png



原文链接:https://blog.csdn.net/UbuntuTo ... 67839
继续阅读 »
在 Kibana 中,有一个可观测性的应用叫做 APM,也就是应用性能监控 (Application Performance Monitoring)。它是构建于 Elastic Stack 之上的。它可以很轻松地让我定位并且对应用的性能进行调优。在本文章中,我将介绍分布式追踪到底是什么以及如何使用 Service Map 来快速地展示你一个系统的整个架构。
 

e1.png


e2.png



原文链接:https://blog.csdn.net/UbuntuTo ... 67839 收起阅读 »

Elasticsearch:Ingest Pipeline 实践

相比较 Logstash 而言,由于其丰富的 processors 而受到越来越多人的喜欢。最重要的一个优点就是它基于 Elasticsearch 极具可拓展性和维护性而受到开发者的喜欢。我在之前创建了很多关于 Ingest Pipeline 的文章。你可以参阅文章 “Elastic:菜鸟上手指南” 中的 Ingest pipeline 章节。

在今天的文章中,我想同一个一个例子来展示两种创建 Ingest Pipeline 的方法尽管在我之前的文章中都有介绍:

通过 API 的方法来创建
通过 Kibana 的界面来进行创建
————————————————
原文链接:https://blog.csdn.net/UbuntuTo ... 33366
继续阅读 »
相比较 Logstash 而言,由于其丰富的 processors 而受到越来越多人的喜欢。最重要的一个优点就是它基于 Elasticsearch 极具可拓展性和维护性而受到开发者的喜欢。我在之前创建了很多关于 Ingest Pipeline 的文章。你可以参阅文章 “Elastic:菜鸟上手指南” 中的 Ingest pipeline 章节。

在今天的文章中,我想同一个一个例子来展示两种创建 Ingest Pipeline 的方法尽管在我之前的文章中都有介绍:

通过 API 的方法来创建
通过 Kibana 的界面来进行创建
————————————————
原文链接:https://blog.csdn.net/UbuntuTo ... 33366 收起阅读 »

Elasticsearch 使得 Data Science 变得更简单了 - Eland

Eland 是一个全新的 Python 包,它在 Elasticsearch 和数据科学生态系统之间架起了一座桥梁。Elasticsearch 是一个功能丰富的开源搜索引擎,它构建在 Apache Lucene 之上,Apache Lucene 是市场上最重要的全文搜索引擎之一。Elasticsearch 以其提供的广泛而通用的 REST API 体验而闻名,包括用于全文搜索、排序和聚合任务的高效 wrapper,使得在现有后端中实现此类功能变得更加容易,而无需进行复杂的重新设计。自 2010 年推出以来,Elasticsearch 在软件工程领域获得了广泛的关注,到 2016 年,根据 DBMS 知识库 DB-engines,它成为最受欢迎的企业搜索引擎软件堆栈,超越了行业标准的 Apache Solr( 也建立在 Lucene 之上)。

Elasticsearch 如此受欢迎的原因之一是它生成的生态系统。 世界各地的工程师开发了开源 Elasticsearch 集成和扩展,其中许多项目被 Elastic(Elasticsearch 项目背后的公司)吸收作为其堆栈的一部分其中一些项目是 Logstash(数据处理管道,通常用于解析基于文本的文件)和 Kibana(建立在 Elasticsearch 之上的可视化层),导致现在广泛采用的 ELK(Elasticsearch、Logstash、Kibana)堆栈。Elastic Stack 因其在新兴和整合技术领域(例如 DevOps、站点可靠性工程以及最近的数据分析)的优异表现而得到广泛的使用。

Data science
如果您是一名阅读本文的数据科学家,并且将 Elasticsearch 作为你雇主技术堆栈的一部分,那么在尝试使用 Elasticsearch 提供的所有功能进行数据分析甚至简单的机器学习任务时,你可能会遇到一些问题。

数据科学家通常不习惯使用 NoSQL 数据库引擎执行常见任务,甚至不习惯依赖复杂的 REST API 进行分析。例如,使用 Elasticsearch 的低级 Python 客户端处理大量数据也不是那么直观,对于来自与 SWE 不同领域的人来说,学习曲线有些陡峭。

尽管 Elastic 在增强用于分析和数据科学用例的 Elastic Stack 方面做出了重大努力,但它仍然缺乏与现有数据科学生态系统(pandas、numpy、scikit-learn、PyTorch 和其他流行库)的简单接口。

2017 年,Elastic 向数据科学领域迈出了第一步,作为对机器学习和预测技术在软件行业日益普及的回应,发布了第一个支持 ML 的 X-pack(扩展包)用于 Elastic Stack,将异常检测和其他无监督 ML 任务添加到其功能中。不久之后,回归和分类模型也被添加到 Elastic Stack 中可用的 ML 任务集中。

原文链接:https://blog.csdn.net/UbuntuTo ... 45670
继续阅读 »
Eland 是一个全新的 Python 包,它在 Elasticsearch 和数据科学生态系统之间架起了一座桥梁。Elasticsearch 是一个功能丰富的开源搜索引擎,它构建在 Apache Lucene 之上,Apache Lucene 是市场上最重要的全文搜索引擎之一。Elasticsearch 以其提供的广泛而通用的 REST API 体验而闻名,包括用于全文搜索、排序和聚合任务的高效 wrapper,使得在现有后端中实现此类功能变得更加容易,而无需进行复杂的重新设计。自 2010 年推出以来,Elasticsearch 在软件工程领域获得了广泛的关注,到 2016 年,根据 DBMS 知识库 DB-engines,它成为最受欢迎的企业搜索引擎软件堆栈,超越了行业标准的 Apache Solr( 也建立在 Lucene 之上)。

Elasticsearch 如此受欢迎的原因之一是它生成的生态系统。 世界各地的工程师开发了开源 Elasticsearch 集成和扩展,其中许多项目被 Elastic(Elasticsearch 项目背后的公司)吸收作为其堆栈的一部分其中一些项目是 Logstash(数据处理管道,通常用于解析基于文本的文件)和 Kibana(建立在 Elasticsearch 之上的可视化层),导致现在广泛采用的 ELK(Elasticsearch、Logstash、Kibana)堆栈。Elastic Stack 因其在新兴和整合技术领域(例如 DevOps、站点可靠性工程以及最近的数据分析)的优异表现而得到广泛的使用。

Data science
如果您是一名阅读本文的数据科学家,并且将 Elasticsearch 作为你雇主技术堆栈的一部分,那么在尝试使用 Elasticsearch 提供的所有功能进行数据分析甚至简单的机器学习任务时,你可能会遇到一些问题。

数据科学家通常不习惯使用 NoSQL 数据库引擎执行常见任务,甚至不习惯依赖复杂的 REST API 进行分析。例如,使用 Elasticsearch 的低级 Python 客户端处理大量数据也不是那么直观,对于来自与 SWE 不同领域的人来说,学习曲线有些陡峭。

尽管 Elastic 在增强用于分析和数据科学用例的 Elastic Stack 方面做出了重大努力,但它仍然缺乏与现有数据科学生态系统(pandas、numpy、scikit-learn、PyTorch 和其他流行库)的简单接口。

2017 年,Elastic 向数据科学领域迈出了第一步,作为对机器学习和预测技术在软件行业日益普及的回应,发布了第一个支持 ML 的 X-pack(扩展包)用于 Elastic Stack,将异常检测和其他无监督 ML 任务添加到其功能中。不久之后,回归和分类模型也被添加到 Elastic Stack 中可用的 ML 任务集中。

原文链接:https://blog.csdn.net/UbuntuTo ... 45670 收起阅读 »