要不要也来分享分享一下啊

以有源之水,引万物生长

活动Gitee酱 发表了文章 • 0 个评论 • 1711 次浏览 • 2022-06-05 22:47 • 来自相关话题

你知道种一棵树,与开发维护一个开源项目,有多少相同之处吗?

一棵枝繁叶茂的大树都是从米粒大小的种子生长而来。它的成长需要经过三个阶段: 选种、培育、繁衍 。

首先得先选择一个好的种子,确保能顺利发芽;其次还要用心培育,捉虫、浇灌、松土等;待开枝散叶之际,为了明年的收成还得未雨绸缪,继续传播繁衍。

今天,我们迎来了 Gitee 9 周年。

数字 9 是个位数中最大的一位,对于企业的生命周期而言,9 只是一个开始。走过 9 年,向 10 前行,意味着我们即将开启首次进位,踏入下一个新台阶。

过去的 9 年,Gitee 见证了开源活水的力量,经历了国内开源的飞速生长。数字只是一种表象,数字背后却是一个个开源项目、一名名开发者、一行行代码。

今天,Gitee 9 周年庆典正式开幕。我们决定把舞台交给开源之水的引流者,从他们的眼里望向万物生长的开源世界,望向更远的未来。

这趟庆典列车已经开出,快来看看路途中会有哪些精彩亮点吧。
庆典传送门:https://gitee.com/activity/9th/

elasticsearch 聚合的最大个数问题

ElasticsearchCharele 回复了问题 • 2 人关注 • 1 个回复 • 2227 次浏览 • 2022-06-05 15:14 • 来自相关话题

关于FST的一些讨论

回复

ElasticsearchCharele 回复了问题 • 1 人关注 • 8 个回复 • 2150 次浏览 • 2022-06-11 13:22 • 来自相关话题

社区日报 第1413期 (2022-06-02)

社区日报Se7en 发表了文章 • 0 个评论 • 1236 次浏览 • 2022-06-02 07:45 • 来自相关话题

1.Elasticsearch:使用 osquery 和 Elastic Stack 来监控你的端点
https://elasticstack.blog.csdn ... 75260
2.esctl 命令行工具
https://github.com/jeromepin/esctl#developing
3.极限网关配置模板的使用
https://www.bilibili.com/video ... 3.788

编辑:Se7en
归档:https://ela.st/cn-daily-all
订阅:https://ela.st/cn-daily-sub
沙龙:https://ela.st/cn-meetup
B站: https://ela.st/bilibili

发布一个轻量级的 Elasticsearch 压测工具 - Loadgen

资料分享medcl 发表了文章 • 0 个评论 • 5744 次浏览 • 2022-06-01 16:55 • 来自相关话题

你是否遇到过新搭建一个 Elasticsearch 集群,但是却无法评估该集群的最大吞吐是多少,或者使用一些压测工具,比如 esrally,需要花费很大力气准备,但是却无法压测到极限速度,服务器资源跑不满,或者测试产生的数据和实际的业务有很多出入,又或者测试的请求太简单,比如查询,就是对单个固定的搜索请求进行查询,不仅测不准还可能浪费时间没有参考意义,so,有没有一个简单的工具可以支持灵活的自定义压测,并且足够快,答案是 Loadgen。

Loadgen


Elasticsearch 压测工具 Loadgen ,由极限实验室出品,基于 Elasticsearch 的开发运维需求而开发,久经实际客户环境的真实考验,简单好用速度快。

一个没有经过压测的 Elasticsearch 不是一个完整的 Elasticsearch。

Loadgen 具有以下主要特点:

  • 性能强劲
  • 轻量级无依赖
  • 支持模板化参数随机
  • 支持高并发
  • 支持压测端均衡流量控制

    只有模拟自己真实业务数据场景的压测才有意义,通过使用 Loadgen 定义写入文档或者查询模板,同时将里面的变量词典化,确保每次请求都是足够随机,变量可以灵活复用,支持多个请求混合压测,最大程度模拟真实环境。

  • 下载地址:[http://release.infinilabs.com/loadgen/](http://release.infinilabs.com/loadgen/)
  • Docker 地址:[https://hub.docker.com/r/infinilabs/loadgen](https://hub.docker.com/r/infinilabs/loadgen)

    Loadgen


    Loadgen 使用非常简单,下载解压之后会得到两个文件,一个可执行程序和一个配置文件 loadgen.yml,配置文件样例如下:

    ```
    variables:

    • name: ip
      type: file
      path: test/ip.txt
    • name: user
      type: file
      path: test/user.txt
    • name: id
      type: sequence
    • name: uuid
      type: uuid
    • name: now_local
      type: now_local
    • name: now_utc
      type: now_utc
    • name: now_unix
      type: now_unix
      requests:
    • request:
      method: GET
      basic_auth:
      username: elastic
      password: pass
      url: http://localhost:8000/medcl/_search
      body: '{ "query": {"match": { "name": "$[[user]]" }}}'
      ```

      变量的使用


      上面的配置中,variables 用来定义变量参数,根据 name 来设置变量标识,在构造请求的使用 $[[变量名]] 即可访问该变量的值,变量目前支持的类型有:

      | 类型 | 说明 |
      | --------- |------------------------------------|
      | file | 文件型外部变量参数 |
      | sequence | 自增数字类型的变量 |
      | range | 数字范围类型的变量,支持参数 fromto 来限制范围 |
      | uuid | UUID 字符类型的变量 |
      | now_local | 当前时间、本地时区 |
      | now_utc | 当前时间、UTC 时区 |
      | now_unix | 当前时间、Unix 时间戳 |

      file 类型变量参数加载自外部文本文件,每行一个变量参数,访问该变量时每次随机取其中一个,变量里面的定义格式举例如下:

      <br /> ➜ loadgen git:(master) ✗ cat test/user.txt <br /> medcl<br /> elastic<br />

      请求的定义


      配置节点 requests 用来设置 Loadgen 将依次执行的请求,支持固定参数的请求,也可支持模板变量参数化构造请求,以下是一个普通的查询请求:

      ```
      requests:

    • request:
      method: GET
      basic_auth:
      username: elastic
      password: pass
      url: http://localhost:8000/medcl/_search?q=name:$[[user]]
      ``<br /> 上面的查询对medcl索引进行了查询,并对name字段执行一个查询,每次请求的值来自随机变量user`。

      命令行参数


      Loadgen 会循环执行配置文件里面定义的请求,默认 Loadgen 只会运行 5s 就自动退出了,如果希望延长运行时间或者加大并发可以通过启动的时候设置参数来控制,通过查看帮助命令如下:

      <br /> ➜ loadgen git:(master) ✗ ./bin/loadgen --help<br /> Usage of ./bin/loadgen:<br /> -c int<br /> Number of concurrent threads (default 1)<br /> -compress<br /> Compress requests with gzip<br /> -config string<br /> the location of config file, default: loadgen.yml (default "loadgen.yml")<br /> -d int<br /> Duration of tests in seconds (default 5)<br /> -debug<br /> run in debug mode, loadgen will quit with panic error<br /> -l int<br /> Limit total requests (default -1)<br /> -log string<br /> the log level,options:trace,debug,info,warn,error (default "info")<br /> -r int<br /> Max requests per second (fixed QPS) (default -1)<br /> -v version<br />

      执行压测


      执行 Loadgen 程序即可执行压测,如下:

      <br /> ➜ loadgen git:(master) ✗ ./bin/loadgen -d 30 -c 100 -compress<br /> __ ___ _ ___ ___ __ __<br /> / / /___\/_\ / \/ _ \ /__\/\ \ \<br /> / / // ///_\\ / /\ / /_\//_\ / \/ /<br /> / /__/ \_// _ \/ /_// /_\\//__/ /\ /<br /> \____|___/\_/ \_/___,'\____/\__/\_\ \/<br /> <br /> [LOADGEN] A http load generator and testing suit.<br /> [LOADGEN] 1.0.0_SNAPSHOT, 83f2cb9, Sun Jul 4 13:52:42 2021 +0800, medcl, support single item in dict files<br /> [07-19 16:15:00] [INF] [instance.go:24] workspace: data/loadgen/nodes/0<br /> [07-19 16:15:00] [INF] [loader.go:312] warmup started<br /> [07-19 16:15:00] [INF] [app.go:306] loadgen now started.<br /> [07-19 16:15:00] [INF] [loader.go:316] [GET] <a href="http://localhost:8000/medcl/_search" rel="nofollow" target="_blank">http://localhost:8000/medcl/_search</a><br /> [07-19 16:15:00] [INF] [loader.go:317] status: 200,<nil>,{"took":1,"timed_out":false,"_shards":{"total":1,"successful":1,"skipped":0,"failed":0},"hits":{"total":{"value":0,"relation":"eq"},"max_score":null,"hits":[]}}<br /> [07-19 16:15:00] [INF] [loader.go:316] [GET] <a href="http://localhost:8000/medcl/_search?q=name:medcl" rel="nofollow" target="_blank">http://localhost:8000/medcl/_search?q=name:medcl</a><br /> [07-19 16:15:00] [INF] [loader.go:317] status: 200,<nil>,{"took":1,"timed_out":false,"_shards":{"total":1,"successful":1,"skipped":0,"failed":0},"hits":{"total":{"value":0,"relation":"eq"},"max_score":null,"hits":[]}}<br /> [07-19 16:15:01] [INF] [loader.go:316] [POST] <a href="http://localhost:8000/_bulk" rel="nofollow" target="_blank">http://localhost:8000/_bulk</a><br /> [07-19 16:15:01] [INF] [loader.go:317] status: 200,<nil>,{"took":120,"errors":false,"items":[{"index":{"_index":"medcl-y4","_type":"doc","_id":"c3qj9123r0okahraiej0","_version":1,"result":"created","_shards":{"total":2,"successful":1,"failed":0},"_seq_no":5735852,"_primary_term":3,"status":201}}]}<br /> [07-19 16:15:01] [INF] [loader.go:325] warmup finished<br /> <br /> 5253 requests in 32.756483336s, 524.61KB sent, 2.49MB received<br /> <br /> [Loadgen Client Metrics]<br /> Requests/sec: 175.10<br /> Request Traffic/sec: 17.49KB<br /> Total Transfer/sec: 102.34KB<br /> Avg Req Time: 5.711022ms<br /> Fastest Request: 440.448µs<br /> Slowest Request: 3.624302658s<br /> Number of Errors: 0<br /> Number of Invalid: 0<br /> Status 200: 5253<br /> <br /> [Estimated Server Metrics]<br /> Requests/sec: 160.37<br /> Transfer/sec: 93.73KB<br /> Avg Req Time: 623.576686ms<br />

      Loadgen 在正式压测之前会将所有的请求执行一次来进行预热,如果出现错误会提示是否继续,预热的请求结果也会输出到终端,执行完成之后会输出执行的摘要信息。

      因为 Loadgen 最后的结果是所有请求全部执行完成之后的累计统计,可能存在不准的问题,建议通过打开 Kibana 或者 [INFINI Console](http://console.infinilabs.com/) 的监控仪表板来实时查看 Elasticsearch 的各项运行指标。

      模拟批量写入


      使用 Loadgen 来模拟 bulk 批量写入也非常简单,在请求体里面配置一条索引操作,然后使用 body_repeat_times 参数来随机参数化复制若干条请求即可完成一批请求的准备,如下:

      ```

    • request:
      method: POST
      basic_auth:
      username: test
      password: testtest
      url: http://localhost:8000/_bulk
      body_repeat_times: 1000
      body: "{ \"index\" : { \"_index\" : \"medcl-y4\",\"_type\":\"doc\", \"_id\" : \"$[[uuid]]\" } }\n{ \"id\" : \"$[[id]]\",\"field1\" : \"$[[user]]\",\"ip\" : \"$[[ip]]\",\"now_local\" : \"$[[now_local]]\",\"now_unix\" : \"$[[now_unix]]\" }\n"
      ```

      限制客户端压力


      使用 Loadgen 并设置命令行参数 -r 可以限制客户端发送的每秒请求数,从而评估固定压力下 Elasticsearch 的响应时间和负载情况,如下:

      <br /> ➜ loadgen git:(master) ✗ ./bin/loadgen -d 30 -c 100 -r 100<br />

      注意,在大量并发下,此客户端吞吐限制可能不完全准确。


      限制请求的总条数


      通过设置参数 -l 可以控制客户端发送的请求总数,从而制造固定的文档,修改配置如下:

      ```
      requests:

    • request:
      method: POST
      basic_auth:
      username: test
      password: testtest
      url: http://localhost:8000/medcl-test/doc2/_bulk
      body_repeat_times: 1
      body: "{ \"index\" : { \"_index\" : \"medcl-test\", \"_id\" : \"$[[uuid]]\" } }\n{ \"id\" : \"$[[id]]\",\"field1\" : \"$[[user]]\",\"ip\" : \"$[[ip]]\" }\n"
      <br /> 每次请求只有一个文档,然后执行 loadgen<br />
      ./bin/loadgen -config loadgen-gw.yml -d 600 -c 100 -l 50000
      ``<br /> 执行完成之后,Elasticsearch 的索引medcl-test将增加50000` 条记录。

      使用自增 ID 来确保文档的顺序性


      如果希望生成的文档编号自增有规律,方便进行对比,可以使用 sequence 类型的自增 ID 来作为主键,内容也不要用随机数,如下:

      ```
      requests:

    • request:
      method: POST
      basic_auth:
      username: test
      password: testtest
      url: http://localhost:8000/medcl-test/doc2/_bulk
      body_repeat_times: 1
      body: "{ \"index\" : { \"_index\" : \"medcl-test\", \"_id\" : \"$[[id]]\" } }\n{ \"id\" : \"$[[id]]\" }\n"
      ```

      上下文复用变量

      在一个请求中,我们可能希望有相同的参数出现,比如 routing 参数用来控制分片的路由,同时我们又希望该参数也保存在文档的 JSON 里面,
      可以使用 runtime_variables 来设置请求级别的变量,或者 runtime_body_line_variables 定义请求体级别的变量,如果请求体复制 N 份,每份的参数是不同的,举例如下:

      ```
      variables:

    • name: id
      type: sequence
    • name: uuid
      type: uuid
    • name: now_local
      type: now_local
    • name: now_utc
      type: now_utc
    • name: now_unix
      type: now_unix
    • name: suffix
      type: range
      from: 10
      to: 15
      requests:
    • request:
      method: POST
      runtime_variables:
      batch_no: id
      runtime_body_line_variables:
      routing_no: uuid
      basic_auth:
      username: ingest
      password: password

      url: http://localhost:8000/_search?q=$[[id]]

      url: http://192.168.3.188:9206/_bulk
      body_repeat_times: 10
      body: "{ \"create\" : { \"_index\" : \"test-$[[suffix]]\",\"_type\":\"doc\", \"_id\" : \"$[[uuid]]\" , \"routing\" : \"$[[routing_no]]\" } }\n{ \"id\" : \"$[[uuid]]\",\"routing_no\" : \"$[[routing_no]]\",\"batch_number\" : \"$[[batch_no]]\", \"random_no\" : \"$[[suffix]]\",\"ip\" : \"$[[ip]]\",\"now_local\" : \"$[[now_local]]\",\"now_unix\" : \"$[[now_unix]]\" }\n"
      ``<br /> <br /> 我们定义了batch_no 变量来代表一批文档里面的相同批次号,同时又定义了 routing_no` 变量来代表每个文档级别的 routing 值。

      最后,欢迎大家反馈使用过程遇到的任何问题。

elasticsearch client:rest-high-level gradle打包的时候skip

回复

Elasticsearchzmc 发起了问题 • 1 人关注 • 0 个回复 • 2121 次浏览 • 2022-06-01 14:26 • 来自相关话题

社区日报 第1412期 (2022-06-01)

社区日报kin122 发表了文章 • 0 个评论 • 1274 次浏览 • 2022-06-01 10:18 • 来自相关话题

1. Elasticsearch查询——Profile API
https://blog.csdn.net/qq330983 ... 57930
2. match 查询中 minimum_should_match 的使用方式(需要梯子)
https://medium.com/%40sean1223 ... 09f3d
3. ES 中 disjunction max 查询的使用(需要梯子)
https://medium.com/%40sean1223 ... d9ac9

编辑:kin122
归档:https://ela.st/cn-daily-all
订阅:https://ela.st/cn-daily-sub
沙龙:https://ela.st/cn-meetup
B站:https://ela.st/bilibili

社区日报 第1411期 (2022-05-31)

社区日报God_lockin 发表了文章 • 0 个评论 • 1210 次浏览 • 2022-05-31 10:11 • 来自相关话题


1. 保姆级ES dsl 教学(需要梯子)
https://medium.com/geekculture ... 10c0e

2. 谁会是Kibana的planB?(需要梯子)
https://medium.com/geekculture ... 14e00

3. 我可以在k8s上部署ES吗(需要梯子)
https://medium.com/99dotco/a-d ... 60466

编辑:斯蒂文
归档:https://ela.st/cn-daily-all
订阅:https://ela.st/cn-daily-sub
沙龙:https://ela.st/cn-meetup
B站:https://ela.st/bilibili

社区日报 第1410期 (2022-05-30)

社区日报yuebancanghai 发表了文章 • 0 个评论 • 1178 次浏览 • 2022-05-30 14:35 • 来自相关话题


1. Elasticsearch架构解析与最佳实践
   https://zhuanlan.zhihu.com/p/157964955

2. Elasticsearch 理解搜索中的 precision 及 recall
   https://blog.csdn.net/UbuntuTo ... 12610

3. Elasticsearch 百度NLP中文分词插件
   https://cloud.baidu.com/doc/BES/s/Lke3o72jg

编辑:yuebancanghai
归档:https://ela.st/cn-daily-all
订阅:https://ela.st/cn-daily-sub
沙龙:https://ela.st/cn-meetup
B站:https://ela.st/bilibili

社区日报 第1409期 (2022-05-29)

社区日报cyberdak 发表了文章 • 0 个评论 • 1123 次浏览 • 2022-05-29 17:13 • 来自相关话题

1. Elasticsearch 企业级安全扩展:readonlyrest
https://readonlyrest.com/
2. Elasticsearch 流行工具清单
https://github.com/dzharii/awesome-elasticsearch
 
3. Elasticsearch 在机器学习上的应用
https://www.modb.pro/db/69770

编辑:cyberdak
归档:https://ela.st/cn-daily-all
订阅:https://ela.st/cn-daily-sub
沙龙:https://ela.st/cn-meetup
B站:https://ela.st/bilibili

社区日报 第1408期 (2022-05-28)

社区日报jingli 发表了文章 • 1 个评论 • 1149 次浏览 • 2022-05-28 19:45 • 来自相关话题

1、 elasticsearch-spark 的用法
https://www.cnblogs.com/w15706 ... .html
2、利用 Elasticsearch 实现类主流搜索引擎广告置顶显示效果
https://blog.csdn.net/weixin_4 ... 42338
3、Elasticsearch 运维实践
https://www.modb.pro/db/403820
 
编辑:李静
归档:https://ela.st/cn-daily-all
订阅:https://ela.st/cn-daily-sub
沙龙:https://ela.st/cn-meetup
B站:https://ela.st/bilibili

elasticsearch es如何统计用户文档数量范围内容聚合?

ElasticsearchCharele 回复了问题 • 5 人关注 • 3 个回复 • 3929 次浏览 • 2022-06-01 13:42 • 来自相关话题

求助 关于Elasticsearch的circuit_breaking_exception的问题

ElasticsearchCharele 回复了问题 • 2 人关注 • 1 个回复 • 2451 次浏览 • 2022-05-28 15:54 • 来自相关话题

post_filter在es内部的执行流程是怎样的,它是怎么实现基于query的结果做二次筛选的

ElasticsearchWiseLi1998 回复了问题 • 2 人关注 • 1 个回复 • 1938 次浏览 • 2024-11-14 14:21 • 来自相关话题

docker部署elk+filebeat 无法抓取日志

BeatsAPaul 回复了问题 • 2 人关注 • 1 个回复 • 2353 次浏览 • 2022-08-03 14:32 • 来自相关话题