-
Notifications
You must be signed in to change notification settings - Fork 70
Add a new benchtool client #164
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM, few nits
pkg/bench/query_runner.go
Outdated
|
||
// Do DNS client side load balancing if configured | ||
dnsProvider *dns.Provider | ||
remoteMtx sync.Mutex |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Did this mutex used to guard a particular member variable? It's unclear to below when picking a random client what it's guarding? Everything?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
A better name would be addressMtx. It guards the array of addresses. There is a background process updating that slice and we want to be sure all access is mutex protected.
pkg/bench/query_runner.go
Outdated
for _, queryReq := range q.workload.queries { | ||
// every query has a ticker and a Go loop... | ||
// not sure if this is a good idea but it should be fine | ||
go func(q query) { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Shadowing the receiver here makes it kinda hard to follow this.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Good point. I'll change it to req
} | ||
} | ||
|
||
fmt.Println("ring check:") |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Should this use a logger as well?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The reason I printed directly to stdout instead of using logs is because this is the purpose of the ring check module. So we should be able to set the log level to fatal but still get this output.
pkg/bench/write_client.go
Outdated
|
||
const maxErrMsgLen = 512 | ||
|
||
var UserAgent = fmt.Sprintf("Prometheus/%s", version.Version) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Shouldn't we use our own user agent here?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
We can, I'll update this to use benchtool
Signed-off-by: Jacob Lisi <jacob.t.lisi@gmail.com>
Signed-off-by: Jacob Lisi <jacob.t.lisi@gmail.com>
Signed-off-by: Jacob Lisi <jacob.t.lisi@gmail.com>
Signed-off-by: Jacob Lisi <jacob.t.lisi@gmail.com>
Signed-off-by: Jacob Lisi <jacob.t.lisi@gmail.com>
Signed-off-by: Jacob Lisi <jacob.t.lisi@gmail.com>
Signed-off-by: Jacob Lisi <jacob.t.lisi@gmail.com>
Signed-off-by: Jacob Lisi <jacob.t.lisi@gmail.com>
Signed-off-by: Jacob Lisi <jacob.t.lisi@gmail.com>
Signed-off-by: Jacob Lisi <jacob.t.lisi@gmail.com>
Signed-off-by: Jacob Lisi <jacob.t.lisi@gmail.com>
Signed-off-by: Jacob Lisi <jacob.t.lisi@gmail.com>
Signed-off-by: Jacob Lisi <jacob.t.lisi@gmail.com>
Signed-off-by: Jacob Lisi <jacob.t.lisi@gmail.com>
Signed-off-by: Jacob Lisi <jacob.t.lisi@gmail.com>
Signed-off-by: Jacob Lisi <jacob.t.lisi@gmail.com>
Signed-off-by: Jacob Lisi <jacob.t.lisi@gmail.com>
Signed-off-by: Jacob Lisi <jacob.t.lisi@gmail.com>
Signed-off-by: Jacob Lisi <jacob.t.lisi@gmail.com>
Signed-off-by: Jacob Lisi <jacob.t.lisi@gmail.com>
Signed-off-by: Jacob Lisi <jacob.t.lisi@gmail.com>
Signed-off-by: Jacob Lisi <jacob.t.lisi@gmail.com>
… to interval Signed-off-by: Jacob Lisi <jacob.t.lisi@gmail.com>
Signed-off-by: Jacob Lisi <jacob.t.lisi@gmail.com>
Signed-off-by: Jacob Lisi <jacob.t.lisi@gmail.com>
Signed-off-by: Jacob Lisi <jacob.t.lisi@gmail.com>
Signed-off-by: Jacob Lisi <jacob.t.lisi@gmail.com>
Signed-off-by: Jacob Lisi <jacob.t.lisi@gmail.com>
Signed-off-by: Jacob Lisi <jacob.t.lisi@gmail.com>
Signed-off-by: Jacob Lisi <jacob.t.lisi@gmail.com>
Signed-off-by: Jacob Lisi <jacob.t.lisi@gmail.com>
Signed-off-by: Jacob Lisi <jacob.t.lisi@gmail.com>
Signed-off-by: Jacob Lisi <jacob.t.lisi@gmail.com>
Signed-off-by: Jacob Lisi <jacob.t.lisi@gmail.com>
Signed-off-by: Jacob Lisi <jacob.t.lisi@gmail.com>
Signed-off-by: Jacob Lisi <jacob.t.lisi@gmail.com>
Signed-off-by: Jacob Lisi <jacob.t.lisi@gmail.com>
Signed-off-by: Jacob Lisi <jacob.t.lisi@gmail.com>
Signed-off-by: Jacob Lisi <jacob.t.lisi@gmail.com>
Signed-off-by: Jacob Lisi <jacob.t.lisi@gmail.com>
Signed-off-by: Jacob Lisi <jacob.t.lisi@gmail.com>
Signed-off-by: Jacob Lisi <jacob.t.lisi@gmail.com>
Signed-off-by: Jacob Lisi <jacob.t.lisi@gmail.com>
Signed-off-by: Jacob Lisi <jacob.t.lisi@gmail.com>
Signed-off-by: Jacob Lisi <jacob.t.lisi@gmail.com>
Signed-off-by: Jacob Lisi <jacob.t.lisi@gmail.com>
Signed-off-by: Jacob Lisi <jacob.t.lisi@gmail.com>
* feat: initial working version of benchtool Signed-off-by: Jacob Lisi <jacob.t.lisi@gmail.com> * fix(benchtool): register batch-size as default Signed-off-by: Jacob Lisi <jacob.t.lisi@gmail.com> * fix(benchtool): ensure write loop actually loops Signed-off-by: Jacob Lisi <jacob.t.lisi@gmail.com> * feat(benchtool): add logging and instrumentation Signed-off-by: Jacob Lisi <jacob.t.lisi@gmail.com> * fix(benchtool): handle case where batchsize is bigger than timeseries Signed-off-by: Jacob Lisi <jacob.t.lisi@gmail.com> * fix(benchtool): instantiate client map Signed-off-by: Jacob Lisi <jacob.t.lisi@gmail.com> * chore(benchtool): make noisy log line debug level Signed-off-by: Jacob Lisi <jacob.t.lisi@gmail.com> * chore(benchtool): remove ioutil Signed-off-by: Jacob Lisi <jacob.t.lisi@gmail.com> * chore(benchtool): use Go 1.16 Signed-off-by: Jacob Lisi <jacob.t.lisi@gmail.com> * feat(benchtool): instrument remote-write client Signed-off-by: Jacob Lisi <jacob.t.lisi@gmail.com> * fix(benchtool): fix how metrics are instrumented Signed-off-by: Jacob Lisi <jacob.t.lisi@gmail.com> * feat(benchtool): use resp.StatusCode in prom label Signed-off-by: Jacob Lisi <jacob.t.lisi@gmail.com> * feat(benchtool): ensure labelset is used correctly Signed-off-by: Jacob Lisi <jacob.t.lisi@gmail.com> * feat(benchtool): add logging config options Signed-off-by: Jacob Lisi <jacob.t.lisi@gmail.com> * add series type map to workload Signed-off-by: Jacob Lisi <jacob.t.lisi@gmail.com> * add ring-checking module Signed-off-by: Jacob Lisi <jacob.t.lisi@gmail.com> * fix issue with null workload Signed-off-by: Jacob Lisi <jacob.t.lisi@gmail.com> * remove early check Signed-off-by: Jacob Lisi <jacob.t.lisi@gmail.com> * actual unique metric names Signed-off-by: Jacob Lisi <jacob.t.lisi@gmail.com> * start ring Signed-off-by: Jacob Lisi <jacob.t.lisi@gmail.com> * actual unique metric names Signed-off-by: Jacob Lisi <jacob.t.lisi@gmail.com> * single worker at a time for remote write requests Signed-off-by: Jacob Lisi <jacob.t.lisi@gmail.com> * reduce the number of concurrent writers and set default timeout equal to interval Signed-off-by: Jacob Lisi <jacob.t.lisi@gmail.com> * increase the number of workers Signed-off-by: Jacob Lisi <jacob.t.lisi@gmail.com> * remove work pool and use errgroup Signed-off-by: Jacob Lisi <jacob.t.lisi@gmail.com> * use a closure Signed-off-by: Jacob Lisi <jacob.t.lisi@gmail.com> * readd a worker channel Signed-off-by: Jacob Lisi <jacob.t.lisi@gmail.com> * refactor bench runner into separate files Signed-off-by: Jacob Lisi <jacob.t.lisi@gmail.com> * rename write_bench.go --> bench.go Signed-off-by: Jacob Lisi <jacob.t.lisi@gmail.com> * start queries Signed-off-by: Jacob Lisi <jacob.t.lisi@gmail.com> * stop point for query workload Signed-off-by: Jacob Lisi <jacob.t.lisi@gmail.com> * add random seed for query workload using adler32 checksum and id Signed-off-by: Jacob Lisi <jacob.t.lisi@gmail.com> * improve further Signed-off-by: Jacob Lisi <jacob.t.lisi@gmail.com> * fix no address panic Signed-off-by: Jacob Lisi <jacob.t.lisi@gmail.com> * fix address resolution Signed-off-by: Jacob Lisi <jacob.t.lisi@gmail.com> * fix address resolution Signed-off-by: Jacob Lisi <jacob.t.lisi@gmail.com> * fix address resolution Signed-off-by: Jacob Lisi <jacob.t.lisi@gmail.com> * add jitter to queries Signed-off-by: Jacob Lisi <jacob.t.lisi@gmail.com> * better buckets Signed-off-by: Jacob Lisi <jacob.t.lisi@gmail.com> * increase parallel queries Signed-off-by: Jacob Lisi <jacob.t.lisi@gmail.com> * move write configs into workload config file Signed-off-by: Jacob Lisi <jacob.t.lisi@gmail.com> * add support for tenant ID Signed-off-by: Jacob Lisi <jacob.t.lisi@gmail.com> * fix query tenant flag Signed-off-by: Jacob Lisi <jacob.t.lisi@gmail.com> * use instance-name flag for tenant name Signed-off-by: Jacob Lisi <jacob.t.lisi@gmail.com> * fix duplicate flag registration bug Signed-off-by: Jacob Lisi <jacob.t.lisi@gmail.com> * cleanup a bit Signed-off-by: Jacob Lisi <jacob.t.lisi@gmail.com> * increase number of write workers Signed-off-by: Jacob Lisi <jacob.t.lisi@gmail.com> * docs(benchtool): add documentation explaining the workload configuration Signed-off-by: Jacob Lisi <jacob.t.lisi@gmail.com> * remove unused workload config option Signed-off-by: Jacob Lisi <jacob.t.lisi@gmail.com> * remove extra docker tag push steps for local development Signed-off-by: Jacob Lisi <jacob.t.lisi@gmail.com> * update README Signed-off-by: Jacob Lisi <jacob.t.lisi@gmail.com> * remove from make all step to avoid Go 1.16 compat issue Signed-off-by: Jacob Lisi <jacob.t.lisi@gmail.com> * fix linting issues Signed-off-by: Jacob Lisi <jacob.t.lisi@gmail.com> * vary the number of writer workers by the number of configured replicas Signed-off-by: Jacob Lisi <jacob.t.lisi@gmail.com> * add pprof Signed-off-by: Jacob Lisi <jacob.t.lisi@gmail.com> * refactor per PR comments Signed-off-by: Jacob Lisi <jacob.t.lisi@gmail.com>
…ex (grafana#164) * Fix label and annotation overrides for services (thanks @kwangil-ha) Signed-off-by: ShuzZzle <niclas.schad@gmail.com> * Removed dnssrvnoa resolution from block memcached (probably oversight) and moved back to simple dns resolution Signed-off-by: ShuzZzle <niclas.schad@gmail.com> * add pr number to changelog Signed-off-by: ShuzZzle <niclas.schad@gmail.com>
benchtool
tool that can be used to generate load against Prometheus remote-write and PromQL API backends.benchtool
I have been iterating on this tool for a while now on this branch. However, I feel it is now stable enough to publish in a alpha form.
note: CI is blocked by #165 since I used some functions that are v1.16+