āĻ˛āĻ— āĻĻā§‡āĻ–āĻžāĻ° āĻœāĻ¨ā§āĻ¯ āĻ†āĻŽāĻ°āĻž āĻŦāĻŋāĻļā§āĻŦā§‡āĻ° āĻ¸āĻŦāĻšā§‡āĻ¯āĻŧā§‡ āĻ¸ā§āĻŦāĻŋāĻ§āĻžāĻœāĻ¨āĻ• āĻ‡āĻ¨ā§āĻŸāĻžāĻ°āĻĢā§‡āĻ¸ āĻ¤ā§ˆāĻ°āĻŋ āĻ•āĻ°āĻ›āĻŋ*

āĻ˛āĻ— āĻĻā§‡āĻ–āĻžāĻ° āĻœāĻ¨ā§āĻ¯ āĻ†āĻŽāĻ°āĻž āĻŦāĻŋāĻļā§āĻŦā§‡āĻ° āĻ¸āĻŦāĻšā§‡āĻ¯āĻŧā§‡ āĻ¸ā§āĻŦāĻŋāĻ§āĻžāĻœāĻ¨āĻ• āĻ‡āĻ¨ā§āĻŸāĻžāĻ°āĻĢā§‡āĻ¸ āĻ¤ā§ˆāĻ°āĻŋ āĻ•āĻ°āĻ›āĻŋ* āĻ†āĻĒāĻ¨āĻŋ āĻ¯āĻĻāĻŋ āĻ˛āĻ—āĻ—ā§āĻ˛āĻŋ āĻĻā§‡āĻ–āĻžāĻ° āĻœāĻ¨ā§āĻ¯ āĻ•āĻ–āĻ¨āĻ“ āĻ“āĻ¯āĻŧā§‡āĻŦ āĻ‡āĻ¨ā§āĻŸāĻžāĻ°āĻĢā§‡āĻ¸ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°ā§‡ āĻĨāĻžāĻ•ā§‡āĻ¨, āĻ¤āĻžāĻšāĻ˛ā§‡ āĻ†āĻĒāĻ¨āĻŋ āĻ¸āĻŽā§āĻ­āĻŦāĻ¤ āĻ˛āĻ•ā§āĻˇā§āĻ¯ āĻ•āĻ°ā§‡āĻ›ā§‡āĻ¨ āĻ¯ā§‡ āĻ•ā§€āĻ­āĻžāĻŦā§‡, āĻāĻ•āĻŸāĻŋ āĻ¨āĻŋāĻ¯āĻŧāĻŽ āĻšāĻŋāĻ¸āĻžāĻŦā§‡, āĻāĻ‡ āĻ‡āĻ¨ā§āĻŸāĻžāĻ°āĻĢā§‡āĻ¸āĻ—ā§āĻ˛āĻŋ āĻœāĻŸāĻŋāĻ˛ āĻāĻŦāĻ‚ (āĻĒā§āĻ°āĻžāĻ¯āĻŧāĻļāĻ‡) āĻ–ā§āĻŦ āĻ¸ā§āĻŦāĻŋāĻ§āĻžāĻœāĻ¨āĻ• āĻāĻŦāĻ‚ āĻĒā§āĻ°āĻ¤āĻŋāĻ•ā§āĻ°āĻŋāĻ¯āĻŧāĻžāĻļā§€āĻ˛ āĻ¨āĻ¯āĻŧāĨ¤ āĻ•āĻŋāĻ›ā§ āĻ†āĻĒāĻ¨āĻŋ āĻ…āĻ­ā§āĻ¯āĻ¸ā§āĻ¤ āĻšāĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡āĻ¨, āĻ•āĻŋāĻ›ā§ āĻāĻ•ā§‡āĻŦāĻžāĻ°ā§‡ āĻ­āĻ¯āĻŧāĻžāĻ¨āĻ•, āĻ•āĻŋāĻ¨ā§āĻ¤ā§ āĻāĻŸāĻž āĻ†āĻŽāĻžāĻ° āĻŽāĻ¨ā§‡ āĻšāĻ¯āĻŧ āĻ¯ā§‡ āĻ¸āĻŽāĻ¸ā§āĻ¤ āĻ¸āĻŽāĻ¸ā§āĻ¯āĻžāĻ° āĻ•āĻžāĻ°āĻŖ āĻšāĻ˛ āĻ¯ā§‡ āĻ†āĻŽāĻ°āĻž āĻ­ā§āĻ˛āĻ­āĻžāĻŦā§‡ āĻ˛āĻ— āĻĻā§‡āĻ–āĻžāĻ° āĻ•āĻžāĻœāĻŸāĻŋāĻ° āĻ¸āĻžāĻĨā§‡ āĻ¯ā§‹āĻ—āĻžāĻ¯ā§‹āĻ— āĻ•āĻ°āĻŋ: āĻ†āĻŽāĻ°āĻž āĻāĻ•āĻŸāĻŋ āĻ“āĻ¯āĻŧā§‡āĻŦ āĻ‡āĻ¨ā§āĻŸāĻžāĻ°āĻĢā§‡āĻ¸ āĻ¤ā§ˆāĻ°āĻŋ āĻ•āĻ°āĻžāĻ° āĻšā§‡āĻˇā§āĻŸāĻž āĻ•āĻ°āĻŋ āĻ¯ā§‡āĻ–āĻžāĻ¨ā§‡ CLI (āĻ•āĻŽāĻžāĻ¨ā§āĻĄ āĻ˛āĻžāĻ‡āĻ¨ āĻ‡āĻ¨ā§āĻŸāĻžāĻ°āĻĢā§‡āĻ¸) āĻ­āĻžāĻ˛ āĻ•āĻžāĻœ āĻ•āĻ°ā§‡ āĻ†āĻŽāĻŋ āĻŦā§āĻ¯āĻ•ā§āĻ¤āĻŋāĻ—āĻ¤āĻ­āĻžāĻŦā§‡ tail, grep, awk āĻāĻŦāĻ‚ āĻ…āĻ¨ā§āĻ¯āĻžāĻ¨ā§āĻ¯āĻĻā§‡āĻ° āĻ¸āĻžāĻĨā§‡ āĻ•āĻžāĻœ āĻ•āĻ°āĻ¤ā§‡ āĻ–ā§āĻŦ āĻ¸ā§āĻŦāĻžāĻšā§āĻ›āĻ¨ā§āĻĻā§āĻ¯āĻŦā§‹āĻ§ āĻ•āĻ°āĻŋ āĻāĻŦāĻ‚ āĻ¤āĻžāĻ‡ āĻ†āĻŽāĻžāĻ° āĻœāĻ¨ā§āĻ¯ āĻ˛āĻ—āĻ—ā§āĻ˛āĻŋāĻ° āĻ¸āĻžāĻĨā§‡ āĻ•āĻžāĻœ āĻ•āĻ°āĻžāĻ° āĻœāĻ¨ā§āĻ¯ āĻ†āĻĻāĻ°ā§āĻļ āĻ‡āĻ¨ā§āĻŸāĻžāĻ°āĻĢā§‡āĻ¸āĻŸāĻŋ āĻŸā§‡āĻ˛ āĻāĻŦāĻ‚ āĻ—ā§āĻ°ā§‡āĻĒā§‡āĻ° āĻŽāĻ¤ā§‹āĻ‡ āĻ•āĻŋāĻ›ā§ āĻšāĻŦā§‡, āĻ¤āĻŦā§‡ āĻāĻŸāĻŋ āĻ…āĻ¨ā§‡āĻ• āĻ¸āĻžāĻ°ā§āĻ­āĻžāĻ° āĻĨā§‡āĻ•ā§‡ āĻ†āĻ¸āĻž āĻ˛āĻ—āĻ—ā§āĻ˛āĻŋ āĻĒāĻĄāĻŧāĻ¤ā§‡āĻ“ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°āĻž āĻ¯ā§‡āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡āĨ¤ āĻ¯ā§‡, āĻ…āĻŦāĻļā§āĻ¯āĻ‡, āĻ•ā§āĻ˛āĻŋāĻ•āĻšāĻžāĻ‰āĻ¸ āĻĨā§‡āĻ•ā§‡ āĻ¤āĻžāĻĻā§‡āĻ° āĻĒāĻĄāĻŧā§āĻ¨!

*āĻšāĻžāĻŦāĻ°āĻž āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°āĻ•āĻžāĻ°ā§€āĻ° āĻŦā§āĻ¯āĻ•ā§āĻ¤āĻŋāĻ—āĻ¤ āĻŽāĻ¤āĻžāĻŽāĻ¤ āĻ…āĻ¨ā§āĻ¯āĻžāĻ¯āĻŧā§€ āĻ†āĻĒāĻ¨āĻŋāĻ°āĻ•

logscli āĻāĻ° āĻ¸āĻžāĻĨā§‡ āĻĻā§‡āĻ–āĻž āĻ•āĻ°ā§āĻ¨

āĻ†āĻŽāĻŋ āĻ†āĻŽāĻžāĻ° āĻ‡āĻ¨ā§āĻŸāĻžāĻ°āĻĢā§‡āĻ¸ā§‡āĻ° āĻœāĻ¨ā§āĻ¯ āĻāĻ•āĻŸāĻŋ āĻ¨āĻžāĻŽ āĻ¨āĻŋāĻ¯āĻŧā§‡ āĻ†āĻ¸āĻŋāĻ¨āĻŋ, āĻāĻŦāĻ‚, āĻ¸āĻ¤ā§āĻ¯āĻŋ āĻŦāĻ˛āĻ¤ā§‡, āĻāĻŸāĻŋ āĻāĻ•āĻŸāĻŋ āĻĒā§āĻ°ā§‹āĻŸā§‹āĻŸāĻžāĻ‡āĻĒā§‡āĻ° āĻ†āĻ•āĻžāĻ°ā§‡ āĻŦāĻŋāĻĻā§āĻ¯āĻŽāĻžāĻ¨, āĻ¤āĻŦā§‡ āĻ†āĻĒāĻ¨āĻŋ āĻ¯āĻĻāĻŋ āĻ…āĻŦāĻŋāĻ˛āĻŽā§āĻŦā§‡ āĻ¸ā§‹āĻ°ā§āĻ¸ āĻ•ā§‹āĻĄāĻŸāĻŋ āĻĻā§‡āĻ–āĻ¤ā§‡ āĻšāĻžāĻ¨ āĻ¤āĻŦā§‡ āĻ†āĻĒāĻ¨āĻžāĻ•ā§‡ āĻ¸ā§āĻŦāĻžāĻ—āĻ¤ āĻœāĻžāĻ¨āĻžāĻ‡: https://github.com/YuriyNasretdinov/logscli (āĻ¨āĻŋāĻ°ā§āĻŦāĻžāĻšāĻŋāĻ¤ Go āĻ•ā§‹āĻĄā§‡āĻ° 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 āĻāĻŦāĻ‚ āĻ…āĻ¨ā§āĻ¯āĻžāĻ¨ā§āĻ¯ āĻ‡āĻ‰āĻ¨āĻŋāĻ•ā§āĻ¸ āĻ‡āĻ‰āĻŸāĻŋāĻ˛āĻŋāĻŸāĻŋāĨ¤

āĻŦāĻžāĻ¸ā§āĻ¤āĻŦāĻžāĻ¯āĻŧāĻ¨

āĻ†āĻŽāĻŋ āĻ…āĻ¨ā§āĻŽāĻžāĻ¨ āĻ•āĻ°āĻŦ āĻ¯ā§‡ āĻ†āĻĒāĻ¨āĻŋ āĻ‡āĻ¤āĻŋāĻŽāĻ§ā§āĻ¯ā§‡āĻ‡ āĻœāĻžāĻ¨ā§‡āĻ¨ āĻ•āĻŋāĻ­āĻžāĻŦā§‡ āĻ•ā§āĻ˛āĻŋāĻ• āĻšāĻžāĻ‰āĻ¸ā§‡ āĻ˛āĻ— āĻĒā§āĻ°āĻĻāĻžāĻ¨ āĻ•āĻ°āĻ¤ā§‡ āĻšāĻ¯āĻŧāĨ¤ āĻ¯āĻĻāĻŋ āĻ¨āĻž āĻšāĻ¯āĻŧ, āĻ†āĻŽāĻŋ āĻāĻŸāĻŋ āĻšā§‡āĻˇā§āĻŸāĻž āĻ•āĻ°āĻžāĻ° āĻĒāĻ°āĻžāĻŽāĻ°ā§āĻļ āĻĻāĻŋāĻ‡ āĻāĻ˛āĻāĻ¸āĻĄāĻŋ и 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

āĻ…ā§āĻ¯āĻžāĻŽāĻžāĻœāĻ¨ āĻĄā§‡āĻŸāĻžāĻ¸ā§‡āĻŸā§‡ āĻāĻ•āĻŸāĻŋ āĻĒāĻ°ā§āĻ¯āĻžāĻ˛ā§‹āĻšāĻ¨āĻžāĻ° āĻœāĻ¨ā§āĻ¯ āĻļā§āĻ§ā§āĻŽāĻžāĻ¤ā§āĻ° āĻāĻ•āĻŸāĻŋ āĻ¤āĻžāĻ°āĻŋāĻ– āĻ†āĻ›ā§‡, āĻ•āĻŋāĻ¨ā§āĻ¤ā§ āĻ•ā§‹āĻ¨ āĻ¸āĻ āĻŋāĻ• āĻ¸āĻŽāĻ¯āĻŧ āĻ¨ā§‡āĻ‡, āĻ¤āĻžāĻ‡ āĻ†āĻ¸ā§āĻ¨ āĻāĻ•āĻŸāĻŋ āĻ°ā§āĻ¯āĻžāĻ¨ā§āĻĄāĻ¨ āĻĻāĻŋāĻ¯āĻŧā§‡ āĻāĻ‡ āĻĄā§‡āĻŸāĻž āĻĒā§‚āĻ°āĻŖ āĻ•āĻ°āĻŋāĨ¤

10 GB āĻ°â€ā§āĻ¯āĻžāĻŽā§‡āĻ° āĻ¸āĻžāĻĨā§‡ āĻŽāĻžāĻ¨āĻžāĻ¨āĻ¸āĻ‡ āĻ¨āĻ¯āĻŧ āĻāĻŽāĻ¨ āĻāĻ•āĻŸāĻŋ āĻŽā§‹āĻŸāĻžāĻŽā§āĻŸāĻŋ āĻŦāĻĄāĻŧ āĻĄā§‡āĻŸāĻž āĻĒāĻžāĻ“āĻ¯āĻŧāĻžāĻ° āĻœāĻ¨ā§āĻ¯ āĻ†āĻĒāĻ¨āĻžāĻ•ā§‡ āĻ¸āĻŽāĻ¸ā§āĻ¤ 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 āĻ—āĻŋāĻ—āĻžāĻŦāĻžāĻ‡āĻŸ āĻ†āĻ•āĻžāĻ°ā§‡āĻ° āĻāĻ•āĻŸāĻŋ āĻ¸ā§āĻŸā§āĻ¯āĻžāĻ¨ā§āĻĄāĻžāĻ°ā§āĻĄ āĻĒāĻžāĻ°āĻ¸āĻŋāĻ¸ā§āĻŸā§‡āĻ¨ā§āĻŸ āĻĄāĻŋāĻ¸ā§āĻ•ā§‡ (āĻ¯āĻž āĻāĻ•āĻŸāĻŋ HDD) (āĻ†āĻŽāĻŋ āĻŽā§‚āĻ˛āĻ¤ āĻāĻ‡ āĻ†āĻ•āĻžāĻ°āĻŸāĻŋ āĻ¨āĻŋāĻ¯āĻŧā§‡āĻ›āĻŋ āĻ¯āĻžāĻ¤ā§‡ āĻ—āĻ¤āĻŋ āĻāĻ•āĻŸā§ āĻŦā§‡āĻļāĻŋ āĻšāĻ¯āĻŧ, āĻ¯āĻĻāĻŋāĻ“ āĻ¸āĻŽā§āĻ­āĻŦāĻ¤ āĻĒā§āĻ°āĻ¯āĻŧā§‹āĻœāĻ¨ā§€āĻ¯āĻŧ āĻ†āĻ•āĻžāĻ°ā§‡āĻ° āĻāĻ•āĻŸāĻŋ SSD āĻ¸āĻ¸ā§āĻ¤āĻž āĻšāĻ¤) āĻ†āĻĒāĻ˛ā§‹āĻĄ 75 āĻ•ā§‹āĻ°ā§‡ āĻ—āĻ¤āĻŋ āĻ›āĻŋāĻ˛ āĻĒā§āĻ°āĻžāĻ¯āĻŧ ~ 4 MB/sec.

  • āĻ†āĻŽāĻŋ āĻ…āĻŦāĻļā§āĻ¯āĻ‡ āĻāĻ•āĻŸāĻŋ āĻ°āĻŋāĻœāĻžāĻ°ā§āĻ­ā§‡āĻļāĻ¨ āĻ•āĻ°āĻŦ āĻ¯ā§‡ āĻ†āĻŽāĻŋ Google āĻ āĻ•āĻžāĻœ āĻ•āĻ°āĻŋ, āĻ•āĻŋāĻ¨ā§āĻ¤ā§ āĻ†āĻŽāĻŋ āĻāĻ•āĻŸāĻŋ āĻŦā§āĻ¯āĻ•ā§āĻ¤āĻŋāĻ—āĻ¤ āĻ…ā§āĻ¯āĻžāĻ•āĻžāĻ‰āĻ¨ā§āĻŸ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°ā§‡āĻ›āĻŋ āĻāĻŦāĻ‚ āĻāĻ‡ āĻ¨āĻŋāĻŦāĻ¨ā§āĻ§āĻŸāĻŋ āĻ•ā§‹āĻŽā§āĻĒāĻžāĻ¨āĻŋāĻ¤ā§‡ āĻ†āĻŽāĻžāĻ° āĻ•āĻžāĻœā§‡āĻ° āĻ¸āĻžāĻĨā§‡ āĻ•ā§‹āĻ¨ āĻ¸āĻŽā§āĻĒāĻ°ā§āĻ• āĻ¨ā§‡āĻ‡

āĻ†āĻŽāĻŋ āĻāĻ‡ āĻ¨āĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āĻŸ āĻĄā§‡āĻŸāĻžāĻ¸ā§‡āĻŸā§‡āĻ° āĻ¸āĻžāĻšāĻžāĻ¯ā§āĻ¯ā§‡ āĻ¸āĻŽāĻ¸ā§āĻ¤ āĻšāĻŋāĻ¤ā§āĻ° āĻ¤ā§ˆāĻ°āĻŋ āĻ•āĻ°āĻŦ, āĻ¯ā§‡āĻšā§‡āĻ¤ā§ āĻ†āĻŽāĻžāĻ° āĻšāĻžāĻ¤ā§‡ āĻāĻŸāĻŋāĻ‡ āĻ›āĻŋāĻ˛āĨ¤

āĻĄā§‡āĻŸāĻž āĻ¸ā§āĻ•ā§āĻ¯āĻžāĻ¨āĻŋāĻ‚ āĻ…āĻ—ā§āĻ°āĻ—āĻ¤āĻŋ āĻĻā§‡āĻ–āĻžāĻ¨

āĻ¯ā§‡āĻšā§‡āĻ¤ā§ ClickHouse-āĻ āĻ†āĻŽāĻ°āĻž āĻ˛āĻ— āĻ¸āĻš āĻāĻ•āĻŸāĻŋ āĻŸā§‡āĻŦāĻŋāĻ˛ā§‡ āĻāĻ•āĻŸāĻŋ āĻ¸āĻŽā§āĻĒā§‚āĻ°ā§āĻŖ āĻ¸ā§āĻ•ā§āĻ¯āĻžāĻ¨ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°āĻŦ, āĻāĻŦāĻ‚ āĻāĻ‡ āĻ…āĻĒāĻžāĻ°ā§‡āĻļāĻ¨āĻŸāĻŋ āĻāĻ•āĻŸāĻŋ āĻ‰āĻ˛ā§āĻ˛ā§‡āĻ–āĻ¯ā§‹āĻ—ā§āĻ¯ āĻĒāĻ°āĻŋāĻŽāĻžāĻŖ āĻ¸āĻŽāĻ¯āĻŧ āĻ¨āĻŋāĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡ āĻāĻŦāĻ‚ āĻ¯āĻĻāĻŋ āĻ•āĻŋāĻ›ā§ āĻŽāĻŋāĻ˛ āĻĒāĻžāĻ“āĻ¯āĻŧāĻž āĻ¯āĻžāĻ¯āĻŧ āĻ¤āĻŦā§‡ āĻĻā§€āĻ°ā§āĻ˜ āĻ¸āĻŽāĻ¯āĻŧā§‡āĻ° āĻœāĻ¨ā§āĻ¯ āĻ•ā§‹āĻ¨ā§‹ āĻĢāĻ˛āĻžāĻĢāĻ˛ āĻ¨āĻžāĻ“ āĻĻāĻŋāĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡, āĻ¤āĻžāĻ‡ āĻāĻŸāĻŋ āĻĻā§‡āĻ–āĻžāĻ¤ā§‡ āĻ¸āĻ•ā§āĻˇāĻŽ āĻšāĻ“āĻ¯āĻŧāĻž āĻŦāĻžāĻžā§āĻ›āĻ¨ā§€āĻ¯āĻŧāĨ¤ āĻĢāĻ˛āĻžāĻĢāĻ˛ āĻ¸āĻš āĻĒā§āĻ°āĻĨāĻŽ āĻ¸āĻžāĻ°āĻŋ āĻĒā§āĻ°āĻžāĻĒā§āĻ¤ āĻ¨āĻž āĻšāĻ“āĻ¯āĻŧāĻž āĻĒāĻ°ā§āĻ¯āĻ¨ā§āĻ¤ āĻĒā§āĻ°āĻļā§āĻ¨ā§‡āĻ° āĻ…āĻ—ā§āĻ°āĻ—āĻ¤āĻŋāĨ¤ āĻāĻŸāĻŋ āĻ•āĻ°āĻžāĻ° āĻœāĻ¨ā§āĻ¯, HTTP āĻ‡āĻ¨ā§āĻŸāĻžāĻ°āĻĢā§‡āĻ¸ā§‡ āĻāĻ•āĻŸāĻŋ āĻĒā§āĻ¯āĻžāĻ°āĻžāĻŽāĻŋāĻŸāĻžāĻ° āĻ°āĻ¯āĻŧā§‡āĻ›ā§‡ āĻ¯āĻž āĻ†āĻĒāĻ¨āĻžāĻ•ā§‡ HTTP āĻļāĻŋāĻ°ā§‹āĻ¨āĻžāĻŽā§‡ āĻ…āĻ—ā§āĻ°āĻ—āĻ¤āĻŋ āĻĒāĻžāĻ āĻžāĻ¤ā§‡ āĻĻā§‡āĻ¯āĻŧ: send_progress_in_http_headers=1. āĻĻā§āĻ°ā§āĻ­āĻžāĻ—ā§āĻ¯āĻŦāĻļāĻ¤, āĻ¸ā§āĻŸā§āĻ¯āĻžāĻ¨ā§āĻĄāĻžāĻ°ā§āĻĄ āĻ—ā§‹ āĻ˛āĻžāĻ‡āĻŦā§āĻ°ā§‡āĻ°āĻŋ āĻļāĻŋāĻ°ā§‹āĻ¨āĻžāĻŽāĻ—ā§āĻ˛āĻŋ āĻĒā§āĻ°āĻžāĻĒā§āĻ¤ āĻšāĻ“āĻ¯āĻŧāĻžāĻ° āĻ¸āĻžāĻĨā§‡ āĻ¸āĻžāĻĨā§‡ āĻĒāĻĄāĻŧāĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡ āĻ¨āĻž, āĻ¤āĻŦā§‡ HTTP 1.0 āĻ‡āĻ¨ā§āĻŸāĻžāĻ°āĻĢā§‡āĻ¸ (1.1 āĻāĻ° āĻ¸āĻžāĻĨā§‡ āĻŦāĻŋāĻ­ā§āĻ°āĻžāĻ¨ā§āĻ¤ āĻšāĻŦā§‡āĻ¨ āĻ¨āĻž!) ClickHouse āĻĻā§āĻŦāĻžāĻ°āĻž āĻ¸āĻŽāĻ°ā§āĻĨāĻŋāĻ¤, āĻ¤āĻžāĻ‡ āĻ†āĻĒāĻ¨āĻŋ ClickHouse-āĻ āĻāĻ•āĻŸāĻŋ āĻ•āĻžāĻāĻšāĻž TCP āĻ¸āĻ‚āĻ¯ā§‹āĻ— āĻ–ā§āĻ˛āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡āĻ¨ āĻāĻŦāĻ‚ āĻāĻŸāĻŋ āĻ¸ā§‡āĻ–āĻžāĻ¨ā§‡ āĻĒāĻžāĻ āĻžāĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡āĻ¨ GET /?query=... HTTP/1.0nn āĻāĻŦāĻ‚ āĻ•ā§‹āĻ¨ā§‹ āĻĒāĻžāĻ˛āĻžāĻ¨ā§‹ āĻŦāĻž āĻāĻ¨āĻ•ā§āĻ°āĻŋāĻĒāĻļāĻ¨ āĻ›āĻžāĻĄāĻŧāĻžāĻ‡ āĻ°ā§‡āĻ¸āĻĒāĻ¨ā§āĻ¸ āĻšā§‡āĻĄāĻžāĻ° āĻāĻŦāĻ‚ āĻŦāĻĄāĻŋ āĻĒāĻžāĻŦā§‡āĻ¨, āĻ¤āĻžāĻ‡ āĻāĻ‡ āĻ•ā§āĻˇā§‡āĻ¤ā§āĻ°ā§‡ āĻ†āĻŽāĻžāĻĻā§‡āĻ° āĻ¸ā§āĻŸā§āĻ¯āĻžāĻ¨ā§āĻĄāĻžāĻ°ā§āĻĄ āĻ˛āĻžāĻ‡āĻŦā§āĻ°ā§‡āĻ°āĻŋ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°āĻžāĻ°āĻ“ āĻĻāĻ°āĻ•āĻžāĻ° āĻ¨ā§‡āĻ‡āĨ¤

ClickHouse āĻĨā§‡āĻ•ā§‡ āĻ¸ā§āĻŸā§āĻ°āĻŋāĻŽāĻŋāĻ‚ āĻ˛āĻ—

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.

Go-āĻ¤ā§‡ 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

āĻ¯ā§‡āĻšā§‡āĻ¤ā§ āĻ…āĻ¨ā§āĻ°ā§‹āĻ§āĻŸāĻŋ ClickHouse āĻ¸āĻ‚āĻļā§āĻ˛āĻŋāĻˇā§āĻŸ āĻ˛āĻžāĻ‡āĻ¨āĻŸāĻŋ āĻĢā§‡āĻ°āĻ¤ āĻĻā§‡āĻ“āĻ¯āĻŧāĻžāĻ° āĻĒā§āĻ°āĻžāĻ¯āĻŧ āĻ¸āĻžāĻĨā§‡ āĻ¸āĻžāĻĨā§‡āĻ‡ āĻĒāĻžāĻ āĻžāĻ¨ā§‹ āĻšāĻ¯āĻŧ, āĻ¤āĻžāĻ‡ āĻāĻŸāĻŋ āĻ•ā§āĻ¯āĻžāĻļā§‡ āĻļā§‡āĻˇ āĻšāĻ¯āĻŧ āĻāĻŦāĻ‚ āĻ¸āĻžāĻ§āĻžāĻ°āĻŖāĻ­āĻžāĻŦā§‡ āĻ…āĻ¨ā§āĻ°ā§‹āĻ§āĻŸāĻŋ āĻ–ā§āĻŦ āĻĻā§āĻ°ā§āĻ¤ āĻ•āĻžāĻ°ā§āĻ¯āĻ•āĻ° āĻ•āĻ°āĻž āĻšāĻ¯āĻŧ āĻāĻŦāĻ‚ āĻ¸āĻžāĻŽāĻžāĻ¨ā§āĻ¯ 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

āĻāĻ•āĻŸāĻŋ āĻŽāĻ¨ā§āĻ¤āĻŦā§āĻ¯ āĻœā§āĻĄāĻŧā§āĻ¨