NewRelic, рдПрдХ рд▓реЛрдХрдкреНрд░рд┐рдп рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдирд┐рдЧрд░рд╛рдиреА рд╕реЗрд╡рд╛ рд╣реИ, рдЬреЛ рд╕рднреА рдирдП рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдХреЛрдбрд╕реНрдХреВрд▓ рд╕рд╛рдордЧреНрд░рд┐рдпреЛрдВ рдХреЗ рдкреВрд░реНрдг рдЙрдкрдпреЛрдЧ рдХрд╛ рдПрдХ рдорд╣реАрдирд╛ рдкреНрд░рджрд╛рди рдХрд░рддреА рд╣реИред
рдпрд╣рд╛рдВ рд░рдЬрд┐рд╕реНрдЯрд░ рдХрд░реЗрдВ ред рдПрдХ рдХреВрдкрди рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдмрд┐рд▓реНрдХреБрд▓ рдХрд┐рд╕реА рднреА рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рддреИрдирд╛рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ - рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рд╣реИрд▓реЛ рд╡рд░реНрд▓реНрдб рднреА рдХрд╛рдлреА рдЙрдкрдпреБрдХреНрдд рд╣реИред
рдПрдХ рдирдЬрд╝рд░ рдореЗрдВ рдХреЛрдбрд╕реНрдХреВрд▓рдХреЛрдб рд╕реНрдХреВрд▓ рдИрд░реНрд╖реНрдпрд╛ рд▓реИрдмреНрд╕ рд╕реЗ рдПрдХ рд╢реИрдХреНрд╖рд┐рдХ рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╣реИ, рдЬрд┐рд╕рдХреЗ рдврд╛рдВрдЪреЗ рдореЗрдВ рдЖрдИрдЯреА рдХреЗ рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рд▓рдЧрднрдЧ 30 рдЗрдВрдЯрд░реИрдХреНрдЯрд┐рд╡ рдСрдирд▓рд╛рдЗрди рдкрд╛рдареНрдпрдХреНрд░рдо рд▓рд╛рдЧреВ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред рдлрд┐рд▓рд╣рд╛рд▓ рдореБрдЦреНрдп рдкрде рд░реВрдмреА / рд░реЗрд▓, рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ / jQuery, HTML / CSS / рдбрд┐рдЬрд╝рд╛рдЗрди, iOS рд╣реИрдВред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЕрддрд┐рд░рд┐рдХреНрдд рдкрд╛рдареНрдпрдХреНрд░рдо рд╣реИрдВ рдЬреЛ рдореБрдЦреНрдп рдХреНрд╖реЗрддреНрд░реЛрдВ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рд╣реИрдВ рдФрд░ рдРрдЪреНрдЫрд┐рдХ рдХреЗ рд░реВрдк рдореЗрдВ рдирд╛рдорд┐рдд рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдХреНрд░реЛрдо рджреЗрд╡рдЯреВрд▓ рдФрд░ рдЧрд┐рдЯ рдкрд░ред рдЗрдВрдЯрд░реЗрдХреНрдЯрд┐рд╡ рдкрд╛рдареНрдпрдХреНрд░рдореЛрдВ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╕рдВрд╕рд╛рдзрди рдПрдХ рд╣реА рд╡рд┐рд╖рдп рдХреЗ рджрд░реНрдЬрдиреЛрдВ рд╕реНрдХреНрд░реИрдВрдХреЛрд╕реНрдЯ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рд╕рд╛рдорд╛рдиреНрдп рд╕рдордп рдореЗрдВ, рдЗрд╕ рд╕рднреА рд╕реБрдВрджрд░рддрд╛ рдХрд╛ рдкреВрд░рд╛ рдЙрдкрдпреЛрдЧ $ 25 рдкреНрд░рддрд┐ рдорд╛рд╣ рдХреЗ рд▓рд┐рдП рдЙрдкрд▓рдмреНрдз рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдХреБрдЫ рдкрд╛рдареНрдпрдХреНрд░рдо рдирд┐рдГрд╢реБрд▓реНрдХ рдкреНрд░рджрд╛рди рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред
рдмрд┐рд▓реНрд▓реА рдХреЗ рдиреАрдЪреЗ рдЕрдЬрдЧрд░ / рдЕрдВрдЧрд░рдЦрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рд╡рд┐рд╕реНрддреГрдд рд╣реЗрд▓реНрд▓реЛрд╡рд░реНрд▓реНрдбреНрд╕рдЧреА рддреИрдирд╛рддреА рдирд┐рд░реНрджреЗрд╢
рдЪреВрдВрдХрд┐ рдХреЛрдбрд╕реНрдХреВрд▓ рдкрд╛рдареНрдпрдХреНрд░рдо рд╢реБрд░реБрдЖрддреА рдХреЗ рд▓рд┐рдП рдореБрдЦреНрдп рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧреА рд╣реЛрддреЗ рд╣реИрдВ, рдФрд░ рдиреНрдпреВрд░реЗрд▓рд┐рдХ рд╕реЗрд╡рд╛ рдореБрдЦреНрдп рд░реВрдк рд╕реЗ рдЕрдиреБрднрд╡реА рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реЛрддреА рд╣реИ, рдореИрдВ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рджрд░реНрдж рд░рд╣рд┐рдд рдкрд╣реБрдВрдЪ рдХреЗ рд▓рд┐рдП рдиреАрдЪреЗ рдирд┐рд░реНрджреЗрд╢ рдкреНрд░рджрд╛рди рдХрд░реВрдВрдЧрд╛ред
рдореИрдВ рдорд╛рдирддрд╛ рд╣реВрдВ рдХрд┐ рдЖрдкрдХреЗ рдорд╢реАрди рдкрд░ рдЕрдЬрдЧрд░ рдФрд░ рдкрд╛рдЗрдк рд╕реНрдерд╛рдкрд┐рдд рд╣реИрдВред рдпрджрд┐ рдирд╣реАрдВ,
рддреЛ рдЖрдк рдпрд╣рд╛рдБ рд╣реИрдВ ред
рдЗрд╕рд▓рд┐рдП, рдкрдВрдЬреАрдХрд░рдг рдХрд░рддреЗ рд╕рдордп, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрд░реЗрдВ:
- рдЪрд░рдг 2 рдореЗрдВ рдлреЙрд░реНрдо рднрд░рддреЗ рд╕рдордп, рдЕрдЬрдЧрд░ рднрд╛рд╖рд╛ рдЪреБрдиреЗрдВ
- рд╣рдо myapp.py рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рддреЗ рд╣реИрдВ (рдХреЛрдб рдЖрдзрд┐рдХрд╛рд░рд┐рдХ gunicorn рд╡реЗрдмрд╕рд╛рдЗрдЯ рд╕реЗ рд▓рд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ):
def app(environ, start_response): data = "Hello, World!\n" start_response("200 OK", [ ("Content-Type", "text/plain"), ("Content-Length", str(len(data))) ]) return iter([data])
- рдореЗрд▓ рдХреА рдкреБрд╖реНрдЯрд┐ рдХрд░рдиреЗ рдФрд░ рдХреБрдВрдЬреА рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдо рдХрдВрд╕реЛрд▓ рдореЗрдВ рдЯрд╛рдЗрдк рдХрд░рддреЗ рд╣реИрдВ:
$ pip install newrelic gunicorn $ newrelic-admin generate-config < > $ NEW_RELIC_CONFIG_FILE=newrelic.ini newrelic-admin run-program gunicorn myapp:app
- рд╣рдо рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ 127.0.0.1 : 8000 рдкрд░ рдЬрд╛рддреЗ рд╣реИрдВ рдФрд░ рд╣рдо рдЧреИрд░-рдореВрд▓ рд╢рд┐рд▓рд╛рд▓реЗрдЦ "рд╣реИрд▓реЛ, рд╡рд░реНрд▓реНрдб!" рджреЗрдЦрддреЗ рд╣реИрдВред
- NewRelic рдкрд░ рдирд┐рдпрдВрддреНрд░рдг рдХрдХреНрд╖ рдореЗрдВ рдореЗрд░реЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░реЗрдВ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ
- рджрд┐рди рдХреЗ рджреМрд░рд╛рди рд╣рдореЗрдВ рдИ-рдореЗрд▓ рджреНрд╡рд╛рд░рд╛ рдХреЛрдбрд╕реНрдХреВрд▓ рдХреЗ рд▓рд┐рдП рдХреЛрдб рдкреНрд░рд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИ
- рдХрд╛ рдЖрдирдВрдж
BTW, рдПрдХ рдорд╢реАрди рдкрд░ рдХрдИ рдкрдВрдЬреАрдХрд░рдг, рдЕрд▓рдЧ-рдЕрд▓рдЧ рдкрддреЗ рдкрд░ - рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдЧреАред