Elasticsearch性能方案esrally

本文描述使用esrally对自建集群进行测试的方法(esrally还有其他用法不做讨论)

  • 1. esrally 介绍

  • 2. 测试准备

    • 2.1 document.json

    • 2.2 index.json

    • 2.3 编写track.json

  • 3. 命令

1. esrally 介绍

esrally是基于用户视角的对elasticsearch进行测试的工具。

术语:

  • rally:汽车拉力赛

  • track:赛道,压测方案

  • team/car: es instance

  • race: 一场比赛

  • tournament: 锦标赛

track.json是esrally的压测方案定义文件,包含以下几部分

  • indices:索引定义

  • templates:indices template,少使用

  • corpora:数据集文件定义

  • operations:具体操作,可以没有,直接在schedule或者challenge内定义

  • schedule:执行操作时的负载

  • challenge:区分不同测试场景,比如append和update,便于分开统计

示例:

{
    "version": 2,
    "description": "xxx",
    "indices": [
        {
            "name": "xxxx",
            "body": "xxx你定义的索引格式请求文件 index.json ",
            "types": ["_doc"]
        }
    ],
    "corpora": [
        {
            "name": "xxxx",
            "documents": [
                {
                    "source-file": "es请求文件:目前仅支持bulk格式",
                    "document-count": 100,
                    "uncompressed-bytes": 84553
                }
            ]
        }
    ],
    "challenges":[
        {
            "name":"xxx",
            "schedule": [
                {
                    "operation": {
                        "name": "putdata",
                        "operation-type": "bulk",
                        "bulk-size": 5
                    }
                    "clients": 4,
                    "warmup-iterations": 1000,
                    "iterations": 1000,
                    "target-throughput": 100
                }
            ]
        }
    ]
}

具体字段参考https://esrally.readthedocs.io/en/latest/track.html

教程视频 https://www.bilibili.com/video/av27114309/?spm_id_from=333.788.videocard.0 (某些字段可能已经不适用)

2. 测试准备

测试前需要准备一下文件

  • document.json: 测试请求文件

  • index.json: 创建索引请求文件

  • track.json: 测试case描述文件

2.1 document.json

格式只支持bulk

示例


{"agent": "\"Mozilla/5.0 (Windows NT 10.0; WOW64; rv:44.0) Gecko/20100101 Firefox/44.0\"", "useragent": {"os": "Windows 10", "os_name": "Windows 10", "name": "Firefox"}, "geoip": {"country_name": "Russian Federation", "location": [44.00749999999999, 56.326899999999995]}, "clientip": "93.120.181.0", "referrer": "\"https://www.elastic.co/guide/en/logstash/current/index.html\"", "request": "/favicon-96x96.png", "bytes": 0, "verb": "GET", "response": 304, "httpversion": "1.1", "@timestamp": "2017-07-03T07:51:49.999Z", "message": "93.120.181.0 - - [2017-07-03T07:51:49.999Z] \"GET /favicon-96x96.png HTTP/1.1\" 304 0 \"-\" \"https://www.elastic.co/guide/en/logstash/current/index.html\" \"Mozilla/5.0 (Windows NT 10.0; WOW64; rv:44.0) Gecko/20100101 Firefox/44.0\""}

2.2 index.json

将数据存入es中进行建模,index创建请求参考https://www.elastic.co/guide/en/elasticsearch/reference/current/indices-create-index.html

将请求写入文件,例如

{
  "settings": {
    "index.number_of_shards": {{number_of_shards | default(5)}},
    "index.number_of_replicas": {{number_of_replicas | default(0)}}
  },
  "mappings": {
    "_doc": {
      "dynamic": "strict",
      "_source": {
        "enabled": {{ source_enabled | default(true) | tojson }}
      },
      "properties": {
        "@timestamp": { "type": "date" },
        "message": { "type": "text", "index": false },
        "agent": { "type": "keyword", "ignore_above": 256 },
        "bytes": { "type": "integer" },
        "clientip": { "type": "ip" },
        "httpversion": { "type": "keyword", "ignore_above": 256 },
        "response": { "type": "short" },
        "verb": { "type": "keyword", "ignore_above": 256 },
        "tags": { "type": "keyword", "ignore_above": 256 },
        "geoip" : {
          "properties" : {
            "country_name" : { "type": "keyword" },
            "location" : { "type": "geo_point" }
          }
        },
        "useragent": {
          "properties": {
            "name": { "type": "keyword", "ignore_above": 256 },
            "os": { "type": "keyword", "ignore_above": 256 },
            "os_name": { "type": "keyword", "ignore_above": 256 }
          }
        },
        "request": {
          "norms": false,
          "type": "text",
          "fields": {
            "keyword": { "ignore_above": 256, "type": "keyword" }
          }
        },
        "referrer": {
          "norms": false,
          "type": "text",
          "fields": {
            "keyword": { "ignore_above": 256, "type": "keyword" }
          }
        }
      }
    }
  }
}

2.3 编写track.json

主要自定义challenge部分

示例:

{
    "version": 2,
    "description": "blc",
    "indices": [
        {
            "name": "eventdata",
            "body": "index.json",
            "types": ["_doc"]
        }
    ],
    "corpora": [
        {
            "name": "eventdata",
            "documents": [
                {
                    "source-file": "eventdata_sample.json",
                    "document-count": 100,
                    "uncompressed-bytes": 84553
                }
            ]
        }
    ],
    "challenges":[
        {
            "name":"default",
            "schedule": [
                {
                    "operation": {
                        "name": "putdata",
                        "operation-type": "bulk",
                        "bulk-size": 5
                    },
                    "clients": 4,
                    "warmup-iterations": 1000,
                    "iterations": 1000,
                    "target-throughput": 100
                },
                {
                    "operation": {
                        "name": "search",
                        "operation-type": "search",
                        "body": {
                            "query": {
                                "match_all": {}
                            }
                        }
                    },
                    "clients": 4,
                    "iterations": 1000,
                    "target-throughput": 100
                }
            ]
        }
    ]
}

3. 命令

查看测试track

esrally list tracks --track-path=xx

运行track

esrally --track-path=xx  \
--target-hosts=127.0.0.1:9192 \
--pipeline=benchmark-only \
--cluster-health=yellow

结果展示

esrally list races

结果对比

esrally compare --baseline=20160518T112057Z --contender=20160518T112341Z

你可能感兴趣的:(Elasticsearch性能方案esrally)