使用gor复制真实流量压测ES集群-创新互联

生产环境下, 我们一般使用 esrally来做es的基准测试。 但是毕竟和真实生产的请求场景可能有差异的。 

成都创新互联公司长期为成百上千家客户提供的网站建设服务,团队从业经验10年,关注不同地域、不同群体,并针对不同对象提供差异化的产品和服务;打造开放共赢平台,与合作伙伴共同营造健康的互联网生态环境。为章丘企业提供专业的成都网站制作、网站建设,章丘网站改版等技术服务。拥有十年丰富建站经验和众多成功案例,为您定制开发。

因此,有必要考虑使用真实流量来压测ES集群。

常用的流量复制工具有tcpcopy之类的,这里我们介绍一个更简单易用的工具 gor 。

github地址: https://github.com/buger/goreplay

TIPS:

我在测试环境的 192.168.2.4 上实际测试用的命令(放大1倍流量):

# 192.168.2.4 为老es集群节点 # 192.168.2.188 为新es集群节点 wget https://github.com/buger/goreplay/releases/download/v1.0.0/gor_1.0.0_x64.tar.gz tar xf gor_1.0.0_x64.tar.gz -C ./ ./gor --input-raw :9200 --output-http "http://192.168.2.188:9200|200%"

下图是gor 输出到stdout的内容:

使用 gor 复制真实流量压测ES集群

下图是我在老es集群更新文档后,可以看到新的es集群也自动更新了文档

使用 gor 复制真实流量压测ES集群

更多的关于gor 流量复制的介绍,可以看下面的内容:

参考文档:

https://testerhome.com/articles/21180

https://github.com/buger/goreplay/wiki

https://www.jianshu.com/p/57e058ad4995

1、流量实时复制引流(--input-raw 拦截端口配合--output-http输出),例如将本机9200端口的HTTP流量实时复制到 es-dest:9200。

gor --input-raw :9200 --output-http "http://es-dest:9200"

2、如果目标服务器使用的库与线上机器一样,且只需要引流Get方法的请求。

gor --input-raw :9200  --http-allow-method GET --output-http "http://es-dest:9200"

3、当需要对线上服务进行整体性能压测时,可将线上请求扩大N倍,进行引流,将请求扩大1倍,也可缩小,调整"|"后面的百分比即可。

gor --input-raw :9200  --http-allow-method GET --output-http "http://es-dest:9200|200%"

4、只复制某个URL请求,--http-allow-url参数,-http-allow-url参数可用正则表达式(--output-http-url-regexp在gor 0.16已经过期,使用--http-allow-url代替)。

gor --input-raw :9200 --http-allow-method GET --output-http "http://es-dest:9200" --http-allow-url mall.*hotword

5、多目标服务器的流量复制引流,有点类似nginx的mirror。

gor --input-raw :9200 --output-http "http://es-dest:9200" --output-http "http://es-dest:9200"

6、将流量转发到多个端点,默认情况下,它会将相同的流量发送到所有输出。

gor --input-tcp :2920020 --output-http "http://staging.com"  --output-http "http://dev.com"

7、将相同的流量发送到多个站点,并且平分所有流量。

gor --input-raw :9200 --output-http "http://staging.com"  --output-http "http://dev.com" --split-output true

8、HTTP超时,默认情况下,http请求和响应的超时时间为5秒。你可以像这样覆盖它:

gor --input-tcp replay.local:2920020 --output-http http://staging.com --output-http-timeout 30s

9、基本身份验证,如果您的开发或登台环境受基本身份验证保护,那么可以在重放期间注入这些凭据:

gor --input-raw :9200 --output-http "http://user:pass@staging.com"

10、性能压力测试

可以将流量复制到文件,然后再对他们进行回放。回放的时候,流量会维持原始的时间间隔。如果你使用了百分比来进行速率限制,那么回放的速率会相应的增加或减少。有了这种速率限制,gor就可以用来进行压力测试。

gor --input-file "requests.gor|200%" --output-http "staging.com"

目前,input-file仅在使用基于百分比的限制器时才支持此功能。与默认限制器不同input-file,它不会降低请求速度,而会减慢速度或加速请求发射。

11 、录制与回放

./gor --input-raw :9200 --output-file=requests.gor

执行录制命令后,将会创建新文件并不断向其写入所有捕获的请求。

12、流量回放,重播来自文件的请求。

./gor --input-file requests.gor --output-http="http://localhost:92000"

您应该看到所有记录到http://localhost:92000的请求,并且它们将以相同的顺序重播,并且与录制的时间完全相同。

gor的用法也远不止上述提到的这些,更多的应用测试场景,还请读者自行挖掘。

./gor --help  可以列出更全面的帮助信息

Gor is a simple http traffic replication tool written in Go. Its main goal is to replay traffic from production servers to staging and dev environments. Project page: https://github.com/buger/gor Author: <Leonid Bugaev> leonsbox@gmail.com Current Version: 1.0.0   -copy-buffer-size int     Set the buffer size for an individual request (default 5M) (default 524289200)   -cpuprofile string     write cpu profile to file   -debug verbose     Turn on debug output, shows all intercepted traffic. Works only when with verbose flag   -exit-after duration     exit after specified duration   -http-allow-header value     A regexp to match a specific header against. Requests with non-matching headers will be dropped:      gor --input-raw :9200 --output-http staging.com --http-allow-header api-version:^v1   -http-allow-method value     Whitelist of HTTP methods to replay. Anything else will be dropped:     gor --input-raw :9200 --output-http staging.com --http-allow-method GET --http-allow-method OPTIONS   -http-allow-url value     A regexp to match requests against. Filter get matched against full url with domain. Anything else will be dropped:      gor --input-raw :9200 --output-http staging.com --http-allow-url ^www.   -http-basic-auth-filter value     A regexp to match the decoded basic auth string against. Requests with non-matching headers will be dropped:      gor --input-raw :9200 --output-http staging.com --http-basic-auth-filter "^customer[0-9].*"   -http-disallow-header value     A regexp to match a specific header against. Requests with matching headers will be dropped:      gor --input-raw :9200 --output-http staging.com --http-disallow-header "User-Agent: Replayed by Gor"   -http-disallow-url value     A regexp to match requests against. Filter get matched against full url with domain. Anything else will be forwarded:      gor --input-raw :9200 --output-http staging.com --http-disallow-url ^www.   -http-header-limiter value     Takes a fraction of requests, consistently taking or rejecting a request based on the FNV32-1A hash of a specific header:      gor --input-raw :9200 --output-http staging.com --http-header-limiter user-id:25%   -http-original-host     Normally gor replaces the Host http header with the host supplied with --output-http.  This option disables that behavior, preserving the original Host header.   -http-param-limiter value     Takes a fraction of requests, consistently taking or rejecting a request based on the FNV32-1A hash of a specific GET param:      gor --input-raw :9200 --output-http staging.com --http-param-limiter user_id:25%   -http-pprof :8181     Enable profiling. Starts  http server on specified port, exposing special /debug/pprof endpoint. Example: :8181   -http-rewrite-header value     Rewrite the request header based on a mapping:     gor --input-raw :9200 --output-http staging.com --http-rewrite-header Host: (.*).example.com,$1.beta.example.com   -http-rewrite-url value     Rewrite the request url based on a mapping:     gor --input-raw :9200 --output-http staging.com --http-rewrite-url /v1/user/([^\/]+)/ping:/v2/user/$1/ping   -http-set-header value     Inject additional headers to http reqest:     gor --input-raw :9200 --output-http staging.com --http-set-header 'User-Agent: Gor'   -http-set-param value     Set request url param, if param already exists it will be overwritten:     gor --input-raw :9200 --output-http staging.com --http-set-param api_key=1   -input-dummy value     Used for testing outputs. Emits 'Get /' request every 1s   -input-file value     Read requests from file:      gor --input-file ./requests.gor --output-http staging.com   -input-file-loop     Loop input files, useful for performance testing.   -input-kafka-host string     Send request and response stats to Kafka:     gor --output-stdout --input-kafka-host '192.168.0.1:9092,192.168.0.2:9092'   -input-kafka-json-format     If turned on, it will assume that messages coming in JSON format rather than  GoReplay text format.   -input-kafka-topic string     Send request and response stats to Kafka:     gor --output-stdout --input-kafka-topic 'kafka-log'   -input-raw value     Capture traffic from given port (use RAW sockets and require *sudo* access):     # Capture traffic from 9200 port     gor --input-raw :9200 --output-http staging.com   -input-raw-bpf-filter string     BPF filter to write custom expressions. Can be useful in case of non standard network interfaces like tunneling or SPAN port. Example: --input-raw-bpf-filter 'dst port 9200'   -input-raw-buffer-size int     Controls size of the OS buffer (in bytes) which holds packets until they dispatched. Default value depends by system: in Linux around 2MB. If you see big package drop, increase this value.   -input-raw-engine libpcap     Intercept traffic using libpcap (default), and `raw_socket` (default "libpcap")   -input-raw-expire duration     How much it should wait for the last TCP packet, till consider that TCP message complete. (default 2s)   -input-raw-immediate-mode     Set pcap interface to immediate mode.   -input-raw-override-snaplen     Override the capture snaplen to be 64k. Required for some Virtualized environments   -input-raw-realip-header string     If not blank, injects header with given name and real IP value to the request payload. Usually this header should be named: X-Real-IP   -input-raw-timestamp-type string     Possible values: PCAP_TSTAMP_HOST, PCAP_TSTAMP_HOST_LOWPREC, PCAP_TSTAMP_HOST_HIPREC, PCAP_TSTAMP_ADAPTER, PCAP_TSTAMP_ADAPTER_UNSYNCED. This values not supported on all systems, GoReplay will tell you available values of you put wrong one.   -input-raw-track-response     If turned on Gor will track responses in addition to requests, and they will be available to middleware and file output.   -input-tcp value     Used for internal communication between Gor instances. Example:      # Receive requests from other Gor instances on 2920020 port, and redirect output to staging     gor --input-tcp :2920020 --output-http staging.com   -input-tcp-certificate string     Path to PEM encoded certificate file. Used when TLS turned on.   -input-tcp-certificate-key string     Path to PEM encoded certificate key file. Used when TLS turned on.   -input-tcp-secure     Turn on TLS security. Do not forget to specify certificate and key files.   -memprofile string     write memory profile to this file   -middleware string     Used for modifying traffic using external command   -output-dummy value     DEPRECATED: use --output-stdout instead   -output-file value     Write incoming requests to file:      gor --input-raw :9200 --output-file ./requests.gor   -output-file-append     The flushed chunk is appended to existence file or not.    -output-file-flush-interval duration     Interval for forcing buffer flush to the file, default: 1s. (default 1s)   -output-file-max-size-limit value     Max size of output file, Default: 1TB (default -1)   -output-file-queue-limit int     The length of the chunk queue. Default: 256 (default 256)   -output-file-size-limit value     Size of each chunk. Default: 32mb (default 33554432)   -output-http value     Forwards incoming requests to given http address.     # Redirect all incoming requests to staging.com address      gor --input-raw :9200 --output-http http://staging.com   -output-http-compatibility-mode     Use standard Go client, instead of built-in implementation. Can be slower, but more compatible.   -output-http-debug     Enables http debug output.   -output-http-elasticsearch string     Send request and response stats to ElasticSearch:     gor --input-raw :9200 --output-http staging.com --output-http-elasticsearch 'es_host:api_port/index_name'   -output-http-header --output-http-header     WARNING: --output-http-header DEPRECATED, use `--http-set-header` instead   -output-http-header-filter --output-http-header-filter     WARNING: --output-http-header-filter DEPRECATED, use `--http-allow-header` instead   -output-http-header-hash-filter output-http-header-hash-filter     WARNING: output-http-header-hash-filter DEPRECATED, use `--http-header-hash-limiter` instead   -output-http-method --output-http-method     WARNING: --output-http-method DEPRECATED, use `--http-allow-method` instead   -output-http-queue-len int     Number of requests that can be queued for output, if all workers are busy. default = 1000 (default 1000)   -output-http-redirects int     Enable how often redirects should be followed.   -output-http-response-buffer int     HTTP response buffer size, all data after this size will be discarded.   -output-http-rewrite-url --output-http-rewrite-url     WARNING: --output-http-rewrite-url DEPRECATED, use `--http-rewrite-url` instead   -output-http-stats     Report http output queue stats to console every N milliseconds. See output-http-stats-ms   -output-http-stats-ms int     Report http output queue stats to console every N milliseconds. default: 5000 (default 5000)   -output-http-timeout duration     Specify HTTP request/response timeout. By default 5s. Example: --output-http-timeout 30s (default 5s)   -output-http-track-response     If turned on, HTTP output responses will be set to all outputs like stdout, file and etc.   -output-http-url-regexp --output-http-url-regexp     WARNING: --output-http-url-regexp DEPRECATED, use `--http-allow-url` instead   -output-http-workers int     Gor uses dynamic worker scaling. Enter a number to set a maximum number of workers. default = 0 = unlimited.   -output-http-workers-min int     Gor uses dynamic worker scaling. Enter a number to set a minimum number of workers. default = 1.   -output-kafka-host string     Read request and response stats from Kafka:     gor --input-raw :9200 --output-kafka-host '192.168.0.1:9092,192.168.0.2:9092'   -output-kafka-json-format     If turned on, it will serialize messages from GoReplay text format to JSON.   -output-kafka-topic string     Read request and response stats from Kafka:     gor --input-raw :9200 --output-kafka-topic 'kafka-log'   -output-null     Used for testing inputs. Drops all requests.   -output-stdout     Used for testing inputs. Just prints to console data coming from inputs.   -output-tcp value     Used for internal communication between Gor instances. Example:      # Listen for requests on 9200 port and forward them to other Gor instance on 2920020 port     gor --input-raw :9200 --output-tcp replay.local:2920020   -output-tcp-secure     Use TLS secure connection. --input-file on another end should have TLS turned on as well.   -output-tcp-stats     Report TCP output queue stats to console every 5 seconds.   -prettify-http     If enabled, will automatically decode requests and responses with: Content-Encodning: gzip and Transfer-Encoding: chunked. Useful for debugging, in conjuction with --output-stdout   -split-output true     By default each output gets same traffic. If set to true it splits traffic equally among all outputs.   -stats     Turn on queue stats output   -verbose     Turn on more verbose output

另外有需要云服务器可以了解下创新互联cdcxhl.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。

标题名称:使用gor复制真实流量压测ES集群-创新互联
网站路径:https://www.cdcxhl.com/article46/dcdphg.html

成都网站建设公司_创新互联,为您提供软件开发手机网站建设网页设计公司小程序开发企业建站网站排名

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联

成都做网站