ã¯ããã«
ãããã£ãŠããã®ããã¥ã¢ã«ã¯ã倧éã®ã·ã¹ãã ããã¹ãããè² è·ãã¹ãã®ã»ãšãã©ã®ã¿ã¹ã¯ã解決ããããã®æ±çšããŒã«ãæ¢ããŠãã人ã«é©ããŠããŸãã ãã®èšäºã¯ãã®åé¡ã®åå¿è ã察象ãšããŠããããã詳现ãæ倧éã«æŽ»çšããŠããã»ã¹ãç°¡çŽ åããããã«ããŸãã ãã³ãã«å ã®åèŠçŽ ã«ã€ããŠç°¡åã«èª¬æããæåã®ã€ã³ã¹ããŒã«ãšæ§æã«é²ã¿ãŸãã
- Apache JMeterã¯ãJDBCæ¥ç¶ãFTPãLDAPãSOAPãJMSãPOP3ãIMAPãHTTPãTCPãããã«ãã¹ãã§ããè² è·ãã¹ãããŒã«ã§ãããããŸããŸãªãã©ã°ã€ã³ã䜿çšããŠä»ã®å€ãã®ãããã³ã«ãšãœãªã¥ãŒã·ã§ã³ãå®è¡ã§ããŸãã
- Yandex.Tankã¯ãè² è·ãã¹ãçšã®ã¯ã©ãŠãããŒã¹ã®ããŒã«ã§ãããJMeterãå«ãããŸããŸãªè² è·ãžã§ãã¬ãŒã¿ãŒã䜿çšããŸãã
- Yandex.OverLoadã¯ãè² è·ãããã£ãŠãããµãŒããŒã®äŸ¿å©ãªç£èŠãšåæã®ããã®ãµãŒãã¹ã§ãã
ã€ã³ã¹ããŒã«ãšã»ããã¢ãã
JMeterãæ£ããã€ã³ã¹ããŒã«ããããã®éµã¯ãjavaãæ£ããã€ã³ã¹ããŒã«ããããšã§ãã ãã®æ®µéã§ã¯ããã¹ãŠã®æäœãLinuxã§åŒãç¶ãçºçããããšã¯èšãã«å€ããŸãã å ¬åŒWebãµã€ãã«ã¯ããã¹ãŠã®ãã¥ã¢ã³ã¹ãèšèŒããåªããããã¥ã¢ã«ããããŸãã
- 32ãããããŒãžã§ã³ã®Java ãã€ã³ã¹ããŒã«ããŸãã
- 64ãããããŒãžã§ã³ã®Java ãã€ã³ã¹ããŒã«ããŸãã
Javaãæ€èšŒã®ããã«æŽçããã³ã³ãœãŒã«ã§java -versionãäœæãããšãçãã¯æ¬¡ã®ããã«ãªããŸãã
ããã§ã¯ãApache JMeterã«ç§»ããŸãããã JMeterã®ä»»æã®ããŒãžã§ã³ãã€ã³ã¹ããŒã«ã§ããŸããããError in NonGUIDriverããªã©ã®åé¡ãçºçããå Žåãæ°ããããŒãžã§ã³ã®ã¿ã³ã¯ãå¿ èŠã«ãªãããäœæ¥2.13ã«ç°¡åã«åãæ¿ããããšãã§ããŸãã ã€ã³ã¹ããŒã«ã«æ»ããŸã-ãã¹ãŠã®ããŒãžã§ã³ã§åæ§ã§ãïŒ
ããŠã³ããŒãã¯ã©ã€ã¢ã³ã ïŒ
wget https://archive.apache.org/dist/jmeter/binaries/apache-jmeter-2.13.tgz
é梱ïŒ
tar -zxvf apache-jmeter-2.13.tgz
JMeterãã€ã³ã¹ããŒã«ãããŠããããã§ã«åäœããŸãã åæã»ããã¢ããã§ã¯ã1åã®å€æŽã§ååã§ãã ãã¹apache-jmeter-2.13 / binã«æ²¿ã£ãŠé²ã¿ãæ¡åŒµåãªãã®jmeterãã¡ã€ã«ãç·šéçšã«éããŸãã
cd apache-jmeter-2.13/bin nano jmeter
äžã®ã¹ã¯ãªãŒã³ã·ã§ããã®ããã«ãè¡ãèŠã€ããŸãã 䜿çšãããµãŒããŒã®ç¹æ§ã«å¿ããŠãããŒããµã€ãºã®å€ãèšå®ããŸãã HEAP Xmsã®æåã®å€ã¯ãããã»ã¹ã®éå§æã«ããã»ã¹ã«å²ãåœãŠãããRAMã®éã§ããã2çªç®ã®Xmxã¯ãããã»ã¹ã§äœ¿çšã§ããRAMã®æ倧å€ã§ãã
ã»ãšãã©ã®å ŽåããµãŒããŒã«GUIããªãããµãŒããŒãžã®ã¢ã¯ã»ã¹ããªã¢ãŒãã§ããå ŽåãJMeterãããŒã«ã«ã«ã€ã³ã¹ããŒã«ããŠãã¹ã¯ãªããã®ãããã°ãšæžã蟌ã¿ãè¡ãããšããå§ãããŸãã çæ³çã«ã¯ãããŒãžã§ã³ã¯åãã§ããå¿ èŠããããŸãããã»ãšãã©ã®å ŽåãJMeterã¯é£æ¥ãŸãã¯ããããäœãããŒãžã§ã³ã®ã¹ã¯ãªãããç解ããŸãã ãã¡ããã JavaãšJMeterèªäœãããŒã«ã«ãã·ã³ã«ã€ã³ã¹ããŒã«ããå¿ èŠããããŸãã
Yandex.Tankã®ã€ã³ã¹ããŒã«ãšæ§æã«é²ã¿ãŸããããã§ååã§ããããã次ã®æé ãå®äºããå¿ èŠããããŸãã
sudo apt-get install python-pip build-essential python-dev libffi-dev gfortran libssl-dev
sudo -H pip install --upgrade pip
sudo -H pip install --upgrade setuptools
sudo -H pip install https://api.github.com/repos/yandex/yandex-tank/tarball/master
次ã®ã¹ãããã¯ãéãã©ãã«ã©ã®ããã«æã€ããäŒããããšã§ãã ãããè¡ãã«ã¯ãæ§æãã¡ã€ã«load.iniã䜿çšããŠtankãæã€ãã·ã³ã«äœæ¥ãã£ã¬ã¯ããªãäœæããŸã
mkdir test cd test nano load.ini
æ§æãã¡ã€ã«ã®å 容ã¯ãã¿ã³ã¯ã®ã¢ã¯ã·ã§ã³ã®ã¬ã€ãã§ãããã¹ãã®ãã¹ãŠã®éèŠãªç¹ãåæ ããå¿ èŠããããŸãã JMeterã䜿çšãããã¹ãã®load.iniã®äŸã次ã«ç€ºããŸãã
[ã¿ã³ã¯]ãããã¯ã§ãã¹ãŠãæ確ã«ãªã£ãŠãããšæããŸãã質åãçºçããå Žåãåãã£ãŒã«ãã®èª¬æãšã¿ã³ã«ãŒèªäœããã®ãããã¯ããããŸãã [jmeter]ãããã¯ã§æãèå³æ·±ããã®ã
jmxãã©ã¡ãŒã¿ãŒã«ã¯ã¹ã¯ãªãããžã®çŽæ¥ã®ãã¹ãå«ãŸããŸããjmeter_pathã¯JMeterå®è¡å¯èœãã¡ã€ã«ãžã®ãã¹ã§ãããŸããã¿ã³ã¯ãäžå¿ èŠãªåããããªãããã«ããã«ã¯ãjmeter_verãã©ã¡ãŒã¿ãŒã§JMeterããŒãžã§ã³ãæå®ããå¿ èŠããããŸãã
ã¹ã¯ãªããéçº
æåã®ãã¹ããäœæããŸãã ãããè¡ãã«ã¯ãJMeterã¯ã©ã€ã¢ã³ããéããŸã-ã»ãšãã©ã®Windowsã·ã¹ãã ã¯ç®¡çè
ãšããŠå®è¡ããå¿
èŠããããŸãã JMeterã®ãã¹ã¿ãªã³ã°ãéå§ããåæã«ãã®GUIãç解ããæ¹æ³ã«ã€ããŠã¯ã ãã®èšäºã§è©³ãã説æãããŠããŸã ã ããŒã¿ããŒã¹ã䜿çšããäŸããããŸãããããã¯éåžžã®httpãªã¯ãšã¹ããšã¯å°ãç°ãªããŸãã æåã®éãã¯ãPostgreSQLã¯JMeterã§ã¯ããã«ãµããŒããããªããããæ£ããããŒãžã§ã³ã®ãã©ã€ããŒãããŠã³ããŒãããå¿
èŠãããããšã§ãã 次ã«ãããŠã³ããŒããã.jarãJMeterã®ãããã©ã«ããŒå
ã®/ libãã£ã¬ã¯ããªãŒã«é
眮ããå¿
èŠããããŸãã åã.jarã¯ãã¿ã³ã¯ã®ããè»ã®åæ§ã®ãã¹ã«æ²¿ã£ãŠé
眮ããå¿
èŠããããŸãã ãã©ã€ããŒãæŽçãããããã¹ã¯ãªããã«ç§»åããŸãã
æåã«è¡ãå¿ èŠãããã®ã¯ãããŒã¿ããŒã¹æ¥ç¶ãæ§æããããšã§ãããã®ããã«ã¯ã[ãã¹ãèšç»]-> [è¿œå ]-> [æ§æèŠçŽ ]-> [JDBCæ¥ç¶æ§æ]ãå³ã¯ãªãã¯ããŸãã ã¹ã¯ãªãŒã³ã·ã§ããã®ããã«ãæ§æèŠçŽ ããã¹ãããªãŒã«è¿œå ãããŸãã
ããã«åæ Œãããšãå€ãã®å¿ èŠãªãã£ãŒã«ãã衚瀺ãããŸãã ããã§ã¯ããŸãäžéšã«æ³šæãæãå¿ èŠããããŸãã
[å€æ°å]ãã£ãŒã«ãã«å ¥åããããšãéèŠã§ãã ãã®ååã¯ãJDBCãªã¯ãšã¹ãïŒãµã³ãã©ãŒïŒã§ã»ãã·ã§ã³ããŒã«ã«ã¢ã¯ã»ã¹ããããã«äœ¿çšãããŸãã ãŸããæ倧æ¥ç¶æ°ã«æ³šæãã䟡å€ããããŸãããã®ãã©ã¡ãŒã¿ãŒã¯ãããŒã¿ããŒã¹ãžã®åææ¥ç¶æ°ãå¶éããŸãã ã¿ã€ã ã¢ãŠããšæ¥ç¶ã©ã€ããµã€ã¯ã«ã«ç¹å¥ãªèŠä»¶ããªãå Žåããã®ãããã¯ã®æ®ãã®éšåã¯ãã®ãŸãŸã«ããŠããããšãã§ããŸãã
äžèšã®ã¹ã¯ãªãŒã³ã·ã§ããã®ãããã¯ã«é²ã¿ãŸããããã§ã¯ãããŒã¿ããŒã¹ã«æ¥ç¶ããããã®ããŒã¿ãå ¥åããå¿ èŠããããŸãã ãã³ãã¬ãŒãã¯æ¬¡ã®ãšããã§ãã
- ããŒã¿ããŒã¹URLïŒjdbcïŒpostgresqlïŒ// IPAddressïŒPortNo / DatabaseNameïŒAutoReconnect = true;
- JDBCãã©ã€ããŒã¯ã©ã¹ïŒorg.postgresql.Driver;
- ãŠãŒã¶ãŒåïŒããŒã¿ããŒã¹ã®ãŠãŒã¶ãŒåã
- ãã¹ã¯ãŒãïŒããŒã¿ããŒã¹ã®ãã¹ã¯ãŒãã
çå°ã®æšãããã«å å¡«ããŸãã [ãã¹ãèšç»]-> [è¿œå ]-> [ã¹ã¬ããïŒãŠãŒã¶ãŒïŒ]-> [ã¹ã¬ããã°ã«ãŒã]ãããäžåºŠã¯ãªãã¯ããŸãã
çºç ²ã³ã³ãããŒã«ããã«ã®åã«ãããã§ãŠãŒã¶ãŒæ°-ã¹ã¬ããæ°ãå°éã«ãããæé-ã©ã³ãã¢ããæéãããã³åæ°èŠãŠãŒã¶ãŒãåã®ãŠãŒã¶ãŒãšåãã¢ã¯ã·ã§ã³ãç¹°ãè¿ã匷床ãå ¥åããŸãã ãªã¯ãšã¹ããç¡éã«éä¿¡ããå¿ èŠãããå Žåã¯ãã«ãŒãã«ãŠã³ãã®å察åŽã®ãæ°žä¹ ãã«ãã§ãã¯ããŒã¯ãä»ããŸãã æåã®ãã¹ãã§ã¯ãå°æ°ã®ç¹°ãè¿ãã§ãæ°äººã®ãŠãŒã¶ãŒã«å€ãèšå®ã§ããŸãã ããã§ãããŒã¿ããŒã¹å ã®ã¯ãšãªã«çŽæ¥æž¡ããŸãã
JDBCèŠæ±ãµã³ãã©ãŒãã©ã³ããã¹ãã«è¿œå ããã«ã¯ã[ã¹ã¬ããã°ã«ãŒã]-> [è¿œå ]-> [ãµã³ãã©ãŒ]-> [å¿ èŠãªJDBCèŠæ±]ãå³ã¯ãªãã¯ããŸãã æåã¯å€æ°åãã£ãŒã«ãã«èå³ããããŸããããã¯ãJBDCæ¥ç¶æ§æã®åããã©ã¡ãŒã¿ãŒãšäžèŽããå¿ èŠããããŸãã ãã®åŸãã¯ãšãªã®çš®é¡ã«å¿ããŠãã¯ãšãªã®çš®é¡ã®ããããããŠã³ãªã¹ããèŠãŠãã ãããããšãã°ãããŒã¿ããŒã¹å ã®SELECTã¯ãšãªã®å Žåã¯é©åãªå€ãå¿ èŠã§ããSelectã¹ããŒãã¡ã³ããéžæããå¿ èŠããããŸãã ãã®ãµã³ãã©ãŒã§ã®äœæ¥ã®æåŸã«ãæå¹ãªSQLã¯ãšãªã«å¯Ÿå¿ããå¿ èŠããããªã¯ãšã¹ãããã£ãæå®ããå¿ èŠããããŸãã
äžè¬ã«ãã¹ã¯ãªããã¯æºåãã§ããŠããŸããããããã°ããå¿ èŠããããŸããããã¯æ¬¡ã®ããã«è¡ãããŸãã
- JDBCèŠæ±ã®åŸãç®çã®ã¹ã¬ããã°ã«ãŒãã«ãããã°ãµã³ãã©ãŒãè¿œå ããŸãã ããŒã¿ããŒã¹ãžã®ã¯ãšãªåŸã«åä¿¡ããå¿çã衚瀺ããŸãã ã¹ã¬ããã°ã«ãŒã->è¿œå ->ãµã³ãã©ãŒ->ãµã³ãã©ãŒã®ãããã°ã
- ç¹å®ã®ãµã³ãã©ãŒã®çµæã衚瀺ããã«ã¯ããã¹ãèšç»ã®æåŸã«çµæãç£èŠããå¿ èŠããããŸãããã¹ãèšç»->è¿œå ->ãªã¹ããŒ->çµæããªãŒã®è¡šç€ºã®ããã«è¿œå ããŸãã ã¹ã¯ãªãããå®è¡ãããšãå®è¡ããããã¹ãŠã®ãªã¯ãšã¹ãã§ããªã«ããŠã³ãè¡ãããŸãã
JMeterèªäœãããããŸã§ã®ãšãããã¹ãå®è¡ã®æãæ¥ãŸãã-ã¯ãªãã¯ããã ãã§ã [çµæããªãŒã®è¡šç€º]ãã¯ãªãã¯ããŸãã ã¹ã¯ãªãããäœæããåŸã次ã®çµæãåŸãããŸããã
ã¹ã¯ãªããã®ãããã°
æåã®ãã®ãæ£åžžã«æ©èœããããšãããããå¿çã¡ãã»ãŒãžãã£ãŒã«ããèŠããšããã£ãŒã«ãã¯äžæã§ãªããã°ãªããªãããšãããããŸãã ããã§ããã©ã¡ãŒã¿ãŒåã«é²ã¿ãŸãã ãããè¡ãã«ã¯å€ãã®æ¹æ³ããããŸãããæããŠããŒã¯ãªæ¹æ³ã¯ãBeanShell PreProcessorã䜿çšãããã©ã¡ãŒã¿ãŒåã§ãã ãã®ããã«ã¯ãJDBCãªã¯ãšã¹ãã®åã«ãäžèšã®ããªããã»ããµ-ã¹ã¬ããã°ã«ãŒã->è¿œå ->ããªããã»ããµ-> BeanShellããªããã»ããµãæ¿å
¥ããå¿
èŠããããŸãã ããªããã»ããµã«ã€ããŠã¯ã ãã¡ããŸãã¯JMeterã®Webãµã€ãã§èªãããšãã§ããŸãã BeanShell PreProcessorã¯ãå®å®ããé«éãªãã·ã§ã³ãšããŠJSR223 PreProcessor + Groovyã䜿çšãããããé«è² è·ã«ã¯æšå¥šãããŸããã
ããã«ã¯é£Ÿãã¯ãããŸãã-Javaã§èšè¿°ããå¿ èŠãªã¯ã©ã¹ãã€ã³ããŒãããå€æ°ã宣èšããå¿ èŠãªåœ¢åŒã®ã©ã³ãã å€æ°ãããã«å²ãåœãŠãŸãã çµæã®å€æ°ãJMeterå€æ°ã«å ¥ããã«ã¯ãvars.putïŒïŒã䜿çšããŸãã 次ã«ãJDBCãªã¯ãšã¹ãã«ç§»åããŠãäžæã®ãã£ãŒã«ãã®å€ã§ã¯ãªãã$ {needUUID}圢åŒã®å€æ°ãè¿œå ããŸãïŒäžã®ã¹ã¯ãªãŒã³ã·ã§ããã®äŸãåç §ïŒã
ãã¹ãèšç»ã®æçµçãªæ§é ã¯æ¬¡ã®ãšããã§ãã
JMeterãããã1åå®è¡ããããã«çµæããªãŒã®è¡šç€ºã確èªãã[ãµã³ãã©ãŒã®ãããã°]ãéžæããŠã[å¿çããŒã¿]ã¿ãã«ç§»åããŸãã
ããã§ãå€æ°ãæ£åžžã«çæããããã¹ãŠã®ãªã¯ãšã¹ãã§ç°ãªãããšã確èªã§ããŸãã ãã¹ãããããã°ããŠå®è¡ããæºåãã§ãããããããã°èŠçŽ ãã€ãŸããããã°ãµã³ãã©ãŒãšãã¥ãŒçµæããªãŒãåé€ããå¿ èŠããããŸãã ããã¯ãèŠçŽ ã®å³ãã¿ã³ãæŒããŠ[åé€]ãéžæããã ãã§å®è¡ã§ããŸãã 念ã®ããããã®åŸã«ãã¹ãã®ã¿ã€ããé©çšããŸãã
ããã§ããã¹ããä¿åããã¿ã³ã¯ã®ããè»ã«ãã¹ãã転éããŸãã ãã¡ã€ã«load.iniã®ãjmxããã©ã¡ãŒã¿ãŒã«è¿œå ããŠä¿åããŸãã 絶察ã¢ãã¬ã¹æå®ã䜿çšãããŸãã ç§ã«ãšã£ãŠã¯ãã®ããã«èŠããŸãïŒ
ãã¹ãŠããã®æ®µéã§æ©èœããããšãç解ããæåã®æã¡äžãã®æãæ¥ãŸããã ãã®åã«ãããŒã¿ããŒã¹ãžã®è¡ã®è¿œå ãå¶åŸ¡ããå¿ èŠããããŸãã ãããè¡ãã«ã¯ã pgAdminããŒã«ã䜿çšããããããŒã¿ããŒã¹ã®ãããµãŒããŒã«ç§»åããŠãã¹ã¯ãªããã®å®è¡ååŸã«è¡ãã«ãŠã³ãããŸãã ããŒã¿ããŒã¹ãžã®æ¥ç¶ã¯ãåæ§ã®ã³ãã³ãã«ãã£ãŠå®è¡ãããŸãã
psql -h IpAddress -d dbName -U UserName
ã«ãŠã³ãèªäœã¯æ¬¡ã®ããã«è¡ãããŸãã
select count(*) from alert;
ã¿ã³ã¯ã®ããè»ã«æ»ããload.iniããããã£ã¬ã¯ããªã«ç§»åããŠãã¿ã³ã¯ãéå§ããã³ãã³ããå ¥åããŸãã
yandex-tank
éå§ããŠããæ°ç§åŸã«ãçŸåšã®ãã¹ããã©ã¡ãŒã¿ãŒã瀺ããŠã£ã³ããŠã衚瀺ãããŸãã çæéã®ãã¹ãã§ã¯ãã¿ã³ã¯ã«ã¯çŸåšã®ãã©ã¡ãŒã¿ãŒã«é¢ããããŒã¿ãååŸããæéããããŸããã
ã¢ãã¿ãªã³ã°
ãã¹ãã®å®è¡ãšãã¹ãã確èªããåŸãã¢ãã¿ãªã³ã°ã®èšå®ã«é²ã¿ãŸãã 幞ããªããšã«ãéè² è·ç£èŠã«ã¯æå°éã®åŽåããå¿
èŠãããŸããã 次ã®ã¢ã¯ã·ã§ã³ã§ååã§ãã
- ãªãŒããŒããŒãã®ç»é²;
- ãªãŒããŒããŒãã®ãããã¡ã€ã«ã¢ã€ã³ã³ãã¯ãªãã¯ããŠãmy apiããŒã¯ã³ããéžæãããšãããŒã¯ã³ãååŸãããŸãã
- ã¿ã³ã¯ã®ãããã·ã³ã®load.iniãšåããã©ã«ããŒã«token.txtãäœæããŸãã
- åä¿¡ããããŒã¯ã³ãtoken.txtã«å ¥åããŠä¿åããŸãã
- load.iniã«[overload]ãããã¯ãè¿œå ããŸã-ã¿ã³ã«ãŒããã®èª¬æ ã
load.iniã®æ¬¡ã®å
容ã«ã€ããŠååŸããŸãã
ããã§ããã¹ãã®éå§åŸããªãŒããŒããŒããããã¡ã€ã«ã«çŸåšã®ãã¹ããšéå»ã®ãã¹ãŠã®ãã¹ããå€æ°ã®æçšãªã°ã©ãã§è¡šç€ºãããŸãã
CãªãŒããŒããŒããçµäºããŸãããä»ã®ã¡ããªãã¯ãšãã®ç£èŠã«ã€ããŠå°ã説æããŸãã ããŒã¿ããŒã¹ã®çŽæ¥ç£èŠãèšå®ããããã®å€ãã®ã¬ã€ãããããŸãã®ã§ããã®ããã»ã¹ã«ã€ããŠã¯è©³ãã説æããŸããã ããŒã¿ããŒã¹ã®ãµãŒããŒã¡ããªãã¯ãšinfluxdbãåé€ããã«ã¯ã telegrafã䜿çšããããšããå§ãããŸãã ãã¹ãŠã®ã¡ããªãã¯ã®åºåã¯Grafanaã§æŽçã§ããŸãã ãããè¡ãã«ã¯ããã®ã¬ã€ãã®ã€ã³ã¹ããŒã«ããã»ã¹ã䜿çšã§ããŸãã
æåŸã«ãæè¿ãã€ãŸãããŒãžã§ã³3.2以éãJMeterã«ã¯ãæµå ¥ããŒã¹ã®ç£èŠãœãªã¥ãŒã·ã§ã³ãçµã¿èŸŒãŸããŠããŸãããOverloadãšã¯ç°ãªãããã¹ãŠãèªåã§æ§æããå¿ èŠããããšèšã£ãŠããã§ãããã
以äžã§ãã ã¿ããªã®è¯ãæ®åœ±ïŒ