рдкреНрд░реЛрдореЗрдерд┐рдпрд╕ рдХреЗ рд╕рд╛рде рд╕рдордп рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рд╡рд┐рдХреГрдд рдирд╣реАрдВ рдХрд┐рдП рдЧрдП рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХреЛ рдХреИрд╕реЗ рдЗрдХрдЯреНрдард╛ рдХрд┐рдпрд╛ рдЬрд╛рдП


рдХрдИ рдиреЗрдЯрд╡рд░реНрдХ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдореЗрдВ рдПрдХ рд╡реЗрдм рд╕рд░реНрд╡рд░ рд╢рд╛рдорд┐рд▓ рд╣реЛрддрд╛ рд╣реИ рдЬреЛ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдордп рдХреЗ рдЯреНрд░реИрдлрд╝рд┐рдХ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рддрд╛ рд╣реИ рдФрд░ рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рд╣реИрдВрдбрд▓рд░ рд╣реИ рдЬреЛ рдкреГрд╖реНрдарднреВрдорд┐ рдореЗрдВ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рд░реВрдк рд╕реЗ рдЪрд▓рддрд╛ рд╣реИред рдЯреНрд░реИрдлрд╝рд┐рдХ рдХреА рд╕реНрдерд┐рддрд┐ рдХреА рдЬрд╛рдБрдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдИ рдмреЗрд╣рддрд░реАрди рдпреБрдХреНрддрд┐рдпрд╛рдВ рд╣реИрдВ, рдФрд░ рд╕рдореБрджрд╛рдп рдкреНрд░реЛрдореЗрдерд┐рдпрд╕ рдЬреИрд╕реЗ рд╡рд┐рдХрд╛рд╕рд╢реАрд▓ рдЯреВрд▓ рдХреЛ рдмрдВрдж рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдореВрд▓реНрдпрд╛рдВрдХрди рдореЗрдВ рдорджрдж рдХрд░рддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рд╣реИрдВрдбрд▓рд░ рдХрднреА-рдХрднреА рдХрдо рдирд╣реАрдВ рд╣реЛрддреЗ рд╣реИрдВ - рдФрд░ рдЗрд╕рд╕реЗ рднреА рдЕрдзрд┐рдХ - рдорд╣рддреНрд╡рдкреВрд░реНрдгред рдЙрдиреНрд╣реЗрдВ рднреА рдзреНрдпрд╛рди рдФрд░ рдореВрд▓реНрдпрд╛рдВрдХрди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЖрдо рдиреБрдХрд╕рд╛рди рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рджреМрд░рд╛рди рдпрд╣ рдХреИрд╕реЗ рдХрд░рдирд╛ рд╣реИ, рдЗрд╕ рдкрд░ рдмрд╣реБрдд рдХрдо рдорд╛рд░реНрдЧрджрд░реНрд╢рди рд╣реИред


рдпрд╣ рд▓реЗрдЦ рдЙрди рдЯреНрд░реИрдкреНрд╕ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдкрд┐рдд рд╣реИ рдЬреЛ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рд╣реИрдВрдбрд▓рд░ рдХрд╛ рдореВрд▓реНрдпрд╛рдВрдХрди рдХрд░рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рд╕рдмрд╕реЗ рдЖрдо рд╣реИрдВ, рдЙрддреНрдкрд╛рджрди рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ рдПрдХ рдШрдЯрдирд╛ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рдЬрд╣рд╛рдВ рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХреЗ рд╕рд╛рде рднреА, рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдирд╛ рдЕрд╕рдВрднрд╡ рдерд╛ рдХрд┐ рд╣реИрдВрдбрд▓рд░ рдХреНрдпрд╛ рдХрд░ рд░рд╣реЗ рдереЗред рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХреЗ рдЙрдкрдпреЛрдЧ рдиреЗ рдлрд╝реЛрдХрд╕ рдХреЛ рдЗрддрдирд╛ рдЕрдзрд┐рдХ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░ рджрд┐рдпрд╛ рд╣реИ рдХрд┐ рдореИрдЯреНрд░рд┐рдХреНрд╕ рд╕реНрд╡рдпрдВ рдЦреБрд▓реЗ рддреМрд░ рдкрд░ рдЭреВрда рдмреЛрд▓рддреЗ рд╣реИрдВ, рд╡реЗ рдХрд╣рддреЗ рд╣реИрдВ, рдЖрдкрдХреЗ рд╣реИрдВрдбрд▓рд░ рдирд░рдХ рдореЗрдВ рд╣реИрдВред


рд╣рдо рджреЗрдЦреЗрдВрдЧреЗ рдХрд┐ рд╕рдЯреАрдХ рдЕрдиреБрдорд╛рди рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕ рддрд░рд╣ рд╕реЗ рдореЗрдЯреНрд░рд┐рдХреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдирд┐рд╖реНрдХрд░реНрд╖ рдореЗрдВ рд╣рдо рдУрдкрди рд╕реЛрд░реНрд╕ рдкреНрд░реЛрдореЗрдерд┐рдпрд╕-рдХреНрд▓рд╛рдЗрдВрдЯ-рдЯреНрд░реЗрд╕рд░ рдХреЗ рд╕рдВрджрд░реНрдн рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рджрд┐рдЦрд╛рдПрдВрдЧреЗ, рдЬрд┐рд╕реЗ рдЖрдк рдЕрдкрдиреЗ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред


рдШрдЯрдирд╛


рдорд╢реАрди-рдЧрди рдЧрддрд┐ рд╕реЗ рдЕрд▓рд░реНрдЯ рдЖрдП: HTTP рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рддреЗрдЬреА рд╕реЗ рд╡реГрджреНрдзрд┐ рд╣реБрдИ, рдФрд░ рдирд┐рдпрдВрддреНрд░рдг рдкреИрдирд▓реЛрдВ рдиреЗ рдкреБрд╖реНрдЯрд┐ рдХреА рдХрд┐ рдЕрдиреБрд░реЛрдз рдХрддрд╛рд░реЗрдВ рдмрдврд╝ рд░рд╣реА рдереАрдВ, рдФрд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рд╕рдордп рдЪрд▓ рд░рд╣рд╛ рдерд╛ред рд▓рдЧрднрдЧ 2 рдорд┐рдирдЯ рдмрд╛рдж, рдХрддрд╛рд░реЗрдВ рд╕рд╛рдл рд╣реЛ рдЧрдИрдВ, рдФрд░ рд╕рдм рдХреБрдЫ рд╕рд╛рдорд╛рдиреНрдп рд╣реЛ рдЧрдпрд╛ред


рдХрд░реАрдм рд╕реЗ рдирд┐рд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдкрд░, рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рдХрд┐ рд╣рдорд╛рд░реЗ рдПрдкреАрдЖрдИ рд╕рд░реНрд╡рд░ рдЦрдбрд╝реЗ рдереЗ, рдЬреЛ рдПрдХ рдбреАрдмреА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░ рд░рд╣рд╛ рдерд╛, рдЬрд┐рд╕рдХреЗ рдХрд╛рд░рдг рдпрд╣ рд░реБрдХ рдЧрдпрд╛ рдФрд░ рдЕрдЪрд╛рдирдХ рд╕рднреА рдЧрддрд┐рд╡рд┐рдзрд┐ рдЙрда рдЧрдИред рдФрд░ рдЬрдм рдЖрдк рд╕рдордЭрддреЗ рд╣реИрдВ рдХрд┐ рд╕рдмрд╕реЗ рднрд╛рд░реА рд▓реЛрдб рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдкреНрд░реЛрд╕реЗрд╕рд░ рдХреЗ рд╕реНрддрд░ рдкрд░ рдЕрдзрд┐рдХ рдмрд╛рд░ рдЧрд┐рд░рддрд╛ рд╣реИ, рддреЛ рд╡реЗ рдореБрдЦреНрдп рд╕рдВрджрд┐рдЧреНрдз рдмрди рдЧрдП рд╣реИрдВред рддрд╛рд░реНрдХрд┐рдХ рд╕рд╡рд╛рд▓ рдерд╛: рд╡реЗ рд╡рд╣рд╛рдБ рдХреНрдпрд╛ рдХрд░ рд░рд╣реЗ рд╣реИрдВ?


рдкреНрд░реЛрдореЗрдерд┐рдпрд╕ рдореИрдЯреНрд░рд┐рдХ рджрд┐рдЦрд╛рддрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдХрд┐рддрдирд╛ рд╕рдордп рд▓рдЧрддрд╛ рд╣реИ, рдпрд╣рд╛рдБ рдпрд╣ рд╣реИ:


# HELP job_worked_seconds_total Sum of the time spent processing each job class # TYPE job_worked_seconds_total counter job_worked_seconds_total{job} 

рдкреНрд░рддреНрдпреЗрдХ рдХрд╛рд░реНрдп рдХреЗ рдХреБрд▓ рдирд┐рд╖реНрдкрд╛рджрди рд╕рдордп рдФрд░ рдЖрд╡реГрддреНрддрд┐ рдЬрд┐рд╕рдХреЗ рд╕рд╛рде рдореАрдЯреНрд░рд┐рдХ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рд╣реЛрддрд╛ рд╣реИ, рдкрд░ рдирдЬрд╝рд░ рд░рдЦрдиреЗ рд╕реЗ, рд╣рдореЗрдВ рдкрддрд╛ рдЪрд▓реЗрдЧрд╛ рдХрд┐ рдХрд╛рдо рдХрд╛ рд╕рдордп рдХрд┐рддрдирд╛ рдЦрд░реНрдЪ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдпрджрд┐ 15 рд╕реЗрдХрдВрдб рдХреА рдЕрд╡рдзрд┐ рдХреЗ рд▓рд┐рдПред рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ 15 рдХреА рд╡реГрджреНрдзрд┐ рд╣реБрдИ, рдЗрд╕рдХрд╛ рдЕрд░реНрде рд╣реИ 1 рд╡реНрдпрд╕реНрдд рд╣реИрдВрдбрд▓рд░ (рдкреНрд░рддреНрдпреЗрдХ рдкрд┐рдЫрд▓реЗ рд╕реЗрдХрдВрдб рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реЗрдХрдВрдб), рдЬрдмрдХрд┐ 30 рдХреА рд╡реГрджреНрдзрд┐ рдХрд╛ рдЕрд░реНрде рд╣реИ 2 рдЧреЗрдВрджрдмрд╛рдЬрд╝, рдЖрджрд┐ред


рдШрдЯрдирд╛ рдХреЗ рджреМрд░рд╛рди рдПрдХ рдХрд╛рд░реНрдп рд╢реЗрдбреНрдпреВрд▓ рджрд┐рдЦрд╛рдПрдЧрд╛ рдХрд┐ рд╣рдо рдХреНрдпрд╛ рд╕рд╛рдордирд╛ рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдкрд░рд┐рдгрд╛рдо рдирд┐рд░рд╛рд╢рд╛рдЬрдирдХ рд╣реИрдВ; рдШрдЯрдирд╛ рдХрд╛ рд╕рдордп (16: 02тАУ16: 04) рдЪрд┐рдВрддрд╛рдЬрдирдХ рд▓рд╛рд▓ рд░реЗрдЦрд╛ рджреНрд╡рд╛рд░рд╛ рдЪрд┐рд╣реНрдирд┐рдд рд╣реИ:



рдШрдЯрдирд╛ рдХреЗ рджреМрд░рд╛рди рд╣реИрдВрдбрд▓рд░ рдЧрддрд┐рд╡рд┐рдзрд┐: рдПрдХ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рдЕрдВрддрд░ рджрд┐рдЦрд╛рдИ рджреЗрддрд╛ рд╣реИред


рдЗрд╕ рджреБрдГрд╕реНрд╡рдкреНрди рдХреЗ рдмрд╛рдж рдбрд┐рдмреЗрдЯ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд╡реНрдпрдХреНрддрд┐ рдХреЗ рд░реВрдк рдореЗрдВ, рдореБрдЭреЗ рдпрд╣ рджреЗрдЦрдХрд░ рджреБрдЦ рд╣реБрдЖ рдХрд┐ рдШрдЯрдирд╛ рдХреЗ рджреМрд░рд╛рди рдЧрддрд┐рд╡рд┐рдзрд┐ рд╡рдХреНрд░ рдПрдХрджрдо рдиреАрдЪреЗ рдерд╛ред рдпрд╣ рд╡реЗрдм рд╣реБрдХ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХрд╛ рд╕рдордп рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ 20 рд╕рдорд░реНрдкрд┐рдд рд╣реИрдВрдбрд▓рд░ рд╣реИрдВред рд▓реЙрдЧ рд╕реЗ, рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ рд╡реЗ рд╕рднреА рд╡реНрдпрд╡рд╕рд╛рдп рдореЗрдВ рдереЗ, рдФрд░ рдореБрдЭреЗ рдЙрдореНрдореАрдж рдереА рдХрд┐ рд╡рдХреНрд░ рд▓рдЧрднрдЧ 20 рд╕реЗрдХрдВрдб рдкрд░ рд╣реЛрдЧрд╛, рдФрд░ рдореИрдВрдиреЗ рд▓рдЧрднрдЧ рд╕реАрдзреА рд░реЗрдЦрд╛ рджреЗрдЦреАред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, 16:05 рдкрд░ рдЗрд╕ рдмрдбрд╝реА рдиреАрд▓реА рдЪреЛрдЯреА рдХреЛ рджреЗрдЦреЗрдВ? рд╢реЗрдбреНрдпреВрд▓ рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП, 20 рд╕рд┐рдВрдЧрд▓-рдереНрд░реЗрдбреЗрдб рдкреНрд░реЛрд╕реЗрд╕рд░ рдиреЗ 45 рд╕реЗрдХрдВрдб рдЦрд░реНрдЪ рдХрд┐рдПред рдЧрддрд┐рд╡рд┐рдзрд┐ рдХреЗ рд╣рд░ рджреВрд╕рд░реЗ рдХреЗ рд▓рд┐рдП, рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рдпрд╣ рд╕рдВрднрд╡ рд╣реИ?!


рдХрд╣рд╛рдВ рдФрд░ рдХреНрдпрд╛ рдЧрд▓рдд рд╣реБрдЖ?


рдШрдЯрдирд╛ рдХреА рдЕрдиреБрд╕реВрдЪреА рдЭреВрда рдмреЛрд▓ рд░рд╣реА рд╣реИ: рдпрд╣ рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓реА рдЧрддрд┐рд╡рд┐рдзрд┐ рдХреЛ рдЫрд┐рдкрд╛рддреА рд╣реИ рдФрд░ рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рд╕реБрдкрд░рдлреНрд▓рд╕ рдХреЛ рджрд░реНрд╢рд╛рддреА рд╣реИ - рдЬрд╣рд╛рдВ рдкрд░ рдорд╛рдкрдирд╛ рд╣реИред рдРрд╕рд╛ рдХреНрдпреЛрдВ рд╣реЛрддрд╛ рд╣реИ, рдпрд╣ рдЬрд╛рдирдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдореАрдЯреНрд░рд┐рдХ рдЯреНрд░реИрдХрд┐рдВрдЧ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрдирд╛ рд╣реЛрдЧрд╛ рдФрд░ рдпрд╣ рдкреНрд░реЛрдореЗрдерд┐рдпрд╕ рдПрдХрддреНрд░рд┐рдд рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХреЗ рд╕рд╛рде рдХреИрд╕реЗ рдЗрдВрдЯрд░реИрдХреНрдЯ рдХрд░рддрд╛ рд╣реИред


рд╣реИрдВрдбрд▓рд░ рдореЗрдЯреНрд░рд┐рдХреНрд╕ рдХреИрд╕реЗ рдЗрдХрдЯреНрдард╛ рдХрд░рддреЗ рд╣реИрдВ, рдЗрд╕рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рдХрд░рдХреЗ, рдЖрдк рдПрдХ рдЕрдиреБрдорд╛рдирд┐рдд рд╡рд░реНрдХрдлрд╝реНрд▓реЛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдпреЛрдЬрдирд╛ рдХреЛ рд╕реНрдХреЗрдЪ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ (рдиреАрдЪреЗ рджреЗрдЦреЗрдВ)ред рдиреЛрдЯ: рд╣реИрдВрдбрд▓рд░ рдХреЗрд╡рд▓ рдПрдХ рдХрд╛рд░реНрдп рдкреВрд░рд╛ рд╣реЛрдиреЗ рдкрд░ рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рддреЗ рд╣реИрдВред


 class Worker JobWorkedSecondsTotal = Prometheus::Client::Counter.new(...) def work job = acquire_job start = Time.monotonic_now job.run ensure # run after our main method block duration = Time.monotonic_now - start JobWorkedSecondsTotal.increment(by: duration, labels: { job: job.class }) end end 

рдкреНрд░реЛрдореЗрдерд┐рдпрд╕ (рдореИрдЯреНрд░рд┐рдХреНрд╕ рдирд┐рдХрд╛рд▓рдиреЗ рдХреЗ рдЕрдкрдиреЗ рджрд░реНрд╢рди рдХреЗ рд╕рд╛рде) рд╣рд░ 15 рд╕реЗрдХрдВрдб рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рд╣реИрдВрдбрд▓рд░ рдХреЛ рдПрдХ рдЬреАрдИрдЯреА рдЕрдиреБрд░реЛрдз рднреЗрдЬрддрд╛ рд╣реИ, рдЕрдиреБрд░реЛрдз рдХреЗ рд╕рдордп рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХреЗ рдореВрд▓реНрдпреЛрдВ рдХреЛ рд░рд┐рдХреЙрд░реНрдб рдХрд░рддрд╛ рд╣реИред рд╣реИрдВрдбрд▓рд░ рд▓рдЧрд╛рддрд╛рд░ рдкреВрд░реНрдг рдХрд┐рдП рдЧрдП рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рд╕рдордп рдХреЗ рд╕рд╛рде рд╣рдо рдореВрд▓реНрдпреЛрдВ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдХреА рдЧрддрд┐рд╢реАрд▓рддрд╛ рдХреЛ рдЧреНрд░рд╛рдлрд┐рдХ рд░реВрдк рд╕реЗ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред


рдЕрдВрдбрд░- рдФрд░ рдкреБрдирд░реНрдореВрд▓реНрдпрд╛рдВрдХрди рдХреЗ рд╕рд╛рде рд╕рдорд╕реНрдпрд╛ рддрдм рджрд┐рдЦрд╛рдИ рджреЗрдиреЗ рд▓рдЧрддреА рд╣реИ рдЬрдм рднреА рдХрд┐рд╕реА рдХрд╛рд░реНрдп рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рдореЗрдВ рд▓рдЧрдиреЗ рд╡рд╛рд▓рд╛ рд╕рдордп рдкреНрд░рддреНрдпреЗрдХ 15 рд╕реЗрдХрдВрдб рдореЗрдВ рдЖрдиреЗ рд╡рд╛рд▓реЗ рдЕрдиреБрд░реЛрдз рдХреЗ рд▓рд┐рдП рдкреНрд░рддреАрдХреНрд╖рд╛ рд╕рдордп рд╕реЗ рдЕрдзрд┐рдХ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рдХрд╛рд░реНрдп рдЕрдиреБрд░реЛрдз рдХреЗ 5 рд╕реЗрдХрдВрдб рдкрд╣рд▓реЗ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ рдФрд░ 1 рд╕реЗрдХрдВрдб рдХреЗ рдмрд╛рдж рд╕рдорд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИред рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдФрд░ рдЖрдо рддреМрд░ рдкрд░, рдпрд╣ 6 рд╕реЗрдХрдВрдб рддрдХ рд░рд╣рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рд╕рдордп рдХреЗрд╡рд▓ рдЕрдиреБрд░реЛрдз рдХреЗ рдмрд╛рдж рдХрд┐рдП рдЧрдП рд╕рдордп рдХреА рд▓рд╛рдЧрдд рдХрд╛ рдЖрдХрд▓рди рдХрд░рддреЗ рд╕рдордп рджрд┐рдЦрд╛рдИ рджреЗрддрд╛ рд╣реИ, рдЬрдмрдХрд┐ рдЗрди 6 рд╕реЗрдХрдВрдб рдореЗрдВ рд╕реЗ 5 рдЕрдиреБрд░реЛрдз рд╕реЗ рдкрд╣рд▓реЗ рдЦрд░реНрдЪ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред


рдпрджрд┐ рдХрд╛рд░реНрдп рд░рд┐рдкреЛрд░реНрдЯрд┐рдВрдЧ рдЕрд╡рдзрд┐ (15 рд╕реЗрдХрдВрдб) рд╕реЗ рдЕрдзрд┐рдХ рд╕рдордп рд▓реЗрддреЗ рд╣реИрдВ, рддреЛ рд╕рдВрдХреЗрддрдХ рдФрд░ рднреА рдИрд╢реНрд╡рд░реАрдп рдЭреВрда рдмреЛрд▓рддреЗ рд╣реИрдВред 1 рдорд┐рдирдЯ рдХреЗ рд▓рд┐рдП рдХрд╛рд░реНрдп рдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рджреМрд░рд╛рди, рдкреНрд░реЛрдореЗрдерд┐рдпрд╕ рдХреЗ рдкрд╛рд╕ рдкреНрд░реЛрд╕реЗрд╕рд░ рдХреЗ рд▓рд┐рдП 4 рдЕрдиреБрд░реЛрдз рднреЗрдЬрдиреЗ рдХрд╛ рд╕рдордп рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рдореАрдЯреНрд░рд┐рдХ рдХреЗрд╡рд▓ рдЪреМрдереЗ рдХреЗ рдмрд╛рдж рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред


рд╡рд░реНрдХрд┐рдВрдЧ рдПрдХреНрдЯрд┐рд╡рд┐рдЯреА рдХреА рдЯрд╛рдЗрдорд▓рд╛рдЗрди рддреИрдпрд╛рд░ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдо рджреЗрдЦреЗрдВрдЧреЗ рдХрд┐ рдЬрд┐рд╕ рдХреНрд╖рдг рдореИрдЯреНрд░рд┐рдХ рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рд╡рд╣ рдкреНрд░реЛрдореЗрдерд┐рдпрд╕ рдХреНрдпрд╛ рджреЗрдЦрддрд╛ рд╣реИред рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рдЖрд░реЗрдЦ рдореЗрдВ, рд╣рдо рджреЛ рд╕рдВрдЪрд╛рд▓рдХреЛрдВ рдХреЗ рд╕рдордп рдХреЛ рдХрдИ рдЦрдВрдбреЛрдВ рдореЗрдВ рддреЛрдбрд╝рддреЗ рд╣реИрдВ рдЬреЛ рд╡рд┐рднрд┐рдиреНрди рдЕрд╡рдзрд┐ рдХреЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддреЗ рд╣реИрдВред рд▓рд╛рд▓ (15 рд╕реЗрдХрдВрдб) рдФрд░ рдиреАрд▓реЗ (30 рд╕реЗрдХрдВрдб) рдЯреИрдЧ 2 рдкреНрд░реЛрдореЗрдерд┐рдпрд╕ рдбреЗрдЯрд╛ рдирдореВрдиреЛрдВ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддреЗ рд╣реИрдВ; рдореВрд▓реНрдпрд╛рдВрдХрди рдХреЗ рд▓рд┐рдП рдбреЗрдЯрд╛ рд╕реНрд░реЛрдд рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рд░реНрдп рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдХреНрд░рдорд╢рдГ рд░рдВрдЧ рдореЗрдВ рд╣рд╛рдЗрд▓рд╛рдЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред



рднрд▓реЗ рд╣реА рд╣реИрдВрдбрд▓рд░ рдкреВрд░реЗ рднрд╛рд░ рдкрд░ рдХреНрдпрд╛ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рд╡реЗ рд╣рд░ 15-рд╕реЗрдХрдВрдб рдХреЗ рдЕрдВрддрд░рд╛рд▓ рдкрд░ 30 рд╕реЗрдХрдВрдб рдХрд╛ рдХрд╛рдо рдХрд░реЗрдВрдЧреЗред рдЪреВрдВрдХрд┐ рдкреНрд░реЛрдореЗрдерд┐рдпрд╕ рдиреЗ рдХрд╛рдо рдкреВрд░рд╛ рд╣реЛрдиреЗ рддрдХ рдЗрд╕реЗ рдирд╣реАрдВ рджреЗрдЦрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореЗрдЯреНрд░рд┐рдХреНрд╕ рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП, 14 рд╕реЗрдХрдВрдб рдХрд╛ рдХрд╛рдо рдкрд╣рд▓реА рдмрд╛рд░ рдХреЗ рдЕрдВрддрд░рд╛рд▓ рдореЗрдВ рдФрд░ рджреВрд╕рд░реЗ рдореЗрдВ 42 рд╕реЗрдХрдВрдб рдореЗрдВ рдкреВрд░рд╛ рд╣реБрдЖред рдпрджрд┐ рдкреНрд░рддреНрдпреЗрдХ рд╣реИрдВрдбрд▓рд░ рдПрдХ рдмрдбрд╝рд╛ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рддреЛ рдХреБрдЫ рдШрдВрдЯреЛрдВ рдХреЗ рдмрд╛рдж рднреА, рдмрд╣реБрдд рдЕрдВрдд рддрдХ, рд╣рдо рд░рд┐рдкреЛрд░реНрдЯ рдирд╣реАрдВ рджреЗрдЦреЗрдВрдЧреЗ рдХрд┐ рдХрд╛рдо рдЪрд▓ рд░рд╣рд╛ рд╣реИред


рдЗрд╕ рдЖрд╢рдп рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рдЙрди рджрд╕ рд╣реИрдВрдбрд▓рд░ рдХреЗ рд╕рд╛рде рдПрдХ рдкреНрд░рдпреЛрдЧ рдХрд┐рдпрд╛, рдЬреЛ рдРрд╕реЗ рдХрд╛рдореЛрдВ рдореЗрдВ рд▓рдЧреЗ рд╣реБрдП рд╣реИрдВ рдЬрд┐рдирдХреА рд▓рдВрдмрд╛рдИ рдЕрд▓рдЧ рд╣реИ рдФрд░ рдЕрд░реНрдз-рд╕рд╛рдорд╛рдиреНрдп 0.1 рд╕реЗрдХрдВрдб рдФрд░ рдереЛрдбрд╝рд╛ рдЕрдзрд┐рдХ рдореВрд▓реНрдп ( рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рджреЗрдЦреЗрдВ) рдХреЗ рдмреАрдЪ рд╡рд┐рддрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ ред рдиреАрдЪреЗ 3 рд░реЗрдЦрд╛рдВрдХрди рдХрд╛рд░реНрдп рдЧрддрд┐рд╡рд┐рдзрд┐ рдХреЛ рджрд░реНрд╢рд╛рддреЗ рд╣реИрдВ; рд▓рдВрдмрд╛рдИ рдореЗрдВ рдмрдврд╝рддреЗ рдХреНрд░рдо рдореЗрдВ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред



1 рд╕реЗрдХрдВрдб рддрдХ рдЪрд▓рдиреЗ рд╡рд╛рд▓реЗ рдХрд╛рд░реНрдпред


рдкрд╣рд▓рд╛ рдЧреНрд░рд╛рдлрд╝ рджрд┐рдЦрд╛рддрд╛ рд╣реИ рдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рд╣реИрдВрдбрд▓рд░ рдкреНрд░рддреНрдпреЗрдХ рд╕реЗрдХрдВрдб рдореЗрдВ рд▓рдЧрднрдЧ 1 рд╕реЗрдХрдВрдб рдХрд╛ рдХрд╛рдо рдкреВрд░рд╛ рдХрд░рддрд╛ рд╣реИ - рдпрд╣ рд╕рдорддрд▓ рд▓рд╛рдЗрдиреЛрдВ рдкрд░ рджрд┐рдЦрд╛рдИ рджреЗрддрд╛ рд╣реИ, рдФрд░ рдХрд╛рдо рдХреА рдХреБрд▓ рдорд╛рддреНрд░рд╛ рд╣рдорд╛рд░реА рдХреНрд╖рдорддрд╛рдУрдВ рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИ (10 рд╣реИрдВрдбрд▓рд░ рдкреНрд░рддрд┐ рд╕реЗрдХрдВрдб рдХрд╛рдо рдХрд╛ рдПрдХ рд╕реЗрдХрдВрдб рджреЗрддреЗ рд╣реИрдВ)ред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдпрд╣, рдХрд╛рд░реНрдп рдХреА рд▓рдВрдмрд╛рдИ рдХреА рдкрд░рд╡рд╛рд╣ рдХрд┐рдП рдмрд┐рдирд╛, рд╣рдо рдЙрдореНрдореАрдж рдХрд░ рд░рд╣реЗ рд╣реИрдВ: рдЫреЛрдЯреЗ рдФрд░ рд▓рдВрдмреЗ рдХрд╛рд░реНрдпреЛрдВ рдкрд░ рдмрд╕ рдЗрддрдирд╛, рдирд┐рд░рдВрддрд░ рд▓реЛрдб рд╡рд╛рд▓реЗ рдкреНрд░реЛрд╕реЗрд╕рд░ рдХреЛ рдмрд╛рд╣рд░ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред



15 рд╕реЗрдХрдВрдб рддрдХ рдЪрд▓рдиреЗ рд╡рд╛рд▓реЗ рдХрд╛рд░реНрдпред


рдХрд╛рд░реНрдпреЛрдВ рдХреА рдЕрд╡рдзрд┐ рдмрдврд╝рддреА рд╣реИ, рдФрд░ рд╢реЗрдбреНрдпреВрд▓ рдореЗрдВ рдЧрдбрд╝рдмрдбрд╝реА рджрд┐рдЦрд╛рдИ рджреЗрддреА рд╣реИ: рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЕрднреА рднреА 10 рдкреНрд░реЛрд╕реЗрд╕рд░ рд╣реИрдВ, рдЙрдирдореЗрдВ рд╕реЗ рд╕рднреА рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдХрдмреНрдЬреЗ рдореЗрдВ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдХрд╛рдо рдХреА рдХреБрд▓ рд░рд╛рд╢рд┐ - рдпрд╛ рддреЛ рдЙрдкрдпреЛрдЧреА рдХреНрд╖рдорддрд╛ рд╕реАрдорд╛ (10 рд╕реЗрдХрдВрдб) рд╕реЗ рдХрдо рдпрд╛ рдЕрдзрд┐рдХ рд╣реИред



30 рд╕реЗрдХрдВрдб рддрдХ рдЪрд▓рдиреЗ рд╡рд╛рд▓реЗ рдХрд╛рд░реНрдпред


30 рд╕реЗрдХрдВрдб рддрдХ рдЪрд▓рдиреЗ рд╡рд╛рд▓реЗ рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдореВрд▓реНрдпрд╛рдВрдХрди рдмрд╕ рд╣рд╛рд╕реНрдпрд╛рд╕реНрдкрдж рд╣реИред рдПрдХ рд╕рдордп-рд╕реАрдорд╛ рдореАрдЯреНрд░рд┐рдХ рд╕рдмрд╕реЗ рд▓рдВрдмреЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рд╢реВрдиреНрдп рдЧрддрд┐рд╡рд┐рдзрд┐ рджрд┐рдЦрд╛рддреА рд╣реИ рдФрд░, рдЬрдм рдХрд╛рд░реНрдп рдкреВрд░рд╛ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рддрднреА рд╣рдореЗрдВ рдЧрддрд┐рд╡рд┐рдзрд┐ рдЪреЛрдЯрд┐рдпрд╛рдВ рдорд┐рд▓рддреА рд╣реИрдВред


рд╡рд┐рд╢реНрд╡рд╛рд╕ рдмрд╣рд╛рд▓ рдХрд░реЗрдВ


рдпрд╣ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рдирд╣реАрдВ рдерд╛, рдЗрд╕рд▓рд┐рдП рдЗрди рджреАрд░реНрдШрдХрд╛рд▓рд┐рдХ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рдФрд░ рдмрд╣реБрдд рдмрдбрд╝реА рд╕рдорд╕реНрдпрд╛ рд╣реИ, рдЬреЛ рд╣рдорд╛рд░реЗ рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХреЛ рдЦрд░рд╛рдм рдХрд░рддреА рд╣реИред рдЬрдм рднреА рдХреЛрдИ рджреАрд░реНрдШрдХрд╛рд▓рд┐рдХ рдХрд╛рд░реНрдп рдкреВрд░рд╛ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ - рдХрд╣рддреЗ рд╣реИрдВ, рдЕрдЧрд░ рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдПрдХ рдлрд▓реА рдХреЛ рдкреВрд▓ рд╕реЗ рдмрд╛рд╣рд░ рдлреЗрдВрдХ рджреЗрддреЗ рд╣реИрдВ, рдпрд╛ рдЬрдм рдПрдХ рдиреЛрдб рдорд░ рдЬрд╛рддрд╛ рд╣реИ - рддреЛ рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХрд╛ рдХреНрдпрд╛ рд╣реЛрддрд╛ рд╣реИ? рдпрд╣ рдХрд╛рд░реНрдп рдкреВрд░рд╛ рд╣реЛрдиреЗ рдкрд░ рддреБрд░рдВрдд рдЙрдиреНрд╣реЗрдВ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд╛рдпрдХ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рдмрддрд╛рддреЗ рд╣реИрдВ рдХрд┐ рдЙрдиреНрд╣реЛрдВрдиреЗ рдХрд╛рдо рдмрд┐рд▓реНрдХреБрд▓ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдерд╛ ред


рдореЗрдЯреНрд░рд┐рдХреНрд╕ рдЭреВрда рдирд╣реАрдВ рдмреЛрд▓рдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрд╣ рд▓реИрдкрдЯреЙрдк рдЕрд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рд░реВрдк рд╕реЗ рдЪрдордХрддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдЕрд╕реНрддрд┐рддреНрд╡рдЧрдд рдЖрддрдВрдХ рдФрд░ рдирд┐рдЧрд░рд╛рдиреА рдЙрдкрдХрд░рдг рдкреИрджрд╛ рд╣реЛрддреЗ рд╣реИрдВ, рдЬреЛ рджреБрдирд┐рдпрд╛ рдХреА рддрд╕реНрд╡реАрд░ рдХреЛ рд╡рд┐рдХреГрдд рдХрд░рддреЗ рд╣реИрдВ, рдПрдХ рдЬрд╛рд▓ рд╣реИрдВ рдФрд░ рдХрд╛рдо рдХреЗ рд▓рд┐рдП рдЕрдиреБрдкрдпреБрдХреНрдд рд╣реИрдВред


рд╕реМрднрд╛рдЧреНрдп рд╕реЗ, рдорд╛рдорд▓рд╛ рддрдп рдХрд░рдиреЗ рдпреЛрдЧреНрдп рд╣реИред рдбреЗрдЯрд╛ рд╡рд┐рд░реВрдкрдг рддрдм рд╣реЛрддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдкреНрд░реЛрдореЗрдерд┐рдпрд╕ рдорд╛рдк рд▓реЗрддрд╛ рд╣реИ рдЬрдм рдкреНрд░реЛрд╕реЗрд╕рд░ рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рддреЗ рд╣реИрдВред рдЕрдЧрд░ рд╣рдо рд╣реИрдВрдбрд▓рд░ рдХреЛ рдкреНрд░реЛрдореЗрдерд┐рдпрд╕ рджреНрд╡рд╛рд░рд╛ рдЕрдиреБрд░реЛрдз рднреЗрдЬрдиреЗ рдкрд░ рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рджреЗрдЦреЗрдВрдЧреЗ рдХрд┐ рдкреНрд░реЛрдореЗрдерд┐рдпрд╕ рдЕрдм рд╡рд┐рдЪрд┐рддреНрд░ рдирд╣реАрдВ рд╣реИ рдФрд░ рд╡рд░реНрддрдорд╛рди рдЧрддрд┐рд╡рд┐рдзрд┐ рджрд┐рдЦрд╛рддрд╛ рд╣реИред


рдкреЗрд╢ рд╣реИ ... рдЯреНрд░реЗрд╕рд░


рд╡рд┐рдХреГрдд рдореЗрдЯреНрд░рд┐рдХреНрд╕ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рдПрдХ рд╕рдорд╛рдзрд╛рди рд╣реИ Tracer , рдПрдХ рдЕрдореВрд░реНрдд рд░реВрдк рд╕реЗ рдбрд┐рдЬрд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдЬреЛ рдкреНрд░реЛрдореЗрдерд┐рдпрд╕ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдореЗрдЯреНрд░рд┐рдХреНрд╕ рдХреЛ рд▓рдЧрд╛рддрд╛рд░ рдЕрдкрдбреЗрдЯ рдХрд░рдХреЗ рд▓рдВрдмреЗ рд╕рдордп рддрдХ рдЪрд▓рдиреЗ рд╡рд╛рд▓реЗ рдХрд╛рд░реНрдпреЛрдВ рдкрд░ рдЧрддрд┐рд╡рд┐рдзрд┐ рдХрд╛ рдореВрд▓реНрдпрд╛рдВрдХрди рдХрд░рддрд╛ рд╣реИред


 class Tracer def trace(metric, labels, &block) ... end def collect(traces = @traces) ... end end 

рдЯреНрд░реЗрд╕рд░ рдПрдХ рдЕрдиреБрд░реЗрдЦрдг рд╡рд┐рдзрд┐ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдкреНрд░реЛрдореЗрдерд┐рдпрд╕ рдореИрдЯреНрд░рд┐рдХреНрд╕ рдФрд░ рдЯреНрд░реИрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╛рд░реНрдп рдХрд░рддрд╛ рд╣реИред trace рдХрдорд╛рдВрдб рджрд┐рдП рдЧрдП рдмреНрд▓реЙрдХ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░реЗрдЧрд╛ (рдЕрдирд╛рдо рд░реВрдмреА рдлрд╝рдВрдХреНрд╢рдВрд╕) рдФрд░ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдЧрд╛ рдХрд┐ рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рджреМрд░рд╛рди tracer.collect рдЕрдиреБрд░реЛрдз, рд╕рдВрдмрдВрдзрд┐рдд рдореЗрдЯреНрд░рд┐рдХреНрд╕ рдХреЛ рдЕрджреНрдпрддрди рдХрд░реЗрдЧрд╛ рдЪрд╛рд╣реЗ рд╡рд╣ рдЕрдВрддрд┐рдо рдЕрдиреБрд░реЛрдз collect рдХрд░рдиреЗ рдХреЗ collect рдХрд┐рддрдирд╛ рд╕рдордп рдмреАрдд рдЪреБрдХрд╛ рд╣реЛред


рд╣рдореЗрдВ рдХрд╛рд░реНрдп рдХреА рдЕрд╡рдзрд┐ рдФрд░ рдкреНрд░реЛрдорд┐рдерд┐рдпрд╕ рдореЗрдЯреНрд░рд┐рдХреНрд╕ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд╕рдорд╛рдкрди рдмрд┐рдВрджреБ рдХреЛ рдЯреНрд░реИрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП tracer рдХреЛ рд╣реИрдВрдбрд▓рд░ рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рд╣рдо рд╣реИрдВрдбрд▓рд░ рд╕реЗ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ, рдПрдХ рдирдП рдЯреНрд░реЗрд╕рд░ рдХреЛ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЙрд╕реЗ acquire_job.run рдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рдХреЛ рдЯреНрд░реИрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП acquire_job.run ред


 class Worker def initialize @tracer = Tracer.new(self) end def work @tracer.trace(JobWorkedSecondsTotal, labels) { acquire_job.run } end # Tell the tracer to flush (incremental) trace progress to metrics def collect @tracer.collect end end 

рдЗрд╕ рд╕реНрддрд░ рдкрд░, рдЯреНрд░реИрд╕рд░ рдХреЗрд╡рд▓ рдореЗрдЯреНрд░рд┐рдХреНрд╕ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд┐рдП рдЧрдП рдХрд╛рд░реНрдп рдкрд░ рдЦрд░реНрдЪ рдХрд┐рдП рдЧрдП рд╕реЗрдХрдВрдб рдореЗрдВ рдЕрдкрдбреЗрдЯ рдХрд░реЗрдЧрд╛ - рдЬреИрд╕рд╛ рдХрд┐ рд╣рдордиреЗ рдореЗрдЯреНрд░рд┐рдХреНрд╕ рдХреЗ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ рдХрд┐рдпрд╛ рдерд╛ред рдкреНрд░реЛрдореЗрдерд┐рдпрд╕ рдХреЗ рдЕрдиреБрд░реЛрдз рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рд╣рдореЗрдВ рдЕрдкрдиреЗ рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЯреНрд░реЗрд╕рд░ рд╕реЗ рдкреВрдЫрдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрд╣ рдорд┐рдбрд▓рд╡реЗрдпрд░ рд░реИрдХ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдХреЗ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред


 # config.ru # https://rack.imtqy.com/ class WorkerCollector def initialize(@app, workers: @workers); end def call(env) workers.each(&:collect) @app.call(env) # call Prometheus::Exporter end end # Rack middleware DSL workers = start_workers # Array[Worker] # Run the collector before serving metrics use WorkerCollector, workers: workers use Prometheus::Middleware::Exporter 

рд░реИрдХ рд░реВрдмреА рд╡реЗрдм рд╕рд░реНрд╡рд░ рдХреЗ рд▓рд┐рдП рдПрдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╣реИ рдЬреЛ рдЖрдкрдХреЛ рдПрдХ рд╣реА рд╕рдорд╛рдкрди рдмрд┐рдВрджреБ рдореЗрдВ рдХрдИ рд░реИрдХ рд╣реИрдВрдбрд▓рд░ рдХреЛ рд╕рдВрдпреЛрдЬрд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред config.ru рдХрдорд╛рдВрдб рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддреА рд╣реИ рдХрд┐ рд░реИрдХ рдЕрдиреБрдкреНрд░рдпреЛрдЧ - рдЬрдм рднреА рдпрд╣ рдЕрдиреБрд░реЛрдз рдкреНрд░рд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИ - collect рдХрдорд╛рдВрдб рдХреЛ рдкрд╣рд▓реЗ рд╣реИрдВрдбрд▓рд░ рдХреЛ рднреЗрдЬрддрд╛ рд╣реИ, рдФрд░ рдЙрд╕рдХреЗ рдмрд╛рдж рд╣реА рдкреНрд░реЛрдореЗрдерд┐рдпрд╕ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛ рд╕рдВрдЧреНрд░рд╣ рдкрд░рд┐рдгрд╛рдо config.ru рдХреЗ collect рдХрд╣рддрд╛ рд╣реИред


рд╣рдорд╛рд░реЗ рдЪрд╛рд░реНрдЯ рдХреЗ рдЕрдиреБрд╕рд╛рд░, рд╣рдо рдореЗрдЯреНрд░рд┐рдХреНрд╕ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рддреЗ рд╣реИрдВ рдЬрдм рднреА рдХрд╛рд░реНрдп рдкреВрд░рд╛ рд╣реЛрддрд╛ рд╣реИ рдпрд╛ рдЬрдм рд╣рдореЗрдВ рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХреЗ рд▓рд┐рдП рдЕрдиреБрд░реЛрдз рдкреНрд░рд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИред рдРрд╕реЗ рдХрд╛рд░реНрдп рдЬрд┐рдирдореЗрдВ рдХрдИ рдХреНрд╡реЗрд░реАрдЬрд╝ рд╕рдорд╛рди рд░реВрдк рд╕реЗ рд╕рднреА рд╕реЗрдЧрдореЗрдВрдЯ рдкрд░ рдбреЗрдЯрд╛ рднреЗрдЬрддреА рд╣реИрдВ: рдЬреИрд╕рд╛ рдХрд┐ рдЙрди рдХрд╛рд░реНрдпреЛрдВ рджреНрд╡рд╛рд░рд╛ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ рдЬрд┐рдирдХреА рдЕрд╡рдзрд┐ рдХреЛ 15-рд╕реЗрдХрдВрдб рдХреЗ рдЕрдВрддрд░рд╛рд▓ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред



рдХреНрдпрд╛ рдпрд╣ рдмреЗрд╣рддрд░ рд╣реИ?


24 рдШрдВрдЯреЗ рдЯреНрд░реИрд╕рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рдпрд╣ рдкреНрд░рднрд╛рд╡рд┐рдд рд╣реЛрддрд╛ рд╣реИ рдХрд┐ рдЧрддрд┐рд╡рд┐рдзрд┐ рдХреИрд╕реЗ рд▓реЙрдЧ рдХреА рдЬрд╛рддреА рд╣реИред рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдорд╛рдкреЛрдВ рдХреЗ рд╡рд┐рдкрд░реАрдд, рдЬрд┐рд╕рдиреЗ "рджреЗрдЦрд╛", рдЬрдм рдЪреЛрдЯрд┐рдпреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдЯреНрд░рд┐рдЧрд░ рдкреНрд░реЛрд╕реЗрд╕рд░ рдФрд░ рд╕реБрд╕реНрдд рдЪреБрдкреНрдкреА рдХреА рдЕрд╡рдзрд┐ рд╕реЗ рдЕрдзрд┐рдХ рд╣реЛ рдЧрдИ, рддреЛ рджрд╕ рдкреНрд░реЛрд╕реЗрд╕рд░ рдХреЗ рд╕рд╛рде рдкреНрд░рдпреЛрдЧ рдПрдХ рдЧреНрд░рд╛рдл рдХреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рджрд┐рдЦрд╛ рд░рд╣рд╛ рд╣реИ рдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░реЛрд╕реЗрд╕рд░ рдХреЛ рд╕рдорд╛рди рд░реВрдк рд╕реЗ рдореЙрдирд┐рдЯрд░ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдХрд╛рдо рдореЗрдВ рд▓рдЧрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред



рддреБрд▓рдирд╛рддреНрдордХ (рдмрд╛рдПрдВ) рдкрд░ рдирд┐рд░реНрдорд┐рдд рдореИрдЯреНрд░рд┐рдХреНрд╕ рдФрд░ рдЯреНрд░реЗрд╕рд░ (рджрд╛рдПрдВ) рджреНрд╡рд╛рд░рд╛ рдирд┐рдпрдВрддреНрд░рд┐рдд, рдПрдХ рдХрд╛рдо рдХреЗ рдкреНрд░рдпреЛрдЧ рд╕реЗ рд▓рд┐рдпрд╛ рдЧрдпрд╛ред


рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдорд╛рдк рдХреЗ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЧрд▓рдд рдФрд░ рдЕрд░рд╛рдЬрдХ рдЕрдиреБрд╕реВрдЪреА рдХреА рддреБрд▓рдирд╛ рдореЗрдВ, рдЯреНрд░реЗрд╕рд░ рджреНрд╡рд╛рд░рд╛ рдПрдХрддреНрд░ рдХрд┐рдП рдЧрдП рдореЗрдЯреНрд░рд┐рдХреНрд╕ рдЪрд┐рдХрдиреА рдФрд░ рд╕реБрд╕рдВрдЧрдд рд╣реИрдВред рдЕрдм рд╣рдо рди рдХреЗрд╡рд▓ рдкреНрд░рддреНрдпреЗрдХ рдореАрдЯреНрд░рд┐рдХ рдЕрдиреБрд░реЛрдз рдХреЛ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдЯрд╛рдИ рдХрд░рддреЗ рд╣реИрдВ, рдмрд▓реНрдХрд┐ рдХрд┐рд╕реА рднреА рд╣реИрдВрдбрд▓рд░ рдХреА рдЕрдЪрд╛рдирдХ рдореМрдд рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рднреА рдЪрд┐рдВрддрд╛ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ: рдкреНрд░реЛрдореЗрдерд┐рдпрд╕ рдореЗрдЯреНрд░рд┐рдХреНрд╕ рдХреЛ рддрдм рддрдХ рд░рд┐рдХреЙрд░реНрдб рдХрд░рддрд╛ рд╣реИ рдЬрдм рддрдХ рд╣реИрдВрдбрд▓рд░ рдЧрд╛рдпрдм рдирд╣реАрдВ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рдЕрдкрдиреЗ рд╕рднреА рдХрд╛рдо рдХрд╛ рдореВрд▓реНрдпрд╛рдВрдХрди рдХрд░рддрд╛ рд╣реИред


рдХреНрдпрд╛ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ?


рд╣рд╛рдБ! Tracer рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХрдИ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ рдореЗрд░реЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╕рд╛рдмрд┐рдд рд╣реБрдЖ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдПрдХ рдЕрд▓рдЧ рд░реВрдмреА рд░рддреНрди, рдкреНрд░реЛрдореЗрдерд┐рдпрд╕-рдХреНрд▓рд╛рдЗрдВрдЯ-рдЯреНрд░реЗрд╕рд░ рд╣реИ ред рдпрджрд┐ рдЖрдк рдЕрдкрдиреЗ рд░реВрдмреА рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдореЗрдВ рдкреНрд░реЛрдореЗрдерд┐рдпрд╕ рдХреНрд▓рд╛рдЗрдВрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдмрд╕ prometheus-client-tracer рдХреЛ рдЕрдкрдиреЗ рдореЛрдмрд╛рдЗрд▓ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ:


 require "prometheus/client" require "prometheus/client/tracer" JobWorkedSecondsTotal = Prometheus::Client::Counter.new(...) Prometheus::Client.trace(JobWorkedSecondsTotal) do sleep(long_time) end 

рдпрджрд┐ рдпрд╣ рдЖрдкрдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реИ рдФрд░ рдпрджрд┐ рдЖрдк рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рдкреНрд░реЛрдореЗрдерд┐рдпрд╕ рд░реВрдмреА рдХреНрд▓рд╛рдЗрдВрдЯ Tracer рдореЗрдВ рджрд┐рдЦрд╛рдИ рджреЗ, рддреЛ рдХреНрд▓рд╛рдЗрдВрдЯ_рд░реБрдмреА # 135 рдореЗрдВ рдПрдХ рд╕рдореАрдХреНрд╖рд╛ рдЫреЛрдбрд╝ рджреЗрдВред


рдФрд░ рдЕрдВрдд рдореЗрдВ, рдХреБрдЫ рд╡рд┐рдЪрд╛рд░


рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдпрд╣ рд▓рдВрдмреЗ рд╕рдордп рд╕реЗ рдЪрд▓ рд░рд╣реЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рджреВрд╕рд░реЛрдВ рдХреЛ рдЕрдзрд┐рдХ рд╕рдЪреЗрдд рд░реВрдк рд╕реЗ рдореИрдЯреНрд░рд┐рдХреНрд╕ рдПрдХрддреНрд░ рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЖрдо рд╕рдорд╕реНрдпрд╛рдУрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдХреЛ рд╣рд▓ рдХрд░рддрд╛ рд╣реИред рдХреЛрдИ рдЧрд▓рддреА рди рдХрд░реЗрдВ, рдпрд╣ рди рдХреЗрд╡рд▓ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд╕рд╛рде рдЬреБрдбрд╝рд╛ рд╣реБрдЖ рд╣реИ: рдпрджрд┐ рдЖрдкрдХреЗ HTTP рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рдзреАрдорд╛ рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рд╡реЗ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдкрд░ рдЦрд░реНрдЪ рдХрд┐рдП рдЧрдП рд╕рдордп рдХрд╛ рдореВрд▓реНрдпрд╛рдВрдХрди рдХрд░рддреЗ рд╕рдордп рдЯреНрд░реИрд╕рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рднреА рд▓рд╛рднрд╛рдиреНрд╡рд┐рдд рд╣реЛрдВрдЧреЗред


рд╣рдореЗрд╢рд╛ рдХреА рддрд░рд╣, рдХрд┐рд╕реА рднреА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдФрд░ рд╕реБрдзрд╛рд░ рдХрд╛ рд╕реНрд╡рд╛рдЧрдд рд╣реИ: рдЯреНрд╡рд┐рдЯрд░ рдкрд░ рд▓рд┐рдЦреЗрдВ рдпрд╛ рдкреАрдЖрд░ рдЦреЛрд▓реЗрдВ ред рдпрджрд┐ рдЖрдк рдЕрдиреБрд░реЗрдЦрдХ рдордгрд┐ рдореЗрдВ рдпреЛрдЧрджрд╛рди рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рд╕реНрд░реЛрдд рдХреЛрдб рдкреНрд░реЛрдореЗрдерд┐рдпрд╕-рдХреНрд▓рд╛рдЗрдВрдЯ-рдЯреНрд░реЗрд╕рд░-рд░реВрдмреА рдкрд░ рд╣реИ ред

Source: https://habr.com/ru/post/hi470133/


All Articles