Giter VIP home page Giter VIP logo

esperf's People

Contributors

danielfireman avatar slovdahl avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar

esperf's Issues

Create index

How are you creating the indexes for testing?

Anonymize index and slowlogs

To make it easier to run experiments using production data, we need to anonymize fields from slowlogs and indexes. In our first evaluation, we decided for the following approach:

  • Instead of using logstash or some other tool we are going to be based on match_all query to extract the data, process it and produce raw anonymized index sources. Those sources could be bulk added later.
  • The index processing will generate two results:
    • anonymized sources items
    • a file containing which fields have been replaced. The old and new values
  • The process of slowlogs will get the raw slowlogs and the anonymization file as input and will produce anonymized logs as output.

panic: runtime error: index out of range with loadspec parseslowlog

I'm running the command:
cat logs/elasticsearch_index_search_slowlog.log | ./esperf loadspec parseslowlog > slowlogs.loadspec.json
./esperf is a simlink for esperf-v0.1.2-windows-4.0-386.exe

This is the response I'm getting

panic: runtime

error: index out of range

goroutine 1 [running]:
github.com/danielfireman/esperf/cmd/loadspec.glob..func2(0x846320, 0x85919c, 0x0, 0x0, 0x0, 0x0)
/ext-go/1/src/github.com/danielfireman/esperf/cmd/loadspec/parse_slowlog.go:79 +0xa4b
github.com/danielfireman/esperf/vendor/github.com/spf13/cobra.(*Command).execute(0x846320, 0x85919c, 0x0, 0x0, 0x846320, 0x85919c)
/ext-go/1/src/github.com/danielfireman/esperf/vendor/github.com/spf13/cobra/command.go:644 +0x2e8
github.com/danielfireman/esperf/vendor/github.com/spf13/cobra.(*Command).ExecuteC(0x845fc0, 0x6caa20, 0x0, 0x0)
/ext-go/1/src/github.com/danielfireman/esperf/vendor/github.com/spf13/cobra/command.go:734 +0x28b
github.com/danielfireman/esperf/vendor/github.com/spf13/cobra.(*Command).Execute(0x845fc0, 0x0, 0x0)
/ext-go/1/src/github.com/danielfireman/esperf/vendor/github.com/spf13/cobra/command.go:693 +0x21
main.main()
/ext-go/1/src/github.com/danielfireman/esperf/main.go:11 +0x23

This is the content of my slowlog:

[2018-11-15 10:57:43,659][WARN ][index.search.slowlog.query] [Colonel] [test][0] took[23.3ms], took_millis[23], types[], stats[], search_type[QUERY_THEN_FETCH], total_shards[5], source[{"query":{"match":{"test":"test"}}}], extra_source[],
[2018-11-15 10:57:43,665][WARN ][index.search.slowlog.query] [Colonel] [test][2] took[26.8ms], took_millis[26], types[], stats[], search_type[QUERY_THEN_FETCH], total_shards[5], source[{"query":{"match":{"test":"test"}}}], extra_source[],
[2018-11-15 10:57:43,661][WARN ][index.search.slowlog.query] [Colonel] [test][3] took[107.9micros], took_millis[0], types[], stats[], search_type[QUERY_THEN_FETCH], total_shards[5], source[{"query":{"match":{"test":"test"}}}], extra_source[],
[2018-11-15 10:57:43,674][WARN ][index.search.slowlog.query] [Colonel] [test][1] took[13.3ms], took_millis[13], types[], stats[], search_type[QUERY_THEN_FETCH], total_shards[5], source[{"query":{"match":{"test":"test"}}}], extra_source[],
[2018-11-15 10:57:43,671][WARN ][index.search.slowlog.query] [Colonel] [test][4] took[95.1micros], took_millis[0], types[], stats[], search_type[QUERY_THEN_FETCH], total_shards[5], source[{"query":{"match":{"test":"test"}}}], extra_source[],
[2018-11-15 10:57:43,694][WARN ][index.search.slowlog.fetch] [Colonel] [test][1] took[10.5ms], took_millis[10], types[], stats[], search_type[QUERY_THEN_FETCH], total_shards[5], source[{"query":{"match":{"test":"test"}}}], extra_source[],

I'm running this on Windows 10 Enterprise version 1803 using GitBash v2.19.1.

Collect end-to-end latency

response.time file currently records the service time recorded by ES, as depicted in the fragment bellow:

r.responseTimes.Record(searchResp.TookInMillis)

As we move to a cluster-wide analysis - which might have an LB or reverse-proxy in the middle of the request service lifecycle - we are going to need to measure the actual end-to-end latency, from esperf back.

Measuring the time from https://github.com/danielfireman/esperf/blob/master/cmd/replay/replay.go#L236 to https://github.com/danielfireman/esperf/blob/master/cmd/replay/replay.go#L281

Unit tests are super welcomed!

Support multiple nodes

esperf currently only works correctly when the cluster has one node. This issue is about adding support for multiple nodes.

Our first approach will be to add the node-name to all metrics. Thus, instead of having: cpu_baseline_poisson_1.csv we would have cpu_baseline_node-1_poisson_1.csv. Leaving the actual metric name in the beginning and the experiment id at the end of the file name.

Fetch words from a dictionary

We are currently only using one term to perform the query. Lets use a query file, similar to the one used by solrjmeter. Our query file could be the format:

name value

For instance, "text America" would search for the America term at the Wikipedia index's text field.

We could start with a simple approach, load the whole file in memory in a slice of pairs. Each worker could then randomly select an index to start with and range the slice in a circular fashion.

Support Index API

Suggest to support load test of Index data,and could help create test data automatic.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.