рдЖрдореНрд╣реА рд▓реЙрдЧ рдкрд╛рд╣рдгреНрдпрд╛рд╕рд╛рдареА рдЬрдЧрд╛рддреАрд▓ рд╕рд░реНрд╡рд╛рдд рд╕реЛрдпреАрд╕реНрдХрд░ рдЗрдВрдЯрд░рдлреЗрд╕ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдд рдЖрд╣реЛрдд*

рдЖрдореНрд╣реА рд▓реЙрдЧ рдкрд╛рд╣рдгреНрдпрд╛рд╕рд╛рдареА рдЬрдЧрд╛рддреАрд▓ рд╕рд░реНрд╡рд╛рдд рд╕реЛрдпреАрд╕реНрдХрд░ рдЗрдВрдЯрд░рдлреЗрд╕ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдд рдЖрд╣реЛрдд* рдЬрд░ рддреБрдореНрд╣реА рдХрдзреАрд╣реА рд▓реЙрдЧ рдкрд╛рд╣рдгреНрдпрд╛рд╕рд╛рдареА рд╡реЗрдм рдЗрдВрдЯрд░рдлреЗрд╕ рд╡рд╛рдкрд░рд▓реЗ рдЕрд╕рддреАрд▓, рддрд░ рддреБрдордЪреНрдпрд╛ рд▓рдХреНрд╖рд╛рдд рдЖрд▓реЗ рдЕрд╕реЗрд▓ рдХреА, рдирд┐рдпрдорд╛рдиреБрд╕рд╛рд░, рд╣реЗ рдЗрдВрдЯрд░рдлреЗрд╕ рдХрд╕реЗ рдЕрд╡рдЬрдб рдЕрд╕рддрд╛рдд рдЖрдгрд┐ (рдмрд╣реБрддреЗрдХрджрд╛) рдлрд╛рд░рд╕реЗ рд╕реЛрдпреАрд╕реНрдХрд░ рдЖрдгрд┐ рдкреНрд░рддрд┐рд╕рд╛рдж рджреЗрдд рдирд╛рд╣реАрдд. рдХрд╛рд╣реА рддреБрдореНрд╣рд╛рд▓рд╛ рдЕрдВрдЧрд╡рд│рдгреА рдкрдбреВ рд╢рдХрддрд╛рдд, рдХрд╛рд╣реА рдЕрдЧрджреА рднрдпрдВрдХрд░ рдЖрд╣реЗрдд, рдкрд░рдВрддреБ рдорд▓рд╛ рдЕрд╕реЗ рд╡рд╛рдЯрддреЗ рдХреА рд╕рд░реНрд╡ рд╕рдорд╕реНрдпрд╛рдВрдЪреЗ рдХрд╛рд░рдг рдореНрд╣рдгрдЬреЗ рдЖрдореНрд╣реА рд▓реЙрдЧ рдкрд╛рд╣рдгреНрдпрд╛рдЪреНрдпрд╛ рдХрд╛рдорд╛рдХрдбреЗ рдЪреБрдХреАрдЪреНрдпрд╛ рдкрджреНрдзрддреАрдиреЗ рд╕рдВрдкрд░реНрдХ рд╕рд╛рдзрддреЛ: рдЖрдореНрд╣реА рдПрдХ рд╡реЗрдм рдЗрдВрдЯрд░рдлреЗрд╕ рддрдпрд╛рд░ рдХрд░рдгреНрдпрд╛рдЪрд╛ рдкреНрд░рдпрддреНрди рдХрд░рддреЛ рдЬреЗрдереЗ CLI (рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдЗрдВрдЯрд░рдлреЗрд╕) рдЪрд╛рдВрдЧрд▓реЗ рдХрд╛рд░реНрдп рдХрд░рддреЗ. рдорд▓рд╛ рд╡реИрдпрдХреНрддрд┐рдХрд░рд┐рддреНрдпрд╛ рдЯреЗрд▓, рдЧреНрд░реЗрдк, awk рдЖрдгрд┐ рдЗрддрд░рд╛рдВрд╕рд╣ рдХрд╛рдо рдХрд░рдгреНрдпрд╛рд╕ рдЦреВрдк рд╕реЛрдпреАрд╕реНрдХрд░ рдЖрд╣реЗ рдЖрдгрд┐ рдореНрд╣рдгреВрдирдЪ рдорд╛рдЭреНрдпрд╛рд╕рд╛рдареА рд▓реЙрдЧрд╕рд╣ рдХрд╛рд░реНрдп рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдЖрджрд░реНрд╢ рдЗрдВрдЯрд░рдлреЗрд╕ рдЯреЗрд▓ рдЖрдгрд┐ рдЧреНрд░реЗрдк рд╕рд╛рд░рдЦрд╛рдЪ рдЕрд╕реЗрд▓, рдкрд░рдВрддреБ рдЬреНрдпрд╛рдЪрд╛ рд╡рд╛рдкрд░ рдЕрдиреЗрдХ рд╕рд░реНрд╡реНрд╣рд░рд╡рд░реВрди рдЖрд▓реЗрд▓реЗ рд▓реЙрдЧ рд╡рд╛рдЪрдгреНрдпрд╛рд╕рд╛рдареА рджреЗрдЦреАрд▓ рдХреЗрд▓рд╛ рдЬрд╛рдК рд╢рдХрддреЛ. рдЕрд░реНрдерд╛рдд, рддреЗ рдХреНрд▓рд┐рдХрд╣рд╛рдКрд╕рд╡рд░реВрди рд╡рд╛рдЪрд╛!

*рд╣рдмреНрд░рд╛ рд╡рд╛рдкрд░рдХрд░реНрддреНрдпрд╛рдЪреНрдпрд╛ рд╡реИрдпрдХреНрддрд┐рдХ рдорддрд╛рдиреБрд╕рд╛рд░ рдпреВрд░реЙрдХ

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 рдЙрдкрдпреБрдХреНрддрддрд╛.

рдЕрдВрдорд▓рдмрдЬрд╛рд╡рдгреА

рдореА рдЕрд╕реЗ рдЧреГрд╣реАрдд рдзрд░рддреЛ рдХреА рдХреНрд▓рд┐рдХрд╣рд╛рдКрд╕рд╡рд░ рд▓реЙрдЧ рдХрд╕реЗ рд╡рд┐рддрд░рд┐рдд рдХрд░рд╛рдпрдЪреЗ рд╣реЗ рддреБрдореНрд╣рд╛рд▓рд╛ рдЖрдзреАрдЪ рдорд╛рд╣рд┐рдд рдЖрд╣реЗ. рдирд╕рд▓реНрдпрд╛рд╕, рдореА рдкреНрд░рдпрддреНрди рдХрд░рдгреНрдпрд╛рдЪреА рд╢рд┐рдлрд╛рд░рд╕ рдХрд░рддреЛ LSD ╨╕ рдорд╛рдВрдЬрд░реАрдЪреЗ рдШрд░рдЖрдгрд┐ рд▓реЙрдЧ рд╡рд┐рддрд░рдг рдмрджреНрджрд▓ рд╣рд╛ рд▓реЗрдЦ.

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

рдореНрд╣рдгрдЬреЗрдЪ, рдЖрдореНрд╣рд╛рд▓рд╛ рдЕрдВрджрд╛рдЬреЗ рдЦрд╛рд▓реАрд▓ рд╕рд╛рд░рдгреА рдпреЛрдЬрдиреЗрдЪреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдЖрд╣реЗ:

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

рджреБрд░реНрджреИрд╡рд╛рдиреЗ, рдорд▓рд╛ рддрд╛рдмрдбрддреЛрдм рд╡рд╛рд╕реНрддрд╡рд╡рд╛рджреА рд▓реЙрдЧ рдЕрд╕рд▓реЗрд▓реЗ рдХреЛрдгрддреЗрд╣реА рдЦреБрд▓реЗ рд╕реНрд░реЛрдд рд╕рд╛рдкрдбрд▓реЗ рдирд╛рд╣реАрдд рдЬреЗ рдореА рдорд┐рд│рд╡реВ рд╢рдХрд▓реЛ рдЖрдгрд┐ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░реВ рд╢рдХрд▓реЛ, рдореНрд╣рдгреВрди рдореА рд╣реЗ рдЙрджрд╛рд╣рд░рдг рдореНрд╣рдгреВрди рдШреЗрддрд▓реЗ 2015 рдкреВрд░реНрд╡реА Amazon рд╡рд░реАрд▓ рдЙрддреНрдкрд╛рджрдирд╛рдВрдЪреА рдкреБрдирд░рд╛рд╡рд▓реЛрдХрдиреЗ. рдЕрд░реНрдерд╛рдд, рддреНрдпрд╛рдВрдЪреА рд░рдЪрдирд╛ рдордЬрдХреВрд░ рд▓реЙрдЧ рд╕рд╛рд░рдЦреАрдЪ рдирд╛рд╣реА, рдкрд░рдВрддреБ рдЪрд┐рддреНрд░рдгрд╛рдЪреНрдпрд╛ рдЙрджреНрджреЗрд╢рд╛рдиреЗ рд╣реЗ рдорд╣рддреНрддреНрд╡рд╛рдЪреЗ рдирд╛рд╣реА.

Amazon рдкреБрдирд░рд╛рд╡рд▓реЛрдХрдиреЗ ClickHouse рд╡рд░ рдЕрдкрд▓реЛрдб рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рд╕реВрдЪрдирд╛

рдЪрд▓рд╛ рдПрдХ рдЯреЗрдмрд▓ рддрдпрд╛рд░ рдХрд░реВрдпрд╛:

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

Amazon рдбреЗрдЯрд╛рд╕реЗрдЯрдордзреНрдпреЗ рдкреБрдирд░рд╛рд╡рд▓реЛрдХрдирд╛рд╕рд╛рдареА рдлрдХреНрдд рдПрдХ рддрд╛рд░реАрдЦ рдЖрд╣реЗ, рдкрд░рдВрддреБ рдЕрдЪреВрдХ рд╡реЗрд│ рдирд╛рд╣реА, рдореНрд╣рдгреВрди рд╣рд╛ рдбреЗрдЯрд╛ рд░рдБрдбрдирд╕рд╣ рднрд░реВрдпрд╛.

10 GB RAM рдордзреНрдпреЗ рди рдмрд╕рдгрд╛рд░рд╛ рдбреЗрдЯрд╛рдЪрд╛ рдмрд▒реНрдпрд╛рдкреИрдХреА рдореЛрдард╛ рд╕рдВрдЪ рдорд┐рд│рд╡рд┐рдгреНрдпрд╛рд╕рд╛рдареА рддреБрдореНрд╣рд╛рд▓рд╛ рд╕рд░реНрд╡ tsv рдлрд╛рдпрд▓реА рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдгреНрдпрд╛рдЪреА рдЖрдгрд┐ рдкреНрд░рдердо ~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

Google рдХреНрд▓рд╛рдЙрдбрдордзреНрдпреЗ 1000 GB рдЖрдХрд╛рд░рд╛рдЪреНрдпрд╛ рдорд╛рдирдХ рдкрд░реНрд╕рд┐рд╕реНрдЯрдВрдЯ рдбрд┐рд╕реНрдХрд╡рд░ (рдЬреЗ HDD рдЖрд╣реЗ) (рдореА рд╣рд╛ рдЖрдХрд╛рд░ рдкреНрд░рд╛рдореБрдЦреНрдпрд╛рдиреЗ рдШреЗрддрд▓рд╛ рдЖрд╣реЗ рдЬреЗрдгреЗрдХрд░реВрди рд╡реЗрдЧ рдереЛрдбрд╛ рдЬрд╛рд╕реНрдд рдЕрд╕реЗрд▓, рдЬрд░реА рдЖрд╡рд╢реНрдпрдХ рдЖрдХрд╛рд░рд╛рдЪрд╛ SSD рд╕реНрд╡рд╕реНрдд рдЭрд╛рд▓рд╛ рдЕрд╕рддрд╛) рдЕрдкрд▓реЛрдб 75 рдХреЛрд░рд╡рд░ рд╡реЗрдЧ рдЕрдВрджрд╛рдЬреЗ ~ 4 MB/рд╕реЗрдХрдВрдж рд╣реЛрддрд╛.

  • рдореА Google рд╡рд░ рдХрд╛рдо рдХрд░рдд рдЕрд╕рд▓реНрдпрд╛рдЪреЗ рдЖрд░рдХреНрд╖рдг рдХрд░рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ, рдкрд░рдВрддреБ рдореА рд╡реИрдпрдХреНрддрд┐рдХ рдЦрд╛рддреЗ рд╡рд╛рдкрд░рд▓реЗ рдЖрд╣реЗ рдЖрдгрд┐ рдпрд╛ рд▓реЗрдЦрд╛рдЪрд╛ рдХрдВрдкрдиреАрддреАрд▓ рдорд╛рдЭреНрдпрд╛ рдХрд╛рдорд╛рд╢реА рдХрд╛рд╣реАрд╣реА рд╕рдВрдмрдВрдз рдирд╛рд╣реА

рдореА рдпрд╛ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдбреЗрдЯрд╛рд╕реЗрдЯрд╕рд╣ рд╕рд░реНрд╡ рдЪрд┐рддреНрд░реЗ рддрдпрд╛рд░ рдХрд░реЗрди, рдХрд╛рд░рдг рдорд╛рдЭреНрдпрд╛ рд╣рд╛рддрд╛рдд рдПрд╡рдвреЗрдЪ рдЖрд╣реЗ.

рдбреЗрдЯрд╛ рд╕реНрдХреЕрдирд┐рдВрдЧ рдкреНрд░рдЧрддреА рджрд░реНрд╢рд╡рд╛

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

ClickHouse рд╡рд░реВрди рдкреНрд░рд╡рд╛рд╣рд┐рдд рд▓реЙрдЧ

рдХреНрд▓рд┐рдХрд╣рд╛рдКрд╕рдордзреНрдпреЗ рддреБрд▓рдиреЗрдиреЗ рджреАрд░реНрдШ рдХрд╛рд│рд╛рд╕рд╛рдареА (2019 рдкрд╛рд╕реВрди?) 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.

рдЧреЛ рдордзреНрдпреЗ SIGPIPE рдЪреА рдпреЛрдЧреНрдп рд╣рд╛рддрд╛рд│рдгреА

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

рдЧреЛ рдордзреНрдпреЗ рд╣реЗ рджреЗрдЦреАрд▓ рдбреАрдлреЙрд▓реНрдЯрдиреБрд╕рд╛рд░ рдШрдбрддреЗ, рдкрд░рдВрддреБ SIGPIPE рд╕рд┐рдЧреНрдирд▓ рд╣рдБрдбрд▓рд░ рд╢реЗрд╡рдЯреА "signal: SIGPIPE" рдХрд┐рдВрд╡рд╛ рддрддреНрд╕рдо рд╕рдВрджреЗрд╢ рджреЗрдЦреАрд▓ рдореБрджреНрд░рд┐рдд рдХрд░рддреЛ рдЖрдгрд┐ рд╣рд╛ рд╕рдВрджреЗрд╢ рд╕рд╛рдл рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдЖрдореНрд╣рд╛рд▓рд╛ рдлрдХреНрдд SIGPIPE рд▓рд╛ рдЖрдореНрд╣рд╛рд▓рд╛ рд╣рд╡реЗ рддрд╕реЗ рд╣рд╛рддрд╛рд│рд╛рд╡реЗ рд▓рд╛рдЧреЗрд▓, рдореНрд╣рдгрдЬреЗ рдлрдХреНрдд рд╢рд╛рдВрддрдкрдгреЗ рдмрд╛рд╣реЗрд░ рдкрдбрд╛:

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

рд╕рдВрджреЗрд╢ рд╕рдВрджрд░реНрдн рджрд░реНрд╢рд╡рд╛

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

рджреБрд░реНрджреИрд╡рд╛рдиреЗ, рдорд▓рд╛ рдХреНрд▓рд┐рдХрд╣рд╛рдКрд╕рдордзреНрдпреЗ рдЕрд╕реЗ рдХрд░рдгреНрдпрд╛рдЪрд╛ рд╕реЛрдкрд╛ рдорд╛рд░реНрдЧ рд╕рд╛рдкрдбрд▓рд╛ рдирд╛рд╣реА, рддреНрдпрд╛рдореБрд│реЗ рд╕рдВрджрд░реНрдн рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА, рдпрд╛рд╕рд╛рд░рдЦреА рдЕрддрд┐рд░рд┐рдХреНрдд рд╡рд┐рдирдВрддреА рдирд┐рдХрд╛рд▓рд╛рдЪреНрдпрд╛ рдкреНрд░рддреНрдпреЗрдХ рдУрд│реАрд╡рд░ рдкрд╛рдард╡рд┐рд▓реА рдЬрд╛рддреЗ (рддрдкрд╢реАрд▓ рд╡рд░реНрдЧреАрдХрд░рдгрд╛рд╡рд░ рдЕрд╡рд▓рдВрдмреВрди рдЕрд╕рддреЗ рдЖрдгрд┐ рд╕рдВрджрд░реНрдн рдЖрдзреА рджрд░реНрд╢рд╡рд┐рд▓рд╛ рдЬрд╛рддреЛ рдХреА рдирд╛рд╣реА. рдХрд┐рдВрд╡рд╛ рдирдВрддрд░):

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 ms рд▓рд╛рдЧрддрд╛рдд).

рд░рд┐рдЕрд▓ рдЯрд╛рдЗрдордордзреНрдпреЗ рдирд╡реАрди рд╕рдВрджреЗрд╢ рджрд░реНрд╢рд╡рд╛

рдпреЗрдгрд╛рд░реЗ рд╕рдВрджреЗрд╢ (рдЬрд╡рд│рдЬрд╡рд│) рд░рд┐рдЕрд▓ рдЯрд╛рдЗрдордордзреНрдпреЗ рджрд░реНрд╢рд╡рд┐рдгреНрдпрд╛рд╕рд╛рдареА, рдЖрдореНрд╣реА рдпрд╛рдЖрдзреА рдЖрд▓реЗрд▓реНрдпрд╛ рд╢реЗрд╡рдЯрдЪреНрдпрд╛ рдЯрд╛рдЗрдорд╕реНрдЯреЕрдореНрдкрд▓рд╛ рд▓рдХреНрд╖рд╛рдд рдареЗрд╡реВрди рджрд░ рдХрд╛рд╣реА рд╕реЗрдХрдВрджрд╛рдВрдиреА рдПрдХрджрд╛ рд╡рд┐рдирдВрддреА рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд░рддреЛ.

рдЖрдЬреНрдЮрд╛ рдЙрджрд╛рд╣рд░рдгреЗ

рд╕рд░рд╛рд╡ рдордзреНрдпреЗ рдард░рд╛рд╡рд┐рдХ logscli рдХрдорд╛рдВрдбреНрд╕ рдХрд╢рд╛ рджрд┐рд╕рддрд╛рдд?

рдореА рд▓реЗрдЦрд╛рдЪреНрдпрд╛ рд╕реБрд░реБрд╡рд╛рддреАрд▓рд╛ рдирдореВрдж рдХреЗрд▓реЗрд▓рд╛ Amazon рдбреЗрдЯрд╛рд╕реЗрдЯ рддреБрдореНрд╣реА рдбрд╛рдЙрдирд▓реЛрдб рдХреЗрд▓рд╛ рдЕрд╕реЗрд▓, рддрд░ рддреБрдореНрд╣реА рдЦрд╛рд▓реАрд▓ рдЖрджреЗрд╢ рдЪрд╛рд▓рд╡реВ рд╢рдХрддрд╛:

# ╨Я╨╛╨║╨░╨╖╨░╤В╤М ╤Б╤В╤А╨╛╨║╨╕, ╨│╨┤╨╡ ╨▓╤Б╤В╤А╨╡╤З╨░╨╡╤В╤Б╤П ╤Б╨╗╨╛╨▓╨╛ 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

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

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

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

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдЬреЛрдбрд╛