рд╣рд╛рдореАрд▓реЗ рд▓рдЧрд╣рд░реВ рд╣реЗрд░реНрдирдХрд╛ рд▓рд╛рдЧрд┐ рд╕рдВрд╕рд╛рд░рдХреЛ рд╕рдмреИрднрдиреНрджрд╛ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ* рдЗрдиреНрдЯрд░рдлреЗрд╕ рд╡рд┐рдХрд╛рд╕ рдЧрд░реНрдЫреМрдВ

рд╣рд╛рдореАрд▓реЗ рд▓рдЧрд╣рд░реВ рд╣реЗрд░реНрдирдХрд╛ рд▓рд╛рдЧрд┐ рд╕рдВрд╕рд╛рд░рдХреЛ рд╕рдмреИрднрдиреНрджрд╛ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ* рдЗрдиреНрдЯрд░рдлреЗрд╕ рд╡рд┐рдХрд╛рд╕ рдЧрд░реНрдЫреМрдВ рдпрджрд┐ рддрдкрд╛рдИрдВрд▓реЗ рд▓рдЧрд╣рд░реВ рд╣реЗрд░реНрдирдХреЛ рд▓рд╛рдЧрд┐ рд╡реЗрдм рдЗрдиреНрдЯрд░рдлреЗрд╕рд╣рд░реВ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреБрднрдПрдХреЛ рдЫ рднрдиреЗ, рддрдкрд╛рдИрдВрд▓реЗ рд╕рд╛рдпрдж рдпрд╛рдж рдЧрд░реНрдиреБрднрдПрдХреЛ рдЫ рдХрд┐ рдХрд╕рд░реА, рдирд┐рдпрдордХреЛ рд░реВрдкрдорд╛, рдпреА рдЗрдиреНрдЯрд░рдлреЗрд╕рд╣рд░реВ рдмреЛрдЭрд┐рд▓ рд╣реБрдиреНрдЫрдиреН рд░ (рдкреНрд░рд╛рдпрдГ) рдзреЗрд░реИ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд░ рдЙрддреНрддрд░рджрд╛рдпреА рд╣реБрдБрджреИрдирдиреНред рдХреЗрд╣рд┐ рддрдкрд╛рдИрд▓рд╛рдИ рдмрд╛рдиреА рдкрд░реНрди рд╕рдХреНрдЫ, рдХреЗрд╣рд┐ рдПрдХрджрдо рдбрд░рд▓рд╛рдЧреНрджреЛ рдЫрдиреН, рддрд░ рдорд▓рд╛рдИ рд▓рд╛рдЧреНрдЫ рдХрд┐ рд╕рдмреИ рд╕рдорд╕реНрдпрд╛рд╣рд░реВрдХреЛ рдХрд╛рд░рдг рдпреЛ рд╣реЛ рдХрд┐ рд╣рд╛рдореА рд▓рдЧрд╣рд░реВ рдЧрд▓рдд рд░реВрдкрдорд╛ рд╣реЗрд░реНрдиреЗ рдХрд╛рд░реНрдпрдорд╛ рдкреБрдЧреНрдЫреМрдВ: рд╣рд╛рдореА рд╡реЗрдм рдЗрдиреНрдЯрд░рдлреЗрд╕ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрдиреЗ рдкреНрд░рдпрд╛рд╕ рдЧрд░реНрджрдЫреМрдВ рдЬрд╣рд╛рдБ CLI (рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдЗрдиреНрдЯрд░рдлреЗрд╕)ред рд░рд╛рдореНрд░реЛ рдХрд╛рдо рдЧрд░реНрджрдЫред рдо рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдкрдорд╛ tail, grep, awk рд░ рдЕрдиреНрдпрд╕рдБрдЧ рдХрд╛рдо рдЧрд░реНрди рдзреЗрд░реИ рд╕рд╣рдЬ рдЫреБ, рд░ рддреНрдпрд╕реИрд▓реЗ рдореЗрд░реЛ рд▓рд╛рдЧрд┐ рд▓рдЧрд╣рд░реВрд╕рдБрдЧ рдХрд╛рдо рдЧрд░реНрдирдХреЛ рд▓рд╛рдЧрд┐ рдЖрджрд░реНрд╢ рдЗрдиреНрдЯрд░рдлреЗрд╕ tail рд░ grep рдЬрд╕реНрддреИ рд╣реБрдиреЗрдЫ, рддрд░ рдЬреБрди рдзреЗрд░реИ рд╕рд░реНрднрд░рд╣рд░реВрдмрд╛рдЯ рдЖрдПрдХрд╛ рд▓рдЧрд╣рд░реВ рдкрдвреНрди рдкрдирд┐ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрди рд╕рдХрд┐рдиреНрдЫред рддреНрдпреЛ рд╣реЛ, рдЕрд╡рд╢реНрдп рдкрдирд┐, рддрд┐рдиреАрд╣рд░реВрд▓рд╛рдИ рдХреНрд▓рд┐рдХрд╣рд╛рдЙрд╕рдмрд╛рдЯ рдкрдвреНрдиреБрд╣реЛрд╕реН!

* habra рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░рд╛рдп рдЕрдиреБрд╕рд╛рд░ рддрдкрд╛рдИрдВрд░реЛрдХ

logscli рднреЗрдЯреНрдиреБрд╣реЛрд╕реН

рдо рдореЗрд░реЛ рдЗрдиреНрдЯрд░рдлреЗрд╕рдХреЛ рд▓рд╛рдЧрд┐ рдирд╛рдо рд▓рд┐рдПрд░ рдЖрдПрдХреЛ рдЫреИрди, рд░, рдЗрдорд╛рдирджрд╛рд░ рд╣реБрди, рдпреЛ рдмрд░реБ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдкрдХреЛ рд░реВрдкрдорд╛ рдЕрд╡рд╕реНрдерд┐рдд рдЫ, рддрд░ рдпрджрд┐ рддрдкрд╛рдЗрдБ рддреБрд░реБрдиреНрддреИ рд╕реНрд░реЛрдд рдХреЛрдб рд╣реЗрд░реНрди рдЪрд╛рд╣рдиреБрд╣реБрдиреНрдЫ рднрдиреЗ, рддрдкрд╛рдЗрдБрд▓рд╛рдИ рд╕реНрд╡рд╛рдЧрдд рдЫ: https://github.com/YuriyNasretdinov/logscli (рдЪрдпрдирд┐рдд рдЧреЛ рдХреЛрдбрдХреЛ 350 рд▓рд╛рдЗрдирд╣рд░реВ)ред

рд╡рд┐рд╢реЗрд╖рддрд╛рд╣рд░реВ

рдореЗрд░реЛ рд▓рдХреНрд╖реНрдп рдПрдЙрдЯрд╛ рдЗрдиреНрдЯрд░рдлреЗрд╕ рдмрдирд╛рдЙрдиреБ рдерд┐рдпреЛ рдЬреБрди рдЯреЗрд▓/рдЧреНрд░реЗрдкрдорд╛ рдкреНрд░рдпреЛрдЧ рд╣реБрдиреЗрд╣рд░реВрд▓рд╛рдИ рдкрд░рд┐рдЪрд┐рдд рджреЗрдЦрд┐рдиреНрдЫ, рдЕрд░реНрдерд╛рддреН, рдирд┐рдореНрди рдХреБрд░рд╛рд╣рд░реВрд▓рд╛рдИ рд╕рдорд░реНрдерди рдЧрд░реНрди:

  1. рдлрд┐рд▓реНрдЯрд░ рдирдЧрд░реА рд╕рдмреИ рд▓рдЧрд╣рд░реВ рд╣реЗрд░реНрдиреБрд╣реЛрд╕реНред
  2. рдирд┐рд╢реНрдЪрд┐рдд рд╕рдмрд╕реНрдЯреНрд░рд┐рдЩ (рдЭрдгреНрдбрд╛ -F ╤Г grep).
  3. рдирд┐рдпрдорд┐рдд рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рд╕рдБрдЧ рдореЗрд▓ рдЦрд╛рдиреЗ рд░реЗрдЦрд╛рд╣рд░реВ рдЫреЛрдбреНрдиреБрд╣реЛрд╕реН (рдЭрдгреНрдбрд╛ -E ╤Г grep).
  4. рдкреВрд░реНрд╡рдирд┐рд░реНрдзрд╛рд░рд┐рдд рд░реВрдкрдорд╛, рд╣реЗрд░реНрдиреЗ рдЙрд▓реНрдЯреЛ рдХрд╛рд▓рд╛рдиреБрдХреНрд░рдорд┐рдХ рдХреНрд░рдордорд╛ рд╣реБрдиреНрдЫ, рдХрд┐рдирдХрд┐ рд╕рдмреИрднрдиреНрджрд╛ рд╣рд╛рд▓реИрдХрд╛ рд▓рдЧрд╣рд░реВ рдкреНрд░рд╛рдпрдГ рдкрд╣рд┐рд▓реЗ рдЪрд╛рд╕реЛрдХреЛ рд╣реБрдиреНрдЫрдиреНред
  5. рдкреНрд░рддреНрдпреЗрдХ рд░реЗрдЦрд╛рдХреЛ рдЫреЗрдЙрдорд╛ рд╕рдиреНрджрд░реНрдн рджреЗрдЦрд╛рдЙрдиреБрд╣реЛрд╕реН (рд╡рд┐рдХрд▓реНрдкрд╣рд░реВ -A, -B ╨╕ -C ╤Г grep, рдХреНрд░рдорд╢рдГ рдкреНрд░рддреНрдпреЗрдХ рдорд┐рд▓реНрджреЛ рд▓рд╛рдЗрдирдХреЛ рдЕрдШрд┐, рдкрдЫрд┐, рд░ рд╡рд░рдкрд░ N рд▓рд╛рдЗрдирд╣рд░реВ рдкреНрд░рд┐рдиреНрдЯ рдЧрд░реНрджреИ)ред
  6. рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдордпрдорд╛ рдЖрдЧрдорди рд▓рдЧрд╣рд░реВ рд╣реЗрд░реНрдиреБрд╣реЛрд╕реН, рдлрд┐рд▓реНрдЯрд░рд┐рдЩрдХреЛ рд╕рд╛рде рд╡рд╛ рдмрд┐рдирд╛ (рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдкрдорд╛ tail -f | grep).
  7. рдЗрдиреНрдЯрд░рдлреЗрд╕ рд╕рдВрдЧ рдорд┐рд▓реНрджреЛ рд╣реБрдиреБрдкрд░реНрдЫ less, head, tail рд░ рдЕрдиреНрдп - рдкреВрд░реНрд╡рдирд┐рд░реНрдзрд╛рд░рд┐рдд рд░реВрдкрдорд╛, рддрд┐рдиреАрд╣рд░реВрдХреЛ рд╕рдВрдЦреНрдпрд╛рдорд╛ рдкреНрд░рддрд┐рдмрдиреНрдз рдмрд┐рдирд╛ рдкрд░рд┐рдгрд╛рдорд╣рд░реВ рдлрд░реНрдХрд╛рдЗрдиреБрдкрд░реНрдЫ; рд▓рд╛рдЗрдирд╣рд░реВ рд╕реНрдЯреНрд░рд┐рдордХреЛ рд░реВрдкрдорд╛ рдореБрджреНрд░рд┐рдд рд╣реБрдиреНрдЫрдиреН рдЬрдмрд╕рдореНрдо рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛рд▓реЗ рддрд┐рдиреАрд╣рд░реВрд▓рд╛рдИ рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрди рдЪрд╛рд╕реЛ рд░рд╛рдЦреНрдЫ; рд╕рдВрдХреЗрдд SIGPIPE рддрд┐рдиреАрд╣рд░реВрд▓реЗ рдЬрд╕реНрддреИ рдЪреБрдкрдЪрд╛рдк рд▓рдЧ рд╕реНрдЯреНрд░рд┐рдорд┐рдЩрдорд╛ рдЕрд╡рд░реЛрдз рдЧрд░реНрдиреБрдкрд░реНрдЫ tail, grep рд░ рдЕрдиреНрдп UNIX рдЙрдкрдпреЛрдЧрд┐рддрд╛рд╣рд░реВред

рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди

рдо рдорд╛рдиреНрдЫреБ рдХрд┐ рддрдкрд╛рдИрд▓рд╛рдИ рдкрд╣рд┐рд▓реЗ рдиреИ рдерд╛рд╣рд╛ рдЫ рдХрд┐ рдХрд╕рд░реА рд▓рдЧрд╣рд░реВ ClickHouse рдорд╛ рдбреЗрд▓рд┐рднрд░ рдЧрд░реНрдиреЗред рдпрджрд┐ рд╣реЛрдЗрди рднрдиреЗ, рдо рдпрд╕рд▓рд╛рдИ рдкреНрд░рдпрд╛рд╕ рдЧрд░реНрди рд╕рд┐рдлрд╛рд░рд┐рд╕ рдЧрд░реНрджрдЫреБ lsd ╨╕ рдмрд┐рд░рд╛рд▓реЛрдХреЛ рдШрд░рд░ рд▓рдЧ рдбреЗрд▓рд┐рднрд░реАрдХреЛ рдмрд╛рд░реЗрдорд╛ рдпреЛ рд▓реЗрдЦ.

рдкрд╣рд┐рд▓реЗ рддрдкрд╛рдИрдВрд▓реЗ рдЖрдзрд╛рд░ рдпреЛрдЬрдирд╛рдорд╛ тАЛтАЛрдирд┐рд░реНрдгрдп рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рдЫред рддрдкрд╛рдИрдВ рд╕рд╛рдорд╛рдиреНрдпрддрдпрд╛ рд╕рдордп рдЕрдиреБрд╕рд╛рд░ рдХреНрд░рдордмрджреНрдз рд▓рдЧрд╣рд░реВ рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрди рдЪрд╛рд╣рд╛рдиреБрд╣реБрдиреНрдЫ, рдпреЛ рддреНрдпрд╕рд░реА рднрдгреНрдбрд╛рд░рдг рдЧрд░реНрди рддрд╛рд░реНрдХрд┐рдХ рджреЗрдЦрд┐рдиреНрдЫред рдпрджрд┐ рддреНрдпрд╣рд╛рдБ рдзреЗрд░реИ рд▓рдЧ рдХреЛрдЯреАрд╣рд░реВ рдЫрдиреН рд░ рддрд┐рдиреАрд╣рд░реВ рд╕рдмреИ рдПрдЙрдЯреИ рдкреНрд░рдХрд╛рд░рдХрд╛ рдЫрдиреН рднрдиреЗ, рддреНрдпрд╕рдкрдЫрд┐ рддрдкрд╛рдЗрдБ рдкреНрд░рд╛рдердорд┐рдХ рдХреБрдЮреНрдЬреАрдХреЛ рдкрд╣рд┐рд▓реЛ рд╕реНрддрдореНрднрдХреЛ рд░реВрдкрдорд╛ рд▓рдЧ рдХреЛрдЯреА рдмрдирд╛рдЙрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫ - рдпрд╕рд▓реЗ рддрдкрд╛рдЗрдБрд▓рд╛рдИ рдзреЗрд░реИрдХреЛ рд╕рдЯреНрдЯрд╛ рдПрдЙрдЯрд╛ рддрд╛рд▓рд┐рдХрд╛ рд░рд╛рдЦреНрди рдЕрдиреБрдорддрд┐ рджрд┐рдиреЗрдЫ, рдЬреБрди рдареВрд▓реЛ рдкреНрд▓рд╕ рд╣реБрдиреЗрдЫ рдЬрдм ClickHouse рдорд╛ рд╕рдореНрдорд┐рд▓рд┐рдд рдЧрд░реНрджреИ (рд╣рд╛рд░реНрдб рдбреНрд░рд╛рдЗрдн рднрдПрдХрд╛ рд╕рд░реНрднрд░рд╣рд░реВрдорд╛, рдпрд╕рд▓рд╛рдИ рдкреНрд░рддрд┐ рд╕реЗрдХреЗрдиреНрдб ~ 1 рдкрдЯрдХ рднрдиреНрджрд╛ рдмрдвреА рдбреЗрдЯрд╛ рд╕рдореНрдорд┐рд▓рд┐рдд рдЧрд░реНрди рд╕рд┐рдлрд╛рд░рд┐рд╕ рдЧрд░рд┐рдиреНрдЫред рд╕рдореНрдкреВрд░реНрдг рд╕рд░реНрднрд░рдХреЛ рд▓рд╛рдЧрд┐).

рддреНрдпреЛ рд╣реЛ, рд╣рд╛рдореАрд▓рд╛рдИ рд▓рдЧрднрдЧ рдирд┐рдореНрди рддрд╛рд▓рд┐рдХрд╛ рдпреЛрдЬрдирд╛ рдЪрд╛рд╣рд┐рдиреНрдЫ:

CREATE TABLE logs(
    category LowCardinality(String), -- ╨║╨░╤В╨╡╨│╨╛╤А╨╕╤П ╨╗╨╛╨│╨╛╨▓ (╨╛╨┐╤Ж╨╕╨╛╨╜╨░╨╗╤М╨╜╨╛)
    time DateTime, -- ╨▓╤А╨╡╨╝╤П ╤Б╨╛╨▒╤Л╤В╨╕╤П
    millis UInt16, -- ╨╝╨╕╨╗╨╗╨╕╤Б╨╡╨║╤Г╨╜╨┤╤Л (╨╝╨╛╨│╤Г╤В ╨▒╤Л╤В╤М ╨╕ ╨╝╨╕╨║╤А╨╛╤Б╨╡╨║╤Г╨╜╨┤╤Л, ╨╕ ╤В.╨┤.): ╤А╨╡╨║╨╛╨╝╨╡╨╜╨┤╤Г╨╡╤В╤Б╤П ╤Е╤А╨░╨╜╨╕╤В╤М, ╨╡╤Б╨╗╨╕ ╤Б╨╛╨▒╤Л╤В╨╕╨╣ ╨╝╨╜╨╛╨│╨╛, ╤З╤В╨╛╨▒╤Л ╨▒╤Л╨╗╨╛ ╨╗╨╡╨│╤З╨╡ ╤А╨░╨╖╨╗╨╕╤З╨░╤В╤М ╤Б╨╛╨▒╤Л╤В╨╕╤П ╨╝╨╡╨╢╨┤╤Г ╤Б╨╛╨▒╨╛╨╣
    ..., -- ╨▓╨░╤И╨╕ ╤Б╨╛╨▒╤Б╤В╨▓╨╡╨╜╨╜╤Л╨╡ ╨┐╨╛╨╗╤П, ╨╜╨░╨┐╤А╨╕╨╝╨╡╤А ╨╕╨╝╤П ╤Б╨╡╤А╨▓╨╡╤А╨░, ╤Г╤А╨╛╨▓╨╡╨╜╤М ╨╗╨╛╨│╨╕╤А╨╛╨▓╨░╨╜╨╕╤П, ╨╕ ╤В╨░╨║ ╨┤╨░╨╗╨╡╨╡
    message String -- ╤В╨╡╨║╤Б╤В ╤Б╨╛╨╛╨▒╤Й╨╡╨╜╨╕╤П
) ENGINE=MergeTree()
ORDER BY (category, time, millis)

рджреБрд░реНрднрд╛рдЧреНрдпрд╡рд╢, рдореИрд▓реЗ рд╕рдорд╛рддреНрди рд░ рдбрд╛рдЙрдирд▓реЛрдб рдЧрд░реНрди рд╕рдХреНрдиреЗ рдпрдерд╛рд░реНрдерд╡рд╛рджреА рд▓рдЧрд╣рд░реВ рднрдПрдХреЛ рдХреБрдиреИ рдкрдирд┐ рдЦреБрд▓рд╛ рд╕реНрд░реЛрддрд╣рд░реВ рддреБрд░реБрдиреНрддреИ рдлреЗрд▓рд╛ рдкрд╛рд░реНрди рд╕рдХрд┐рди, рддреНрдпрд╕реИрд▓реЗ рдореИрд▓реЗ рдпрд╕рд▓рд╛рдИ рдЙрджрд╛рд╣рд░рдгрдХреЛ рд░реВрдкрдорд╛ рд▓рд┐рдПрдБред 2015 рдЕрдШрд┐ рдЕрдореЗрдЬрдирдмрд╛рдЯ рдЙрддреНрдкрд╛рджрдирд╣рд░реВрдХреЛ рд╕рдореАрдХреНрд╖рд╛ред рдирд┐рд╕реНрд╕рдиреНрджреЗрд╣, рддрд┐рдиреАрд╣рд░реВрдХреЛ рд╕рдВрд░рдЪрдирд╛ рдкрд╛рда рд▓рдЧрд╣рд░реВрдХреЛ рдЬрд╕реНрддреИ рдЫреИрди, рддрд░ рдЪрд┐рддреНрд░рдг рдЙрджреНрджреЗрд╢реНрдпрдХрд╛ рд▓рд╛рдЧрд┐ рдпреЛ рдорд╣рддреНрддреНрд╡рдкреВрд░реНрдг рдЫреИрдиред

рдХреНрд▓рд┐рдХрд╣рд╛рдЙрд╕рдорд╛ рдЕрдореЗрдЬрди рд╕рдореАрдХреНрд╖рд╛рд╣рд░реВ рдЕрдкрд▓реЛрдб рдЧрд░реНрдирдХрд╛ рд▓рд╛рдЧрд┐ рдирд┐рд░реНрджреЗрд╢рдирд╣рд░реВ

рдПрдЙрдЯрд╛ рддрд╛рд▓рд┐рдХрд╛ рдмрдирд╛рдЙрдиреБрд╣реЛрд╕реН:

CREATE TABLE amazon(
   review_date Date,
   time DateTime DEFAULT toDateTime(toUInt32(review_date) * 86400 + rand() % 86400),
   millis UInt16 DEFAULT rand() % 1000,
   marketplace LowCardinality(String),
   customer_id Int64,
   review_id String,
   product_id LowCardinality(String),
   product_parent Int64,
   product_title String,
   product_category LowCardinality(String),
   star_rating UInt8,
   helpful_votes UInt32,
   total_votes UInt32,
   vine FixedString(1),
   verified_purchase FixedString(1),
   review_headline String,
   review_body String
)
ENGINE=MergeTree()
ORDER BY (time, millis)
SETTINGS index_granularity=8192

рдЕрдореЗрдЬрди рдбреЗрдЯрд╛рд╕реЗрдЯрдорд╛ рд╕рдореАрдХреНрд╖рд╛рдХреЛ рд▓рд╛рдЧрд┐ рдорд╛рддреНрд░ рдорд┐рддрд┐ рдЫ, рддрд░ рддреНрдпрд╣рд╛рдБ рдХреБрдиреИ рд╕рд╣реА рд╕рдордп рдЫреИрди, рддреНрдпрд╕реИрд▓реЗ рдпреЛ рдбреЗрдЯрд╛рд▓рд╛рдИ рд░реНрдпрд╛рдиреНрдбрдирдХреЛ рд╕рд╛рде рднрд░реМрдВред

рддрдкрд╛рдИрдВрд▓реЗ рд╕рдмреИ tsv рдлрд╛рдЗрд▓рд╣рд░реВ рдбрд╛рдЙрдирд▓реЛрдб рдЧрд░реНрдиреБрдкрд░реНрджреИрди рд░ 10 GB RAM рдорд╛ рдлрд┐рдЯ рдирд╣реБрдиреЗ рдбреЗрдЯрд╛рдХреЛ рдПрдХрджрдо рдареВрд▓реЛ рд╕реЗрдЯ рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрдирдХреЛ рд▓рд╛рдЧрд┐ рдкрд╣рд┐рд▓реЛ ~ 20-16 рдорд╛ рдЖрдлреВрд▓рд╛рдИ рд╕реАрдорд┐рдд рдЧрд░реНрдиреБрд╣реЛрд╕реНред TSV рдлрд╛рдЗрд▓рд╣рд░реВ рдЕрдкрд▓реЛрдб рдЧрд░реНрди рдореИрд▓реЗ рдирд┐рдореНрди рдЖрджреЗрд╢ рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрдВ:

for i in *.tsv; do
    echo $i;
    tail -n +2 $i | pv |
    clickhouse-client --input_format_allow_errors_ratio 0.5 --query='INSERT INTO amazon(marketplace,customer_id,review_id,product_id,product_parent,product_title,product_category,star_rating,helpful_votes,total_votes,vine,verified_purchase,review_headline,review_body,review_date) FORMAT TabSeparated'
done

рдЧреБрдЧрд▓ рдХреНрд▓рд╛рдЙрдбрдорд╛ 1000 GB рдХреЛ рд╕рд╛рдЗрдЬрдХреЛ рдорд╛рдирдХ рдкрд░реНрд╕рд┐рд╕реНрдЯреЗрдиреНрдЯ рдбрд┐рд╕реНрдХ (рдЬреБрди HDD рд╣реЛ) рдорд╛ (рдореИрд▓реЗ рдпреЛ рд╕рд╛рдЗрдЬ рдореБрдЦреНрдп рд░реВрдкрдорд╛ рд▓рд┐рдПрдХреЛ рдЫреБ рддрд╛рдХрд┐ рдЧрддрд┐ рдЕрд▓рд┐ рдмрдвреА рдерд┐рдпреЛ, рдпрджреНрдпрдкрд┐ рдЖрд╡рд╢реНрдпрдХ рд╕рд╛рдЗрдЬрдХреЛ SSD рд╕рд╕реНрддреЛ рд╣реБрдиреЗ рдерд┐рдпреЛ) рдЕрдкрд▓реЛрдбред рдЧрддрд┐ 75 рдХреЛрд░ рдорд╛ рд▓рдЧрднрдЧ ~ 4 MB/рд╕реЗрдХреЗрдиреНрдб рдерд┐рдпреЛред

  • рдореИрд▓реЗ Google рдорд╛ рдХрд╛рдо рдЧрд░реЗрдХреЛ рд░рд┐рдЬрд░реНрднреЗрд╕рди рдЧрд░реНрдиреБрдкрд░реНрдЫ, рддрд░ рдореИрд▓реЗ рд╡реНрдпрдХреНрддрд┐рдЧрдд рдЦрд╛рддрд╛ рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрдХреЛ рдЫреБ рд░ рдпреЛ рд▓реЗрдЦ рдХрдореНрдкрдиреАрдорд╛ рдореЗрд░реЛ рдХрд╛рдорд╕рдБрдЧ рдХреБрдиреИ рд╕рд░реЛрдХрд╛рд░ рдЫреИрдиред

рдо рдпреЛ рд╡рд┐рд╢реЗрд╖ рдбреЗрдЯрд╛рд╕реЗрдЯрдХреЛ рд╕рд╛рде рд╕рдмреИ рджреГрд╖реНрдЯрд╛рдиреНрддрд╣рд░реВ рдЙрддреНрдкрд╛рджрди рдЧрд░реНрдиреЗрдЫреБ, рдХрд┐рдирдХрд┐ рдпреЛ рдореЗрд░реЛ рд╣рд╛рддрдорд╛ рдерд┐рдпреЛред

рдбреЗрдЯрд╛ рд╕реНрдХреНрдпрд╛рдирд┐рдЩ рдкреНрд░рдЧрддрд┐ рджреЗрдЦрд╛рдЙрдиреБрд╣реЛрд╕реН

рдХреНрд▓рд┐рдХрд╣рд╛рдЙрд╕рдорд╛ рднрдПрдХреЛрд▓реЗ рд╣рд╛рдореА рд▓рдЧрд╣рд░реВ рд╕рд╣рд┐рддрдХреЛ рдЯреЗрдмрд▓рдорд╛ рдкреВрд░реНрдг рд╕реНрдХреНрдпрд╛рди рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреЗрдЫреМрдВ, рд░ рдпреЛ рдЕрдкрд░реЗрд╕рдирд▓реЗ рдорд╣рддреНрддреНрд╡рдкреВрд░реНрдг рд╕рдордп рд▓рд┐рди рд╕рдХреНрдЫ рд░ рдпрджрд┐ рдХреЗрд╣реА рдорд┐рд▓реНрджреЛрд╣рд░реВ рдлреЗрд▓рд╛ рдкрд░реЗрдорд╛ рд▓рд╛рдореЛ рд╕рдордпрд╕рдореНрдо рдХреБрдиреИ рдкрдирд┐ рдкрд░рд┐рдгрд╛рдорд╣рд░реВ рдЙрддреНрдкрд╛рджрди рдирдЧрд░реНрди рд╕рдХреНрдЫ, рдпреЛ рджреЗрдЦрд╛рдЙрди рд╕рдХреНрд╖рдо рд╣реБрди рд╕рд▓реНрд▓рд╛рд╣ рджрд┐рдЗрдиреНрдЫред рдкрд░рд┐рдгрд╛рдордХреЛ рд╕рд╛рде рдкрд╣рд┐рд▓реЛ рдкрдЩреНрдХреНрддрд┐рд╣рд░реВ рдкреНрд░рд╛рдкреНрдд рдирднрдПрд╕рдореНрдо рдХреНрд╡реЗрд░реАрдХреЛ рдкреНрд░рдЧрддрд┐ред рдпреЛ рдЧрд░реНрдирдХреЛ рд▓рд╛рдЧрд┐, HTTP рдЗрдиреНрдЯрд░рдлреЗрд╕рдорд╛ рдПрдЙрдЯрд╛ рдкреНрдпрд╛рд░рд╛рдорд┐рдЯрд░ рдЫ рдЬрд╕рд▓реЗ рддрдкрд╛рдИрдВрд▓рд╛рдИ HTTP рд╣реЗрдбрд░рд╣рд░реВрдорд╛ рдкреНрд░рдЧрддрд┐ рдкрдард╛рдЙрди рдЕрдиреБрдорддрд┐ рджрд┐рдиреНрдЫ: send_progress_in_http_headers=1ред рджреБрд░реНрднрд╛рдЧреНрдпрд╡рд╢, рдорд╛рдирдХ рдЧреЛ рдкреБрд╕реНрддрдХрд╛рд▓рдпрд▓реЗ рд╣реЗрдбрд░рд╣рд░реВ рдкрдвреНрди рд╕рдХреНрджреИрди рдХрд┐рдирдХрд┐ рддрд┐рдиреАрд╣рд░реВ рдкреНрд░рд╛рдкреНрдд рд╣реБрдиреНрдЫрдиреН, рддрд░ HTTP 1.0 рдЗрдиреНрдЯрд░рдлреЗрд╕ (1.1 рд╕рдБрдЧ рднреНрд░рдорд┐рдд рдирд╣реБрдиреЗ!) рдХреНрд▓рд┐рдХрд╣рд╛рдЙрд╕рджреНрд╡рд╛рд░рд╛ рд╕рдорд░реНрдерд┐рдд рдЫ, рддреНрдпрд╕реИрд▓реЗ рддрдкрд╛рдИрдВрд▓реЗ рдХреНрд▓рд┐рдХрд╣рд╛рдЙрд╕рдорд╛ рдХрдЪреНрдЪрд╛ TCP рдЬрдбрд╛рди рдЦреЛрд▓реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫ рд░ рддреНрдпрд╣рд╛рдБ рдкрдард╛рдЙрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫред GET /?query=... HTTP/1.0nn рд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рд╣реЗрдбрд░рд╣рд░реВ рд░ рд╢рд░реАрд░ рдХреБрдиреИ рдкрдирд┐ рдПрд╕реНрдХреЗрдкрд┐рдЩ рд╡рд╛ рдЗрдиреНрдХреНрд░рд┐рдкреНрд╢рди рдмрд┐рдирд╛ рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрдиреБрд╣реЛрд╕реН, рддреНрдпрд╕реИрд▓реЗ рдпрд╕ рдЕрд╡рд╕реНрдерд╛рдорд╛ рд╣рд╛рдореАрд▓реЗ рдорд╛рдирдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдкреНрд░рдпреЛрдЧ рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рдкрд░реНрджреИрдиред

ClickHouse рдмрд╛рдЯ рд╕реНрдЯреНрд░рд┐рдорд┐рдЩ рд▓рдЧрд╣рд░реВ

ClickHouse рд▓реЗ рдЕрдкреЗрдХреНрд╖рд╛рдХреГрдд рд▓рд╛рдореЛ рд╕рдордп (реирежрезреп рджреЗрдЦрд┐?) рдХреЛ рд▓рд╛рдЧрд┐ ORDER BY рдХреЛ рд╕рд╛рде рдХреНрд╡реЗрд░реАрд╣рд░реВрдХреЛ рд▓рд╛рдЧрд┐ рдЕрдкреНрдЯрд┐рдорд╛рдЗрдЬреЗрд╕рди рдЧрд░реЗрдХреЛ рдЫ, рддреНрдпрд╕реИрд▓реЗ рдПрдХ рдХреНрд╡реЗрд░реА рдЬрд╕реНрддреИ

SELECT time, millis, message
FROM logs
WHERE message LIKE '%something%'
ORDER BY time DESC, millis DESC

рдпрд╕рд▓реЗ рддреБрд░реБрдиреНрддреИ рд╕реНрдХреНрдпрд╛рди рд╕рдорд╛рдкреНрдд рд╣реБрдиреЗ рдкреНрд░рддреАрдХреНрд╖рд╛ рдирдЧрд░реА рдЖрдлреНрдиреЛ рд╕рдиреНрджреЗрд╢рдорд╛ рд╕рдмрд╕реНрдЯреНрд░рд┐рдЩ "рдХреЗрд╣рд┐" рднрдПрдХреЛ рд▓рд╛рдЗрдирд╣рд░реВ рдлрд░реНрдХрд╛рдЙрди рд╕реБрд░реБ рдЧрд░реНрдиреЗрдЫред

рд╕рд╛рдереИ, рдпреЛ рдзреЗрд░реИ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реБрдиреЗрдЫ рдпрджрд┐ рдХреНрд▓рд┐рдХрд╣рд╛рдЙрд╕ рдЖрдлреИрд▓реЗ рдЕрдиреБрд░реЛрдз рд░рджреНрдж рдЧрд░реЗ рдЬрдм рдпреЛ рдЬрдбрд╛рди рдмрдиреНрдж рдерд┐рдпреЛ, рддрд░ рдпреЛ рдкреВрд░реНрд╡рдирд┐рд░реНрдзрд╛рд░рд┐рдд рд╡реНрдпрд╡рд╣рд╛рд░ рд╣реЛрдЗрдиред рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдЕрдиреБрд░реЛрдз рд░рджреНрдж рд╡рд┐рдХрд▓реНрдк рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рд╕рдХреНрд╖рдо рдЧрд░реНрди рд╕рдХрд┐рдиреНрдЫ cancel_http_readonly_queries_on_client_close=1.

Go рдорд╛ SIGPIPE рдХреЛ рд╕рд╣реА рд╣реНрдпрд╛рдиреНрдбрд▓рд┐рдВрдЧ

рдЬрдм рддрдкрд╛рдЗрдБ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЧрд░реНрдиреБрд╣реБрдиреНрдЫ, рднрдиреНрдиреБрд╣реЛрд╕реН, рдЖрджреЗрд╢ some_cmd | head -n 10, рдареНрдпрд╛рдХреНрдХреИ рдХрд╕рд░реА рдЖрджреЗрд╢ some_cmd рдЬрдм рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд░реЛрдХреНрдЫ head 10 рд▓рд╛рдЗрди рдШрдЯрд╛рдЙрдиреБрднрдпреЛ? рдЬрд╡рд╛рдл рд╕рд░рд▓ рдЫ: рдХрд╣рд┐рд▓реЗ head рд╕рдорд╛рдкреНрдд рд╣реБрдиреНрдЫ, рдкрд╛рдЗрдк рдмрдиреНрдж рд╣реБрдиреНрдЫ, рд░ some_cmd рдХрдорд╛рдгреНрдбрдХреЛ stdout рд╕рд╢рд░реНрдд рд░реВрдкрдорд╛, "рдХрд╣реАрдБ рдкрдирд┐" рджреЗрдЦрд╛рдЙрди рд╕реБрд░реБ рд╣реБрдиреНрдЫред рдХрд╣рд┐рд▓реЗ some_cmd рдмрдиреНрдж рдкрд╛рдЗрдкрдорд╛ рд▓реЗрдЦреНрди рдЦреЛрдЬреНрдЫ, рдпрд╕рд▓реЗ SIGPIPE рд╕рдЩреНрдХреЗрдд рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрджрдЫ, рдЬрд╕рд▓реЗ рдореМрдирддрд╛рдкреВрд░реНрд╡рдХ рдХрд╛рд░реНрдпрдХреНрд░рдорд▓рд╛рдИ рдкреВрд░реНрд╡рдирд┐рд░реНрдзрд╛рд░рд┐рдд рд░реВрдкрдорд╛ рд╕рдорд╛рдкреНрдд рдЧрд░реНрджрдЫ.

Go рдорд╛ рдпреЛ рдкрдирд┐ рдкреВрд░реНрд╡рдирд┐рд░реНрдзрд╛рд░рд┐рдд рд░реВрдкрдорд╛ рд╣реБрдиреНрдЫ, рддрд░ SIGPIPE рд╕рд┐рдЧреНрдирд▓ рд╣реНрдпрд╛рдиреНрдбрд▓рд░рд▓реЗ "signal: SIGPIPE" рд╡рд╛ рдпрд╕реНрддреИ рд╕рдиреНрджреЗрд╢ рдЕрдиреНрддрдорд╛ рдЫрд╛рдкреНрдЫ, рд░ рдпреЛ рд╕рдиреНрджреЗрд╢ рдЦрд╛рд▓реА рдЧрд░реНрди рд╣рд╛рдореАрд▓реЗ SIGPIPE рд▓рд╛рдИ рд╣рд╛рдореАрд▓реЗ рдЪрд╛рд╣реЗрдХреЛ рддрд░рд┐рдХрд╛рд▓реЗ рд╣реНрдпрд╛рдиреНрдбрд▓ рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рдЫ, рдЕрд░реНрдерд╛рддреН рдЪреБрдкрдЪрд╛рдкред рдмрд╛рд╣рд┐рд░ рдирд┐рд╕реНрдХрдиреБрд╣реЛрд╕реН:

ch := make(chan os.Signal)
signal.Notify(ch, syscall.SIGPIPE)
go func() {
    <-ch
    os.Exit(0)
}()

рд╕рдиреНрджреЗрд╢ рд╕рдиреНрджрд░реНрдн рджреЗрдЦрд╛рдЙрдиреБрд╣реЛрд╕реН

рдкреНрд░рд╛рдпрдГ рддрдкрд╛рдЗрдБ рд╕рдиреНрджрд░реНрдн рд╣реЗрд░реНрди рдЪрд╛рд╣рд╛рдиреБрд╣реБрдиреНрдЫ рдЬрд╕рдорд╛ рдХреЗрд╣рд┐ рддреНрд░реБрдЯрд┐ рджреЗрдЦрд╛ рдкрд░реНтАНрдпреЛ (рдЙрджрд╛рд╣рд░рдгрдХрд╛ рд▓рд╛рдЧрд┐, рдХреБрди рдЕрдиреБрд░реЛрдзрд▓реЗ рдЖрддрдВрдХ рдЙрддреНрдкрдиреНрди рдЧрд░реНтАНрдпреЛ, рд╡рд╛ рджреБрд░реНрдШрдЯрдирд╛ рд╣реБрдиреБ рдЕрдШрд┐ рдХреБрди рд╕рдореНрдмрдиреНрдзрд┐рдд рд╕рдорд╕реНрдпрд╛рд╣рд░реВ рджреЗрдЦрд┐рдиреНрдереНрдпреЛ), рд░ grep рдпреЛ -A, -B, рд░ -C рд╡рд┐рдХрд▓реНрдкрд╣рд░реВ рдкреНрд░рдпреЛрдЧ рдЧрд░реА рдЧрд░рд┐рдиреНрдЫ, рдЬрд╕рд▓реЗ рд╕рдиреНрджреЗрд╢рдХреЛ рдкрдЫрд┐, рдЕрдШрд┐ рд░ рд╡рд░рдкрд░ рдХреНрд░рдорд╢рдГ рд░реЗрдЦрд╛рд╣рд░реВрдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд╕рдВрдЦреНрдпрд╛ рджреЗрдЦрд╛рдЙрдБрджрдЫред

рджреБрд░реНрднрд╛рдЧреНрдпрд╡рд╢, рдореИрд▓реЗ ClickHouse рдорд╛ рддреНрдпрд╕реИ рдЧрд░реНрдиреЗ рд╕рдЬрд┐рд▓реЛ рддрд░рд┐рдХрд╛ рдлреЗрд▓рд╛ рдкрд╛рд░реЗрдХреЛ рдЫреИрди, рддреНрдпрд╕реИрд▓реЗ рд╕рдиреНрджрд░реНрдн рджреЗрдЦрд╛рдЙрдирдХреЛ рд▓рд╛рдЧрд┐, рдкрд░рд┐рдгрд╛рдордХреЛ рдкреНрд░рддреНрдпреЗрдХ рдкрдЩреНрдХреНрддрд┐рдорд╛ рдпрд╕ рдкреНрд░рдХрд╛рд░рдХреЛ рдердк рдЕрдиреБрд░реЛрдз рдкрдард╛рдЗрдиреНрдЫ (рд╡рд┐рд╡рд░рдгрд╣рд░реВ рдХреНрд░рдордмрджреНрдзрдорд╛ рдирд┐рд░реНрднрд░ рдЧрд░реНрджрдЫ рд░ рд╕рдиреНрджрд░реНрдн рдЕрдШрд┐ рджреЗрдЦрд╛рдЗрдПрдХреЛ рдЫ рдХрд┐ рдЫреИрдиред рд╡рд╛ рдкрдЫрд┐):

SELECT time,millis,review_body FROM amazon
WHERE (time = '╨Т╨а╨Х╨Ь╨п_╨б╨Ю╨С╨л╨в╨Ш╨п' AND millis < ╨Ь╨Ш╨Ы╨Ы╨Ш╨б╨Х╨Ъ╨г╨Э╨Ф╨л_╨б╨Ю╨С╨л╨в╨Ш╨п) OR (time < '╨Т╨а╨Х╨Ь╨п_╨б╨Ю╨С╨л╨в╨Ш╨п')
ORDER BY time DESC, millis DESC
LIMIT ╨Ъ╨Ю╨Ы╨Ш╨з╨Х╨б╨в╨Т╨Ю_╨б╨в╨а╨Ю╨Ъ_╨Ъ╨Ю╨Э╨в╨Х╨Ъ╨б╨в╨Р
SETTINGS max_threads=1

рдХрд┐рдирдХреА рдЕрдиреБрд░реЛрдз рд▓рдЧрднрдЧ рддреБрд░реБрдиреНрддреИ рдХреНрд▓рд┐рдХрд╣рд╛рдЙрд╕рд▓реЗ рд╕рдореНрдмрдиреНрдзрд┐рдд рд▓рд╛рдЗрди рдлрд░реНрдХрд╛рдП рдкрдЫрд┐ рдкрдард╛рдЗрдиреНрдЫ, рдпреЛ рдХреНрдпрд╛рд╕рдорд╛ рд╕рдорд╛рдкреНрдд рд╣реБрдиреНрдЫ рд░ рд╕рд╛рдорд╛рдиреНрдпрддрдпрд╛ рдЕрдиреБрд░реЛрдз рдПрдХрджрдо рдЪрд╛рдБрдбреЛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реБрдиреНрдЫ рд░ рдереЛрд░реИ CPU рдЦрдкрдд рд╣реБрдиреНрдЫ (рд╕рд╛рдорд╛рдиреНрдпрддрдпрд╛ рдЕрдиреБрд░реЛрдзрд▓реЗ рдореЗрд░реЛ рднрд░реНрдЪреБрдЕрд▓ рдореЗрд╕рд┐рдирдорд╛ рд▓рдЧрднрдЧ ~ 6 рдПрдордПрд╕ рд▓рд┐рдиреНрдЫ)ред

рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдордпрдорд╛ рдирдпрд╛рдБ рд╕рдиреНрджреЗрд╢рд╣рд░реВ рджреЗрдЦрд╛рдЙрдиреБрд╣реЛрд╕реН

рдЖрдЧрдорди рд╕рдиреНрджреЗрд╢рд╣рд░реВ (рд▓рдЧрднрдЧ) рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдордпрдорд╛ рджреЗрдЦрд╛рдЙрдирдХреЛ рд▓рд╛рдЧрд┐, рд╣рд╛рдореАрд▓реЗ рдкрд╣рд┐рд▓реЗ рд╕рд╛рдордирд╛ рдЧрд░реЗрдХреЛ рдЕрдиреНрддрд┐рдо рдЯрд╛рдЗрдорд╕реНрдЯреНрдпрд╛рдореНрдк рд╕рдореНрдЭреЗрд░, рдкреНрд░рддреНрдпреЗрдХ рдХреЗрд╣реА рд╕реЗрдХреЗрдиреНрдбрдорд╛ рдПрдХ рдкрдЯрдХ рдЕрдиреБрд░реЛрдз рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЧрд░реНрдЫреМрдВред

рдЖрджреЗрд╢ рдЙрджрд╛рд╣рд░рдгрд╣рд░реВ

рд╕рд╛рдорд╛рдиреНрдп logscli рдЖрджреЗрд╢рд╣рд░реВ рд╡реНрдпрд╡рд╣рд╛рд░рдорд╛ рдХрд╕реНрддреЛ рджреЗрдЦрд┐рдиреНрдЫрдиреН?

рдпрджрд┐ рддрдкрд╛рдИрдВрд▓реЗ рдЕрдореЗрдЬрди рдбрд╛рдЯрд╛рд╕реЗрдЯ рдбрд╛рдЙрдирд▓реЛрдб рдЧрд░реНрдиреБрднрдпреЛ рдЬреБрди рдореИрд▓реЗ рд▓реЗрдЦрдХреЛ рд╕реБрд░реБрдорд╛ рдЙрд▓реНрд▓реЗрдЦ рдЧрд░реЗрдХреЛ рдЫреБ, рддрдкрд╛рдИрдВрд▓реЗ рдирд┐рдореНрди рдЖрджреЗрд╢рд╣рд░реВ рдЪрд▓рд╛рдЙрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫ:

# ╨Я╨╛╨║╨░╨╖╨░╤В╤М ╤Б╤В╤А╨╛╨║╨╕, ╨│╨┤╨╡ ╨▓╤Б╤В╤А╨╡╤З╨░╨╡╤В╤Б╤П ╤Б╨╗╨╛╨▓╨╛ walmart
$ logscli -F 'walmart' | less

# ╨Я╨╛╨║╨░╨╖╨░╤В╤М ╤Б╨░╨╝╤Л╨╡ ╤Б╨▓╨╡╨╢╨╕╨╡ 10 ╤Б╤В╤А╨╛╨║, ╨│╨┤╨╡ ╨▓╤Б╤В╤А╨╡╤З╨░╨╡╤В╤Б╤П "terrible"
$ logscli -F terrible -limit 10

# ╨в╨╛ ╨╢╨╡ ╤Б╨░╨╝╨╛╨╡ ╨▒╨╡╨╖ -limit:
$ logscli -F terrible | head -n 10

# ╨Я╨╛╨║╨░╨╖╨░╤В╤М ╨▓╤Б╨╡ ╤Б╤В╤А╨╛╨║╨╕, ╨┐╨╛╨┤╤Е╨╛╨┤╤П╤Й╨╕╨╡ ╨┐╨╛╨┤ /times [0-9]/, ╨╜╨░╨┐╨╕╤Б╨░╨╜╨╜╤Л╨╡ ╨┤╨╗╤П vine ╨╕ ╤Г ╨║╨╛╤В╨╛╤А╤Л╤Е ╨▓╤Л╤Б╨╛╨║╨╕╨╣ ╤А╨╡╨╣╤В╨╕╨╜╨│
$ logscli -E 'times [0-9]' -where="vine='Y' AND star_rating>4" | less

# ╨Я╨╛╨║╨░╨╖╨░╤В╤М ╨▓╤Б╨╡ ╤Б╤В╤А╨╛╨║╨╕ ╤Б╨╛ ╤Б╨╗╨╛╨▓╨╛╨╝ "panic" ╨╕ 3 ╤Б╤В╤А╨╛╨║╨╕ ╨║╨╛╨╜╤В╨╡╨║╤Б╤В╨░ ╨▓╨╛╨║╤А╤Г╨│
$ logscli -F 'panic' -C 3 | less

# ╨Э╨╡╨┐╤А╨╡╤А╤Л╨▓╨╜╨╛ ╨┐╨╛╨║╨░╨╖╤Л╨▓╨░╤В╤М ╨╜╨╛╨▓╤Л╨╡ ╤Б╤В╤А╨╛╨║╨╕ ╤Б╨╛ ╤Б╨╗╨╛╨▓╨╛╨╝ "5-star"
$ logscli -F '5-star' -tailf

рд╕рдиреНрджрд░реНрдн

рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдХреЛрдб (рдХрд╛рдЧрдЬрд╛рдд рдмрд┐рдирд╛) github рдорд╛ рдЙрдкрд▓рдмреНрдз рдЫ https://github.com/YuriyNasretdinov/logscliред рдХреНрд▓рд┐рдХрд╣рд╛рдЙрд╕рдорд╛ рдЖрдзрд╛рд░рд┐рдд рд▓рдЧрд╣рд░реВ рд╣реЗрд░реНрдирдХреЛ рд▓рд╛рдЧрд┐ рдХрдиреНрд╕реЛрд▓ рдЗрдиреНрдЯрд░рдлреЗрд╕рдХреЛ рд▓рд╛рдЧрд┐ рдореЗрд░реЛ рд╡рд┐рдЪрд╛рд░рдорд╛ рддрдкрд╛рдИрдВрдХреЛ рд╡рд┐рдЪрд╛рд░рд╣рд░реВ рд╕реБрдиреНрди рдкрд╛рдЙрдБрджрд╛ рдо рдЦреБрд╕реА рд╣реБрдиреЗрдЫреБред

рд╕реНрд░реЛрдд: www.habr.com

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдердкреНрди