robot-piglet on arcadia
better (compare)
robot-piglet on arcadia
Add .md extension for AUTHORS a… (compare)
robot-piglet on arcadia
YANDEXTANK-583: reincarnation o… (compare)
robot-piglet on arcadia
PR for branch feature/YANDEXTAN… (compare)
robot-piglet on arcadia
IGNIETFERRO-1816 Update Python … (compare)
robot-piglet on arcadia
YANDEXTANK-579: Single TankWork… (compare)
robot-piglet on arcadia
jmeter and base version both fi… (compare)
arcadia-devtools on arcadia
rm converter tests ref:ef1e917… (compare)
arcadia-devtools on arcadia
DTCC-910 adaptation for piglet … (compare)
arcadia-devtools on arcadia
Remove irrelevant .arcignore r… (compare)
arcadia-devtools on arcadia
Remove empty file ref:f31d8414… (compare)
arcadia-devtools on arcadia
minus Android plugin ref:34ac1… (compare)
arcadia-devtools on arcadia
Fix style ref:40a5090e43ea3f19… (compare)
arcadia-devtools on arcadia
YANDEXTANK-575: TankWorker inhe… (compare)
arcadia-devtools on arcadia
PR for branch feature/YANDEXTAN… (compare)
arcadia-devtools on arcadia
CLOUDLOAD-266 instance autostop… (compare)
arcadia-devtools on arcadia
CLOUDLOAD-215 Fix API Client se… (compare)
...
* found 118 certificates in /etc/ssl/certs/ca-certificates.crt
* found 477 certificates in /etc/ssl/certs
* ALPN, offering http/1.1
* SSL connection using TLS1.2 / ECDHE_RSA_AES_256_GCM_SHA384
* server certificate verification SKIPPED
* server certificate status verification SKIPPED
* common name: *.example.com (does not match '1.1.1.1')
* server certificate expiration date OK
* server certificate activation date OK
* certificate public key: RSA
* certificate version: #3
* subject: blabla
* start date: Wed, 20 Nov 2019 00:00:00 GMT
* expire date: Thu, 14 Jan 2021 12:00:00 GMT
* issuer: C=US,O=DigiCert Inc,CN=DigiCert SHA2 Secure Server CA
* compression: NULL
* ALPN, server accepted to use http/1.1
> GET /?blabla HTTP/1.1
...
Ребят, кто может подсказать, что не так делаю? У меня авторизация через mTLS
все настроил для direvius/yandex-tank:latest по доке, запускаю и вижу все запросы с 401. При этом с этими же сертом и приватным ключем могу из постмана без проблем подключиться, так-же могу зайти в контейнер яндекс-танка и дернуть оттуда курлом с сертом и приватным ключем внутри контейнера - 200ОК. Че может быть, никто с подобным, не сталкивался?
phantom:
address: my-host.com:443
ssl: true
client_certificate: ./ssl/client-crt.pem
client_key: ./ssl/client-key.pem
timeout: 60s
header_http: "1.1"
headers:
- "[Host: my-host.com]"
- "[User-Agent: direvius/yandex-tank:latest]"
- "[Accept: */*]"
- "[Accept-Encoding: gzip, deflate, br]"
#- "[Connection: keep-alive]"
- "[Connection: close]"
# yandex-tank из контейнера
[30/Jun/2020:20:40:03 +0000] "GET /api/ping/ HTTP/1.1" 401 81 "-" "direvius/yandex-tank:latest" 227 0.003 [default-service-8000] [] 10.126.103.242:8000 81 0.000 401 0a5af0b293f75c399735048d9044c3
[30/Jun/2020:20:40:03 +0000] "GET /api/ping/ HTTP/1.1" 401 81 "-" "direvius/yandex-tank:latest" 227 0.003 [default-service-8000] [] 10.126.103.242:8000 81 0.000 401 7c4e6bf298a9e6a95c01e45ee0d56b
[30/Jun/2020:20:40:03 +0000] "GET /api/ping/ HTTP/1.1" 401 81 "-" "direvius/yandex-tank:latest" 227 0.003 [default-service-8000] [] 10.126.103.242:8000 81 0.004 401 a86fe3395d4ddcda0d39892b1f0b47
[30/Jun/2020:20:40:04 +0000] "GET /api/ping/ HTTP/1.1" 401 81 "-" "direvius/yandex-tank:latest" 180 0.003 [default-service-8000] [] 10.126.103.242:8000 81 0.004 401 a3cdbdf48b1bd69fcb5b462994c2a647
[30/Jun/2020:20:40:04 +0000] "GET /api/ping/ HTTP/1.1" 401 81 "-" "direvius/yandex-tank:latest" 183 0.004 [default-service-8000] [] 10.126.103.242:8000 81 0.000 401 45e95e4d7a6168d6a8c17f42834a18aa
# Постманом
[30/Jun/2020:20:40:44 +0000] "GET /api/ping/ HTTP/1.1" 200 6 "-" "PostmanRuntime/7.26.1" 257 0.004 [default-service-8000] [] 10.126.103.242:8000 6 0.004 200 d7b9cae29d18d3a593940939a769af35
[30/Jun/2020:20:53:41 +0000] "GET /api/ping/ HTTP/1.1" 200 6 "-" "PostmanRuntime/7.26.1" 257 0.507 [default-service-8000] [] 10.126.103.244:8000 6 0.508 200 4e90191fa29be3a1da8405f993e75489
[30/Jun/2020:20:53:44 +0000] "GET /api/ping/ HTTP/1.1" 200 6 "-" "PostmanRuntime/7.26.1" 257 0.596 [default-service-8000] [] 10.126.103.244:8000 6 0.592 200 9aad7822f17ec487de934e19822dca5f
[30/Jun/2020:20:53:45 +0000] "GET /api/ping/ HTTP/1.1" 200 6 "-" "PostmanRuntime/7.26.1" 257 0.682 [default-service-8000] [] 10.126.103.244:8000 6 0.684 200 984619d294ab55604fde5de09bf74e72
# Из контейнера курлом
[30/Jun/2020:20:55:55 +0000] "GET /api/ping/ HTTP/1.1" 200 6 "-" "curl/7.47.0" 109 0.004 [default-service-8000] [] 10.126.103.244:8000 6 0.004 200 bd01903cab326f5ffc999284a028227a
[30/Jun/2020:20:55:56 +0000] "GET /api/ping/ HTTP/1.1" 200 6 "-" "curl/7.47.0" 109 0.003 [default-service-8000] [] 10.126.103.244:8000 6 0.004 200 dca6ac8678a40145e1676eb20190601a
[30/Jun/2020:20:55:59 +0000] "GET /api/ping/ HTTP/1.1" 200 6 "-" "curl/7.47.0" 109 0.008 [default-service-8000] [] 10.126.103.244:8000 6 0.008 200 2c130e4ee835ccd26a8a814a6e7cd5dd
пробовал даже пересобрать образ, добавив свой ca.crt самоподписной
FROM direvius/yandex-tank:latest
RUN apt-get install ca-certificates -y
COPY ./config/ssl/ca.crt /usr/local/share/ca-certificates/ca-certificates.crt
RUN update-ca-certificates
curl отработал без параметра -k, но всеравно сам yandex-tank 401 получает
такое впечатление, что Yandex-tank, разучился делать запросы с поддержкой mTLS, продебажил приложение, вот какая разница если отправлять из постмана и танка:
запрос из яндекс-танка:
{
'HTTP_SSL_CLIENT_VERIFY': 'NONE',
'HTTP_X_SSL_AUTHENTICATED': 'NONE',
}
запрос из постмана:
{
'HTTP_SSL_CLIENT_CERT': '-----BEGIN%20CERTIFICATE-----........-----END%20CERTIFICATE-----%0A',
'HTTP_SSL_CLIENT_VERIFY': 'SUCCESS',
'HTTP_SSL_CLIENT_SUBJECT_DN': 'CN=my-cn,OU=Company name,O=Company name,L=Kiev,ST=Kiev,C=UA',
'HTTP_SSL_CLIENT_ISSUER_DN': 'CN=Root Dev CA,OU=Company name,O=Company name,L=Kiev,ST=Kiev,C=UA',
'HTTP_X_SSL_DN': 'CN=my-cn,OU=Exness Trading,O=Company name,L=Company name,ST=Kiev,C=UA',
'HTTP_X_SSL_AUTHENTICATED': 'SUCCESS',
}
это разница, остальную часть запроса убрал
Здравствуйте, запустил впервые танк на Ubuntu 20.04. Делал по инструкции из yandextank.readthedocs.i
получил ошибку. Может быть кто-то сталкивался?
andrei@andrei-ubuntu:~/yandex-tank$ yandex-tank -c load.yaml
Traceback (most recent call last):
File "/usr/local/bin/yandex-tank", line 5, in <module>
from yandextank.core.cli import main
File "/usr/local/lib/python3.8/dist-packages/yandextank/core/__init__.py", line 4, in <module>
from .tankcore import TankCore # noqa:F401
File "/usr/local/lib/python3.8/dist-packages/yandextank/core/tankcore.py", line 25, in <module>
from yandextank.plugins.DataUploader.client import LPRequisites
File "/usr/local/lib/python3.8/dist-packages/yandextank/plugins/DataUploader/__init__.py", line 1, in <module>
from .plugin import Plugin # noqa:F401
File "/usr/local/lib/python3.8/dist-packages/yandextank/plugins/DataUploader/plugin.py", line 23, in <module>
from ..Autostop import Plugin as AutostopPlugin
File "/usr/local/lib/python3.8/dist-packages/yandextank/plugins/Autostop/__init__.py", line 1, in <module>
from .plugin import Plugin # noqa:F401
File "/usr/local/lib/python3.8/dist-packages/yandextank/plugins/Autostop/plugin.py", line 8, in <module>
from ..Console import Plugin as ConsolePlugin
File "/usr/local/lib/python3.8/dist-packages/yandextank/plugins/Console/__init__.py", line 1, in <module>
from .plugin import * # noqa:F401,F403
File "/usr/local/lib/python3.8/dist-packages/yandextank/plugins/Console/plugin.py", line 7, in <module>
from .screen import Screen
File "/usr/local/lib/python3.8/dist-packages/yandextank/plugins/Console/screen.py", line 1018
key=lambda (k, v): (-1 * v[self.cases_sort_by], k))
^
SyntaxError: invalid syntax
Если это как-то связано с несовместимостью Python 3 и Python 2 есть ли где-то инструкция как это обойти?
Файл load.yaml:
phantom:
address: 192.0.2.130:9151 # [Target's address]:[target's port]
uris:
- /
load_profile:
load_type: rps # schedule load by defining requests per second
schedule: line(1, 10, 10m) # starting from 1rps growing linearly to 10rps during 10 minutes
console:
enabled: true # enable console output
telegraf:
enabled: false # let's disable telegraf monitoring for the first time
@s.golod_gitlab если нужна сценарная нагрузка, можно использовать bfg или кастомный сценарий в pandora. В bfg проще реализовать(нужно написать на питоне) но количество таких "пользователей" будет очень ограничено. Pandora намного более производительна, да и возможностей у неё больше, но писать сценарий на go будет немного сложнее.
Я уже решил что наиболее подходящим будет использование jmeter. Пока потихоньку пишу сценарии.
Привет!
Кто-нибудь может подсказать: если я выставляю конфигурацию
instances: 1
load_type: rps
schedule: const(100,10m)
То всё хорошо.
Если выставляю:
instances: 100
load_type: rps
schedule: const(100,10m)
То сервис падает.
Получается, что каждый из 100 инстансов делает по 100rps, и rps уже не 100, а 100*100 ?
Привет!
Кто-нибудь может подсказать: если я выставляю конфигурацию
instances: 1
load_type: rps
schedule: const(100,10m)
То всё хорошо.Если выставляю:
instances: 100
load_type: rps
schedule: const(100,10m)
То сервис падает.Получается, что каждый из 100 инстансов делает по 100rps, и rps уже не 100, а 100*100 ?
Привет. Нет 100 rps распределяются по этим 100 инстансам. Однако танк делает 100 соединений(keep-alive) или создаёт 100 трэдов которые по очереди преустанавливают соединения с сервисом(close). Возможно сервис укладывает работа с соединениями. Возможно танку не хватает памяти на трэды.
Добрый день, новичок в нагрузочном тестировании, осваиваю Яндекс танк и генератор нагрузки Phantom. Подскажите пожалуйста, как отправить POST запрос с параметрами?
Интересует контент тайп и json и x-www-form-urlencoded
Привет.
https://yandextank.readthedocs.io/en/latest/tutorial.html#request-style вот тут есть пример sample POST requests (binary data). Можно по аналогии сформировать для json
Добрый день. Пытаюсь запустить tank для тестов SSL-terminated балансировки через Haproxy. За Haproxy обычный nginx который в корень / просто отдает ОК.
Конфиг tank следующий:
phantom:
address: some_ip_here:443
ssl: true
instances: 10
load_profile:
load_type: rps
schedule: const(400,2m)
headers:
- "[Host: kokoko.ru]"
uris:
- /
telegraf:
enabled: false
console:
enabled: true # enable console output
uploader:
enabled: true
package: yandextank.plugins.DataUploader
token_file: /var/loadtest/token.txt
Сам tank запущен из официального Docker образа. На Haproxy настроено проксирование 443 -> 80 с self-signed сертификатом. Из самого контейнера с tank и curl
[tank]root@d40bf0338d27: /var/loadtest # curl --insecure --resolve "kokoko.ru:443:some_ip_here" https://kokoko.ru/
OK
и telnet
[tank]root@d40bf0338d27: /var/loadtest # telnet some_ip_here 443
Trying some_ip_here...
Connected to some_ip_here.
Escape character is '^]'.
Connection closed by foreign host.
работают.
Но все запросы на тесте показывают 110 Connection timeout
. На стороне Haproxy вижу что запросы прилетают но Haproxy их режектит.
Aug 28 14:33:25 60f6227c-3c61-4b04-9401-2fd8d5839823 haproxy[9513]: ***:57010 [28/Aug/2020:14:33:25.639] 7b82a0aa-8f99-4cc6-ba1b-ac9e8eaba837/1: SSL handshake failure
Aug 28 14:33:25 60f6227c-3c61-4b04-9401-2fd8d5839823 haproxy[9513]: ***:56978 [28/Aug/2020:14:33:25.639] 7b82a0aa-8f99-4cc6-ba1b-ac9e8eaba837/1: SSL handshake failure
Aug 28 14:33:25 60f6227c-3c61-4b04-9401-2fd8d5839823 haproxy[9513]: ***:56932 [28/Aug/2020:14:33:25.639] 7b82a0aa-8f99-4cc6-ba1b-ac9e8eaba837/1: SSL handshake failure
Как подружить yandex-tank с self-signed SSL?
Пробовал добавлять в конфиг tank настройки client_certificate и client_key с файлами, но результат тот же.
Здравствуйте, после окончания тестирования, во время остановки мониторинга, выдает ошибку и мониторинг не сохраняется(возможно вообще не отрабатывает).
Конфига танка, тут все просто:
overload:
enabled: true
token_file: token.txt
phantom:
address: ***:80
uris:
- /
load_profile:
load_type: rps
schedule: const(20, 20)
console:
enabled: true
telegraf:
enabled: true
package: yandextank.plugins.Telegraf
config: monitoring.xml
kill_old: false
ssh_timeout: 30s
Конфиг мониторинга:
<Monitoring>
<Host address="***" interval="1" username="root">
<CPU/> <Kernel/> <Net/> <System/> <Memory/>
</Host>
</Monitoring>
И сама ошибка:
2020-08-30 15:09:54,687 [INFO] yandextank.core.tankcore tankcore.py:321 Stopping monitoring
2020-08-30 15:09:54,687 [INFO] yandextank.core.tankcore tankcore.py:323 Stopping <yandextank.plugins.Telegraf.plugin.Plugin object at 0x7f0495a288d0>
2020-08-30 15:09:54,688 [INFO] yandextank.plugins.Telegraf.plugin plugin.py:233 Finishing monitoring
2020-08-30 15:09:54,688 [DEBUG] yandextank.plugins.Telegraf.collector collector.py:120 Uninstalling monitoring agents
2020-08-30 15:09:54,688 [WARNING] yandextank.plugins.Telegraf.client client.py:361 Unable to correctly stop monitoring agent - session is broken on 134.209..
Traceback (most recent call last):
File "/usr/local/lib/python2.7/dist-packages/yandextank/plugins/Telegraf/client.py", line 355, in _stop_agent
self.session.send("stop\n")
File "/usr/local/lib/python2.7/dist-packages/yandextank/common/util.py", line 158, in send
self.session.send(data)
File "/usr/local/lib/python2.7/dist-packages/paramiko/channel.py", line 801, in send
return self._send(s, m)
File "/usr/local/lib/python2.7/dist-packages/paramiko/channel.py", line 1198, in _send
raise socket.error("Socket is closed")
error: Socket is closed
2020-08-30 15:09:56,194 [ERROR] yandextank.plugins.Telegraf.client client.py:394 Unable to get agent artefacts
Traceback (most recent call last):
File "/usr/local/lib/python2.7/dist-packages/yandextank/plugins/Telegraf/client.py", line 386, in uninstall
log_filename)
File "/usr/local/lib/python2.7/dist-packages/yandextank/common/util.py", line 109, in get_file
result = sftp.get(remote_path, local_path, self.get_progress_logger(remote_path))
File "/usr/local/lib/python2.7/dist-packages/paramiko/sftp_client.py", line 802, in get
size = self.getfo(remotepath, fl, callback)
File "/usr/local/lib/python2.7/dist-packages/paramiko/sftp_client.py", line 778, in getfo
file_size = self.stat(remotepath).st_size
File "/usr/local/lib/python2.7/dist-packages/paramiko/sftp_client.py", line 493, in stat
t, msg = self._request(CMD_STAT, path)
File "/usr/local/lib/python2.7/dist-packages/paramiko/sftp_client.py", line 813, in _request
return self._read_response(num)
File "/usr/local/lib/python2.7/dist-packages/paramiko/sftp_client.py", line 865, in _read_response
self._convert_status(msg)
File "/usr/local/lib/python2.7/dist-packages/paramiko/sftp_client.py", line 894, in _convert_status
raise IOError(errno.ENOENT, text)
IOError: [Errno 2] No such file
2020-08-30 15:09:56,194 [DEBUG] yandextank.plugins.Telegraf.collector collector.py:133 Waiting for agent <yandextank.plugins.Telegraf.client.SSHClient object at 0x7f0495766210> reader thread to finish.
Здравствуйте! Подскажите, пожалуйста, не знаю в чем проблема. Я пытаюсь отправить POST-запрос с данными типа multipart/form-data в котором только 1 поле-массив и несколько значений.
590 get_options
POST /api/v1/get_options HTTP/1.1
User-Agent: Tank
Accept: */*
Host: ...
Connection: keep-alive
Content-Type: multipart/form-data; boundary=--------------------------880024703496342765159645
----------------------------880024703496342765159645
Content-Disposition: form-data; name="options[]"
cities
----------------------------880024703496342765159645
Content-Disposition: form-data; name="options[]"
professions
----------------------------880024703496342765159645
Content-Disposition: form-data; name="options[]"
lands
----------------------------880024703496342765159645--
Если сделаю точно такой же запрос через Postman, то получу данные, и код ответа 200, при проверке такого запроса через YT получаю 400 Bad request... Заранее спасибо!
go run main.go
, все проходит штатно, запросы отправляютсяpandora conf.yaml
выдается ошибка {"error": "3 error(s) decoding:\n\n* 'pools[0]' has invalid keys: source\n* error decoding 'pools[0].ammo':
no plugins of type core.Provider has been registered for name custom_provider\n* error decoding 'pools[0].gun':
no plugins of type core.Gun has been registered for name mygun"}
Ребят, объясните, пожалуйста. Пытаюсь провести нагрузку на 9 роутов одного сервиса, которые описаны в ammo.txt. Не понимаю как узнать корректную фактическую нагрузку, пишет RPS:25 при этом использует Active instances: ~250. Сами instances никак не нужно учитывать в показатель нагрузки (что-то типа Instances * rps) и главное смотреть на показатель RPS? При тестировании с файлом ammo.txt как-то играет показатель если описывать больше 1 роута для теста?
Просто странно, что при 25 RPS, судя по показателям на экране, я уже получаю какие-то ошибки в HTTP Codes: 0 N/A и в Net codes: 110 Connection timed out.
Конечно, возможно, здесь играет роль, как настроен файл конфигурации nginx, но даже с настройками по умолчанию должно же выдавать rps больше...
Всем привет, подскажите пожалуйста, как через Пандору отправить запрос с параметрами. В фантоме для ГЕТ запроса в файле load.yaml можно было прописать два параметра и пережать хедеры так:
header_http: "1.1"
headers:
- "[Host: hostname.com]"
- ...
Но Пандора не принимает эти параметры в файле и все запросы валятся с ошибкой.
Еще подскажите как отправлять ПОСТ запросы с json телом запроса?