เช…เชฎเซ‡ เชฒเซ‹เช— เชœเซ‹เชตเชพ เชฎเชพเชŸเซ‡ เชตเชฟเชถเซเชตเชฎเชพเช‚ เชธเซŒเชฅเซ€ เช…เชจเซเช•เซ‚เชณ เช‡เชจเซเชŸเชฐเชซเซ‡เชธ เชตเชฟเช•เชธเชพเชตเซ€ เชฐเชนเซเชฏเชพ เช›เซ€เช*

เช…เชฎเซ‡ เชฒเซ‹เช— เชœเซ‹เชตเชพ เชฎเชพเชŸเซ‡ เชตเชฟเชถเซเชตเชฎเชพเช‚ เชธเซŒเชฅเซ€ เช…เชจเซเช•เซ‚เชณ เช‡เชจเซเชŸเชฐเชซเซ‡เชธ เชตเชฟเช•เชธเชพเชตเซ€ เชฐเชนเซเชฏเชพ เช›เซ€เช* เชœเซ‹ เชคเชฎเซ‡ เช•เซเชฏเชพเชฐเซ‡เชฏ เชฒเซ‹เช—เซเชธ เชœเซ‹เชตเชพ เชฎเชพเชŸเซ‡ เชตเซ‡เชฌ เชˆเชจเซเชŸเชฐเชซเซ‡เชธเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซเชฏเซ‹ เชนเซ‹เชฏ, เชคเซ‹ เชคเชฎเซ‡ เช•เชฆเชพเชš เชจเซ‹เช‚เชงเซเชฏเซเช‚ เชนเชถเซ‡ เช•เซ‡ เช•เซ‡เชตเซ€ เชฐเซ€เชคเซ‡, เชเช• เชจเชฟเชฏเชฎ เชคเชฐเซ€เช•เซ‡, เช† เชˆเชจเซเชŸเชฐเชซเซ‡เชธเซ‹ เชฌเซ‹เชœเชพเชฐเซ‚เชช เช›เซ‡ เช…เชจเซ‡ (เช˜เชฃเซ€เชตเชพเชฐ) เช–เซ‚เชฌ เช…เชจเซเช•เซ‚เชณ เช…เชจเซ‡ เชชเซเชฐเชคเชฟเชญเชพเชต เช†เชชเชคเชพ เชจเชฅเซ€. เช•เซ‡เชŸเชฒเชพเช•เชจเซ€ เชคเชฎเชจเซ‡ เช†เชฆเชค เชชเชกเซ€ เชถเช•เซ‡ เช›เซ‡, เช•เซ‡เชŸเชฒเซ€เช• เชเช•เชฆเชฎ เชญเชฏเช‚เช•เชฐ เช›เซ‡, เชชเชฐเช‚เชคเซ เชฎเชจเซ‡ เชฒเชพเช—เซ‡ เช›เซ‡ เช•เซ‡ เชฌเชงเซ€ เชธเชฎเชธเซเชฏเชพเช“เชจเซเช‚ เช•เชพเชฐเชฃ เช เช›เซ‡ เช•เซ‡ เช…เชฎเซ‡ เชฒเซ‹เช— เชœเซ‹เชตเชพเชจเชพ เช•เชพเชฐเซเชฏเชจเซ‡ เช–เซ‹เชŸเซ€ เชฐเซ€เชคเซ‡ เชธเช‚เชชเชฐเซเช• เช•เชฐเซ€เช เช›เซ€เช: เช…เชฎเซ‡ เชเช• เชตเซ‡เชฌ เช‡เชจเซเชŸเชฐเชซเซ‡เชธ เชฌเชจเชพเชตเชตเชพเชจเซ‹ เชชเซเชฐเชฏเชพเชธ เช•เชฐเซ€เช เช›เซ€เช เชœเซเชฏเชพเช‚ CLI (เช•เชฎเชพเชจเซเชก เชฒเชพเช‡เชจ เช‡เชจเซเชŸเชฐเชซเซ‡เชธ) เชตเชงเซ เชธเชพเชฐเซ€ เชฐเซ€เชคเซ‡ เช•เชพเชฎ เช•เชฐเซ‡ เช›เซ‡. เชนเซเช‚ เช…เช‚เช—เชค เชฐเซ€เชคเซ‡ tail, grep, awk เช…เชจเซ‡ เช…เชจเซเชฏ เชธเชพเชฅเซ‡ เช•เชพเชฎ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ เช–เซ‚เชฌ เชœ เช†เชฐเชพเชฎเชฆเชพเชฏเช• เช›เซเช‚ เช…เชจเซ‡ เชคเซ‡เชฅเซ€ เชฎเชพเชฐเชพ เชฎเชพเชŸเซ‡ เชฒเซ‹เช— เชธเชพเชฅเซ‡ เช•เชพเชฎ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡เชจเซเช‚ เช†เชฆเชฐเซเชถ เชˆเชจเซเชŸเชฐเชซเซ‡เชธ tail เช…เชจเซ‡ grep เชœเซ‡เชตเซเช‚ เชœ เชนเชถเซ‡, เชชเชฐเช‚เชคเซ เชœเซ‡เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช˜เชฃเชพ เชธเชฐเซเชตเชฐเซเชธเชฎเชพเช‚เชฅเซ€ เช†เชตเชคเชพ เชฒเซ‹เช—เชจเซ‡ เชตเชพเช‚เชšเชตเชพ เชฎเชพเชŸเซ‡ เชชเชฃ เชฅเชˆ เชถเช•เซ‡ เช›เซ‡. เชคเซ‡ เช›เซ‡, เช…เชฒเชฌเชคเซเชค, เชคเซ‡เชฎเชจเซ‡ เช•เซเชฒเชฟเช•เชนเชพเช‰เชธเชฎเชพเช‚เชฅเซ€ เชตเชพเช‚เชšเซ‹!

*เชนเชพเชฌเซเชฐเชพ เชตเชชเชฐเชพเชถเช•เชฐเซเชคเชพเชจเชพ เช…เช‚เช—เชค เช…เชญเชฟเชชเซเชฐเชพเชฏ เชฎเซเชœเชฌ เชฎเชพเชจเซ€ เช—เชฏเชพ เชคเชฎเชจเซ‡

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 เช‰เชชเชฏเซ‹เช—เชฟเชคเชพเช“.

ะ ะตะฐะปะธะทะฐั†ะธั

เชนเซเช‚ เชงเชพเชฐเซ€เชถ เช•เซ‡ เชคเชฎเซ‡ เชชเชนเซ‡เชฒเซ‡เชฅเซ€ เชœ เช•เซ‹เชˆเช• เชฐเซ€เชคเซ‡ เชœเชพเชฃเซ‹ เช›เซ‹ เช•เซ‡ เช•เซเชฒเชฟเช•เชนเชพเช‰เชธ เชชเชฐ เชฒเซ‹เช— เช•เซ‡เชตเซ€ เชฐเซ€เชคเซ‡ เชชเชนเซ‹เช‚เชšเชพเชกเชตเชพ. เชœเซ‹ เชจเชนเชฟเช‚, เชคเซ‹ เชนเซเช‚ เชคเซ‡เชจเซ‹ เชชเซเชฐเชฏเชพเชธ เช•เชฐเชตเชพเชจเซ€ เชญเชฒเชพเชฎเชฃ เช•เชฐเซเช‚ เช›เซเช‚ เชเชฒเชเชธเชกเซ€ ะธ เชฌเชฟเชฒเชพเชกเซ€เชจเซเช‚ เชฌเชšเซเชšเซเช‚, เช…เชจเซ‡ เชฒเซ‹เช— เชกเชฟเชฒเชฟเชตเชฐเซ€ เชตเชฟเชถเซ‡เชจเซ‹ เช† เชฒเซ‡เช–.

เชชเซเชฐเชฅเชฎ เชคเชฎเชพเชฐเซ‡ เช†เชงเชพเชฐ เชฏเซ‹เชœเชจเชพ เชชเชฐ เชจเชฟเชฐเซเชฃเชฏ เชฒเซ‡เชตเชพเชจเซ€ เชœเชฐเซ‚เชฐ เช›เซ‡. เชคเชฎเซ‡ เชธเชพเชฎเชพเชจเซเชฏ เชฐเซ€เชคเซ‡ เชธเชฎเชฏ เชชเซเชฐเชฎเชพเชฃเซ‡ เชธเซ‰เชฐเซเชŸ เช•เชฐเซ‡เชฒเชพ เชฒเซ‰เช—เซเชธ เชชเซเชฐเชพเชชเซเชค เช•เชฐเชตเชพ เชฎเชพเช—เชคเชพ เชนเซ‹เชตเชพเชฅเซ€, เชคเซ‡เชจเซ‡ เชคเซ‡ เชฐเซ€เชคเซ‡ เชธเช‚เช—เซเชฐเชนเชฟเชค เช•เชฐเชตเซเช‚ เชคเชพเชฐเซเช•เชฟเช• เชฒเชพเช—เซ‡ เช›เซ‡. เชœเซ‹ เชคเซเชฏเชพเช‚ เช˜เชฃเซ€ เชฌเชงเซ€ เชฒเซ‹เช— เช•เซ‡เชŸเซ‡เช—เชฐเซ€เช เช›เซ‡ เช…เชจเซ‡ เชคเซ‡ เชฌเชงเซ€ เชเช• เชœ เชชเซเชฐเช•เชพเชฐเชจเซ€ เช›เซ‡, เชคเซ‹ เชชเช›เซ€ เชคเชฎเซ‡ เชชเซเชฐเชพเชฅเชฎเชฟเช• เช•เซ€เชจเซ€ เชชเซเชฐเชฅเชฎ เช•เซ‰เชฒเชฎ เชคเชฐเซ€เช•เซ‡ เชฒเซ‹เช— เช•เซ‡เชŸเซ‡เช—เชฐเซ€ เชฌเชจเชพเชตเซ€ เชถเช•เซ‹ เช›เซ‹ - เช† เชคเชฎเชจเซ‡ เช˜เชฃเชพเชจเซ‡ เชฌเชฆเชฒเซ‡ เชเช• เชŸเซ‡เชฌเชฒ เชฐเชพเช–เชตเชพ เชฆเซ‡เชถเซ‡, เชœเซ‡ เชเช• เชฎเซ‹เชŸเซ‹ เชตเชคเซเชคเชพ เชนเชถเซ‡ เชœเซเชฏเชพเชฐเซ‡ เช•เซเชฒเชฟเช•เชนเชพเช‰เชธเชฎเชพเช‚ เชฆเชพเช–เชฒ เช•เชฐเชตเซเช‚ (เชนเชพเชฐเซเชก เชกเซเชฐเชพเช‡เชต เชธเชพเชฅเซ‡เชจเชพ เชธเชฐเซเชตเชฐ เชชเชฐ, เชชเซเชฐเชคเชฟ เชธเซ‡เช•เชจเซเชกเชฎเชพเช‚ ~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

Google เช•เซเชฒเชพเช‰เชกเชฎเชพเช‚ 1000 GB เชจเซ€ เชธเชพเชˆเช เชงเชฐเชพเชตเชคเซ€ เชธเซเชŸเชพเชจเซเชกเชฐเซเชก เชชเชฐเซเชธเชฟเชธเซเชŸเชจเซเชŸ เชกเชฟเชธเซเช• (เชœเซ‡ HDD เช›เซ‡) เชชเชฐ (เชฎเซ‡เช‚ เช† เชธเชพเชˆเช เชฎเซเช–เซเชฏเชคเซเชตเซ‡ เชเชŸเชฒเชพ เชฎเชพเชŸเซ‡ เชฒเซ€เชงเซ€ เช›เซ‡ เช•เซ‡ เชธเซเชชเซ€เชก เชฅเซ‹เชกเซ€ เชตเชงเชพเชฐเซ‡ เชนเชคเซ€, เชœเซ‹ เช•เซ‡ เช•เชฆเชพเชš เชœเชฐเซ‚เชฐเซ€ เช•เชฆเชจเซ‹ SSD เชธเชธเซเชคเซ‹ เชนเซ‹เชค) เช…เชชเชฒเซ‹เชก 75 เช•เซ‹เชฐเซ‹ เชชเชฐ เชเชกเชช เช†เชถเชฐเซ‡ ~ 4 MB/sec เชนเชคเซ€.

  • เชฎเชพเชฐเซ‡ เชเช• เชฐเชฟเชเชฐเซเชตเซ‡เชถเชจ เช•เชฐเชตเซเช‚ เชœเซ‹เชˆเช เช•เซ‡ เชนเซเช‚ Google เชชเชฐ เช•เชพเชฎ เช•เชฐเซเช‚ เช›เซเช‚, เชชเชฐเช‚เชคเซ เชฎเซ‡เช‚ เชตเซเชฏเช•เซเชคเชฟเช—เชค เชเช•เชพเช‰เชจเซเชŸเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซเชฏเซ‹ เช›เซ‡ เช…เชจเซ‡ เช† เชฒเซ‡เช–เชจเซ‡ เช•เช‚เชชเชจเซ€เชฎเชพเช‚ เชฎเชพเชฐเชพ เช•เชพเชฎ เชธเชพเชฅเซ‡ เช•เซ‹เชˆ เชฒเซ‡เชตเชพเชฆเซ‡เชตเชพ เชจเชฅเซ€

เชนเซเช‚ เช† เชšเซ‹เช•เซเช•เชธ เชกเซ‡เชŸเชพเชธเซ‡เชŸ เชธเชพเชฅเซ‡ เชคเชฎเชพเชฎ เชšเชฟเชคเซเชฐเซ‹ เชฌเชจเชพเชตเซ€เชถ, เช•เชพเชฐเชฃ เช•เซ‡ เชฎเชพเชฐเซ€ เชชเชพเชธเซ‡ เช† เชฌเชงเซเช‚ เช›เซ‡.

เชกเซ‡เชŸเชพ เชธเซเช•เซ‡เชจเชฟเช‚เช— เชชเซเชฐเช—เชคเชฟ เชฌเชคเชพเชตเซ‹

เช•เซเชฒเชฟเช•เชนเชพเช‰เชธเชฎเชพเช‚ เช…เชฎเซ‡ เชฒเซ‰เช—เซเชธ เชธเชพเชฅเซ‡เชจเชพ เชŸเซ‡เชฌเชฒ เชชเชฐ เชธเช‚เชชเซ‚เชฐเซเชฃ เชธเซเช•เซ‡เชจเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชถเซเช‚, เช…เชจเซ‡ เช† เช‘เชชเชฐเซ‡เชถเชจเชฎเชพเช‚ เชจเซ‹เช‚เชงเชชเชพเชคเซเชฐ เชธเชฎเชฏ เชฒเชพเช—เซ€ เชถเช•เซ‡ เช›เซ‡ เช…เชจเซ‡ เชœเซ‹ เชฅเซ‹เชกเชพ เชฎเซ‡เชš เชœเซ‹เชตเชพ เชฎเชณเซ‡ เชคเซ‹ เชฒเชพเช‚เชฌเชพ เชธเชฎเชฏ เชธเซเชงเซ€ เช•เซ‹เชˆ เชชเชฐเชฟเชฃเชพเชฎ เชจ เช†เชชเซ€ เชถเช•เซ‡, เชคเซ‡ เชฌเชคเชพเชตเชตเชพ เชฎเชพเชŸเซ‡ เชธเช•เซเชทเชฎ เชฌเชจเชตเชพเชจเซ€ เชธเชฒเชพเชน เช†เชชเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡. เชชเชฐเชฟเชฃเชพเชฎ เชธเชพเชฅเซ‡เชจเซ€ เชชเซเชฐเชฅเชฎ เชชเช‚เช•เซเชคเชฟเช“ เชชเซเชฐเชพเชชเซเชค เชฅเชพเชฏ เชคเซเชฏเชพเช‚ เชธเซเชงเซ€ เช•เซเชตเซ‡เชฐเซ€ เชชเซเชฐเช—เชคเชฟ. เช† เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡, HTTP เช‡เชจเซเชŸเชฐเชซเซ‡เชธเชฎเชพเช‚ เชเช• เชชเชฐเชฟเชฎเชพเชฃ เช›เซ‡ เชœเซ‡ เชคเชฎเชจเซ‡ HTTP เชนเซ‡เชกเชฐเซ‹เชฎเชพเช‚ เชชเซเชฐเช—เชคเชฟ เชฎเซ‹เช•เชฒเชตเชพเชจเซ€ เชฎเช‚เชœเซ‚เชฐเซ€ เช†เชชเซ‡ เช›เซ‡: send_progress_in_http_headers=1. เช•เชฎเชจเชธเซ€เชฌเซ‡, เชธเซเชŸเชพเชจเซเชกเชฐเซเชก เช—เซ‹ เชฒเชพเช‡เชฌเซเชฐเซ‡เชฐเซ€ เชฎเชฅเชพเชณเชพเช“ เชชเซเชฐเชพเชชเซเชค เชฅเชคเชพเช‚ เชตเชพเช‚เชšเซ€ เชถเช•เชคเซ€ เชจเชฅเซ€, เชชเชฐเช‚เชคเซ HTTP 1.0 เช‡เชจเซเชŸเชฐเชซเซ‡เชธ (1.1 เชธเชพเชฅเซ‡ เชฎเซ‚เช‚เชเชตเชฃเชฎเชพเช‚ เชจ เช†เชตเซ‡!) ClickHouse เชฆเซเชตเชพเชฐเชพ เชธเชชเซ‹เชฐเซเชŸเซ‡เชก เช›เซ‡, เชคเซ‡เชฅเซ€ เชคเชฎเซ‡ ClickHouse เชชเชฐ เช•เชพเชšเซเช‚ 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 เชธเชฟเช—เซเชจเชฒ เชนเซ‡เชจเซเชกเชฒเชฐ "เชธเชฟเช—เซเชจเชฒ: 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 ms เชฒเซ‡ เช›เซ‡).

เชฐเซ€เช…เชฒ เชŸเชพเช‡เชฎเชฎเชพเช‚ เชจเชตเชพ เชธเช‚เชฆเซ‡เชถเชพเช“ เชฌเชคเชพเชตเซ‹

เช†เชตเชจเชพเชฐเชพ เชธเช‚เชฆเซ‡เชถเชพเช“เชจเซ‡ (เชฒเช—เชญเช—) เชฐเซ€เช…เชฒ เชŸเชพเช‡เชฎเชฎเชพเช‚ เชฌเชคเชพเชตเชตเชพ เชฎเชพเชŸเซ‡, เช…เชฎเซ‡ เชฆเชฐ เชฅเซ‹เชกเซ€เช• เชธเซ‡เช•เชจเซเชกเชฎเชพเช‚ เชเช•เชตเชพเชฐ เชตเชฟเชจเช‚เชคเซ€เชจเซ‡ เชเช•เซเชเชฟเช•เซเชฏเซเชŸ เช•เชฐเซ€เช เช›เซ€เช, เช…เชฎเซ‡ เชชเชนเซ‡เชฒเชพเช‚ เช…เชจเซเชญเชตเซ‡เชฒเซ€ เช›เซ‡เชฒเซเชฒเซ€ เชŸเชพเช‡เชฎเชธเซเชŸเซ‡เชฎเซเชชเชจเซ‡ เชฏเชพเชฆ เชฐเชพเช–เซ€เชจเซ‡.

เช†เชฆเซ‡เชถ เช‰เชฆเชพเชนเชฐเชฃเซ‹

เชตเซเชฏเชตเชนเชพเชฐเชฎเชพเช‚ เชฒเชพเช•เซเชทเชฃเชฟเช• 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

เชธเช‚เชฆเชฐเซเชญเซ‹

เชฏเซเชŸเชฟเชฒเชฟเชŸเซ€ เช•เซ‹เชก (เชฆเชธเซเชคเชพเชตเซ‡เชœเซ‹ เชตเชฟเชจเชพ) เช—เซ€เชฅเชฌ เชชเชฐ เช…เชนเซ€เช‚ เช‰เชชเชฒเชฌเซเชง เช›เซ‡ https://github.com/YuriyNasretdinov/logscli. เช•เซเชฒเชฟเช•เชนเชพเช‰เชธ เชชเชฐ เช†เชงเชพเชฐเชฟเชค เชฒเซ‹เช— เชœเซ‹เชตเชพ เชฎเชพเชŸเซ‡ เช•เชจเซเชธเซ‹เชฒ เช‡เชจเซเชŸเชฐเชซเซ‡เชธ เชฎเชพเชŸเซ‡เชจเชพ เชฎเชพเชฐเชพ เชตเชฟเชšเชพเชฐ เชชเชฐ เชคเชฎเชพเชฐเชพ เชตเชฟเชšเชพเชฐเซ‹ เชธเชพเช‚เชญเชณเซ€เชจเซ‡ เชฎเชจเซ‡ เช†เชจเช‚เชฆ เชฅเชถเซ‡.

เชธเซ‹เชฐเซเชธ: www.habr.com

เชเช• เชŸเชฟเชชเซเชชเชฃเซ€ เช‰เชฎเซ‡เชฐเซ‹