เจ…เจธเฉ€เจ‚ เจฒเฉŒเจ— เจฆเฉ‡เจ–เจฃ เจฒเจˆ เจฆเฉเจจเฉ€เจ† เจฆเจพ เจธเจญ เจคเฉ‹เจ‚ เจธเฉเจตเจฟเจงเจพเจœเจจเจ• เจ‡เฉฐเจŸเจฐเจซเฉ‡เจธ* เจตเจฟเจ•เจธเจฟเจค เจ•เจฐ เจฐเจนเฉ‡ เจนเจพเจ‚

เจ…เจธเฉ€เจ‚ เจฒเฉŒเจ— เจฆเฉ‡เจ–เจฃ เจฒเจˆ เจฆเฉเจจเฉ€เจ† เจฆเจพ เจธเจญ เจคเฉ‹เจ‚ เจธเฉเจตเจฟเจงเจพเจœเจจเจ• เจ‡เฉฐเจŸเจฐเจซเฉ‡เจธ* เจตเจฟเจ•เจธเจฟเจค เจ•เจฐ เจฐเจนเฉ‡ เจนเจพเจ‚ เจœเฉ‡เจ•เจฐ เจคเฉเจธเฉ€เจ‚ เจฒเฉŒเจ— เจฆเฉ‡เจ–เจฃ เจฒเจˆ เจ•เจฆเฉ‡ เจตเฉˆเฉฑเจฌ เจ‡เฉฐเจŸเจฐเจซเฉ‡เจธ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เฉ€เจคเฉ€ เจนเฉˆ, เจคเจพเจ‚ เจคเฉเจธเฉ€เจ‚ เจธเจผเจพเจ‡เจฆ เจฆเฉ‡เจ–เจฟเจ† เจนเฉ‹เจตเฉ‡เจ—เจพ เจ•เจฟ เจ•เจฟเจตเฉ‡เจ‚, เจ‡เฉฑเจ• เจจเจฟเจฏเจฎ เจฆเฉ‡ เจคเฉŒเจฐ 'เจคเฉ‡, เจ‡เจน เจ‡เฉฐเจŸเจฐเจซเฉ‡เจธ เจฌเฉ‹เจเจฒ เจนเฉเฉฐเจฆเฉ‡ เจนเจจ เจ…เจคเฉ‡ (เจ…เจ•เจธเจฐ) เจฌเจนเฉเจค เจธเฉเจตเจฟเจงเจพเจœเจจเจ• เจ…เจคเฉ‡ เจœเจตเจพเจฌเจฆเฉ‡เจน เจจเจนเฉ€เจ‚ เจนเฉเฉฐเจฆเฉ‡ เจนเจจเฅค เจ•เฉเจ เจฆเฉ€ เจคเฉเจธเฉ€เจ‚ เจ†เจฆเจค เจชเจพ เจธเจ•เจฆเฉ‡ เจนเฉ‹, เจ•เฉเจ เจฌเจฟเจฒเจ•เฉเจฒ เจญเจฟเจ†เจจเจ• เจนเจจ, เจชเจฐ เจ‡เจน เจฎเฉˆเจจเฉ‚เฉฐ เจœเจพเจชเจฆเจพ เจนเฉˆ เจ•เจฟ เจธเจพเจฐเฉ€เจ†เจ‚ เจธเจฎเฉฑเจธเจฟเจ†เจตเจพเจ‚ เจฆเจพ เจ•เจพเจฐเจจ เจ‡เจน เจนเฉˆ เจ•เจฟ เจ…เจธเฉ€เจ‚ เจฒเฉŒเจ—เจธ เจจเฉ‚เฉฐ เจฆเฉ‡เจ–เจฃ เจฆเฉ‡ เจ•เฉฐเจฎ เจจเฉ‚เฉฐ เจ—เจฒเจค เจคเจฐเฉ€เจ•เฉ‡ เจจเจพเจฒ เจชเจนเฉเฉฐเจšเจฆเฉ‡ เจนเจพเจ‚: เจ…เจธเฉ€เจ‚ เจ‡เฉฑเจ• เจตเฉˆเจฌ เจ‡เฉฐเจŸเจฐเจซเฉ‡เจธ เจฌเจฃเจพเจ‰เจฃ เจฆเฉ€ เจ•เฉ‹เจธเจผเจฟเจธเจผ เจ•เจฐเจฆเฉ‡ เจนเจพเจ‚ เจœเจฟเฉฑเจฅเฉ‡ เจธเฉ€.เจเจฒ.เจ†เจˆ. (เจ•เจฎเจพเจ‚เจก เจฒเจพเจˆเจจ เจ‡เฉฐเจŸเจฐเจซเฉ‡เจธ) เจฌเจฟเจนเจคเจฐ เจ•เฉฐเจฎ เจ•เจฐเจฆเจพ เจนเฉˆเฅค เจฎเฉˆเจ‚ เจจเจฟเฉฑเจœเฉ€ เจคเฉŒเจฐ 'เจคเฉ‡ 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 เจ‰เจชเจฏเฉ‹เจ—เจคเจพเจตเจพเจ‚เฅค

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

เจฎเฉˆเจ‚ เจ‡เจน เจฎเฉฐเจจ เจฒเจตเจพเจ‚เจ—เจพ เจ•เจฟ เจคเฉเจธเฉ€เจ‚ เจชเจนเจฟเจฒเจพเจ‚ เจนเฉ€ เจ•เจฟเจธเฉ‡ เจคเจฐเฉเจนเจพเจ‚ เจœเจพเจฃเจฆเฉ‡ เจนเฉ‹ เจ•เจฟ เจ•เจฒเจฟเจ•เจนเจพเจŠเจธ เจจเฉ‚เฉฐ เจฒเฉŒเจ—เจธ เจจเฉ‚เฉฐ เจ•เจฟเจตเฉ‡เจ‚ เจชเจนเฉเฉฐเจšเจพเจ‰เจฃเจพ เจนเฉˆ. เจœเฉ‡ เจจเจนเฉ€เจ‚, เจคเจพเจ‚ เจฎเฉˆเจ‚ เจ‡เจธเจจเฉ‚เฉฐ เจ…เจœเจผเจฎเจพเจ‰เจฃ เจฆเฉ€ เจธเจฟเจซเจพเจฐเจธเจผ เจ•เจฐเจฆเจพ เจนเจพเจ‚ LSD ะธ kittenhouseเจ…เจคเฉ‡ เจฒเฉŒเจ— เจกเจฟเจฒเฉ€เจตเจฐเฉ€ เจฌเจพเจฐเฉ‡ เจ‡เจน เจฒเฉ‡เจ–.

เจชเจนเจฟเจฒเจพเจ‚ เจคเฉเจนเจพเจจเฉ‚เฉฐ เจ…เจงเจพเจฐ เจธเจ•เฉ€เจฎ 'เจคเฉ‡ เจซเฉˆเจธเจฒเจพ เจ•เจฐเจจ เจฆเฉ€ เจœเจผเจฐเฉ‚เจฐเจค เจนเฉˆ. เจ•เจฟเจ‰เจ‚เจ•เจฟ เจคเฉเจธเฉ€เจ‚ เจ†เจฎ เจคเฉŒเจฐ 'เจคเฉ‡ เจธเจฎเฉ‡เจ‚ เจ…เจจเฉเจธเจพเจฐ เจ•เฉเจฐเจฎเจฌเฉฑเจง เจ•เฉ€เจคเฉ‡ เจฒเฉŒเจ—เจพเจ‚ เจจเฉ‚เฉฐ เจชเฉเจฐเจพเจชเจค เจ•เจฐเจจเจพ เจšเจพเจนเฉเฉฐเจฆเฉ‡ เจนเฉ‹, เจ‡เจธ เจฒเจˆ เจ‰เจนเจจเจพเจ‚ เจจเฉ‚เฉฐ เจ‡เจธ เจคเจฐเฉ€เจ•เฉ‡ เจจเจพเจฒ เจธเจŸเฉ‹เจฐ เจ•เจฐเจจเจพ เจฒเจพเจœเจผเฉ€เจ•เจฒ เจฒเฉฑเจ—เจฆเจพ เจนเฉˆเฅค เจœเฉ‡เจ•เจฐ เจฌเจนเฉเจค เจธเจพเจฐเฉ€เจ†เจ‚ เจฒเฉŒเจ— เจธเจผเฉเจฐเฉ‡เจฃเฉ€เจ†เจ‚ เจนเจจ เจ…เจคเฉ‡ เจ‰เจน เจธเจพเจฐเฉ€เจ†เจ‚ เจ‡เฉฑเจ•เฉ‹ เจ•เจฟเจธเจฎ เจฆเฉ€เจ†เจ‚ เจนเจจ, เจคเจพเจ‚ เจคเฉเจธเฉ€เจ‚ เจชเฉเจฐเจพเจ‡เจฎเจฐเฉ€ เจ•เฉเฉฐเจœเฉ€ เจฆเฉ‡ เจชเจนเจฟเจฒเฉ‡ เจ•เจพเจฒเจฎ เจตเจœเฉ‹เจ‚ เจ‡เฉฑเจ• เจฒเฉŒเจ— เจธเจผเฉเจฐเฉ‡เจฃเฉ€ เจฌเจฃเจพ เจธเจ•เจฆเฉ‡ เจนเฉ‹ - เจ‡เจน เจคเฉเจนเจพเจจเฉ‚เฉฐ เจ•เจˆเจ†เจ‚ เจฆเฉ€ เจฌเจœเจพเจ เจ‡เฉฑเจ• เจธเจพเจฐเจฃเฉ€ เจฐเฉฑเจ–เจฃ เจฆเฉ€ เจ‡เจœเจพเจœเจผเจค เจฆเฉ‡เจตเฉ‡เจ—เจพ, เจœเฉ‹ เจ•เจฟ เจ‡เฉฑเจ• เจตเฉฑเจกเจพ เจชเจฒเฉฑเจธ เจนเฉ‹เจตเฉ‡เจ—เจพ เจœเจฆเฉ‹เจ‚ เจ•เจฒเจฟเจ•เจนเจพเจŠเจธ เจตเจฟเฉฑเจš เจธเฉฐเจฎเจฟเจฒเจฟเจค เจ•เจฐเจจเจพ (เจนเจพเจฐเจก เจกเจฐเจพเจˆเจตเจพเจ‚ เจตเจพเจฒเฉ‡ เจธเจฐเจตเจฐเจพเจ‚ 'เจคเฉ‡, เจชเฉเจฐเจคเฉ€ เจธเจ•เจฟเฉฐเจŸ ~ 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-20 เจคเฉฑเจ• เจธเฉ€เจฎเจฟเจค เจ•เจฐเจจ เจฆเฉ€ เจฒเฉ‹เฉœ เจจเจนเฉ€เจ‚ เจนเฉˆ เจคเจพเจ‚ เจœเฉ‹ เจกเฉ‡เจŸเจพ เจฆเจพ เจ•เจพเจซเจผเฉ€ เจตเฉฑเจกเจพ เจธเฉˆเฉฑเจŸ เจชเฉเจฐเจพเจชเจค เจ•เฉ€เจคเจพ เจœเจพ เจธเจ•เฉ‡ เจœเฉ‹ 16 GB RAM เจตเจฟเฉฑเจš เจซเจฟเฉฑเจŸ เจจเจนเฉ€เจ‚ เจนเฉ‹เจตเฉ‡เจ—เจพเฅค 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 เจฆเฉ‡ เจ†เจ•เจพเจฐ เจฆเฉ‡ เจจเจพเจฒ Google เจ•เจฒเจพเจ‰เจก เจตเจฟเฉฑเจš เจ‡เฉฑเจ• เจฎเจฟเจ†เจฐเฉ€ เจชเจฐเจธเจฟเจธเจŸเฉˆเจ‚เจŸ เจกเจฟเจธเจ• (เจœเฉ‹ เจ•เจฟ เจ‡เฉฑเจ• HDD เจนเฉˆ) เจ‰เฉฑเจคเฉ‡ (เจฎเฉˆเจ‚ เจฎเฉเฉฑเจ– เจคเฉŒเจฐ 'เจคเฉ‡ เจ‡เจน เจ†เจ•เจพเจฐ เจฒเจฟเจ† เจนเฉˆ เจคเจพเจ‚ เจ•เจฟ เจธเจชเฉ€เจก เจฅเฉ‹เฉœเฉ€ เจตเฉฑเจง เจนเฉ‹เจตเฉ‡, เจนเจพเจฒเจพเจ‚เจ•เจฟ เจธเจผเจพเจ‡เจฆ เจฒเฉ‹เฉœเฉ€เจ‚เจฆเฉ‡ เจ†เจ•เจพเจฐ เจฆเจพ เจ‡เฉฑเจ• SSD เจธเจธเจคเจพ เจนเฉเฉฐเจฆเจพ) เจ…เฉฑเจชเจฒเฉ‹เจก 75 เจ•เฉ‹เจฐเจพเจ‚ 'เจคเฉ‡ เจ—เจคเฉ€ เจฒเจ—เจญเจ— ~ 4 MB/sec เจธเฉ€เฅค

  • เจฎเฉˆเจจเฉ‚เฉฐ เจ‡เฉฑเจ• เจฐเจฟเจœเจผเจฐเจตเฉ‡เจธเจผเจจ เจ•เจฐเจจเจพ เจšเจพเจนเฉ€เจฆเจพ เจนเฉˆ เจ•เจฟ เจฎเฉˆเจ‚ Google เจตเจฟเฉฑเจš เจ•เฉฐเจฎ เจ•เจฐเจฆเจพ เจนเจพเจ‚, เจชเจฐ เจฎเฉˆเจ‚ เจ‡เฉฑเจ• เจจเจฟเฉฑเจœเฉ€ เจ–เจพเจคเจพ เจตเจฐเจคเจฟเจ† เจนเฉˆ เจ…เจคเฉ‡ เจ‡เจธ เจฒเฉ‡เจ– เจฆเจพ เจ•เฉฐเจชเจจเฉ€ เจตเจฟเฉฑเจš เจฎเฉ‡เจฐเฉ‡ เจ•เฉฐเจฎ เจจเจพเจฒ เจ•เฉ‹เจˆ เจฒเฉˆเจฃเจพ-เจฆเฉ‡เจฃเจพ เจจเจนเฉ€เจ‚ เจนเฉˆ

เจฎเฉˆเจ‚ เจ‡เจธ เจตเจฟเจธเจผเฉ‡เจธเจผ เจกเฉ‡เจŸเจพเจธเฉˆเจŸ เจจเจพเจฒ เจธเจพเจฐเฉ‡ เจฆเฉเจฐเจฟเจธเจผเจŸเจพเจ‚เจค เจคเจฟเจ†เจฐ เจ•เจฐเจพเจ‚เจ—เจพ, เจ•เจฟเจ‰เจ‚เจ•เจฟ เจ‡เจน เจธเจญ เจฎเฉ‡เจฐเฉ‡ เจ•เฉ‹เจฒ เจธเฉ€เฅค

เจกเจพเจŸเจพ เจธเจ•เฉˆเจจเจฟเฉฐเจ— เจชเฉเจฐเจ—เจคเฉ€ เจฆเจฟเจ–เจพเจ“

เจ•เจฟเจ‰เจ‚เจ•เจฟ เจ•เจฒเจฟเจ•เจนเจพเจŠเจธ เจตเจฟเฉฑเจš เจ…เจธเฉ€เจ‚ เจฒเฉŒเจ—เจธ เจฆเฉ‡ เจจเจพเจฒ เจ‡เฉฑเจ• เจŸเฉ‡เจฌเจฒ 'เจคเฉ‡ เจ‡เฉฑเจ• เจชเฉ‚เจฐเฉ‡ เจธเจ•เฉˆเจจ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจพเจ‚เจ—เฉ‡, เจ…เจคเฉ‡ เจ‡เจธ เจ•เจพเจฐเจตเจพเจˆ เจตเจฟเฉฑเจš เจ•เจพเจซเจผเฉ€ เจธเจฎเจพเจ‚ เจฒเฉฑเจ— เจธเจ•เจฆเจพ เจนเฉˆ เจ…เจคเฉ‡ เจนเฉ‹ เจธเจ•เจฆเจพ เจนเฉˆ เจ•เจฟ เจฒเฉฐเจฌเฉ‡ เจธเจฎเฉ‡เจ‚ เจคเฉฑเจ• เจ•เฉ‹เจˆ เจจเจคเฉ€เจœเจพ เจจเจพ เจฆเฉ‡ เจธเจ•เฉ‡ เจœเฉ‡เจ•เจฐ เจ•เฉเจ เจฎเฉ‡เจฒ เจฎเจฟเจฒเฉ‡ เจนเจจ, เจคเจพเจ‚ เจ‡เจน เจฆเจฟเจ–เจพเจ‰เจฃ เจฆเฉ‡ เจฏเฉ‹เจ— เจนเฉ‹เจฃ เจฆเฉ€ เจธเจฒเจพเจน เจฆเจฟเฉฑเจคเฉ€ เจœเจพเจ‚เจฆเฉ€ เจนเฉˆเฅค เจจเจคเฉ€เจœเฉ‡ เจฆเฉ‡ เจจเจพเจฒ เจชเจนเจฟเจฒเฉ€ เจ•เจคเจพเจฐเจพเจ‚ เจชเฉเจฐเจพเจชเจค เจนเฉ‹เจฃ เจคเฉฑเจ• เจชเฉเฉฑเจ›เจ—เจฟเฉฑเจ› เจฆเฉ€ เจชเฉเจฐเจ—เจคเฉ€เฅค เจ…เจœเจฟเจนเจพ เจ•เจฐเจจ เจฒเจˆ, HTTP เจ‡เฉฐเจŸเจฐเจซเฉ‡เจธ เจตเจฟเฉฑเจš เจ‡เฉฑเจ• เจชเฉˆเจฐเจพเจฎเฉ€เจŸเจฐ เจนเฉˆ เจœเฉ‹ เจคเฉเจนเจพเจจเฉ‚เฉฐ HTTP เจธเจฟเจฐเจฒเฉ‡เจ–เจพเจ‚ เจตเจฟเฉฑเจš เจคเจฐเฉฑเจ•เฉ€ เจญเฉ‡เจœเจฃ เจฆเฉ€ เจ†เจ—เจฟเจ† เจฆเจฟเฉฐเจฆเจพ เจนเฉˆ: send_progress_in_http_headers=1. เจฌเจฆเจ•เจฟเจธเจฎเจคเฉ€ เจจเจพเจฒ, เจฎเจฟเจ†เจฐเฉ€ เจ—เฉ‹ เจฒเจพเจ‡เจฌเฉเจฐเฉ‡เจฐเฉ€ เจธเจฟเจฐเจฒเฉ‡เจ–เจพเจ‚ เจจเฉ‚เฉฐ เจชเฉœเฉเจน เจจเจนเฉ€เจ‚ เจธเจ•เจฆเฉ€ เจ•เจฟเจ‰เจ‚เจ•เจฟ เจ‰เจน เจชเฉเจฐเจพเจชเจค เจนเฉ‹เจ เจนเจจ, เจชเจฐ HTTP 1.0 เจ‡เฉฐเจŸเจฐเจซเฉ‡เจธ (1.1 เจจเจพเจฒ เจ‰เจฒเจเจฃ เจตเจฟเฉฑเจš เจจเจนเฉ€เจ‚!) เจ•เจฒเจฟเจ•เจนเจพเจŠเจธ เจฆเฉเจ†เจฐเจพ เจธเจฎเจฐเจฅเจฟเจค เจนเฉˆ, เจ‡เจธเจฒเจˆ เจคเฉเจธเฉ€เจ‚ เจ•เจฒเจฟเจ•เจนเจพเจŠเจธ เจฒเจˆ เจ‡เฉฑเจ• เจ•เฉฑเจšเจพ TCP เจ•เจจเฉˆเจ•เจธเจผเจจ เจ–เฉ‹เจฒเฉเจน เจธเจ•เจฆเฉ‡ เจนเฉ‹ เจ…เจคเฉ‡ เจ‡เจธเจจเฉ‚เฉฐ เจ‰เฉฑเจฅเฉ‡ เจญเฉ‡เจœ เจธเจ•เจฆเฉ‡ เจนเฉ‹เฅค GET /?query=... HTTP/1.0nn เจ…เจคเฉ‡ เจฌเจฟเจจเจพเจ‚ เจ•เจฟเจธเฉ‡ เจฌเจšเจฃ เจœเจพเจ‚ เจเจจเจ•เฉเจฐเจฟเจชเจธเจผเจจ เจฆเฉ‡ เจœเจตเจพเจฌ เจธเจฟเจฐเจฒเฉ‡เจ– เจ…เจคเฉ‡ เจฌเจพเจกเฉ€ เจชเฉเจฐเจพเจชเจค เจ•เจฐเฉ‹, เจ‡เจธ เจฒเจˆ เจ‡เจธ เจธเจฅเจฟเจคเฉ€ เจตเจฟเฉฑเจš เจธเจพเจจเฉ‚เฉฐ เจฎเจฟเจ†เจฐเฉ€ เจฒเจพเจ‡เจฌเฉเจฐเฉ‡เจฐเฉ€ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจจ เจฆเฉ€ เจตเฉ€ เจฒเฉ‹เฉœ เจจเจนเฉ€เจ‚ เจนเฉˆเฅค

เจ•เจฒเจฟเจ•เจนเจพเจŠเจธ เจคเฉ‹เจ‚ เจธเจŸเฉเจฐเฉ€เจฎเจฟเฉฐเจ— เจฒเฉŒเจ—เจธ

เจ•เจฒเจฟเจ•เจนเจพเจŠเจธ เจ•เฉ‹เจฒ เจฎเฉเจ•เจพเจฌเจฒเจคเจจ เจฒเฉฐเจฌเฉ‡ เจธเจฎเฉ‡เจ‚ (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 เจตเจฟเจ•เจฒเจชเจพเจ‚ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจ•เฉ‡ เจ•เฉ€เจคเจพ เจœเจพเจ‚เจฆเจพ เจนเฉˆ, เจœเฉ‹ เจ•เฉเจฐเจฎเจตเจพเจฐ เจธเฉเจจเฉ‡เจนเฉ‡ เจฆเฉ‡ เจฌเจพเจ…เจฆ, เจชเจนเจฟเจฒเจพเจ‚ เจ…เจคเฉ‡ เจ†เจฒเฉ‡-เจฆเฉเจ†เจฒเฉ‡ เจฒเจพเจˆเจจเจพเจ‚ เจฆเฉ€ เจจเจฟเจฐเจงเจพเจฐเจค เจธเฉฐเจ–เจฟเจ† เจจเฉ‚เฉฐ เจฆเจฐเจธเจพเจ‰เจ‚เจฆเฉ‡ เจนเจจเฅค

เจฌเจฆเจ•เจฟเจธเจฎเจคเฉ€ เจจเจพเจฒ, เจฎเฉˆเจจเฉ‚เฉฐ เจ•เจฒเจฟเจ•เจนเจพเจŠเจธ เจตเจฟเฉฑเจš เจ…เจœเจฟเจนเจพ เจ•เจฐเจจ เจฆเจพ เจ•เฉ‹เจˆ เจ†เจธเจพเจจ เจคเจฐเฉ€เจ•เจพ เจจเจนเฉ€เจ‚ เจฎเจฟเจฒเจฟเจ† เจนเฉˆ, เจ‡เจธเจฒเจˆ เจธเฉฐเจฆเจฐเจญ เจจเฉ‚เฉฐ เจชเฉเจฐเจฆเจฐเจธเจผเจฟเจค เจ•เจฐเจจ เจฒเจˆ, เจ‡เจธ เจคเจฐเฉเจนเจพเจ‚ เจฆเฉ€ เจ‡เฉฑเจ• เจตเจพเจงเฉ‚ เจฌเฉ‡เจจเจคเฉ€ เจจเจคเฉ€เจœเฉ‡ เจฆเฉ€ เจนเจฐเฉ‡เจ• เจฒเจพเจˆเจจ เจจเฉ‚เฉฐ เจญเฉ‡เจœเฉ€ เจœเจพเจ‚เจฆเฉ€ เจนเฉˆ (เจตเฉ‡เจฐเจตเฉ‡ เจ›เจพเจ‚เจŸเฉ€ 'เจคเฉ‡ เจจเจฟเจฐเจญเจฐ เจ•เจฐเจฆเจพ เจนเฉˆ เจ…เจคเฉ‡ เจ•เฉ€ เจธเฉฐเจฆเจฐเจญ เจชเจนเจฟเจฒเจพเจ‚ เจฆเจฟเจ–เจพเจ‡เจ† เจ—เจฟเจ† เจนเฉˆเฅค เจœเจพเจ‚ เจฌเจพเจ…เจฆ):

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

เจนเจตเจพเจฒเฉ‡

เจ‰เจชเจฏเฉ‹เจ—เจคเจพ เจ•เฉ‹เจก (เจฆเจธเจคเจพเจตเฉ‡เจœเจผเจพเจ‚ เจคเฉ‹เจ‚ เจฌเจฟเจจเจพเจ‚) github 'เจคเฉ‡ เจ‰เจชเจฒเจฌเจง เจนเฉˆ https://github.com/YuriyNasretdinov/logscli. เจ•เจฒเจฟเจ•เจนเจพเจŠเจธ 'เจคเฉ‡ เจ†เจงเจพเจฐเจฟเจค เจฒเฉŒเจ— เจฆเฉ‡เจ–เจฃ เจฒเจˆ เจ•เฉฐเจธเฉ‹เจฒ เจ‡เฉฐเจŸเจฐเจซเฉ‡เจธ เจฒเจˆ เจฎเฉ‡เจฐเฉ‡ เจตเจฟเจšเจพเจฐ 'เจคเฉ‡ เจคเฉเจนเจพเจกเฉ‡ เจตเจฟเจšเจพเจฐ เจธเฉเจฃ เจ•เฉ‡ เจฎเฉˆเจจเฉ‚เฉฐ เจ–เฉเจธเจผเฉ€ เจนเฉ‹เจตเฉ‡เจ—เฉ€เฅค

เจธเจฐเฉ‹เจค: www.habr.com

เจ‡เฉฑเจ• เจŸเจฟเฉฑเจชเจฃเฉ€ เจœเฉ‹เฉœเฉ‹