рдореИрдВ
рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рд╕рд╛рдЗрдЯ рд╕реЗ рдкрд╛рдареЛрдВ
рдХреЗ рдЕрдиреБрд╡рд╛рдж рдХреА
рд╢реНрд░реГрдВрдЦрд▓рд╛ рдЬрд╛рд░реА рд░рдЦрддрд╛ рд╣реВрдВред рдЙрджрд╛рд╣рд░рдг php рдореЗрдВ рд╣реЛрдВрдЧреЗ, рд▓реЗрдХрд┐рди рдЙрдиреНрд╣реЗрдВ рдЕрдзрд┐рдХрд╛рдВрд╢ рд▓реЛрдХрдкреНрд░рд┐рдп
рднрд╛рд╖рд╛рдУрдВ рдкрд░ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдкрд┐рдЫрд▓реЗ
рд▓реЗрдЦ рдореЗрдВ, рд╣рдордиреЗ рд▓реЙрдЧрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рд╕реБрдзрд╛рд░ рдХрд┐рдпрд╛ред рдлреИрдирдЖрдЙрдЯ рдПрдХреНрд╕реЗрд╕ рдкреНрд╡рд╛рдЗрдВрдЯ (рдЬреЛ рдХреЗрд╡рд▓ рд╕рдВрджреЗрд╢реЛрдВ рдХреЗ рдкреНрд░рд╛рдердорд┐рдХ рдкреНрд░рд╕рд╛рд░рдг рдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рд╣реИ) рдХреЗ рдмрдЬрд╛рдп, рд╣рдордиреЗ рдкреНрд░рддреНрдпрдХреНрд╖ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ - рдФрд░ рдХреБрдЫ рдЪрдпрдиреЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕рдВрджреЗрд╢ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдереЗред
рдпрджреНрдпрдкрд┐ рдкреНрд░рддреНрдпрдХреНрд╖ рдиреЗ рд╣рдорд╛рд░реА рдкреНрд░рдгрд╛рд▓реА рдореЗрдВ рд╕реБрдзрд╛рд░ рдХрд┐рдпрд╛ рд╣реИ, рдлрд┐рд░ рднреА рдЗрд╕рдХреА рдПрдХ рдЦрд╛рдореА рд╣реИ - рдпрд╣ рдХрдИ рдорд╛рдирджрдВрдбреЛрдВ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдПрдХ рдорд╛рд░реНрдЧ рдирд╣реАрдВ рдмрдирд╛ рд╕рдХрддрд╛ рд╣реИред
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рд▓реЙрдЧ рдХреЛ рди рдХреЗрд╡рд▓ рдЙрд╕рдХреЗ рдкреНрд░рдХрд╛рд░ рдХреЗ рдорд╣рддреНрд╡ рд╕реЗ, рдмрд▓реНрдХрд┐ рд▓реЙрдЧ рдХреЗ рд╕реНрд░реЛрдд рд╕реЗ рднреА рдЕрд▓рдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЖрдк рд╢рд╛рдпрдж
syslog рдпреВрдирд┐рдХреНрд╕ рдЯреВрд▓ рдореЗрдВ рдЗрд╕ рддрд░рд╣ рдХреА рдЕрд╡рдзрд╛рд░рдгрд╛ рдХреЗ рдкрд╛рд░ рдЖрдП рд╣реИрдВ, рдЬреЛ рд▓реЙрдЧ рдХреЛ рдЙрдирдХреЗ рдорд╣рддреНрд╡ рдкреНрд░рдХрд╛рд░ (рдЬрд╛рдирдХрд╛рд░реА / рдЪреЗрддрд╛рд╡рдиреА / рд╕рдореАрдХреНрд╖рдХ ...) рдФрд░ рдЙрдирдХреА рд╡рд╕реНрддреБ (рд╡рд┐рд╢реЗрд╖рд╛рдзрд┐рдХрд╛рд░ / рдХреНрд░реЙрди / рдХрд░реНрдиреЗрд▓ ...) рд╕реЗ рдЕрд▓рдЧ рдХрд░рддрд╛ рд╣реИред
рд╣рдореЗрдВ рдЕрдиреБрд░реЛрдз рдореЗрдВ рд▓рдЪреАрд▓рд╛рдкрди рдорд┐рд▓рддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╣рдо рддреНрд░реБрдЯрд┐ рдХреЗ рд╕рд╛рде рд╕рднреА рд▓реЙрдЧ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдХреНрд░реЛрди рд╕реЗ рдЖрдпрд╛ рдерд╛ рдФрд░ рд╕рднреА рд▓реЙрдЧ рдЬреЛ рдХрд┐рд░реНрди рд╕реЗ рдЖрдП рдереЗред рд╣рдорд╛рд░реЗ рд▓реЙрдЧрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рдЗрд╕реЗ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдкрд╣реБрдВрдЪ рдмрд┐рдВрджреБ - рд╡рд┐рд╖рдп рдХрд╛ рдЕрдзреНрдпрдпрди рдХрд░реЗрдВрдЧреЗред
рд╡рд┐рд╖рдп
рд╡рд┐рд╖рдп рдкрд╣реБрдВрдЪ рдмрд┐рдВрджреБ рдкрд░ рднреЗрдЬреЗ рдЧрдП рд╕рдВрджреЗрд╢ рдПрдХ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдХреБрдВрдЬреА рд░реВрдЯрд┐рдВрдЧ_рдХреА рдХреЗ рд╕рд╛рде рдирд╣реАрдВ рднреЗрдЬреЗ рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ - рдпрд╣ рдПрдХ рдЕрд╡рдзрд┐ рджреНрд╡рд╛рд░рд╛ рдЕрд▓рдЧ рдХрд┐рдП рдЧрдП рд╢рдмреНрджреЛрдВ рдХреА рдПрдХ рд╕реВрдЪреА рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред рд╢рдмреНрдж рдХрд┐рд╕реА рднреА рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╡реЗ рдЖрдорддреМрд░ рдкрд░ рдХреБрдЫ рд╕рдВрджреЗрд╢ рдЧреБрдгреЛрдВ рд╕реЗ рдЬреБрдбрд╝реЗ рд╣реЛрддреЗ рд╣реИрдВред рдпрд╣рд╛рдБ рд╕рд╣реА рдорд╛рд░реНрдЧ_рдХреЗ рдЙрджрд╛рд╣рд░рдг рд╣реИрдВ: "stock.usd.nyse", "nyse.vmw", "quick.orange.rabbit"ред рдХреБрдВрдЬреА рд▓рдВрдмрд╛рдИ 255 рдмрд╛рдЗрдЯреНрд╕ рд╕реЗ рдЕрдзрд┐рдХ рдирд╣реАрдВ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред
рдмрд╛рдзреНрдпрдХрд╛рд░реА рдХреБрдВрдЬреА рдЙрд╕реА рдирд┐рдпрдо рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдмрдирд╛рдИ рдЧрдИ рд╣реИред рд╡рд┐рд╖рдп рдХрд╛ рддрд░реНрдХ рдкреНрд░рддреНрдпрдХреНрд╖ рдХреЗ рд▓рд┐рдП рд╕рдорд╛рди рд╣реИ - рд╕рдВрджреЗрд╢ рдЙрди рдХрддрд╛рд░реЛрдВ рддрдХ рдкрд╣реБрдВрдЪрддреЗ рд╣реИрдВ рдЬрд┐рдирдХреА рдмрд╛рдзреНрдпрдХрд╛рд░реА рдХреБрдВрдЬреА рд╕рдВрджреЗрд╢ рдХреА рд░реВрдЯрд┐рдВрдЧ рдХреБрдВрдЬреА рд╕реЗ рдореЗрд▓ рдЦрд╛рддреА рд╣реИред рд▓реЗрдХрд┐рди рд╡рд┐рд╖рдп рдХреЗ рд▓рд┐рдП 2 рд╡рд┐рд╢реЗрд╖ рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ рд╣реИрдВ:
- * (рддрд╛рд░рд╛) рдХреЛ рдареАрдХ 1 рд╢рдмреНрдж рд╕реЗ рдмрджрд▓рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ;
- # (рд╣реИрд╢) рдХреЛ 0 рдпрд╛ рдЕрдзрд┐рдХ рд╢рдмреНрджреЛрдВ рд╕реЗ рдмрджрд▓рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдпрд╣ рдЖрдВрдХрдбрд╝рд╛ рдореЗрдВ рд╕реНрдкрд╖реНрдЯ рд╣реЛ рдЬрд╛рдПрдЧрд╛:

рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рд╣рдо рд╕рднреА рджрд┐рдП рдЧрдП рдЬрд╛рдирд╡рд░реЛрдВ рдХреЛ рдкрддреНрд░ рднреЗрдЬрддреЗ рд╣реИрдВред рд╕рдВрджреЗрд╢реЛрдВ рдореЗрдВ рдПрдХ рд░рд╛рдЙрдЯрд┐рдВрдЧ рдХреБрдВрдЬреА рд╣реЛрддреА рд╣реИ рдЬрд┐рд╕рдореЗрдВ 3 рд╢рдмреНрдж (рджреЛ рдмрд┐рдВрджреБрдУрдВ рдХреЗ рд╕рд╛рде) рд╣реЛрддреЗ рд╣реИрдВред рдкрд╣рд▓рд╛ рд╢рдмреНрдж рдЧрддрд┐, рджреВрд╕рд░рд╛ рд░рдВрдЧ рдФрд░ рддреАрд╕рд░рд╛ рдкреНрд░рдХрд╛рд░ рд╣реИ: "speed.colour.species"ред
рдХрддрд╛рд░ Q1 рдХреБрдВрдЬреА "* .orangeред *" рдХреЗ рд╕рд╛рде рд╕рдВрдмрджреНрдз рд╣реЛрдЧреА, рдФрд░ рдХрддрд╛рд░ Q2 рдХреБрдВрдЬрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде * *ред *ред * рдЦрд░рдЧреЛрд╢ "рдФрд░" рдЖрд▓рд╕реА #ред "
рд▓рд┐рдВрдХ рдХреЛ рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
- рдХрддрд╛рд░ Q1 рд╕рднреА рдирд╛рд░рдВрдЧреА рдЬрд╛рдирд╡рд░реЛрдВ рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрддрд╛ рд╣реИ;
- рдХреНрдпреВ 2 рд▓рд╛рдЗрди рдЦрд░рдЧреЛрд╢ рдФрд░ рдЖрд▓рд╕реА рдЬрд╛рдирд╡рд░реЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕рдм рдХреБрдЫ рдЬрд╛рдирдирд╛ рдЪрд╛рд╣рддреА рд╣реИред
рдХреБрдВрдЬреА "quick.orange.rabbit" рдХреЗ рд╕рд╛рде рдПрдХ рд╕рдВрджреЗрд╢ рджреЛрдиреЛрдВ рдХрддрд╛рд░реЛрдВ рддрдХ рдкрд╣реБрдВрдЪ рдЬрд╛рдПрдЧрд╛ред рдХреБрдВрдЬреА "lazy.orange.elephant" рдХреЗ рд╕рд╛рде рдПрдХ рд╕рдВрджреЗрд╢ рднреА рджреЛрдиреЛрдВ рдХрддрд╛рд░реЛрдВ рдореЗрдВ рдЖ рдЬрд╛рдПрдЧрд╛ред "Quick.orange.fox" рдкреНрд░рдХрд╛рд░ рд╡рд╛рд▓рд╛ рдПрдХ рд╕рдВрджреЗрд╢ рдХреЗрд╡рд▓ 1 рдХрддрд╛рд░ рддрдХ рдкрд╣реБрдВрдЪ рдЬрд╛рдПрдЧрд╛, рдФрд░ "lazy.brown.fox" рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕рд╛рде рдпрд╣ рдХреЗрд╡рд▓ рджреВрд╕рд░реЗ рддрдХ рдкрд╣реБрдВрдЪ рдЬрд╛рдПрдЧрд╛ред "Lazy.pink.rabbit" рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕рд╛рде рдПрдХ рд╕рдВрджреЗрд╢ рдХреЗрд╡рд▓ 1 рдмрд╛рд░ рджреВрд╕рд░реА рдкрдВрдХреНрддрд┐ рддрдХ рдкрд╣реБрдВрдЪ рдЬрд╛рдПрдЧрд╛, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рджреЛ рдХрдиреЗрдХреНрд╢рдиреЛрдВ рд╕реЗ рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реИред "Quick.brown.fox" рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕рд╛рде рдПрдХ рд╕рдВрджреЗрд╢ рдХрд┐рд╕реА рднреА рдХрддрд╛рд░ рддрдХ рдирд╣реАрдВ рдкрд╣реБрдВрдЪреЗрдЧрд╛ред
рдпрджрд┐ рдЖрдк рдПрдХ рдХреБрдВрдЬреА рдХреЗ рд╕рд╛рде рдПрдХ рд╕рдВрджреЗрд╢ рднреЗрдЬрддреЗ рд╣реИрдВ рддреЛ рдХреНрдпрд╛ рд╣реЛрддрд╛ рд╣реИ рдЬреЛ рдХрд┐рд╕реА рднреА рдирд┐рдпрдо рдХрд╛ рдкрд╛рд▓рди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ: 1 рдпрд╛ 4 рд╢рдмреНрджреЛрдВ рдХреЗ рд╕рд╛рде (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, "quick.orange.male.rabbit")ред рдРрд╕рд╛ рдореИрд╕реЗрдЬ рдХрд╣реАрдВ рдирд╣реАрдВ рдЖрдПрдЧрд╛ рдФрд░ рдирд┐рдХрд▓ рдЬрд╛рдПрдЧрд╛ред
рд▓реЗрдХрд┐рди рдХреБрдВрдЬреА рдХреЗ рд╕рд╛рде рд╕рдВрджреЗрд╢ "lazy.orange.male.rabbit, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЗрд╕рдореЗрдВ 4 рд╢рдмреНрдж рд╣реИрдВ, рдЕрдВрддрд┐рдо рдХрдиреЗрдХреНрд╢рди рд╕реЗ рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реИ рдФрд░ рджреВрд╕рд░реЗ рд╕реНрдерд╛рди рдкрд░ рдЖрдПрдЧрд╛ред
рдЯреЙрдкрд┐рдХ рдПрдХ рдмрд╣реБрдд рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рдПрдХреНрд╕реЗрд╕ рдкреНрд╡рд╛рдЗрдВрдЯ рд╣реИред рдпрд╣ рдЕрдиреНрдп рдкрд╣реБрдВрдЪ рдмрд┐рдВрджреБрдУрдВ рдХреА рддрд░рд╣ рдХрд╛рдо рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдпрджрд┐ рдЖрдк рдмрд╛рдзреНрдпрдХрд╛рд░реА рдХреБрдВрдЬреА рдореЗрдВ "#" рдбрд╛рд▓рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рдПрдХ рдкреНрд░рд╢рдВрд╕рдХ рдХреА рддрд░рд╣ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░реЗрдЧрд╛ред рдФрд░ рдпрджрд┐ рдЖрдк "*" рдФрд░ "#" рдкреНрд░рддреАрдХреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рдкреНрд░рддреНрдпрдХреНрд╖ рдХреА рддрд░рд╣ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░реЗрдЧрд╛ред
рдХреБрд▓ рд╣рдореЗрдВ рдорд┐рд▓рддрд╛ рд╣реИ
рд╣рдо рдЕрдкрдиреЗ рд▓реЙрдЧрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рд▓рд┐рдП рд╡рд┐рд╖рдп рдкрд╣реБрдВрдЪ рдмрд┐рдВрджреБ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред рд╣рдо рдпрд╣ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛рддреЗ рд╣реИрдВ рдХрд┐ рд▓реЙрдЧ рдХреА рд░реВрдЯрд┐рдВрдЧ рдХреБрдВрдЬреА рдореЗрдВ 2 рд╢рдмреНрдж рд╢рд╛рдорд┐рд▓ рд╣реИрдВ: 'рд╕реБрд╡рд┐рдзрд╛ред рд╕реЗрд╡рд░рд┐рдЯреА'ред рдХреЛрдб рд▓рдЧрднрдЧ рдкрд┐рдЫрд▓реЗ
рд▓реЗрдЦ рдХреА рддрд░рд╣ рд╣реА рд╣реИ ред
рд╕реНрдХреНрд░рд┐рдкреНрдЯ emit_log_topic.php (рдирд┐рд░реНрдорд╛рддрд╛):
<?php require_once __DIR__ . '/vendor/autoload.php'; use PhpAmqpLib\Connection\AMQPConnection; use PhpAmqpLib\Message\AMQPMessage; $connection = new AMQPConnection('localhost', 5672, 'guest', 'guest'); $channel = $connection->channel(); $channel->exchange_declare('topic_logs', 'topic', false, false, false); $routing_key = $argv[1]; if(empty($routing_key)) $routing_key = "anonymous.info"; $data = implode(' ', array_slice($argv, 2)); if(empty($data)) $data = "Hello World!"; $msg = new AMQPMessage($data); $channel->basic_publish($msg, 'topic_logs', $routing_key); echo " [x] Sent ",$routing_key,':',$data," \n"; $channel->close(); $connection->close(); ?>
рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдкреНрд░рд╛рдкреНрдд_рд▓реЙрдЧреНрд╕_рдЯреЙрдкрд┐рдХред рдПрдлрдкреА (рдЧреНрд░рд╛рд╣рдХ):
<?php require_once __DIR__ . '/vendor/autoload.php'; use PhpAmqpLib\Connection\AMQPConnection; $connection = new AMQPConnection('localhost', 5672, 'guest', 'guest'); $channel = $connection->channel(); $channel->exchange_declare('topic_logs', 'topic', false, false, false); list($queue_name, ,) = $channel->queue_declare("", false, false, true, false); $binding_keys = array_slice($argv, 1); if( empty($binding_keys )) { file_put_contents('php://stderr', "Usage: $argv[0] [binding_key]\n"); exit(1); } foreach($binding_keys as $binding_key) { $channel->queue_bind($queue_name, 'topic_logs', $binding_key); } echo ' [*] Waiting for logs. To exit press CTRL+C', "\n"; $callback = function($msg){ echo ' [x] ',$msg->delivery_info['routing_key'], ':', $msg->body, "\n"; }; $channel->basic_consume($queue_name, '', false, true, false, false, $callback); while(count($channel->callbacks)) { $channel->wait(); } $channel->close(); $connection->close(); ?>
рд╕рдм рдХреБрдЫ рдкрд╛рдиреЗ рдХреЗ рд▓рд┐рдП:
$ php receive_logs_topic.php "#"
Kern рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд╕рднреА рд▓реЙрдЧ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП:
$ phpreceive_logs_topic.php "kern.*"
рдпрджрд┐ рдЖрдк рдХреЗрд╡рд▓ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд╕рд╛рде рд▓реЙрдЧ рд╕реБрдирдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ:
$ php receive_logs_topic.php "*.critical"
рдХрдИ рдХрдиреЗрдХреНрд╢рди рдмрдирд╛рдПрдВ:
$ php receive_logs_topic.php "kern.*" "*.critical"
"Kern.critical" рдХреБрдВрдЬреА рдХреЗ рд╕рд╛рде рд╕рдВрджреЗрд╢ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП:
$ php emit_log_topic.php "kern.critical" "A critical kernel error"
рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдХреЛрдб рд░реВрдЯрд┐рдВрдЧ рдХреБрдВрдЬреА рдФрд░ рдмрд╛рдЗрдВрдбрд┐рдВрдЧ рдХреБрдВрдЬреА рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдирд┐рдпрдо рдирд╣реАрдВ рдмрдирд╛рддрд╛ рд╣реИред рдЖрдк рдХреБрдВрдЬреА рдореЗрдВ рджреЛ рд╕реЗ рдЕрдзрд┐рдХ рд╢рдмреНрджреЛрдВ рдХреЛ рджрд░реНрдЬ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдкреВрд░реНрдг рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛрдб рд╣реИ
emit_log_topic.php рдФрд░
get_logs_topic.php ред