ClickHouse + Graphite: เบงเบดเบ—เบตเบเบฒเบ™เบซเบผเบธเบ”เบœเปˆเบญเบ™เบเบฒเบ™เบšเปเบฅเบดเป‚เบžเบเบžเบทเป‰เบ™เบ—เบตเปˆเบ”เบดเบ”เบขเปˆเบฒเบ‡เบซเบผเบงเบ‡เบซเบผเบฒเบ

ClickHouse + Graphite: เบงเบดเบ—เบตเบเบฒเบ™เบซเบผเบธเบ”เบœเปˆเบญเบ™เบเบฒเบ™เบšเปเบฅเบดเป‚เบžเบเบžเบทเป‰เบ™เบ—เบตเปˆเบ”เบดเบ”เบขเปˆเบฒเบ‡เบซเบผเบงเบ‡เบซเบผเบฒเบ

เบŠเบปเบกเป€เบŠเบตเบ, habr.

เบ–เป‰เบฒเปƒเบœเบœเบนเป‰เบซเบ™เบถเปˆเบ‡เบ‚เบธเบ”เบ„เบปเป‰เบ™เบฅเบฐเบšเบปเบš graphite-web เปเบฅเบฐเบžเบปเบšเบšเบฑเบ™เบซเบฒเบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบšเบเบฒเบ™เป€เบเบฑเบšเบฎเบฑเบเบชเบฒ เบเบฐเบŠเบดเบš (IO, เบžเบทเป‰เบ™เบ—เบตเปˆเบ”เบดเบ”เบšเปเบฅเบดเป‚เบžเบ), เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เป‚เบญเบเบฒเบ”เบ—เบตเปˆ ClickHouse เบ–เบทเบเป‚เบเบ™เป€เบ›เบฑเบ™เบเบฒเบ™เบ—เบปเบ”เปเบ—เบ™เบ„เบงเบ™เบˆเบฐเบกเบตเปเบ™เบงเป‚เบ™เป‰เบกเบซเบ™เบถเปˆเบ‡. เบ„เปเบฒเบ–เบฐเปเบซเบผเบ‡เบเบฒเบ™เบ™เบตเป‰เบซเบกเบฒเบเบ„เบงเบฒเบกเบงเปˆเบฒเบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบ‚เบญเบ‡เบžเบฒเบเบชเปˆเบงเบ™เบ—เบตเบชเบฒเบกเบ–เบทเบเบ™เปเบฒเปƒเบŠเป‰เปเบฅเป‰เบงเป€เบ›เบฑเบ™ daemon เบฎเบฑเบš metrics, เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบเบปเบเบ•เบปเบงเบขเปˆเบฒเบ‡ เป€เบ„เบทเปˆเบญเบ‡เบ‚เบฝเบ™เบเบฒเบเบšเบญเบ™ เบซเบผเบท เบเบฒเบเบšเบญเบ™เป„เบ›.

ClickHouse เปเบเป‰เป„เบ‚เบšเบฑเบ™เบซเบฒเบ—เบตเปˆเบญเบฐเบ—เบดเบšเบฒเบเป„เบ”เป‰เบ”เบต. เบ•เบปเบงเบขเปˆเบฒเบ‡, เบซเบผเบฑเบ‡เบˆเบฒเบเบเบฒเบ™เป‚เบญเบ™เบ‚เปเป‰เบกเบนเบ™ 2TiB เบˆเบฒเบเบชเบฝเบ‡เบเบฐเบŠเบดเบš, เบžเบงเบเบกเบฑเบ™เป€เบซเบกเบฒเบฐเบเบฑเบš 300GiB. เบ‚เป‰เบฒโ€‹เบžเบฐโ€‹เป€เบˆเบปเป‰เบฒโ€‹เบˆเบฐโ€‹เบšเปเปˆโ€‹เป„เบ”เป‰โ€‹เบขเบนเปˆโ€‹เปƒเบ™โ€‹เบเบฒเบ™โ€‹เบ›เบฝเบšโ€‹เบ—เบฝเบšโ€‹เปƒเบ™โ€‹เบฅเบฐโ€‹เบญเบฝเบ”โ€‹, เบกเบตโ€‹เบซเบผเบฒเบโ€‹เบ‚เบญเบ‡โ€‹เบšเบปเบ”โ€‹เบ„เบงเบฒเบกโ€‹เบเปˆเบฝเบงโ€‹เบเบฑเบšโ€‹เบซเบปเบงโ€‹เบ‚เปเป‰โ€‹เบ™เบตเป‰โ€‹. เบ™เบญเบเบˆเบฒเบเบ™เบฑเป‰เบ™, เบˆเบปเบ™เบเปˆเบงเบฒเบšเปเปˆเบ”เบปเบ™เบกเบฒเบ™เบตเป‰, เบšเปเปˆเปเบกเปˆเบ™เบ—เบธเบเบชเบดเปˆเบ‡เบ—เบธเบเบขเปˆเบฒเบ‡เปเบกเปˆเบ™เบ”เบตเป€เบฅเบตเบ”เบเบฑเบšเบเบฒเบ™เป€เบเบฑเบšเบฎเบฑเบเบชเบฒ ClickHouse เบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒ.

เบšเบฑเบ™เบซเบฒเบเบฑเบšเบžเบทเป‰เบ™เบ—เบตเปˆเบšเปเบฅเบดเป‚เบžเบ

เบขเบนเปˆ glance เบ—เปเบฒเบญเบดเบ”, เบ—เบธเบเบชเบดเปˆเบ‡เบ—เบธเบเบขเปˆเบฒเบ‡เบ„เบงเบ™เบˆเบฐเป€เบฎเบฑเบ”เบงเบฝเบเป„เบ”เป‰เบ”เบต. เบ•เบดเบ”เบ•เบฒเบก เป€เบญเบเบฐเบชเบฒเบ™, เบชเป‰เบฒเบ‡ config เบชเปเบฒเบฅเบฑเบšเบฎเบนเบšเปเบšเบšเบเบฒเบ™เป€เบเบฑเบšเบฎเบฑเบเบชเบฒ metrics (เป€เบžเบตเปˆเบกเป€เบ•เบตเบก retention), เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เบชเป‰เบฒเบ‡เบ•เบฒเบ•เบฐเบฅเบฒเบ‡เบ•เบฒเบกเบ„เปเบฒเปเบ™เบฐเบ™เปเบฒเบ‚เบญเบ‡ backend เบ—เบตเปˆเป€เบฅเบทเบญเบเบชเปเบฒเบฅเบฑเบš graphite-web: carbon-clickhouse+graphite-clickhouse เบซเบผเบท graphous, เบ‚เบถเป‰เบ™เบเบฑเบšเบงเปˆเบฒ stack เปƒเบ”เบ–เบทเบเบ™เปเบฒเปƒเบŠเป‰. เปเบฅเบฐ... เบฅเบนเบเบฅเบฐเป€เบšเบตเบ”เป€เบงเบฅเบฒเบเปเปˆเบ”เบฑเบšเป„เบ›.

เป€เบžเบทเปˆเบญเป€เบ‚เบปเป‰เบฒเปƒเบˆเบงเปˆเบฒเบญเบฑเบ™เปƒเบ”, เบ—เปˆเบฒเบ™ เบˆเบณ เป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เบฎเบนเป‰เบงเบดเบ—เบตเบเบฒเบ™เป€เบฎเบฑเบ”เบงเบฝเบเปเบฅเบฐเป€เบชเบฑเป‰เบ™เบ—เบฒเบ‡เบŠเบตเบงเบดเบ”เบ•เปเปˆเป„เบ›เบ‚เบญเบ‡เบ‚เปเป‰เบกเบนเบ™เปƒเบ™เบ•เบฒเบ•เบฐเบฅเบฒเบ‡เป€เบ„เบทเปˆเบญเบ‡เบˆเบฑเบเบ‚เบญเบ‡เบ„เบญเบšเบ„เบปเบง *.MergeTree ClickHouse (เบ•เบฒเบ•เบฐเบฅเบฒเบ‡เป€เบญเบปเบฒเบกเบฒเบˆเบฒเบ เบšเบปเบ” เบ™เบณ เบชเบฐ เป€เปœเบต Alexey Zatelpin):

  • เปเบŠเบ ะฑะปะพะบ เบ‚เปเป‰เบกเบนเบ™. เปƒเบ™เบเปเบฅเบฐเบ™เบตเบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒ, เบกเบฑเบ™เปเบกเปˆเบ™เบ•เบปเบงเบŠเบตเป‰เบงเบฑเบ”เบ—เบตเปˆเบกเบฒเบฎเบญเบ”.
    ClickHouse + Graphite: เบงเบดเบ—เบตเบเบฒเบ™เบซเบผเบธเบ”เบœเปˆเบญเบ™เบเบฒเบ™เบšเปเบฅเบดเป‚เบžเบเบžเบทเป‰เบ™เบ—เบตเปˆเบ”เบดเบ”เบขเปˆเบฒเบ‡เบซเบผเบงเบ‡เบซเบผเบฒเบ
  • เปเบ•เปˆเบฅเบฐเบšเบฅเบฑเบญเบเบ”เบฑเปˆเบ‡เบเปˆเบฒเบงเบ–เบทเบเบˆเบฑเบ”เบฎเบฝเบ‡เบ•เบฒเบกเบฅเบฐเบซเบฑเบ”เบเปˆเบญเบ™เบ—เบตเปˆเบˆเบฐเบ–เบทเบเบ‚เบฝเบ™เปƒเบชเปˆเปเบœเปˆเบ™. ORDER BYเบฅเบฐเบšเบธเปƒเบ™เป€เบงเบฅเบฒเบชเป‰เบฒเบ‡เบ•เบฒเบ•เบฐเบฅเบฒเบ‡.
  • เบซเบผเบฑเบ‡โ€‹เบˆเบฒเบโ€‹เบเบฒเบ™โ€‹เบ„เบฑเบ”โ€‹เป€เบฅเบทเบญเบโ€‹, ะบัƒัะพะบ (part) เบ‚เปเป‰เบกเบนเบ™เบ–เบทเบเบ‚เบฝเบ™เปƒเบชเปˆเปเบœเปˆเบ™.
    ClickHouse + Graphite: เบงเบดเบ—เบตเบเบฒเบ™เบซเบผเบธเบ”เบœเปˆเบญเบ™เบเบฒเบ™เบšเปเบฅเบดเป‚เบžเบเบžเบทเป‰เบ™เบ—เบตเปˆเบ”เบดเบ”เบขเปˆเบฒเบ‡เบซเบผเบงเบ‡เบซเบผเบฒเบ
  • เป€เบŠเบตเบšเป€เบงเบตเบเบงเบ”เบชเบญเบšเปƒเบ™เบžเบทเป‰เบ™เบซเบผเบฑเบ‡เป€เบžเบทเปˆเบญเบšเปเปˆเปƒเบซเป‰เบกเบตเบŠเบดเป‰เบ™เบชเปˆเบงเบ™เบ”เบฑเปˆเบ‡เบเปˆเบฒเบงเบซเบผเบฒเบ, เปเบฅเบฐเป€เบ›เบตเบ”เบžเบทเป‰เบ™เบซเบผเบฑเบ‡ ัะปะธัะฝะธั (merge, เบ•เปเปˆโ€‹เป„เบ›โ€‹เบ™เบตเป‰ merge).
    ClickHouse + Graphite: เบงเบดเบ—เบตเบเบฒเบ™เบซเบผเบธเบ”เบœเปˆเบญเบ™เบเบฒเบ™เบšเปเบฅเบดเป‚เบžเบเบžเบทเป‰เบ™เบ—เบตเปˆเบ”เบดเบ”เบขเปˆเบฒเบ‡เบซเบผเบงเบ‡เบซเบผเบฒเบ
    ClickHouse + Graphite: เบงเบดเบ—เบตเบเบฒเบ™เบซเบผเบธเบ”เบœเปˆเบญเบ™เบเบฒเบ™เบšเปเบฅเบดเป‚เบžเบเบžเบทเป‰เบ™เบ—เบตเปˆเบ”เบดเบ”เบขเปˆเบฒเบ‡เบซเบผเบงเบ‡เบซเบผเบฒเบ
  • เป€เบŠเบตเบšเป€เบงเบตเบขเบธเบ”เบเบฒเบ™เป€เบฎเบฑเบ”เบงเบฝเบเบเบฒเบ™เบฅเบงเบกเบ•เบปเบงเบ‚เบญเบ‡เบกเบฑเบ™เป€เบญเบ‡เบ—เบฑเบ™เบ—เบตเบ—เบตเปˆเบ‚เปเป‰เบกเบนเบ™เบขเบธเบ”เป€เบŠเบปเบฒเบเบฒเบ™เป„เบซเบผเป€เบ‚เบปเป‰เบฒเบขเปˆเบฒเบ‡เบˆเบดเบ‡เบˆเบฑเบ‡ ะฟะฐั€ั‚ะธั†ะธัŽ (partition), เปเบ•เปˆเบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบ‚เบฐเบšเบงเบ™เบเบฒเบ™เบ”เป‰เบงเบเบ•เบปเบ™เป€เบญเบ‡เบ”เป‰เบงเบเบ„เปเบฒเบชเบฑเปˆเบ‡ OPTIMIZE.
  • เบ–เป‰เบฒโ€‹เบซเบฒเบโ€‹เบงเปˆเบฒโ€‹เบกเบตโ€‹เบžเบฝเบ‡โ€‹เปเบ•เปˆโ€‹เบซเบ™เบถเปˆเบ‡โ€‹เบชเบดเป‰เบ™โ€‹เปƒเบ™โ€‹เบเบฒเบ™โ€‹เปเบšเปˆเบ‡โ€‹เบ›เบฑเบ™โ€‹, เบซเบผเบฑเบ‡โ€‹เบˆเบฒเบโ€‹เบ™เบฑเป‰เบ™โ€‹เบ—เปˆเบฒเบ™โ€‹เบˆเบฐโ€‹เบšเปเปˆโ€‹เบชเบฒโ€‹เบกเบฒเบ”โ€‹เบ”เปเบฒโ€‹เป€เบ™เบตเบ™โ€‹เบเบฒเบ™ merge เป‚เบ”เบโ€‹เบ™เปเบฒโ€‹เปƒเบŠเป‰โ€‹เบ„เปเบฒโ€‹เบชเบฑเปˆเบ‡โ€‹เบ›เบปเบโ€‹เบเบฐโ€‹เบ•เบดโ€‹เป„เบ”เป‰โ€‹; OPTIMIZE ... FINAL

เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™, เบ•เบปเบงเบŠเบตเป‰เบงเบฑเบ”เบ—เปเบฒเบญเบดเบ”เบกเบฒเบฎเบญเบ”. เปเบฅเบฐเป€เบ‚เบปเบฒเป€เบˆเบปเป‰เบฒเปƒเบŠเป‰เป€เบงเบฅเบฒเป€เบ–เบดเบ‡เบžเบทเป‰เบ™เบ—เบตเปˆเบšเบฒเบ‡. เป€เบซเบ”เบเบฒเบ™เบ•เปเปˆเบกเบฒเบญเบฒเบ”เบˆเบฐเปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™เป„เบ›เบ•เบฒเบกเบซเบผเบฒเบเบ›เบฑเบ”เปƒเบˆ:

  • เบเบฐเปเบˆเบเบฒเบ™เปเบšเปˆเบ‡เบ›เบฑเบ™เบชเบฒเบกเบฒเบ”เบกเบตเบ‚เบฐเบซเบ™เบฒเบ”เบ™เป‰เบญเบเบซเบผเบฒเบ (เบ•เปเปˆเบกเบทเป‰) เบซเบผเบทเปƒเบซเบเปˆเบซเบผเบฒเบ (เบซเบผเบฒเบเป€เบ”เบทเบญเบ™).
  • เบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเบเบฒเบ™เป€เบเบฑเบšเบฎเบฑเบเบชเบฒเบญเบฒเบ”เบˆเบฐเป€เบซเบกเบฒเบฐเบชเบปเบกเบเบฑเบšเบ‚เบญเบšเป€เบ‚เบ”เบเบฒเบ™เบฅเบงเบšเบฅเบงเบกเบ‚เปเป‰เบกเบนเบ™เบ—เบตเปˆเบชเปเบฒเบ„เบฑเบ™เบˆเปเบฒเบ™เบงเบ™เบซเบ™เบถเปˆเบ‡เบžเบฒเบเปƒเบ™เบžเบฒเบ—เบดเบŠเบฑเบ™เบ—เบตเปˆเบกเบตเบเบฒเบ™เป€เบ„เบทเปˆเบญเบ™เป„เบซเบง (เบšเปˆเบญเบ™เบ—เบตเปˆเบกเบตเบเบฒเบ™เบšเบฑเบ™เบ—เบถเบเบเบฒเบ™เบงเบฑเบ”เปเบ—เบ), เบซเบผเบทเบญเบฒเบ”เบˆเบฐเบšเปเปˆ.
  • เบ–เป‰เบฒเบกเบตเบ‚เปเป‰เบกเบนเบ™เบซเบผเบฒเบ, เบŠเบดเป‰เบ™เบชเปˆเบงเบ™เบ•เบปเป‰เบ™เป†, เป€เบŠเบดเปˆเบ‡เป€เบ™เบทเปˆเบญเบ‡เบˆเบฒเบเบเบฒเบ™เบฅเบงเบกเบ•เบปเบงเบ‚เบญเบ‡เบžเบทเป‰เบ™เบซเบฅเบฑเบ‡เบญเบฒเบ”เบˆเบฐเปƒเบซเบเปˆเปเบฅเป‰เบง (เบ–เป‰เบฒเบ—เปˆเบฒเบ™เป€เบฅเบทเบญเบเบเบฐเปเบˆเบเบฒเบ™เปเบšเปˆเบ‡เบ›เบฑเบ™เบ—เบตเปˆเบšเปเปˆเป€เบซเบกเบฒเบฐเบชเบปเบก), เบˆเบฐเบšเปเปˆเบ–เบทเบเบฅเบงเบกเป€เบ‚เบปเป‰เบฒเบเบฑเบšเบ•เปˆเบญเบ™เบ™เป‰เบญเบเป†เบชเบปเบ”เป†.

เปเบฅเบฐเบกเบฑเบ™เบชเบฐเป€เบซเบกเบตเบชเบดเป‰เบ™เบชเบธเบ”เบฅเบปเบ‡เบ„เบทเบเบฑเบ™. เบžเบทเป‰เบ™เบ—เบตเปˆเบ—เบตเปˆเบ–เบทเบเบ„เบญเบšเบ„เบญเบ‡เป‚เบ”เบ metrics เปƒเบ™ ClickHouse เบžเบฝเบ‡เปเบ•เปˆเป€เบžเบตเปˆเบกเบ‚เบถเป‰เบ™เบ–เป‰เบฒ:

  • เบšเปเปˆเบชเบฐเบซเบกเบฑเบ OPTIMIZE ... FINAL เบ”เป‰เบงเบเบ•เบปเบ™เป€เบญเบ‡เบซเบผเบท
  • เบขเปˆเบฒเปƒเบชเปˆเบ‚เปเป‰เบกเบนเบ™เป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™เบžเบฒเบ—เบดเบŠเบฑเบ™เบ—เบฑเบ‡เบซเบกเบปเบ”เบขเปˆเบฒเบ‡เบ•เปเปˆเป€เบ™เบทเปˆเบญเบ‡, เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™เป„เบงเบซเบผเบทเบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เบเบฒเบ™เบฅเบงเบกเบžเบทเป‰เบ™เบซเบฅเบฑเบ‡เบˆเบฐเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™.

เบงเบดเบ—เบตเบ—เบตเบชเบญเบ‡เป€เบšเบดเปˆเบ‡เบ„เบทเบงเปˆเบฒเป€เบ›เบฑเบ™เบงเบดเบ—เบตเบ—เบตเปˆเบ‡เปˆเบฒเบเบ—เบตเปˆเบชเบธเบ”เบ—เบตเปˆเบˆเบฐเบ›เบฐเบ•เบดเบšเบฑเบ”เปเบฅเบฐเบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™, เบกเบฑเบ™เบšเปเปˆเบ–เบทเบเบ•เป‰เบญเบ‡เปเบฅเบฐเบ–เบทเบเบ—เบปเบ”เบฅเบญเบ‡เบเปˆเบญเบ™.
เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเป„เบ”เป‰เบ‚เบฝเบ™เบ•เบปเบงเบ‚เบฝเบ™ python เบ‡เปˆเบฒเบเบ”เบฒเบเบ—เบตเปˆเบชเบปเปˆเบ‡ metrics dummy เบชเปเบฒเบฅเบฑเบšเบ—เบธเบเป†เบกเบทเป‰เบชเปเบฒเบฅเบฑเบš 4 เบ›เบตเบ—เบตเปˆเบœเปˆเบฒเบ™เบกเบฒเปเบฅเบฐเปเบฅเปˆเบ™ cron เบ—เบธเบเป†เบŠเบปเปˆเบงเป‚เบกเบ‡.
เป€เบ™เบทเปˆเบญเบ‡เบˆเบฒเบเบงเปˆเบฒเบเบฒเบ™เบ”เปเบฒเป€เบ™เบตเบ™เบ‡เบฒเบ™เบ—เบฑเบ‡เบซเบกเบปเบ”เบ‚เบญเบ‡ ClickHouse DBMS เปเบกเปˆเบ™เบญเบตเบ‡เปƒเบชเปˆเบ„เบงเบฒเบกเบˆเบดเบ‡เบ—เบตเปˆเบงเปˆเบฒเบฅเบฐเบšเบปเบšเบ™เบตเป‰เป„เบงเบซเบผเบทเบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เบˆเบฐเป€เบฎเบฑเบ”เบงเบฝเบเบžเบทเป‰เบ™เบ–เบฒเบ™เบ—เบฑเบ‡เบซเบกเบปเบ”, เปเบ•เปˆเบกเบฑเบ™เบšเปเปˆเบฎเบนเป‰เบงเปˆเบฒเป€เบงเบฅเบฒเปƒเบ”, เบ‚เป‰เบญเบเบšเปเปˆเบชเบฒเบกเบฒเบ”เบฅเปเบ–เป‰เบฒเป€เบงเบฅเบฒเบ—เบตเปˆเบŠเบดเป‰เบ™เบชเปˆเบงเบ™เปƒเบซเบเปˆเป€เบเบปเปˆเบฒเป€เบฅเบตเปˆเบกเบ›เบฐเบชเบปเบกเบ›เบฐเบชเบฒเบ™เบเบฑเบš. เบ‚เบฐโ€‹เบซเบ™เบฒเบ”โ€‹เบ™เป‰เบญเบโ€‹เปƒเบซเบกเปˆโ€‹. เบกเบฑเบ™เป„เบ”เป‰เบเบฒเบเป€เบ›เบฑเบ™เบ—เบตเปˆเบŠเบฑเบ”เป€เบˆเบ™เบงเปˆเบฒเบžเบงเบเป€เบฎเบปเบฒเบ•เป‰เบญเบ‡เบเบฒเบ™เบŠเบญเบเบซเบฒเบงเบดเบ—เบตเบ—เบตเปˆเบˆเบฐเป€เบžเบตเปˆเบกเบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบšเบเบฒเบ™เบšเบฑเบ‡เบ„เบฑเบšเปƒเบซเป‰เบญเบฑเบ”เบ•เบฐเป‚เบ™เบกเบฑเบ”.

ClickHouse + Graphite: เบงเบดเบ—เบตเบเบฒเบ™เบซเบผเบธเบ”เบœเปˆเบญเบ™เบเบฒเบ™เบšเปเบฅเบดเป‚เบžเบเบžเบทเป‰เบ™เบ—เบตเปˆเบ”เบดเบ”เบขเปˆเบฒเบ‡เบซเบผเบงเบ‡เบซเบผเบฒเบ

เบ‚เปเป‰เบกเบนเบ™เปƒเบ™เบ•เบฒเบ•เบฐเบฅเบฒเบ‡เบฅเบฐเบšเบปเบš ClickHouse

เปƒเบซเป‰เบžเบดเบˆเบฒเบฅเบฐเบ™เบฒเป‚เบ„เบ‡เบชเป‰เบฒเบ‡เบ•เบฒเบ•เบฐเบฅเบฒเบ‡ system.parts. เบ™เบตเป‰เปเบกเปˆเบ™เบ‚เปเป‰เบกเบนเบ™เบ—เบตเปˆเบชเบปเบกเบšเบนเบ™เปเบšเบšเบเปˆเบฝเบงเบเบฑเบšเปเบ•เปˆเบฅเบฐเบŠเบดเป‰เบ™เบ‚เบญเบ‡เบ•เบฒเบ•เบฐเบฅเบฒเบ‡เบ—เบฑเบ‡เบซเบกเบปเบ”เปƒเบ™เป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบ ClickHouse. เบ›เบฐเบเบญเบšเบกเบต, เปƒเบ™เบšเบฑเบ™เบ”เบฒเบชเบดเปˆเบ‡เบญเบทเปˆเบ™เป†, เบ–เบฑเบ™เบ•เปเปˆเป„เบ›เบ™เบตเป‰:

  • เบŠเบทเปˆ db (database);
  • เบŠเบทเปˆโ€‹เบ•เบฒโ€‹เบ•เบฐโ€‹เบฅเบฒเบ‡ (table);
  • เบŠเบทเปˆเบžเบฒเบ—เบดเบŠเบฑเบ™ เปเบฅเบฐ ID (partition & partition_id);
  • เป€เบกเบทเปˆเบญเบชเบดเป‰เบ™เป„เบ”เป‰เบ–เบทเบเบชเป‰เบฒเบ‡เบ‚เบทเป‰เบ™ (modification_time);
  • เบงเบฑเบ™โ€‹เบ—เบตโ€‹เบ•เปเบฒโ€‹เปˆโ€‹เบชเบธเบ”โ€‹เบ—เบตเปˆโ€‹เปเบฅเบฐโ€‹เบชเบนเบ‡โ€‹เบชเบธเบ”โ€‹เปƒเบ™โ€‹เบชเบดเป‰เบ™ (เบเบฒเบ™โ€‹เปเบšเปˆเบ‡โ€‹เบ›เบฑเบ™โ€‹เปเบกเปˆเบ™โ€‹เป€เบฎเบฑเบ”โ€‹เป„เบ”เป‰โ€‹เป‚เบ”เบโ€‹เบกเบทเป‰โ€‹) (min_date & max_date);

เบ™เบญเบเบ™เบฑเป‰เบ™เบเบฑเบ‡เบกเบตเบ•เบฒเบ•เบฐเบฅเบฒเบ‡ system.graphite_retentions, เบกเบตโ€‹เบžเบฒเบโ€‹เบชเบฐโ€‹เบซเบ™เบฒเบกโ€‹เบ—เบตเปˆโ€‹เบซเบ™เป‰เบฒโ€‹เบชเบปเบ™โ€‹เปƒเบˆโ€‹เบ”เบฑเปˆเบ‡โ€‹เบ•เปเปˆโ€‹เป„เบ›โ€‹เบ™เบตเป‰โ€‹:

  • เบŠเบทเปˆ db (Tables.database);
  • เบŠเบทเปˆโ€‹เบ•เบฒโ€‹เบ•เบฐโ€‹เบฅเบฒเบ‡ (Tables.table);
  • metric age เปƒเบ™เป€เบงเบฅเบฒเบ—เบตเปˆเบเบฒเบ™เบฅเบงเบšเบฅเบงเบกเบ•เปเปˆเป„เบ›เบ„เบงเบ™เบˆเบฐเบ–เบทเบเบ™เปเบฒเปƒเบŠเป‰ (age);

เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™:

  1. เบžเบงเบเป€เบฎเบปเบฒเบกเบตเบ•เบฒเบ•เบฐเบฅเบฒเบ‡เบ‚เบญเบ‡ chunks เปเบฅเบฐเบ•เบฒเบ•เบฐเบฅเบฒเบ‡เบ‚เบญเบ‡เบเบปเบ”เบฅเบฐเบšเบฝเบšเบเบฒเบ™เบฅเบงเบšเบฅเบงเบก.
  2. เบžเบงเบโ€‹เป€เบฎเบปเบฒโ€‹เบชเบปเบกโ€‹เบ—เบปเบšโ€‹เบเบฒเบ™โ€‹เบ•เบฑเบ”โ€‹เบเบฑเบ™โ€‹เบ‚เบญเบ‡โ€‹เป€เบ‚เบปเบฒโ€‹เป€เบˆเบปเป‰เบฒโ€‹เปเบฅเบฐโ€‹เป„เบ”เป‰โ€‹เบฎเบฑเบšโ€‹เบ•เบฒโ€‹เบ•เบฐโ€‹เบฅเบฒเบ‡โ€‹เบ—เบฑเบ‡โ€‹เบซเบกเบปเบ” *GraphiteMergeTreeโ€‹.
  3. เบžเบงเบโ€‹เป€เบฎเบปเบฒโ€‹เบเปเบฒโ€‹เบฅเบฑเบ‡โ€‹เบŠเบญเบโ€‹เบซเบฒโ€‹เบเบฒเบ™โ€‹เปเบšเปˆเบ‡โ€‹เบ›เบฑเบ™โ€‹เบ—เบฑเบ‡โ€‹เบซเบกเบปเบ”โ€‹เบ—เบตเปˆโ€‹:
    • เบซเบผเบฒเบเบเบงเปˆเบฒเบซเบ™เบถเปˆเบ‡เบŠเบดเป‰เบ™
    • เบซเบผเบทเป€เบ–เบดเบ‡เป€เบงเบฅเบฒเบ—เบตเปˆเบˆเบฐเบ™เปเบฒเปƒเบŠเป‰เบเบปเบ”เบฅเบฐเบšเบฝเบšเบเบฒเบ™เบฅเบงเบšเบฅเบงเบกเบ•เปเปˆเป„เบ›, เปเบฅเบฐ modification_time เปเบเปˆเบเบงเปˆเบฒเป€เบงเบฅเบฒเบ™เบตเป‰.

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

เบ„เปเบฒโ€‹เบฎเป‰เบญเบ‡โ€‹เบชเบฐโ€‹เบซเบกเบฑเบโ€‹เบ™เบตเป‰โ€‹

SELECT
    concat(p.database, '.', p.table) AS table,
    p.partition_id AS partition_id,
    p.partition AS partition,
    -- ะกะฐะผะพะต "ัั‚ะฐั€ะพะต" ะฟั€ะฐะฒะธะปะพ, ะบะพั‚ะพั€ะพะต ะผะพะถะตั‚ ะฑั‹ั‚ัŒ ะฟั€ะธะผะตะฝะตะฝะพ ะดะปั
    -- ะฟะฐั€ั‚ะธั†ะธะธ, ะฝะพ ะฝะต ะฒ ะฑัƒะดัƒั‰ะตะผ, ัะผ (*)
    max(g.age) AS age,
    -- ะšะพะปะธั‡ะตัั‚ะฒะพ ะบัƒัะบะพะฒ ะฒ ะฟะฐั€ั‚ะธั†ะธะธ
    countDistinct(p.name) AS parts,
    -- ะ—ะฐ ัะฐะผัƒัŽ ัั‚ะฐั€ัˆัƒัŽ ะผะตั‚ั€ะธะบัƒ ะฒ ะฟะฐั€ั‚ะธั†ะธะธ ะฟั€ะธะฝะธะผะฐะตั‚ัั 00:00:00 ัะปะตะดัƒัŽั‰ะตะณะพ ะดะฝั
    toDateTime(max(p.max_date + 1)) AS max_time,
    -- ะšะพะณะดะฐ ะฟะฐั€ั‚ะธั†ะธั ะดะพะปะถะฝะฐ ะฑั‹ั‚ัŒ ะพะฟั‚ะธะผะธะทะธั€ะพะฒะฐะฝะฝะฐ
    max_time + age AS rollup_time,
    -- ะšะพะณะดะฐ ัะฐะผั‹ะน ัั‚ะฐั€ั‹ะน ะบัƒัะพะบ ะฒ ะฟะฐั€ั‚ะธั†ะธะธ ะฑั‹ะป ะพะฑะฝะพะฒะปั‘ะฝ
    min(p.modification_time) AS modified_at
FROM system.parts AS p
INNER JOIN
(
    -- ะ’ัะต ะฟั€ะฐะฒะธะปะฐ ะดะปั ะฒัะตั… ั‚ะฐะฑะปะธั† *GraphiteMergeTree
    SELECT
        Tables.database AS database,
        Tables.table AS table,
        age
    FROM system.graphite_retentions
    ARRAY JOIN Tables
    GROUP BY
        database,
        table,
        age
) AS g ON
    (p.table = g.table)
    AND (p.database = g.database)
WHERE
    -- ะขะพะปัŒะบะพ ะฐะบั‚ะธะฒะฝั‹ะต ะบัƒัะบะธ
    p.active
    -- (*) ะ˜ ั‚ะพะปัŒะบะพ ัั‚ั€ะพะบะธ, ะณะดะต ะฟั€ะฐะฒะธะปะฐ ะฐะณะณั€ะตะณะฐั†ะธะธ ัƒะถะต ะดะพะปะถะฝั‹ ะฑั‹ั‚ัŒ ะฟั€ะธะผะตะฝะตะฝั‹
    AND ((toDateTime(p.max_date + 1) + g.age) < now())
GROUP BY
    table,
    partition
HAVING
    -- ะขะพะปัŒะบะพ ะฟะฐั€ั‚ะธั†ะธะธ, ะบะพั‚ะพั€ั‹ะต ะผะปะฐะดัˆะต ะผะพะผะตะฝั‚ะฐ ะพะฟั‚ะธะผะธะทะฐั†ะธะธ
    (modified_at < rollup_time)
    -- ะ˜ะปะธ ั ะฝะตัะบะพะปัŒะบะธะผะธ ะบัƒัะบะฐะผะธ
    OR (parts > 1)
ORDER BY
    table ASC,
    partition ASC,
    age ASC

เบชเบปเปˆเบ‡เบ„เบทเบ™เปเบ•เปˆเบฅเบฐเบžเบฒเบ—เบดเบŠเบฑเบ™เบ•เบฒเบ•เบฐเบฅเบฒเบ‡ *GraphiteMergeTree เป€เบŠเบดเปˆเบ‡เบเบฒเบ™เบฅเบงเบกเป€เบ‚เบปเป‰เบฒเบเบฑเบ™เบ„เบงเบ™เป€เบฎเบฑเบ”เปƒเบซเป‰เบžเบทเป‰เบ™เบ—เบตเปˆเบซเบงเปˆเบฒเบ‡เบ‚เบญเบ‡เปเบœเปˆเบ™. เบชเบดเปˆเบ‡เบ”เบฝเบงเบ—เบตเปˆเป€เบซเบฅเบทเบญเบ—เบตเปˆเบˆเบฐเป€เบฎเบฑเบ”เปเบกเปˆเบ™เป€เบžเบทเปˆเบญเบœเปˆเบฒเบ™เบžเบงเบเป€เบ‚เบปเบฒเบ—เบฑเบ‡เบซเบกเบปเบ”เบ”เป‰เบงเบเบเบฒเบ™เบฎเป‰เบญเบ‡เบ‚เป OPTIMIZE ... FINAL. เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบชเบธเบ”เบ—เป‰เบฒเบเบเบฑเบ‡เบ„เปเบฒเบ™เบถเบ‡เป€เบ–เบดเบ‡เบ„เบงเบฒเบกเบˆเบดเบ‡เบ—เบตเปˆเบงเปˆเบฒเบšเปเปˆเบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เบชเปเบฒเบœเบฑเบ”เบเบฑเบšเบžเบฒเบ—เบดเบŠเบฑเบ™เบ—เบตเปˆเบกเบตเบเบฒเบ™เบšเบฑเบ™เบ—เบถเบเบเบฒเบ™เป€เบ„เบทเปˆเบญเบ™เป„เบซเบง.

เบ™เบตเป‰เปเบกเปˆเบ™เบชเบดเปˆเบ‡เบ—เบตเปˆเป‚เบ„เบ‡เบเบฒเบ™เป€เบฎเบฑเบ” graphite-ch-optimizer. เบญเบฐเบ”เบตเบ”เป€เบžเบทเปˆเบญเบ™เบฎเปˆเบงเบกเบ‡เบฒเบ™เบˆเบฒเบ Yandex.Market เป„เบ”เป‰เบžเบฐเบเบฒเบเบฒเบกเบกเบฑเบ™เปƒเบ™เบเบฒเบ™เบœเบฐเบฅเบดเบ”, เบœเบปเบ™เป„เบ”เป‰เบฎเบฑเบšเบ‚เบญเบ‡เบเบฒเบ™เป€เบฎเบฑเบ”เบงเบฝเบเบชเบฒเบกเบฒเบ”เป€เบซเบฑเบ™เป„เบ”เป‰เบ‚เป‰เบฒเบ‡เบฅเบธเปˆเบกเบ™เบตเป‰.

ClickHouse + Graphite: เบงเบดเบ—เบตเบเบฒเบ™เบซเบผเบธเบ”เบœเปˆเบญเบ™เบเบฒเบ™เบšเปเบฅเบดเป‚เบžเบเบžเบทเป‰เบ™เบ—เบตเปˆเบ”เบดเบ”เบขเปˆเบฒเบ‡เบซเบผเบงเบ‡เบซเบผเบฒเบ

เบ–เป‰เบฒเบ—เปˆเบฒเบ™เบ”เปเบฒเป€เบ™เบตเบ™เป‚เบ„เบ‡เบเบฒเบ™เบขเบนเปˆเปƒเบ™เป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบเบ—เบตเปˆเบกเบต ClickHouse, เบกเบฑเบ™เบžเบฝเบ‡เปเบ•เปˆเบˆเบฐเป€เบฅเบตเปˆเบกเป€เบฎเบฑเบ”เบงเบฝเบเบขเบนเปˆเปƒเบ™เป‚เบซเบกเบ” daemon. เป€เบกเบทเปˆเบญเบซเบ™เบถเปˆเบ‡เบŠเบปเปˆเบงเป‚เบกเบ‡เบ„เปเบฒเบฎเป‰เบญเบ‡เบ‚เปเบˆเบฐเบ–เบทเบเบ›เบฐเบ•เบดเบšเบฑเบ”, เบเบงเบ”เป€เบšเบดเปˆเบ‡เบงเปˆเบฒเบเบฒเบ™เปเบšเปˆเบ‡เบ›เบฑเบ™เปƒเบซเบกเปˆเบ—เบตเปˆเป€เบเบปเปˆเบฒเบเบงเปˆเบฒเบชเบฒเบกเบกเบทเป‰เป„เบ”เป‰เบ›เบฐเบเบปเบ”เบงเปˆเบฒเบชเบฒเบกเบฒเบ”เป€เบžเบตเปˆเบกเบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบšเป„เบ”เป‰.

เปเบœเบ™เบเบฒเบ™เบ—เบฑเบ™เบ—เบตเบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒเปเบกเปˆเบ™เป€เบžเบทเปˆเบญเบชเบฐเบซเบ™เบญเบ‡เบขเปˆเบฒเบ‡เบซเบ™เป‰เบญเบ deb packages, เปเบฅเบฐเบ–เป‰เบฒเป€เบ›เบฑเบ™เป„เบ›เป„เบ”เป‰เบเบฑเบ‡ rpm.

เปเบ—เบ™เบ—เบตเปˆเบˆเบฐเป€เบ›เบฑเบ™เบเบฒเบ™เบชเบฐเบซเบฅเบธเบšเป„เบ”เป‰

เปƒเบ™เป„เบฅเบเบฐ 9+ เป€เบ”เบทเบญเบ™เบ—เบตเปˆเบœเปˆเบฒเบ™เบกเบฒเบ‚เป‰เบญเบเป„เบ”เป‰เบขเบนเปˆเปƒเบ™เบšเปเบฅเบดเบชเบฑเบ”เบ‚เบญเบ‡เบ‚เป‰เบญเบ innogames เป„เบ”เป‰เปƒเบŠเป‰เป€เบงเบฅเบฒเบซเบผเบฒเบ tinkering เบขเบนเปˆเบˆเบธเบ”เบ•เบฑเบ”เบเบฑเบ™เบ‚เบญเบ‡ ClickHouse เปเบฅเบฐ graphite-web. เบกเบฑเบ™เป€เบ›เบฑเบ™เบ›เบฐเบชเบปเบšเบเบฒเบ™เบ—เบตเปˆเบ”เบต, เป€เบŠเบดเปˆเบ‡เป€เบฎเบฑเบ”เปƒเบซเป‰เบเบฒเบ™เบซเบฑเบ™เบ›เปˆเบฝเบ™เบขเปˆเบฒเบ‡เป„เบงเบงเบฒเบˆเบฒเบเบชเบฝเบ‡เบเบฐเบŠเบดเบšเป„เบ›เบซเบฒ ClickHouse เป€เบ›เบฑเบ™เบเบฒเบ™เป€เบเบฑเบšเบฎเบฑเบเบชเบฒ metrics. เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเบซเบงเบฑเบ‡เบงเปˆเบฒเบšเบปเบ”เบ„เบงเบฒเบกเบ™เบตเป‰เปเบกเปˆเบ™เบšเบฒเบ‡เบชเบดเปˆเบ‡เบšเบฒเบ‡เบขเปˆเบฒเบ‡เบ‚เบญเบ‡เบเบฒเบ™เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบ‚เบญเบ‡เบŠเบธเบ”เบเปˆเบฝเบงเบเบฑเบšเบเบฒเบ™เบ›เบฑเบšเบ›เบธเบ‡เบชเบดเปˆเบ‡เบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเป„เบ”เป‰เป€เบฎเบฑเบ”เบเบฑเบšเบžเบฒเบเบชเปˆเบงเบ™เบ•เปˆเบฒเบ‡เป†เบ‚เบญเบ‡ stack เบ™เบตเป‰, เปเบฅเบฐเบชเบดเปˆเบ‡เบ—เบตเปˆเบˆเบฐเป€เบฎเบฑเบ”เปƒเบ™เบญเบฐเบ™เบฒเบ„เบปเบ”.

เบซเบผเบฒเบเบฅเบดเบ”เบ‚เบญเบ‡เป€เบšเบเปเบฅเบฐ admin เป„เบ”เป‰เปƒเบŠเป‰เป€เบงเบฅเบฒเปƒเบ™เบเบฒเบ™เบžเบฑเบ”เบ—เบฐเบ™เบฒเบ„เปเบฒเบฎเป‰เบญเบ‡เบ‚เป, เบฎเปˆเบงเบกเบเบฑเบ™เบเบฑเบš v0เบกเบฒเบ™, เบชเปเบฒเบฅเบฑเบšเบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเบ•เป‰เบญเบ‡เบเบฒเบ™เบ—เบตเปˆเบˆเบฐเบชเบฐเปเบ”เบ‡เบ„เบงเบฒเบกเบเบฐเบ•เบฑเบ™เบเบนเบ‚เบญเบ‡เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเบเบฑเบšเบžเบฃเบฐเบญเบปเบ‡. เปเบฅเบฐเบเบฑเบ‡เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบ—เบปเบšเบ—เบงเบ™เบ„เบทเบ™เบšเบปเบ”เบ„เบงเบฒเบกเบ™เบตเป‰.

เบซเบ™เป‰เบฒเป‚เบ„เบ‡เบเบฒเบ™เปƒเบ™ github

เปเบซเบผเปˆเบ‡เบ‚เปเป‰เบกเบนเบ™: www.habr.com

เป€เบžเบตเปˆเบกเบ„เบงเบฒเบกเบ„เบดเบ”เป€เบซเบฑเบ™