เบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™ ClickHouse เบชเปเบฒเบฅเบฑเบšเบกเบฐเบ™เบธเบ”, เบซเบผเบทเป€เบ•เบฑเบเป‚เบ™เป‚เบฅเบขเบตเบกเบฐเบ™เบธเบ”เบ•เปˆเบฒเบ‡เบ”เบฒเบง

Alexey Lizunov, เบซเบปเบงเบซเบ™เป‰เบฒเบชเบนเบ™เบ„เบงเบฒเบกเบชเบฒเบกเบฒเบ”เบชเปเบฒเบฅเบฑเบšเบŠเปˆเบญเบ‡เบ—เบฒเบ‡เบเบฒเบ™เบšเปเบฅเบดเบเบฒเบ™เบซเปˆเบฒเบ‡เป„เบเบชเบญเบเบซเบผเบตเบเบ‚เบญเบ‡เบœเบนเป‰เบญเปเบฒเบ™เบงเบเบเบฒเบ™เป€เบ•เบฑเบเป‚เบ™เป‚เบฅเบขเบตเบ‚เปเป‰เบกเบนเบ™เบ‚เปˆเบฒเบงเบชเบฒเบ™เบ‚เบญเบ‡ ICB

เบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™ ClickHouse เบชเปเบฒเบฅเบฑเบšเบกเบฐเบ™เบธเบ”, เบซเบผเบทเป€เบ•เบฑเบเป‚เบ™เป‚เบฅเบขเบตเบกเบฐเบ™เบธเบ”เบ•เปˆเบฒเบ‡เบ”เบฒเบง

เป€เบ›เบฑเบ™เบ—เบฒเบ‡เป€เบฅเบทเบญเบเบชเปเบฒเบฅเบฑเบš stack ELK (ElasticSearch, Logstash, Kibana), เบžเบงเบเป€เบฎเบปเบฒเบเปเบฒเบฅเบฑเบ‡เบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เบ„เบปเป‰เบ™เบ„เป‰เบงเบฒเบเปˆเบฝเบงเบเบฑเบšเบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰เบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™ ClickHouse เป€เบ›เบฑเบ™เบเบฒเบ™เป€เบเบฑเบšเบฎเบฑเบเบชเบฒเบ‚เปเป‰เบกเบนเบ™เบชเปเบฒเบฅเบฑเบšเบšเบฑเบ™เบ—เบถเบ.

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


เบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™ ClickHouse เบชเปเบฒเบฅเบฑเบšเบกเบฐเบ™เบธเบ”, เบซเบผเบทเป€เบ•เบฑเบเป‚เบ™เป‚เบฅเบขเบตเบกเบฐเบ™เบธเบ”เบ•เปˆเบฒเบ‡เบ”เบฒเบง

เบ•เปเปˆเป„เบ›เบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเบญเบฐเบ—เบดเบšเบฒเบเบฅเบฒเบเบฅเบฐเบญเบฝเบ”เป€เบžเบตเปˆเบกเป€เบ•เบตเบกเบงเปˆเบฒเบฅเบฐเบšเบปเบšเบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒเบ–เบทเบเบ•เบฑเป‰เบ‡เบ„เปˆเบฒเปเบ™เบงเปƒเบ” เปเบฅเบฐเบญเบปเบ‡เบ›เบฐเบเบญเบšเบ—เบตเปˆเบกเบฑเบ™เบ›เบฐเบเบญเบšเบ”เป‰เบงเบเปเบ™เบงเปƒเบ”. เปเบ•เปˆเบ•เบญเบ™เบ™เบตเป‰เบ‚เป‰เบญเบเบขเบฒเบเป€เบงเบปเป‰เบฒเป€เบฅเบฑเบเบ™เป‰เบญเบเบเปˆเบฝเบงเบเบฑเบšเบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™เบ™เบตเป‰เป‚เบ”เบเบฅเบงเบก, เปเบฅเบฐเป€เบ›เบฑเบ™เบซเบเบฑเบ‡เบกเบฑเบ™เบˆเบถเปˆเบ‡เบชเบปเบกเบ„เบงเบ™เบ—เบตเปˆเบˆเบฐเป€เบญเบปเบฒเปƒเบˆเปƒเบชเปˆ. เบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™ ClickHouse เปเบกเปˆเบ™เบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™เบ„เปเบฅเปเบฒเบเบฒเบ™เบงเบดเป€เบ„เบฒเบฐเบ—เบตเปˆเบกเบตเบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบšเบชเบนเบ‡เบˆเบฒเบ Yandex. เปƒเบŠเป‰เปƒเบ™เบเบฒเบ™เบšเปเบฅเบดเบเบฒเบ™ Yandex, เปƒเบ™เป€เบšเบทเป‰เบญเบ‡เบ•เบปเป‰เบ™เบ™เบตเป‰เปเบกเปˆเบ™เบเบฒเบ™เป€เบเบฑเบšเบฎเบฑเบเบชเบฒเบ‚เปเป‰เบกเบนเบ™เบ•เบปเป‰เบ™เบ•เปเบชเปเบฒเบฅเบฑเบš Yandex.Metrica. เบฅเบฐเบšเบปเบšเป€เบ›เบตเบ”เปเบซเบผเปˆเบ‡, เบŸเบฃเบต. เบˆเบฒเบเบ—เบฑเบ”เบชเบฐเบ™เบฐเบ‚เบญเบ‡เบ™เบฑเบเบžเบฑเบ”เบ—เบฐเบ™เบฒ, เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเบชเบฐเป€เบซเบกเบตเบชเบปเบ‡เป„เบชเบงเปˆเบฒเบžเบงเบเป€เบ‚เบปเบฒเบ›เบฐเบ•เบดเบšเบฑเบ”เบชเบดเปˆเบ‡เบ™เบตเป‰เป„เบ”เป‰เปเบ™เบงเปƒเบ”, เบเป‰เบญเบ™เบงเปˆเบฒเบกเบตเบ‚เปเป‰เบกเบนเบ™เบ‚เบฐเบซเบ™เบฒเบ”เปƒเบซเบเปˆเบ—เบตเปˆเบซเบ™เป‰เบฒเบญเบฑเบ”เบชเบฐเบˆเบฑเบ™. เปเบฅเบฐเบเบฒเบ™เป‚เบ•เป‰เบ•เบญเบšเบœเบนเป‰เปƒเบŠเป‰เบ‚เบญเบ‡ Metrica เบ•เบปเบงเบ‚เบญเบ‡เบกเบฑเบ™เป€เบญเบ‡เปเบกเปˆเบ™เบกเบตเบ„เบงเบฒเบกเบเบทเบ”เบซเบเบธเปˆเบ™เบซเบผเบฒเบเปเบฅเบฐเป€เบฎเบฑเบ”เบงเบฝเบเป„เบ”เป‰เป„เบง. เป€เบกเบทเปˆเบญเบ—เปˆเบฒเบ™เบฎเบนเป‰เบˆเบฑเบเบเบฑเบšเบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™เบ™เบตเป‰เบ„เบฑเป‰เบ‡เบ—เปเบฒเบญเบดเบ”, เบ—เปˆเบฒเบ™เป„เบ”เป‰เบฎเบฑเบšเบ„เบงเบฒเบกเบ›เบฐเบ—เบฑเบšเปƒเบˆ: "เบ”เบต, เบชเบธเบ”เบ—เป‰เบฒเบ! เบชเป‰เบฒเบ‡ โ€œเป€เบžเบทเปˆเบญเบ›เบฐเบŠเบฒเบŠเบปเบ™โ€! เบˆเบฒเบเบ‚เบฐเบšเบงเบ™เบเบฒเบ™เบ•เบดเบ”เบ•เบฑเป‰เบ‡เป€เบ–เบดเบ‡เบเบฒเบ™เบชเบปเปˆเบ‡เบ„เปเบฒเบฎเป‰เบญเบ‡เบ‚เป."

เบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™เบ™เบตเป‰เบกเบตเบญเบธเบ›เบฐเบชเบฑเบเป€เบ‚เบปเป‰เบฒเบ•เปเปˆเบฒเบซเบผเบฒเบ. เป€เบ–เบดเบ‡เปเบกเปˆเบ™เบงเปˆเบฒเบœเบนเป‰เบžเบฑเบ”เบ—เบฐเบ™เบฒเป‚เบ”เบเบชเบฐเป€เบฅเปˆเบเบชเบฒเบกเบฒเบ”เบ•เบดเบ”เบ•เบฑเป‰เบ‡เบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™เบ™เบตเป‰เปƒเบ™เบชเบญเบ‡เบชเบฒเบกเบ™เบฒเบ—เบตเปเบฅเบฐเป€เบฅเบตเปˆเบกเปƒเบŠเป‰เบกเบฑเบ™. เบ—เบธเบเบชเบดเปˆเบ‡เบ—เบธเบเบขเปˆเบฒเบ‡เป€เบฎเบฑเบ”เบงเบฝเบเป„เบ”เป‰เบญเบเปˆเบฒเบ‡เบฅเบฝเบšเบ‡เปˆเบฒเบ. เป€เบ–เบดเบ‡เปเบกเปˆเบ™เบงเปˆเบฒเบ„เบปเบ™เปƒเบซเบกเปˆเปƒเบ™ Linux เบชเบฒเบกเบฒเบ”เบฎเบฑเบšเบกเบทเบเบฑเบšเบเบฒเบ™เบ•เบดเบ”เบ•เบฑเป‰เบ‡เป„เบ”เป‰เป„เบงเปเบฅเบฐเบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เบ‡เปˆเบฒเบเบ”เบฒเบ. เบ–เป‰เบฒเบเปˆเบญเบ™เบซเบ™เป‰เบฒเบ™เบตเป‰, เป€เบกเบทเปˆเบญเป„เบ”เป‰เบเบดเบ™เบ„เปเบฒเบงเปˆเบฒ Big Data, Hadoop, Google BigTable, HDFS, เบ™เบฑเบเบžเบฑเบ”เบ—เบฐเบ™เบฒเป‚เบ”เบเบชเบฐเป€เบฅเปˆเบเบกเบตเบ„เบงเบฒเบกเบ„เบดเบ”เบ—เบตเปˆเบงเปˆเบฒเบžเบงเบเป€เบ‚เบปเบฒเป€เบงเบปเป‰เบฒเบเปˆเบฝเบงเบเบฑเบšเบšเบฒเบ‡ terabytes, petabytes, เบงเปˆเบฒ superhumans เบšเบฒเบ‡เบ„เบปเบ™เบกเบตเบชเปˆเบงเบ™เบฎเปˆเบงเบกเปƒเบ™เบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเปเบฅเบฐเบžเบฑเบ”เบ—เบฐเบ™เบฒเบฅเบฐเบšเบปเบšเป€เบซเบผเบปเปˆเบฒเบ™เบตเป‰, เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เบเบฑเบš เบเบฒเบ™เบกเบฒเบฎเบญเบ”เบ‚เบญเบ‡เบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™ ClickHouse เบžเบงเบเป€เบฎเบปเบฒเป„เบ”เป‰เบฎเบฑเบšเป€เบ„เบทเปˆเบญเบ‡เบกเบทเบ—เบตเปˆเบ‡เปˆเบฒเบเบ”เบฒเบ, เป€เบ‚เบปเป‰เบฒเปƒเบˆเป„เบ”เป‰เบ—เบตเปˆเบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เปเบเป‰เป„เบ‚เบšเบฑเบ™เบซเบฒเบ—เบตเปˆเบšเปเปˆเบชเบฒเบกเบฒเบ”เบšเบฑเบ™เบฅเบธเป„เบ”เป‰เปƒเบ™เป€เบกเบทเปˆเบญเบเปˆเบญเบ™. เบ—เบฑเบ‡โ€‹เบซเบกเบปเบ”โ€‹เบกเบฑเบ™โ€‹เปƒเบŠเป‰โ€‹เป€เบงโ€‹เบฅเบฒโ€‹เปเบกเปˆเบ™โ€‹เบซเบ™เบถเปˆเบ‡โ€‹เป€เบ„เบทเปˆเบญเบ‡โ€‹เบชเบฐโ€‹เป€เบฅเปˆเบโ€‹เบ—เบตเปˆโ€‹เป€เบ›เบฑเบ™โ€‹เบ—เปเบฒโ€‹เปเบฅเบฐโ€‹เบซเป‰เบฒโ€‹เบ™เบฒโ€‹เบ—เบตโ€‹เปƒเบ™โ€‹เบเบฒเบ™โ€‹เบ•เบดเบ”โ€‹เบ•เบฑเป‰เบ‡โ€‹. เบ™เบฑเป‰เบ™เปเบกเปˆเบ™, เบžเบงเบเป€เบฎเบปเบฒเป„เบ”เป‰เบฎเบฑเบšเบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™เป€เบŠเบฑเปˆเบ™, เบ•เบปเบงเบขเปˆเบฒเบ‡, MySql, เปเบ•เปˆเบžเบฝเบ‡เปเบ•เปˆเบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เป€เบเบฑเบšเบฎเบฑเบเบชเบฒเบšเบฑเบ™เบ—เบถเบเบซเบผเบฒเบเบ•เบทเป‰! เบ›เบฐเป€เบžเบ”เบ‚เบญเบ‡ superarchiver เบ—เบตเปˆเบกเบตเบžเบฒเบชเบฒ SQL. เบกเบฑเบ™เบ„เบทเบเบฑเบšเบงเปˆเบฒเบ„เบปเบ™เป„เบ”เป‰เบฎเบฑเบšเบญเบฒเบงเบธเบ”เบกเบฐเบ™เบธเบ”เบ•เปˆเบฒเบ‡เบ”เบฒเบง.

เบเปˆเบฝเบงเบเบฑเบšเบฅเบฐเบšเบปเบšเบเบฒเบ™เป€เบเบฑเบšเบ‚เปเป‰เบกเบนเบ™เบšเบฑเบ™เบ—เบถเบเบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒ

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

เบžเบงเบเป€เบฎเบปเบฒเบšเปเปˆเบชเบฒเบกเบฒเบ”เบ›เบฐเบ–เบดเป‰เบก ELK stack เป„เบ”เป‰เบขเปˆเบฒเบ‡เบชเบปเบกเบšเบนเบ™เบชเปเบฒเบฅเบฑเบšเป€เบซเบ”เบœเบปเบ™เบ•เปˆเบฒเบ‡เป†, เปเบฅเบฐเบžเบงเบเป€เบฎเบปเบฒเบเบฑเบ‡เบชเบทเบšเบ•เปเปˆเบ™เปเบฒเปƒเบŠเป‰เบญเบปเบ‡เบ›เบฐเบเบญเบš LogStash เปเบฅเบฐ Filebeat, เป€เบŠเบดเปˆเบ‡เป„เบ”เป‰เบžเบดเบชเบนเบ”เบ•เบปเบงเป€เบญเบ‡เป„เบ”เป‰เบ”เบตเปเบฅเบฐเป€เบฎเบฑเบ”เบงเบฝเบเบ‚เป‰เบญเบ™เบ‚เป‰เบฒเบ‡เป€เบŠเบทเปˆเบญเบ–เบทเป„เบ”เป‰เปเบฅเบฐเบ„เบฒเบ”เบ„เบฐเป€เบ™.

เบฎเบนเบšเปเบšเบšเบเบฒเบ™เบ•เบฑเบ”เป„เบกเป‰เบ—เบปเปˆเบงเป„เบ›เปเบกเปˆเบ™เบชเบฐเปเบ”เบ‡เบขเบนเปˆเปƒเบ™เบฎเบนเบšเบ‚เป‰เบฒเบ‡เบฅเบธเปˆเบกเบ™เบตเป‰:

เบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™ ClickHouse เบชเปเบฒเบฅเบฑเบšเบกเบฐเบ™เบธเบ”, เบซเบผเบทเป€เบ•เบฑเบเป‚เบ™เป‚เบฅเบขเบตเบกเบฐเบ™เบธเบ”เบ•เปˆเบฒเบ‡เบ”เบฒเบง

เบ„เบธเบ™เบ™เบฐเบชเบปเบกเบšเบฑเบ”เบ‚เบญเบ‡เบเบฒเบ™เบšเบฑเบ™เบ—เบถเบเบ‚เปเป‰เบกเบนเบ™เปƒเบ™เบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™ ClickHouse เปเบกเปˆเบ™เบเบฒเบ™เปเบŠเบเบšเบฑเบ™เบ—เบถเบ (เบซเบ™เบถเปˆเบ‡เบ„เบฑเป‰เบ‡เบ•เปเปˆเบงเบดเบ™เบฒเบ—เบต) เป€เบฅเบทเป‰เบญเบเป†เปƒเบ™เบŠเบธเบ”เปƒเบซเบเปˆ. เบ™เบตเป‰, เบ›เบฒเบเบปเบ”เบ‚เบทเป‰เบ™, เป€เบ›เบฑเบ™เบชเปˆเบงเบ™ "เบšเบฑเบ™เบซเบฒ" เบ—เบตเปˆเบชเบธเบ”เบ—เบตเปˆเบ—เปˆเบฒเบ™เบžเบปเบšเปƒเบ™เป€เบงเบฅเบฒเบ—เบตเปˆเป€เบฎเบฑเบ”เบงเบฝเบเบเบฑเบšเบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™ ClickHouse เป€เบ›เบฑเบ™เบ„เบฑเป‰เบ‡เบ—เปเบฒเบญเบดเบ”: เป‚เบ„เบ‡เบเบฒเบ™เบˆเบฐเบเบฒเบเป€เบ›เบฑเบ™เบ„เบงเบฒเบกเบชเบฑเบšเบชเบปเบ™เบซเบผเบฒเบ.
เบ›เบฑเปŠเบเบญเบดเบ™เบชเปเบฒเบฅเบฑเบš LogStash, เป€เบŠเบดเปˆเบ‡เปƒเบชเปˆเบ‚เปเป‰เบกเบนเบ™เป‚เบ”เบเบเบปเบ‡เป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™ ClickHouse, เป„เบ”เป‰เบŠเปˆเบงเบเบซเบผเบฒเบเบขเบนเปˆเบ—เบตเปˆเบ™เบตเป‰. เบญเบปเบ‡เบ›เบฐเบเบญเบšเบ™เบตเป‰เบ–เบทเบเบ™เบณเปƒเบŠเป‰เบขเบนเปˆเปƒเบ™เป€เบŠเบตเบšเป€เบงเบตเบ”เบฝเบงเบเบฑเบ™เบเบฑเบšเบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™เบ•เบปเบงเบกเบฑเบ™เป€เบญเบ‡. เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™, เป‚เบ”เบเบ—เบปเปˆเบงเป„เบ›เปเบฅเป‰เบง, เบกเบฑเบ™เบšเปเปˆเป„เบ”เป‰เปเบ™เบฐเบ™เปเบฒเปƒเบซเป‰เป€เบฎเบฑเบ”เปเบ™เบงเบ™เบตเป‰, เปเบ•เปˆเบˆเบฒเบเบ—เบฑเบ”เบชเบฐเบ™เบฐเบ›เบฐเบ•เบดเบšเบฑเบ”, เป€เบžเบทเปˆเบญเบšเปเปˆเปƒเบซเป‰เบชเป‰เบฒเบ‡เป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบเปเบเบเบ•เปˆเบฒเบ‡เบซเบฒเบเปƒเบ™เบ‚เบฐเบ™เบฐเบ—เบตเปˆเบกเบฑเบ™เบ–เบทเบเบ™เปเบฒเปƒเบŠเป‰เปƒเบ™เป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบเบ”เบฝเบงเบเบฑเบ™. เบžเบงเบเป€เบฎเบปเบฒเบšเปเปˆเป„เบ”เป‰เบชเบฑเบ‡เป€เบเบ”เป€เบซเบฑเบ™เบ„เบงเบฒเบกเบฅเบปเป‰เบกเป€เบซเบฅเบงเบซเบผเบทเบ„เบงเบฒเบกเบ‚เบฑเบ”เปเบเป‰เบ‡เบ‚เบญเบ‡เบŠเบฑเบšเบžเบฐเบเบฒเบเบญเบ™เบเบฑเบšเบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™. เบ™เบญเบเบˆเบฒเบเบ™เบฑเป‰เบ™, เบ„เบงเบ™เบชเบฑเบ‡เป€เบเบ”เบงเปˆเบฒ plugin เบกเบตเบเบปเบ™เป„เบเบเบฒเบ™ retray เปƒเบ™เบเปเบฅเบฐเบ™เบตเบ‚เบญเบ‡เบ„เบงเบฒเบกเบœเบดเบ”เบžเบฒเบ”. เปเบฅเบฐเปƒเบ™เบเปเบฅเบฐเบ™เบตเบ‚เบญเบ‡เบ„เบงเบฒเบกเบœเบดเบ”เบžเบฒเบ”, plugin เบ‚เบฝเบ™เปƒเบชเปˆเปเบœเปˆเบ™เบ‚เปเป‰เบกเบนเบ™ batch เบ—เบตเปˆเบšเปเปˆเบชเบฒเบกเบฒเบ”เปƒเบชเปˆเป„เบ”เป‰ (เบฎเบนเบšเปเบšเบšเป„เบŸเบฅเปŒเปเบกเปˆเบ™เบชเบฐเบ”เบงเบ: เบซเบผเบฑเบ‡เบˆเบฒเบเบเบฒเบ™เปเบเป‰เป„เบ‚, เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เปƒเบชเปˆ batch เบ—เบตเปˆเบ–เบทเบเปเบเป‰เป„เบ‚เป„เบ”เป‰เบขเปˆเบฒเบ‡เบ‡เปˆเบฒเบเบ”เบฒเบเป‚เบ”เบเปƒเบŠเป‰ clickhouse-client).

เบšเบฑเบ™เบŠเบตเบฅเบฒเบเบŠเบทเปˆเบ„เบปเบšเบ–เป‰เบงเบ™เบ‚เบญเบ‡เบŠเบญเบšเปเบงเบ—เบตเปˆเปƒเบŠเป‰เปƒเบ™เป‚เบ„เบ‡เบเบฒเบ™เปเบกเปˆเบ™เป„เบ”เป‰เบ™เปเบฒเบชเบฐเป€เบซเบ™เบตเบขเบนเปˆเปƒเบ™เบ•เบฒเบ•เบฐเบฅเบฒเบ‡:

เบšเบฑเบ™เบŠเบตเบฅเบฒเบเบŠเบทเปˆเบ‚เบญเบ‡เบŠเบญเบšเปเบงเบ—เบตเปˆเปƒเบŠเป‰

Title

เบฅเบฒเบโ€‹เบฅเบฐโ€‹เบญเบฝเบ”

เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเบเบฑเบšเบเบฒเบ™เปเบˆเบเบขเบฒเบ

NGINX

Reverse-proxy เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบˆเปเบฒเบเบฑเบ”เบเบฒเบ™เป€เบ‚เบปเป‰เบฒเป€เบ–เบดเบ‡เป‚เบ”เบเบžเบญเบ”เปเบฅเบฐเบเบฒเบ™เบˆเบฑเบ”เบ•เบฑเป‰เบ‡เบเบฒเบ™เบญเบฐเบ™เบธเบเบฒเบ”

เปƒเบ™เบ›เบฑเบ”เบˆเบธเบšเบฑเบ™เบšเปเปˆเป„เบ”เป‰เปƒเบŠเป‰เปƒเบ™เป‚เบ„เบ‡เบเบฒเบ™

https://nginx.org/ru/download.html

https://nginx.org/download/nginx-1.16.0.tar.gz

FileBeat

เบเบฒเบ™เป‚เบญเบ™เบšเบฑเบ™เบ—เบถเบเป„เบŸเบฅเปŒ.

https://www.elastic.co/downloads/beats/filebeat (เบเบฒเบ™เปเบœเปˆเบเบฐเบˆเบฒเบเบชเปเบฒเบฅเบฑเบš Windows 64bit).

https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-7.3.0-windows-x86_64.zip

LogStash

เบ•เบปเบงเป€เบเบฑเบšเบšเบฑเบ™เบ—เบถเบ.

เปƒเบŠเป‰เป€เบžเบทเปˆเบญเป€เบเบฑเบšเบšเบฑเบ™เบ—เบถเบเบˆเบฒเบ FileBeat, เป€เบŠเบฑเปˆเบ™เบ”เบฝเบงเบเบฑเบ™เบเบฑเบšเบเบฒเบ™เป€เบเบฑเบšเบเปเบฒเบ‚เปเป‰เบกเบนเบ™เบšเบฑเบ™เบ—เบถเบเบˆเบฒเบเปเบ–เบง RabbitMQ (เบชเปเบฒเบฅเบฑเบšเป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบเบ—เบตเปˆเบ•เบฑเป‰เบ‡เบขเบนเปˆเปƒเบ™ DMZ.)

https://www.elastic.co/products/logstash

https://artifacts.elastic.co/downloads/logstash/logstash-7.0.1.rpm

Logstash- เบœเบปเบ™เบœเบฐเบฅเบดเบ”- clickhouse

เบ›เบฑเปŠเบเบญเบดเบ™ Loagstash เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เป‚เบญเบ™เบšเบฑเบ™เบ—เบถเบเป„เบ›เบเบฑเบ‡เบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™ ClickHouse เปƒเบ™เบŠเบธเบ”

https://github.com/mikechris/logstash-output-clickhouse

/usr/share/logstash/bin/logstash-plugin เบ•เบดเบ”เบ•เบฑเป‰เบ‡ logstash-output-clickhouse

/usr/share/logstash/bin/logstash-plugin เบ•เบดเบ”เบ•เบฑเป‰เบ‡ logstash-filter-prune

/usr/share/logstash/bin/logstash-plugin เบ•เบดเบ”เบ•เบฑเป‰เบ‡ logstash-filter-multiline

เบเบปเบ”เบ›เบธเปˆเบก

เบเบฒเบ™เป€เบเบฑเบšเบฎเบฑเบเบชเบฒเบšเบฑเบ™เบ—เบถเบ https://clickhouse.yandex/docs/ru/

https://packagecloud.io/Altinity/clickhouse/packages/el/7/clickhouse-server-19.5.3.8-1.el7.x86_64.rpm

https://packagecloud.io/Altinity/clickhouse/packages/el/7/clickhouse-client-19.5.3.8-1.el7.x86_64.rpm

เบซเบกเบฒเบโ€‹เป€เบซเบ”โ€‹. เบ•เบฑเป‰เบ‡เปเบ•เปˆเป€เบ”เบทเบญเบ™เบชเบดเบ‡เบซเบฒ 2018, เบเบฒเบ™เบชเป‰เบฒเบ‡ rpm "เบ›เบปเบเบเบฐเบ•เบด" เบชเปเบฒเบฅเบฑเบš RHEL เบ›เบฒเบเบปเบ”เบขเบนเปˆเปƒเบ™เบšเปˆเบญเบ™เป€เบเบฑเบšเบกเป‰เบฝเบ™ Yandex, เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบฅเบญเบ‡เปƒเบŠเป‰เบžเบงเบเบกเบฑเบ™เป„เบ”เป‰. เปƒเบ™โ€‹เป€เบงโ€‹เบฅเบฒโ€‹เบ‚เบญเบ‡โ€‹เบเบฒเบ™โ€‹เบ•เบดเบ”โ€‹เบ•เบฑเป‰เบ‡โ€‹เบžเบงเบโ€‹เป€เบฎเบปเบฒโ€‹เป„เบ”เป‰โ€‹เบ™เปเบฒโ€‹เปƒเบŠเป‰โ€‹เบŠเบธเบ”โ€‹เบ—เบตเปˆโ€‹เบชเบฑเบ‡โ€‹เบฅเบงเบกโ€‹เป‚เบ”เบ Altinityโ€‹.

เบเบฃเบฒเบŸเบฒเบ™เบฒ

เบเบฒเบ™เป€เบšเบดเปˆเบ‡เป€เบซเบฑเบ™เบ‚เบญเบ‡เบšเบฑเบ™เบ—เบถเบ. เบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒ dashboards

https://grafana.com/

https://grafana.com/grafana/download

Redhat & Centos (64 Bit) - เบฎเบธเปˆเบ™เบซเบผเป‰เบฒเบชเบธเบ”

เปเบซเบผเปˆเบ‡เบ‚เปเป‰เบกเบนเบ™ ClickHouse เบชเปเบฒเบฅเบฑเบš Grafana 4.6+

Plugin เบชเปเบฒเบฅเบฑเบš Grafana เบเบฑเบšเปเบซเบผเปˆเบ‡เบ‚เปเป‰เบกเบนเบ™ ClickHouse

https://grafana.com/plugins/vertamedia-clickhouse-datasource

https://grafana.com/api/plugins/vertamedia-clickhouse-datasource/versions/1.8.1/download

LogStash

เบšเบฑเบ™เบ—เบถเบ router เบˆเบฒเบ FileBeat เป„เบ›เบซเบฒเปเบ–เบง RabbitMQ.

เบซเบกเบฒเบโ€‹เป€เบซเบ”โ€‹. เปเบ•เปˆเบซเบ™เป‰เบฒเป€เบชเบเบ”เบฒเบ, FileBeat เบšเปเปˆเบกเบตเบœเบปเบ™เบœเบฐเบฅเบดเบ”เป‚เบ”เบเบเบปเบ‡เบเบฑเบš RabbitMQ, เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™เบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเป‚เบเบ‡เบฅเบฐเบ”เบฑเบšเบ›เบฒเบ™เบเบฒเบ‡เปƒเบ™เบฎเบนเบšเปเบšเบšเบ‚เบญเบ‡ Logstash เปเบกเปˆเบ™เบ•เป‰เบญเบ‡เบเบฒเบ™.

https://www.elastic.co/products/logstash

https://artifacts.elastic.co/downloads/logstash/logstash-7.0.1.rpm

เบเบฐเบ•เปˆเบฒเบ

เปเบ–เบงเบ‚เปเป‰เบ„เบงเบฒเบก. เบ™เบตเป‰เปเบกเปˆเบ™เบšเบฑเบŸเป€เบŸเบตเบ‚เบญเบ‡เบšเบฑเบ™เบ—เบถเบเบ‚เปเป‰เบกเบนเบ™เปƒเบ™ DMZ

https://www.rabbitmq.com/download.html

https://github.com/rabbitmq/rabbitmq-server/releases/download/v3.7.14/rabbitmq-server-3.7.14-1.el7.noarch.rpm

เป€เบงเบฅเบฒเปเบฅเปˆเบ™ Erlang (เบ•เป‰เบญเบ‡เบเบฒเบ™เบชเปเบฒเบฅเบฑเบš RabbitMQ)

เป€เบงเบฅเบฒเปเบฅเปˆเบ™ Erlang. เบ•เป‰เบญเบ‡เบเบฒเบ™เบชเปเบฒเบฅเบฑเบš RabbitMQ เป€เบžเบทเปˆเบญเป€เบฎเบฑเบ”เบงเบฝเบ

http://www.erlang.org/download.html

https://www.rabbitmq.com/install-rpm.html#install-erlang http://www.erlang.org/downloads/21.3

เบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเป€เบŠเบตเบšเป€เบงเบตเบเบฑเบšเบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™ ClickHouse เบ–เบทเบเบ™เปเบฒเบชเบฐเป€เบซเบ™เบตเบขเบนเปˆเปƒเบ™เบ•เบฒเบ•เบฐเบฅเบฒเบ‡เบ•เปเปˆเป„เบ›เบ™เบตเป‰:

Title

เบกเบนเบ™เบ„เปˆเบฒ

ะŸั€ะธะผะตั‡ะฐะฝะธะต

เบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒ

HDD: 40GB
RAM: 8GB
เปœเปˆเบงเบเบ›เบฐเบกเบงเบ™เบœเบปเบ™: Core 2 2GHz

เบ—เปˆเบฒเบ™เบ„เบงเบ™เป€เบญเบปเบฒเปƒเบˆเปƒเบชเปˆเบเบฑเบšเบ„เปเบฒเปเบ™เบฐเบ™เปเบฒเบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰เบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™ ClickHouse (https://clickhouse.yandex/docs/ru/operations/tips/)

เบŠเบญเบšเปเบงเบ—เบปเปˆเบงเบฅเบฐเบšเบปเบš

เบฅเบฐเบšเบปเบšเบ›เบฐเบ•เบดเบšเบฑเบ”เบเบฒเบ™: Red Hat Enterprise Linux Server (Maipo)

JRE (Java 8)

 

เบ”เบฑเปˆเบ‡เบ—เบตเปˆเป€เบˆเบปเป‰เบฒเบชเบฒเบกเบฒเบ”เป€เบซเบฑเบ™เป„เบ”เป‰, เบ™เบตเป‰เปเบกเปˆเบ™เบšเปˆเบญเบ™เป€เบฎเบฑเบ”เบงเบฝเบเบ›เบปเบเบเบฐเบ•เบด.

เป‚เบ„เบ‡เบชเป‰เบฒเบ‡เบ‚เบญเบ‡เบ•เบฒเบ•เบฐเบฅเบฒเบ‡เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เป€เบเบฑเบšเบฎเบฑเบเบชเบฒเบšเบฑเบ™เบ—เบถเบเบกเบตเบ”เบฑเปˆเบ‡เบ™เบตเป‰:

log_web.sql

CREATE TABLE log_web (
  logdate Date,
  logdatetime DateTime CODEC(Delta, LZ4HC),
   
  fld_log_file_name LowCardinality( String ),
  fld_server_name LowCardinality( String ),
  fld_app_name LowCardinality( String ),
  fld_app_module LowCardinality( String ),
  fld_website_name LowCardinality( String ),
 
  serverIP LowCardinality( String ),
  method LowCardinality( String ),
  uriStem String,
  uriQuery String,
  port UInt32,
  username LowCardinality( String ),
  clientIP String,
  clientRealIP String,
  userAgent String,
  referer String,
  response String,
  subresponse String,
  win32response String,
  timetaken UInt64
   
  , uriQuery__utm_medium String
  , uriQuery__utm_source String
  , uriQuery__utm_campaign String
  , uriQuery__utm_term String
  , uriQuery__utm_content String
  , uriQuery__yclid String
  , uriQuery__region String
 
) Engine = MergeTree()
PARTITION BY toYYYYMM(logdate)
ORDER BY (fld_app_name, fld_app_module, logdatetime)
SETTINGS index_granularity = 8192;

เบžเบงเบเป€เบฎเบปเบฒเปƒเบŠเป‰เบ„เปˆเบฒเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เปเบšเปˆเบ‡เบชเปˆเบงเบ™ (เบ›เบฐเบˆเปเบฒเป€เบ”เบทเบญเบ™) เปเบฅเบฐเบ”เบฑเบ”เบŠเบฐเบ™เบต granularity. เบŠเปˆเบญเบ‡เบ‚เปเป‰เบกเบนเบ™เบ—เบฑเบ‡เปเบปเบ”เปเบกเปˆเบ™เบเบปเบ‡เบเบฑเบšเบฅเบฒเบเบเบฒเบ™เบšเบฑเบ™เบ—เบถเบ IIS เป€เบžเบทเปˆเบญเบšเบฑเบ™เบ—เบถเบเบเบฒเบ™เบฎเป‰เบญเบ‡เบ‚เป http. เปเบเบเบ•เปˆเบฒเบ‡เบซเบฒเบ, เบžเบงเบเป€เบฎเบปเบฒเบชเบฑเบ‡เป€เบเบ”เบงเปˆเบฒเบกเบตเบŠเปˆเบญเบ‡เบ‚เปเป‰เบกเบนเบ™เปเบเบเบ•เปˆเบฒเบ‡เบซเบฒเบเบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เป€เบเบฑเบšเบฎเบฑเบเบชเบฒ tags utm (เบžเบงเบเบกเบฑเบ™เบ–เบทเบเปเบเบเบขเบนเปˆเปƒเบ™เบ‚เบฑเป‰เบ™เบ•เบญเบ™เบ‚เบญเบ‡เบเบฒเบ™เปƒเบชเปˆเป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™เบ•เบฒเบ•เบฐเบฅเบฒเบ‡เบˆเบฒเบเบžเบฒเบเบชเบฐเบซเบ™เบฒเบก string เบชเบญเบšเบ–เบฒเบก).

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

Title

เบฅเบฒเบโ€‹เบฅเบฐโ€‹เบญเบฝเบ”

เบ•เบปเบงเบขเปˆเบฒเบ‡:

fld_app_name

เบŠเบทเปˆเปเบญเบฑเบšเบžเบฅเบดเป€เบ„เบŠเบฑเบ™/เบฅเบฐเบšเบปเบš
เบ„เปˆเบฒเบ—เบตเปˆเบ–เบทเบเบ•เป‰เบญเบ‡:

  • site1.domain.com เป€เบงเบฑเบšเป„เบŠเบžเบฒเบเบ™เบญเบ 1
  • site2.domain.com เป€เบงเบฑเบšเป„เบŠเบžเบฒเบเบ™เบญเบ 2
  • internal-site1.domain.local เป€เบงเบฑเบšเป„เบŠเบžเบฒเบเปƒเบ™ 1

site1.domain.com

fld_app_module

เป‚เบกเบ”เบนเบ™เบฅเบฐเบšเบปเบš
เบ„เปˆเบฒเบ—เบตเปˆเบ–เบทเบเบ•เป‰เบญเบ‡:

  • web - เป€เบงเบฑเบšเป„เบŠเบ—เปŒ
  • svc โ€” เบเบฒเบ™โ€‹เบšเปโ€‹เบฅเบดโ€‹เบเบฒเบ™โ€‹เป€เบงเบฑเบšโ€‹เป„เบŠโ€‹เบ•โ€‹เปŒโ€‹
  • intgr โ€” เบเบฒเบ™โ€‹เบšเปโ€‹เบฅเบดโ€‹เบเบฒเบ™โ€‹เบเบฒเบ™โ€‹เป€เบŠเบทเปˆเบญเบกโ€‹เป‚เบเบ‡โ€‹เป€เบงเบฑเบšโ€‹
  • bo โ€” Administrator (BackOffice)

เป€เบงเบฑเบšเป„เบŠเบ•เปŒ

fld_website_name

เบŠเบทเปˆเป€เบงเบฑเบšเป„เบŠเปƒเบ™ IIS

เบซเบผเบฒเบเบฅเบฐเบšเบปเบšเบชเบฒเบกเบฒเบ”เบ–เบทเบเบ™เบณเปƒเบŠเป‰เบขเบนเปˆเปƒเบ™เป€เบŠเบตเบšเป€เบงเบตเบ”เบฝเบง, เบซเบผเบทเปเบกเป‰เบเบฐเบ—เบฑเป‰เบ‡เบซเบผเบฒเบเบ•เบปเบงเบขเปˆเบฒเบ‡เบ‚เบญเบ‡เป‚เบกเบ”เบนเบ™เบฅเบฐเบšเบปเบšเบ”เบฝเบง

เป€เบงเบฑเบšเป„เบŠเบ•เปŒเบ•เบปเป‰เบ™เบ•เป

fld_server_name

เบŠเบทเปˆเป€เบŠเบตเบšเป€เบงเบต

web1.domain.com

fld_log_file_name

เป€เบชเบฑเป‰เบ™เบ—เบฒเบ‡เป„เบ›เบซเบฒเป„เบŸเบฅเปŒเบšเบฑเบ™เบ—เบถเบเบขเบนเปˆเปƒเบ™เป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบ

เบˆเบฒเบ:inetpublogsLogFiles
W3SVC1u_ex190711.log

เบ™เบตเป‰เบŠเปˆเบงเบเปƒเบซเป‰เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบชเป‰เบฒเบ‡เบเบฒเบŸเปƒเบ™ Grafana เป„เบ”เป‰เบขเปˆเบฒเบ‡เบกเบตเบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบš. เบ•เบปเบงเบขเปˆเบฒเบ‡, เป€เบšเบดเปˆเบ‡เบเบฒเบ™เบฎเป‰เบญเบ‡เบ‚เปเบˆเบฒเบเบ”เป‰เบฒเบ™เบซเบ™เป‰เบฒเบ‚เบญเบ‡เบฅเบฐเบšเบปเบšเบชเบฐเป€เบžเบฒเบฐ. เบ™เบตเป‰เปเบกเปˆเบ™เบ„เป‰เบฒเบเบ„เบทเบเบฑเบ™เบเบฑเบšเป€เบงเบฑเบšเป„เบŠเบ—เปŒ counter เปƒเบ™ Yandex.Metrica.

เบ™เบตเป‰เปเบกเปˆเบ™เบชเบฐเบ–เบดเบ•เบดเบšเบฒเบ‡เบขเปˆเบฒเบ‡เบเปˆเบฝเบงเบเบฑเบšเบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰เบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™เบชเปเบฒเบฅเบฑเบšเบชเบญเบ‡เป€เบ”เบทเบญเบ™.

เบˆเปเบฒเบ™เบงเบ™เบเบฒเบ™เบšเบฑเบ™เบ—เบถเบเป‚เบ”เบเบฅเบฐเบšเบปเบšเปเบฅเบฐเบญเบปเบ‡เบ›เบฐเบเบญเบš

SELECT
    fld_app_name,
    fld_app_module,
    count(fld_app_name) AS rows_count
FROM log_web
GROUP BY
    fld_app_name,
    fld_app_module
    WITH TOTALS
ORDER BY
    fld_app_name ASC,
    rows_count DESC
 
โ”Œโ”€fld_app_nameโ”€โ”€โ”€โ”€โ”€โ”ฌโ”€fld_app_moduleโ”€โ”ฌโ”€rows_countโ”€โ”
โ”‚ site1.domain.ru  โ”‚ web            โ”‚     131441 โ”‚
โ”‚ site2.domain.ru  โ”‚ web            โ”‚    1751081 โ”‚
โ”‚ site3.domain.ru  โ”‚ web            โ”‚  106887543 โ”‚
โ”‚ site3.domain.ru  โ”‚ svc            โ”‚   44908603 โ”‚
โ”‚ site3.domain.ru  โ”‚ intgr          โ”‚    9813911 โ”‚
โ”‚ site4.domain.ru  โ”‚ web            โ”‚     772095 โ”‚
โ”‚ site5.domain.ru  โ”‚ web            โ”‚   17037221 โ”‚
โ”‚ site5.domain.ru  โ”‚ intgr          โ”‚     838559 โ”‚
โ”‚ site5.domain.ru  โ”‚ bo             โ”‚       7404 โ”‚
โ”‚ site6.domain.ru  โ”‚ web            โ”‚     595877 โ”‚
โ”‚ site7.domain.ru  โ”‚ web            โ”‚   27778858 โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
 
Totals:
โ”Œโ”€fld_app_nameโ”€โ”ฌโ”€fld_app_moduleโ”€โ”ฌโ”€rows_countโ”€โ”
โ”‚              โ”‚                โ”‚  210522593 โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
 
11 rows in set. Elapsed: 4.874 sec. Processed 210.52 million rows, 421.67 MB (43.19 million rows/s., 86.51 MB/s.)

เบ›เบฐเบฅเบดเบกเบฒเบ™เบ‚เปเป‰เบกเบนเบ™เปเบœเปˆเบ™

SELECT
    formatReadableSize(sum(data_uncompressed_bytes)) AS uncompressed,
    formatReadableSize(sum(data_compressed_bytes)) AS compressed,
    sum(rows) AS total_rows
FROM system.parts
WHERE table = 'log_web'
 
โ”Œโ”€uncompressedโ”€โ”ฌโ”€compressedโ”€โ”ฌโ”€total_rowsโ”€โ”
โ”‚ 54.50 GiB    โ”‚ 4.86 GiB   โ”‚  211427094 โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
 
1 rows in set. Elapsed: 0.035 sec.

เบญเบฑเบ”เบ•เบฒเบชเปˆเบงเบ™เบเบฒเบ™เบšเบตเบšเบญเบฑเบ”เบ‚เปเป‰เบกเบนเบ™เบ–เบฑเบ™

SELECT
    name,
    formatReadableSize(data_uncompressed_bytes) AS uncompressed,
    formatReadableSize(data_compressed_bytes) AS compressed,
    data_uncompressed_bytes / data_compressed_bytes AS compress_ratio
FROM system.columns
WHERE table = 'log_web'
 
โ”Œโ”€nameโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€uncompressedโ”€โ”ฌโ”€compressedโ”€โ”ฌโ”€โ”€โ”€โ”€โ”€compress_ratioโ”€โ”
โ”‚ logdate                โ”‚ 401.53 MiB   โ”‚ 1.80 MiB   โ”‚ 223.16665968777315 โ”‚
โ”‚ logdatetime            โ”‚ 803.06 MiB   โ”‚ 35.91 MiB  โ”‚ 22.363966401202305 โ”‚
โ”‚ fld_log_file_name      โ”‚ 220.66 MiB   โ”‚ 2.60 MiB   โ”‚  84.99905736932571 โ”‚
โ”‚ fld_server_name        โ”‚ 201.54 MiB   โ”‚ 50.63 MiB  โ”‚  3.980924816977078 โ”‚
โ”‚ fld_app_name           โ”‚ 201.17 MiB   โ”‚ 969.17 KiB โ”‚ 212.55518183686877 โ”‚
โ”‚ fld_app_module         โ”‚ 201.17 MiB   โ”‚ 968.60 KiB โ”‚ 212.67805817411906 โ”‚
โ”‚ fld_website_name       โ”‚ 201.54 MiB   โ”‚ 1.24 MiB   โ”‚  162.7204926761546 โ”‚
โ”‚ serverIP               โ”‚ 201.54 MiB   โ”‚ 50.25 MiB  โ”‚  4.010824061219731 โ”‚
โ”‚ method                 โ”‚ 201.53 MiB   โ”‚ 43.64 MiB  โ”‚  4.617721053304486 โ”‚
โ”‚ uriStem                โ”‚ 5.13 GiB     โ”‚ 832.51 MiB โ”‚  6.311522291936919 โ”‚
โ”‚ uriQuery               โ”‚ 2.58 GiB     โ”‚ 501.06 MiB โ”‚  5.269731450124478 โ”‚
โ”‚ port                   โ”‚ 803.06 MiB   โ”‚ 3.98 MiB   โ”‚ 201.91673864241824 โ”‚
โ”‚ username               โ”‚ 318.08 MiB   โ”‚ 26.93 MiB  โ”‚ 11.812513794583598 โ”‚
โ”‚ clientIP               โ”‚ 2.35 GiB     โ”‚ 82.59 MiB  โ”‚ 29.132328640073343 โ”‚
โ”‚ clientRealIP           โ”‚ 2.49 GiB     โ”‚ 465.05 MiB โ”‚  5.478382297052563 โ”‚
โ”‚ userAgent              โ”‚ 18.34 GiB    โ”‚ 764.08 MiB โ”‚  24.57905114484208 โ”‚
โ”‚ referer                โ”‚ 14.71 GiB    โ”‚ 1.37 GiB   โ”‚ 10.736792723669906 โ”‚
โ”‚ response               โ”‚ 803.06 MiB   โ”‚ 83.81 MiB  โ”‚  9.582334090987247 โ”‚
โ”‚ subresponse            โ”‚ 399.87 MiB   โ”‚ 1.83 MiB   โ”‚  218.4831068635027 โ”‚
โ”‚ win32response          โ”‚ 407.86 MiB   โ”‚ 7.41 MiB   โ”‚ 55.050315514606815 โ”‚
โ”‚ timetaken              โ”‚ 1.57 GiB     โ”‚ 402.06 MiB โ”‚ 3.9947395692010637 โ”‚
โ”‚ uriQuery__utm_medium   โ”‚ 208.17 MiB   โ”‚ 12.29 MiB  โ”‚ 16.936148912472955 โ”‚
โ”‚ uriQuery__utm_source   โ”‚ 215.18 MiB   โ”‚ 13.00 MiB  โ”‚ 16.548367623199912 โ”‚
โ”‚ uriQuery__utm_campaign โ”‚ 381.46 MiB   โ”‚ 37.94 MiB  โ”‚ 10.055156353418509 โ”‚
โ”‚ uriQuery__utm_term     โ”‚ 231.82 MiB   โ”‚ 10.78 MiB  โ”‚ 21.502540454070672 โ”‚
โ”‚ uriQuery__utm_content  โ”‚ 441.34 MiB   โ”‚ 87.60 MiB  โ”‚  5.038260760449327 โ”‚
โ”‚ uriQuery__yclid        โ”‚ 216.88 MiB   โ”‚ 16.58 MiB  โ”‚  13.07721335008116 โ”‚
โ”‚ uriQuery__region       โ”‚ 204.35 MiB   โ”‚ 9.49 MiB   โ”‚  21.52661903446796 โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
 
28 rows in set. Elapsed: 0.005 sec.

เบฅเบฒเบเบฅเบฐเบญเบฝเบ”เบ‚เบญเบ‡เบญเบปเบ‡เบ›เบฐเบเบญเบšเบ—เบตเปˆเปƒเบŠเป‰

FileBeat. เบเบฒเบ™เป‚เบญเบ™เบšเบฑเบ™เบ—เบถเบเป„เบŸเบฅเปŒ

เบญเบปเบ‡โ€‹เบ›เบฐโ€‹เบเบญเบšโ€‹เบ™เบตเป‰โ€‹เบ•เบดเบ”โ€‹เบ•เบฒเบกโ€‹เบเบงเบ”โ€‹เบเบฒโ€‹เบเบฒเบ™โ€‹เบ›เปˆเบฝเบ™โ€‹เปเบ›เบ‡โ€‹เบเบฒเบ™โ€‹เป€เบ‚เบปเป‰เบฒโ€‹เบชเบนเปˆโ€‹เบฅเบฐโ€‹เบšเบปเบšโ€‹เป„เบŸเบฅโ€‹เปŒโ€‹เปƒเบ™โ€‹เปเบœเปˆเบ™โ€‹เปเบฅเบฐโ€‹เบœเปˆเบฒเบ™โ€‹เบ‚เปเป‰โ€‹เบกเบนเบ™โ€‹เป€เบžเบทเปˆเบญ LogStashโ€‹. เบ•เบดเบ”เบ•เบฑเป‰เบ‡เบขเบนเปˆเปƒเบ™เป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบเบ—เบฑเบ‡เบซเบกเบปเบ”เบ—เบตเปˆเป„เบŸเบฅเปŒเบšเบฑเบ™เบ—เบถเบเบ–เบทเบเบ‚เบฝเบ™ (เบ›เบปเบเบเบฐเบ•เบดเปเบฅเป‰เบง IIS). เป€เบฎเบฑเบ”เบงเบฝเบเบขเบนเปˆเปƒเบ™เบฎเบนเบšเปเบšเบšเบซเบฒเบ‡ (i. e. , เบกเบฑเบ™เป‚เบญเบ™เบžเบฝเบ‡เปเบ•เปˆเบšเบฑเบ™เบ—เบถเบเบเบฒเบ™เป€เบžเบตเปˆเบกเป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™เป„เบŸเบฅเปŒ). เปเบ•เปˆเบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเปเบเบเบ•เปˆเบฒเบ‡เบซเบฒเบเป€เบžเบทเปˆเบญเป‚เบญเบ™เป„เบŸเบฅเปŒเบ—เบฑเบ‡เบซเบกเบปเบ”. เบ™เบตเป‰เปเบกเปˆเบ™เบชเบฐเบ”เบงเบเปƒเบ™เป€เบงเบฅเบฒเบ—เบตเปˆเบ—เปˆเบฒเบ™เบ•เป‰เบญเบ‡เบเบฒเบ™เบ”เบฒเบงเป‚เบซเบฅเบ”เบ‚เปเป‰เบกเบนเบ™เบชเปเบฒเบฅเบฑเบšเป€เบ”เบทเบญเบ™เบ—เบตเปˆเบœเปˆเบฒเบ™เบกเบฒ. เบžเบฝเบ‡โ€‹เปเบ•เปˆโ€‹เป€เบญเบปเบฒโ€‹เป„เบŸเบฅโ€‹เปŒโ€‹เบšเบฑเบ™โ€‹เบ—เบถเบโ€‹เป„เบงเป‰โ€‹เปƒเบ™โ€‹เป‚เบŸเบ™โ€‹เป€เบ”เบตโ€‹เปเบฅเบฐโ€‹เบกเบฑเบ™โ€‹เบˆเบฐโ€‹เบญเปˆเบฒเบ™โ€‹เบกเบฑเบ™โ€‹เบ—เบฑเบ‡โ€‹เบซเบกเบปเบ”โ€‹.

เป€เบกเบทเปˆเบญเบเบฒเบ™เบšเปเบฅเบดเบเบฒเบ™เบขเบธเบ”, เบ‚เปเป‰เบกเบนเบ™เบขเบธเบ”เบ–เบทเบเป‚เบญเบ™เป„เบ›เบซเบฒเบšเปˆเบญเบ™เป€เบเบฑเบšเบ‚เปเป‰เบกเบนเบ™เบ•เบทเปˆเบกเบญเบตเบ.

เบ•เบปเบงโ€‹เบขเปˆเบฒเบ‡โ€‹เบเบฒเบ™โ€‹เบ•เบฑเป‰เบ‡โ€‹เบ„เปˆเบฒโ€‹เป€เบšเบดเปˆเบ‡โ€‹เบ„เบทโ€‹เบ™เบตเป‰โ€‹:

filebeat.yml

filebeat.inputs:
- type: log
  enabled: true
  paths:
    - C:/inetpub/logs/LogFiles/W3SVC1/*.log
  exclude_files: ['.gz$','.zip$']
  tail_files: true
  ignore_older: 24h
  fields:
    fld_server_name: "site1.domain.ru"
    fld_app_name: "site1.domain.ru"
    fld_app_module: "web"
    fld_website_name: "web-main"
 
- type: log
  enabled: true
  paths:
    - C:/inetpub/logs/LogFiles/__Import/access_log-*
  exclude_files: ['.gz$','.zip$']
  tail_files: false
  fields:
    fld_server_name: "site2.domain.ru"
    fld_app_name: "site2.domain.ru"
    fld_app_module: "web"
    fld_website_name: "web-main"
    fld_logformat: "logformat__apache"
 
 
filebeat.config.modules:
  path: ${path.config}/modules.d/*.yml
  reload.enabled: false
  reload.period: 2s
 
output.logstash:
  hosts: ["log.domain.com:5044"]
 
  ssl.enabled: true
  ssl.certificate_authorities: ["C:/filebeat/certs/ca.pem", "C:/filebeat/certs/ca-issuing.pem"]
  ssl.certificate: "C:/filebeat/certs/site1.domain.ru.cer"
  ssl.key: "C:/filebeat/certs/site1.domain.ru.key"
 
#================================ Processors =====================================
 
processors:
  - add_host_metadata: ~
  - add_cloud_metadata: ~

LogStash. เบ•เบปเบงเป€เบเบฑเบšเบšเบฑเบ™เบ—เบถเบ

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

เป€เบžเบทเปˆเบญเปƒเบชเปˆเป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™ ClickHouse, เปƒเบŠเป‰ plugin Logstash-output-clickhouse. เบ›เบฑเปŠเบเบญเบดเบ™ Logstash เบกเบตเบเบปเบ™เป„เบเบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบ–เบญเบ™เบ„เบทเบ™เบ„เปเบฒเบฎเป‰เบญเบ‡เบ‚เป, เปเบ•เปˆเปƒเบ™เบฅเบฐเบซเบงเปˆเบฒเบ‡เบเบฒเบ™เบ›เบดเบ”เบ›เบปเบเบเบฐเบ•เบด, เบกเบฑเบ™เบเปเปˆเบ”เบตเบเบงเปˆเบฒเบ—เบตเปˆเบˆเบฐเบขเบธเบ”เบเบฒเบ™เบšเปเบฅเบดเบเบฒเบ™เบ‚เบญเบ‡เบกเบฑเบ™เป€เบญเบ‡. เป€เบกเบทเปˆเบญเบขเบธเบ”เป€เบŠเบปเบฒ, เบ‚เปเป‰เบ„เบงเบฒเบกเบˆเบฐเบชเบฐเบชเบปเบกเบขเบนเปˆเปƒเบ™เปเบ–เบง RabbitMQ, เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™เบ–เป‰เบฒเบเบฒเบ™เบขเบธเบ”เป€เบŠเบปเบฒเป€เบ›เบฑเบ™เป€เบงเบฅเบฒเบ”เบปเบ™, เบกเบฑเบ™เบ”เบตเบเบงเปˆเบฒเบ—เบตเปˆเบˆเบฐเบขเบธเบ” Filebeats เปƒเบ™เป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบ. เปƒเบ™เป‚เบ„เบ‡เบเบฒเบ™เบ—เบตเปˆ RabbitMQ เบšเปเปˆเป„เบ”เป‰เบ–เบทเบเบ™เปเบฒเปƒเบŠเป‰ (เปƒเบ™เป€เบ„เบทเบญเบ‚เปˆเบฒเบเบ—เป‰เบญเบ‡เบ–เบดเปˆเบ™ Filebeat เบชเบปเปˆเบ‡เบšเบฑเบ™เบ—เบถเบเป‚เบ”เบเบเบปเบ‡เป„เบ›เบซเบฒ Logstash), Filebeats เป€เบฎเบฑเบ”เบงเบฝเบเบ‚เป‰เบญเบ™เบ‚เป‰เบฒเบ‡เป€เบ›เบฑเบ™เบ—เบตเปˆเบเบญเบกเบฎเบฑเบšเปเบฅเบฐเบ›เบญเบ”เป„เบž, เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™เบชเปเบฒเบฅเบฑเบšเบžเบงเบเป€เบ‚เบปเบฒ, เบ„เบงเบฒเบกเบšเปเปˆเบžเป‰เบญเบกเบ‚เบญเบ‡เบœเบปเบ™เบœเบฐเบฅเบดเบ”เบšเปเปˆเบกเบตเบœเบปเบ™เบชเบฐเบ—เป‰เบญเบ™.

เบ•เบปเบงโ€‹เบขเปˆเบฒเบ‡โ€‹เบเบฒเบ™โ€‹เบ•เบฑเป‰เบ‡โ€‹เบ„เปˆเบฒโ€‹เป€เบšเบดเปˆเบ‡โ€‹เบ„เบทโ€‹เบ™เบตเป‰โ€‹:

log_web__filebeat_clickhouse.conf

input {
 
    beats {
        port => 5044
        type => 'iis'
        ssl => true
        ssl_certificate_authorities => ["/etc/logstash/certs/ca.cer", "/etc/logstash/certs/ca-issuing.cer"]
        ssl_certificate => "/etc/logstash/certs/server.cer"
        ssl_key => "/etc/logstash/certs/server-pkcs8.key"
        ssl_verify_mode => "peer"
 
            add_field => {
                "fld_server_name" => "%{[fields][fld_server_name]}"
                "fld_app_name" => "%{[fields][fld_app_name]}"
                "fld_app_module" => "%{[fields][fld_app_module]}"
                "fld_website_name" => "%{[fields][fld_website_name]}"
                "fld_log_file_name" => "%{source}"
                "fld_logformat" => "%{[fields][fld_logformat]}"
            }
    }
 
    rabbitmq {
        host => "queue.domain.com"
        port => 5671
        user => "q-reader"
        password => "password"
        queue => "web_log"
        heartbeat => 30
        durable => true
        ssl => true
        #ssl_certificate_path => "/etc/logstash/certs/server.p12"
        #ssl_certificate_password => "password"
 
        add_field => {
            "fld_server_name" => "%{[fields][fld_server_name]}"
            "fld_app_name" => "%{[fields][fld_app_name]}"
            "fld_app_module" => "%{[fields][fld_app_module]}"
            "fld_website_name" => "%{[fields][fld_website_name]}"
            "fld_log_file_name" => "%{source}"
            "fld_logformat" => "%{[fields][fld_logformat]}"
        }
    }
 
}
 
filter { 
 
      if [message] =~ "^#" {
        drop {}
      }
 
      if [fld_logformat] == "logformat__iis_with_xrealip" {
     
          grok {
            match => ["message", "%{TIMESTAMP_ISO8601:log_timestamp} %{IP:serverIP} %{WORD:method} %{NOTSPACE:uriStem} %{NOTSPACE:uriQuery} %{NUMBER:port} %{NOTSPACE:username} %{IPORHOST:clientIP} %{NOTSPACE:userAgent} %{NOTSPACE:referer} %{NUMBER:response} %{NUMBER:subresponse} %{NUMBER:win32response} %{NUMBER:timetaken} %{NOTSPACE:xrealIP} %{NOTSPACE:xforwarderfor}"]
          }
      } else {
   
          grok {
             match => ["message", "%{TIMESTAMP_ISO8601:log_timestamp} %{IP:serverIP} %{WORD:method} %{NOTSPACE:uriStem} %{NOTSPACE:uriQuery} %{NUMBER:port} %{NOTSPACE:username} %{IPORHOST:clientIP} %{NOTSPACE:userAgent} %{NOTSPACE:referer} %{NUMBER:response} %{NUMBER:subresponse} %{NUMBER:win32response} %{NUMBER:timetaken}"]
          }
 
      }
 
      date {
        match => [ "log_timestamp", "YYYY-MM-dd HH:mm:ss" ]
          timezone => "Etc/UTC"
        remove_field => [ "log_timestamp", "@timestamp" ]
        target => [ "log_timestamp2" ]
      }
 
        ruby {
            code => "tstamp = event.get('log_timestamp2').to_i
                        event.set('logdatetime', Time.at(tstamp).strftime('%Y-%m-%d %H:%M:%S'))
                        event.set('logdate', Time.at(tstamp).strftime('%Y-%m-%d'))"
        }
 
      if [bytesSent] {
        ruby {
          code => "event['kilobytesSent'] = event['bytesSent'].to_i / 1024.0"
        }
      }
 
 
      if [bytesReceived] {
        ruby {
          code => "event['kilobytesReceived'] = event['bytesReceived'].to_i / 1024.0"
        }
      }
 
   
        ruby {
            code => "event.set('clientRealIP', event.get('clientIP'))"
        }
        if [xrealIP] {
            ruby {
                code => "event.set('clientRealIP', event.get('xrealIP'))"
            }
        }
        if [xforwarderfor] {
            ruby {
                code => "event.set('clientRealIP', event.get('xforwarderfor'))"
            }
        }
 
      mutate {
        convert => ["bytesSent", "integer"]
        convert => ["bytesReceived", "integer"]
        convert => ["timetaken", "integer"] 
        convert => ["port", "integer"]
 
        add_field => {
            "clientHostname" => "%{clientIP}"
        }
      }
 
        useragent {
            source=> "useragent"
            prefix=> "browser"
        }
 
        kv {
            source => "uriQuery"
            prefix => "uriQuery__"
            allow_duplicate_values => false
            field_split => "&"
            include_keys => [ "utm_medium", "utm_source", "utm_campaign", "utm_term", "utm_content", "yclid", "region" ]
        }
 
        mutate {
            join => { "uriQuery__utm_source" => "," }
            join => { "uriQuery__utm_medium" => "," }
            join => { "uriQuery__utm_campaign" => "," }
            join => { "uriQuery__utm_term" => "," }
            join => { "uriQuery__utm_content" => "," }
            join => { "uriQuery__yclid" => "," }
            join => { "uriQuery__region" => "," }
        }
 
}
 
output { 
  #stdout {codec => rubydebug}
    clickhouse {
      headers => ["Authorization", "Basic abcdsfks..."]
      http_hosts => ["http://127.0.0.1:8123"]
      save_dir => "/etc/logstash/tmp"
      table => "log_web"
      request_tolerance => 1
      flush_size => 10000
      idle_flush_time => 1
        mutations => {
            "fld_log_file_name" => "fld_log_file_name"
            "fld_server_name" => "fld_server_name"
            "fld_app_name" => "fld_app_name"
            "fld_app_module" => "fld_app_module"
            "fld_website_name" => "fld_website_name"
 
            "logdatetime" => "logdatetime"
            "logdate" => "logdate"
            "serverIP" => "serverIP"
            "method" => "method"
            "uriStem" => "uriStem"
            "uriQuery" => "uriQuery"
            "port" => "port"
            "username" => "username"
            "clientIP" => "clientIP"
            "clientRealIP" => "clientRealIP"
            "userAgent" => "userAgent"
            "referer" => "referer"
            "response" => "response"
            "subresponse" => "subresponse"
            "win32response" => "win32response"
            "timetaken" => "timetaken"
             
            "uriQuery__utm_medium" => "uriQuery__utm_medium"
            "uriQuery__utm_source" => "uriQuery__utm_source"
            "uriQuery__utm_campaign" => "uriQuery__utm_campaign"
            "uriQuery__utm_term" => "uriQuery__utm_term"
            "uriQuery__utm_content" => "uriQuery__utm_content"
            "uriQuery__yclid" => "uriQuery__yclid"
            "uriQuery__region" => "uriQuery__region"
        }
    }
 
}

pipelines.yml

# This file is where you define your pipelines. You can define multiple.
# For more information on multiple pipelines, see the documentation:
#   https://www.elastic.co/guide/en/logstash/current/multiple-pipelines.html
 
- pipeline.id: log_web__filebeat_clickhouse
  path.config: "/etc/logstash/log_web__filebeat_clickhouse.conf"

ClickHouse. เบเบฒเบ™เป€เบเบฑเบšเบฎเบฑเบเบชเบฒเบšเบฑเบ™เบ—เบถเบ

เบšเบฑเบ™เบ—เบถเบเบชเปเบฒเบฅเบฑเบšเบฅเบฐเบšเบปเบšเบ—เบฑเบ‡เบซเบกเบปเบ”เบ–เบทเบเบšเบฑเบ™เบ—เบถเบเป„เบงเป‰เปƒเบ™เบ•เบฒเบ•เบฐเบฅเบฒเบ‡เบ”เบฝเบง (เป€เบšเบดเปˆเบ‡เปƒเบ™เบ•เบญเบ™เบ•เบปเป‰เบ™เบ‚เบญเบ‡เบšเบปเบ”เบ„เบงเบฒเบก). เบกเบฑเบ™เบ–เบทเบเบญเบญเบเปเบšเบšเบกเบฒเป€เบžเบทเปˆเบญเป€เบเบฑเบšเบ‚เปเป‰เบกเบนเบ™เบเปˆเบฝเบงเบเบฑเบšเบเบฒเบ™เบฎเป‰เบญเบ‡เบ‚เป: เบ•เบปเบงเบเปเบฒเบ™เบปเบ”เบเบฒเบ™เบ—เบฑเบ‡เบซเบกเบปเบ”เปเบกเปˆเบ™เบ„เป‰เบฒเบเบ„เบทเบเบฑเบ™เบชเปเบฒเบฅเบฑเบšเบฎเบนเบšเปเบšเบšเบ—เบตเปˆเปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™, เบ•เบปเบงเบขเปˆเบฒเบ‡เป€เบŠเบฑเปˆเบ™ IIS logs, apache เปเบฅเบฐ nginx logs. เบชเปเบฒเบฅเบฑเบšเบšเบฑเบ™เบ—เบถเบเบ„เปเบฒเบฎเป‰เบญเบ‡เบชเบฐเบซเบกเบฑเบเบ—เบตเปˆ, เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบเบปเบเบ•เบปเบงเบขเปˆเบฒเบ‡, เบ„เบงเบฒเบกเบœเบดเบ”เบžเบฒเบ”, เบ‚เปเป‰เบ„เบงเบฒเบกเบ‚เปเป‰เบกเบนเบ™เบ‚เปˆเบฒเบงเบชเบฒเบ™, เบเบฒเบ™เป€เบ•เบทเบญเบ™เป„เบžเป„เบ”เป‰เบ–เบทเบเบšเบฑเบ™เบ—เบถเบเป„เบงเป‰, เบ•เบฒเบ•เบฐเบฅเบฒเบ‡เปเบเบเบ•เปˆเบฒเบ‡เบซเบฒเบเบˆเบฐเป„เบ”เป‰เบฎเบฑเบšเบเบฒเบ™เบชเบฐเบซเบ™เบญเบ‡เป‚เบ„เบ‡เบชเป‰เบฒเบ‡เบ—เบตเปˆเป€เบซเบกเบฒเบฐเบชเบปเบก (เบ›เบฐเบˆเบธเบšเบฑเบ™เบขเบนเปˆเปƒเบ™เบ‚เบฑเป‰เบ™เบ•เบญเบ™เบเบฒเบ™เบญเบญเบเปเบšเบš).

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

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

เบžเบงเบเป€เบฎเบปเบฒเบเบณเบฅเบฑเบ‡เปƒเบŠเป‰เป€เบงเบตเบŠเบฑเปˆเบ™ 19.6 เปเบฅเบฐเบžเบงเบเป€เบฎเบปเบฒเบงเบฒเบ‡เปเบœเบ™เบ—เบตเปˆเบˆเบฐเบžเบฐเบเบฒเบเบฒเบกเบญเบฑเบšเป€เบ”เบ”เป€เบ›เบฑเบ™เป€เบงเบตเบŠเบฑเปˆเบ™เบฅเปˆเบฒเบชเบธเบ”. เบžเบงเบเป€เบ‚เบปเบฒเบกเบตเบ„เบธเบ™เบชเบปเบกเบšเบฑเบ”เบ—เบตเปˆเบเบญเบ”เบขเป‰เบฝเบกเป€เบŠเบฑเปˆเบ™ Adaptive Granularity, Skipping indices เปเบฅเบฐ DoubleDelta codec, เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบเบปเบเบ•เบปเบงเบขเปˆเบฒเบ‡.

เป‚เบ”เบเบ„เปˆเบฒเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™, เปƒเบ™เบฅเบฐเบซเบงเปˆเบฒเบ‡เบเบฒเบ™เบ•เบดเบ”เบ•เบฑเป‰เบ‡, เบฅเบฐเบ”เบฑเบšเบเบฒเบ™เบšเบฑเบ™เบ—เบถเบเบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเบ–เบทเบเบ•เบฑเป‰เบ‡เปƒเบซเป‰เบ•เบดเบ”เบ•เบฒเบก. เบšเบฑเบ™เบ—เบถเบเบ–เบทเบเบซเบกเบธเบ™เปเบฅเบฐเป€เบเบฑเบšเป„เบงเป‰, เปเบ•เปˆเปƒเบ™เป€เบงเบฅเบฒเบ”เบฝเบงเบเบฑเบ™เบžเบงเบเบกเบฑเบ™เบ‚เบฐเบซเบเบฒเบเป€เบ–เบดเบ‡ gigabyte. เบ–เป‰เบฒเบšเปเปˆเบกเบตเบ„เบงเบฒเบกเบ•เป‰เบญเบ‡เบเบฒเบ™, เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบเปเบฒเบ™เบปเบ”เบฅเบฐเบ”เบฑเบšเบเบฒเบ™เป€เบ•เบทเบญเบ™เป„เบž, เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เบ‚เบฐเบซเบ™เบฒเบ”เบ‚เบญเบ‡เบšเบฑเบ™เบ—เบถเบเบˆเบฐเบซเบผเบธเบ”เบฅเบปเบ‡เบขเปˆเบฒเบ‡เบซเบผเบงเบ‡เบซเบผเบฒเบ. เบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเบเบฒเบ™เบšเบฑเบ™เบ—เบถเบเบ–เบทเบเบฅเบฐเบšเบธเป„เบงเป‰เปƒเบ™เป„เบŸเบฅเปŒ config.xml:

<!-- Possible levels: https://github.com/pocoproject/poco/blob/develop/Foundation/include/Poco/Logger. h#L105 -->
<level>warning</level>

เบšเบฒเบ‡เบ„เปเบฒเบชเบฑเปˆเบ‡เบ—เบตเปˆเป€เบ›เบฑเบ™เบ›เบฐเป‚เบซเบเบ”

ะŸะพัะบะพะปัŒะบัƒ ะพั€ะธะณะธะฝะฐะปัŒะฝั‹ะต ะฟะฐะบะตั‚ั‹ ัƒัั‚ะฐะฝะพะฒะบะธ ัะพะฑะธั€ะฐัŽั‚ัั ะฟะพ Debian, ั‚ะพ ะดะปั ะดั€ัƒะณะธั… ะฒะตั€ัะธะน Linux ะฝะตะพะฑั…ะพะดะธะผะพ ะธัะฟะพะปัŒะทะพะฒะฐั‚ัŒ ะฟะฐะบะตั‚ั‹ ัะพะฑั€ะฐะฝะฝั‹ะต ะบะพะผะฟะฐะฝะธะตะน Altinity.
 
ะ’ะพั‚ ะฟะพ ัั‚ะพะน ััั‹ะปะบะต ะตัั‚ัŒ ะธะฝัั‚ั€ัƒะบั†ะธะธ ั ััั‹ะปะบะฐะผะธ ะฝะฐ ะธั… ั€ะตะฟะพะทะธั‚ะพั€ะธะน: https://www.altinity.com/blog/2017/12/18/logstash-with-clickhouse
sudo yum search clickhouse-server
sudo yum install clickhouse-server.noarch
  
1. ะฟั€ะพะฒะตั€ะบะฐ ัั‚ะฐั‚ัƒัะฐ
sudo systemctl status clickhouse-server
 
2. ะพัั‚ะฐะฝะพะฒะบะฐ ัะตั€ะฒะตั€ะฐ
sudo systemctl stop clickhouse-server
 
3. ะทะฐะฟัƒัะบ ัะตั€ะฒะตั€ะฐ
sudo systemctl start clickhouse-server
 
ะ—ะฐะฟัƒัะบ ะดะปั ะฒั‹ะฟะพะปะฝะตะฝะธั ะทะฐะฟั€ะพัะพะฒ ะฒ ะผะฝะพะณะพัั‚ั€ะพั‡ะฝะพะผ ั€ะตะถะธะผะต (ะฒั‹ะฟะพะปะฝะตะฝะธะต ะฟะพัะปะต ะทะฝะฐะบะฐ ";")
clickhouse-client --multiline
clickhouse-client --multiline --host 127.0.0.1 --password pa55w0rd
clickhouse-client --multiline --host 127.0.0.1 --port 9440 --secure --user default --password pa55w0rd
 
ะŸะปะฐะณะธะฝ ะบะปะธะบะปะฐัƒะทะฐ ะดะปั ะปะพะณัั‚ะตัˆ ะฒ ัะปัƒั‡ะฐะต ะพัˆะธะฑะบะธ ะฒ ะพะดะฝะพะน ัั‚ั€ะพะบะต ัะพั…ั€ะฐะฝัะตั‚ ะฒััŽ ะฟะฐั‡ะบัƒ ะฒ ั„ะฐะนะป /tmp/log_web_failed.json
ะœะพะถะฝะพ ะฒั€ัƒั‡ะฝัƒัŽ ะธัะฟั€ะฐะฒะธั‚ัŒ ัั‚ะพั‚ ั„ะฐะนะป ะธ ะฟะพะฟั€ะพะฑะพะฒะฐั‚ัŒ ะทะฐะปะธั‚ัŒ ะตะณะพ ะฒ ะ‘ะ” ะฒั€ัƒั‡ะฝัƒัŽ:
clickhouse-client --host 127.0.0.1 --password password --query="INSERT INTO log_web FORMAT JSONEachRow" < /tmp/log_web_failed__fixed.json
 
sudo mv /etc/logstash/tmp/log_web_failed.json /etc/logstash/tmp/log_web_failed__fixed.json
sudo chown user_dev /etc/logstash/tmp/log_web_failed__fixed.json
sudo clickhouse-client --host 127.0.0.1 --password password --query="INSERT INTO log_web FORMAT JSONEachRow" < /etc/logstash/tmp/log_web_failed__fixed.json
sudo mv /etc/logstash/tmp/log_web_failed__fixed.json /etc/logstash/tmp/log_web_failed__fixed_.json
 
ะฒั‹ั…ะพะด ะธะท ะบะพะผะฐะฝะดะฝะพะน ัั‚ั€ะพะบะธ
quit;
## ะะฐัั‚ั€ะพะนะบะฐ TLS
https://www.altinity.com/blog/2019/3/5/clickhouse-networking-part-2
 
openssl s_client -connect log.domain.com:9440 < /dev/null

LogStash. เบšเบฑเบ™เบ—เบถเบ router เบˆเบฒเบ FileBeat เป„เบ›เบซเบฒเปเบ–เบง RabbitMQ

เบญเบปเบ‡เบ›เบฐเบเบญเบšเบ™เบตเป‰เบ–เบทเบเบ™เปเบฒเปƒเบŠเป‰เป€เบžเบทเปˆเบญเบเปเบฒเบ™เบปเบ”เป€เบชเบฑเป‰เบ™เบ—เบฒเบ‡เบ—เบตเปˆเบกเบฒเบˆเบฒเบ FileBeat เป„เบ›เบซเบฒเปเบ–เบง RabbitMQ. เบกเบตเบชเบญเบ‡เบˆเบธเบ”เบขเบนเปˆเบ—เบตเปˆเบ™เบตเป‰:

  1. เปเบ•เปˆเบซเบ™เป‰เบฒเป€เบชเบเบ”เบฒเบ, FileBeat เบšเปเปˆเบกเบต plugin เบœเบปเบ™เบœเบฐเบฅเบดเบ”เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบ‚เบฝเบ™เป‚เบ”เบเบเบปเบ‡เบเบฑเบš RabbitMQ. เปเบฅเบฐเบเบฒเบ™เบ—เปเบฒเบ‡เบฒเบ™เบ”เบฑเปˆเบ‡เบเปˆเบฒเบง, เบเบฒเบ™เบ•เบฑเบ”เบชเบดเบ™เป‚เบ”เบเบเบฒเบ™เบ•เบญเบšเปƒเบ™ github เบ‚เบญเบ‡เบžเบงเบเป€เบ‚เบปเบฒ, เบšเปเปˆเป„เบ”เป‰เบ–เบทเบเบงเบฒเบ‡เปเบœเบ™เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”. เบกเบต plugin เบชเปเบฒเบฅเบฑเบš Kafka, เปเบ•เปˆเบชเปเบฒเบฅเบฑเบšเป€เบซเบ”เบœเบปเบ™เบšเบฒเบ‡เบขเปˆเบฒเบ‡เบžเบงเบเป€เบฎเบปเบฒเบšเปเปˆเบชเบฒเบกเบฒเบ”เปƒเบŠเป‰เบกเบฑเบ™เป€เบญเบ‡.
  2. เบกเบตเบ‚เปเป‰เบเปเบฒเบ™เบปเบ”เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เป€เบเบฑเบšเบšเบฑเบ™เบ—เบถเบเปƒเบ™ DMZ. เบญเบตเบ‡เปƒเบชเปˆเบžเบงเบเบกเบฑเบ™, เบšเบฑเบ™เบ—เบถเบเบ—เปเบฒเบญเบดเบ”เบ•เป‰เบญเบ‡เป„เบ”เป‰เบฎเบฑเบšเบเบฒเบ™เบˆเบฑเบ”เบ„เบดเบงเปเบฅเบฐเบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™ LogStash เบญเปˆเบฒเบ™เบšเบฑเบ™เบ—เบถเบเบˆเบฒเบเปเบ–เบงเบžเบฒเบเบ™เบญเบ.

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

iis_w3c_logs__filebeat_rabbitmq.conf

input {
 
    beats {
        port => 5044
        type => 'iis'
        ssl => true
        ssl_certificate_authorities => ["/etc/pki/tls/certs/app/ca.pem", "/etc/pki/tls/certs/app/ca-issuing.pem"]
        ssl_certificate => "/etc/pki/tls/certs/app/queue.domain.com.cer"
        ssl_key => "/etc/pki/tls/certs/app/queue.domain.com-pkcs8.key"
        ssl_verify_mode => "peer"
    }
 
}
 
output { 
  #stdout {codec => rubydebug}
 
    rabbitmq {
        host => "127.0.0.1"
        port => 5672
        exchange => "monitor.direct"
        exchange_type => "direct"
        key => "%{[fields][fld_app_name]}"
        user => "q-writer"
        password => "password"
        ssl => false
    }
}

RabbitMQ. เปเบ–เบงเบ‚เปเป‰เบ„เบงเบฒเบก

เบญเบปเบ‡เบ›เบฐเบเบญเบšเบ™เบตเป‰เบ–เบทเบเบ™เปเบฒเปƒเบŠเป‰เป€เบžเบทเปˆเบญ buffer เบฅเบฒเบเบเบฒเบ™เบšเบฑเบ™เบ—เบถเบเปƒเบ™ DMZ. เบเบฒเบ™เบšเบฑเบ™เบ—เบถเบเปเบกเปˆเบ™เป€เบฎเบฑเบ”เป„เบ”เป‰เป‚เบ”เบเบœเปˆเบฒเบ™เบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆ Filebeat โ†’ LogStash. เบเบฒเบ™เบญเปˆเบฒเบ™เปเบกเปˆเบ™เป€เบฎเบฑเบ”เบˆเบฒเบเบžเบฒเบเบ™เบญเบ DMZ เบœเปˆเบฒเบ™ LogStash. เป€เบกเบทเปˆเบญเบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เบœเปˆเบฒเบ™ RabbitMQ, เบ›เบฐเบกเบฒเบ™ 4 เบžเบฑเบ™เบ‚เปเป‰เบ„เบงเบฒเบกเบ•เปเปˆเบงเบดเบ™เบฒเบ—เบตเบ–เบทเบเบ›เบธเบ‡เปเบ•เปˆเบ‡.

เป€เบชเบฑเป‰เบ™เบ—เบฒเบ‡เบ‚เปเป‰เบ„เบงเบฒเบกเบ–เบทเบเบ•เบฑเป‰เบ‡เบ„เปˆเบฒเป‚เบ”เบเบŠเบทเปˆเบฅเบฐเบšเบปเบš, i.e., เบญเบตเบ‡เบ•เบฒเบกเบ‚เปเป‰เบกเบนเบ™เบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒ FileBeat. เบ‚เปเป‰เบ„เบงเบฒเบกเบ—เบฑเบ‡เปเบปเบ”เป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™เบ„เบดเบงเบ”เบฝเบง. เบ–เป‰เบฒเบชเปเบฒเบฅเบฑเบšเป€เบซเบ”เบœเบปเบ™เบšเบฒเบ‡เบขเปˆเบฒเบ‡เบเบฒเบ™เบšเปเบฅเบดเบเบฒเบ™เบ„เบดเบงเบขเบธเบ”, เบ™เบตเป‰เบˆเบฐเบšเปเปˆเบ™เปเบฒเป„เบ›เบชเบนเปˆเบเบฒเบ™เบชเบนเบ™เป€เบชเบเบ‚เปเป‰เบ„เบงเบฒเบก: FileBeats เบˆเบฐเป„เบ”เป‰เบฎเบฑเบšเบ‚เปเป‰เบœเบดเบ”เบžเบฒเบ”เปƒเบ™เบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเปเบฅเบฐเบˆเบฐเบขเบธเบ”เบเบฒเบ™เบชเบปเปˆเบ‡เบŠเบปเปˆเบงเบ„เบฒเบง. เปเบฅเบฐ LogStash, เบ—เบตเปˆเบญเปˆเบฒเบ™เบˆเบฒเบเปเบ–เบง, เบเบฑเบ‡เบˆเบฐเป„เบ”เป‰เบฎเบฑเบšเบ„เบงเบฒเบกเบœเบดเบ”เบžเบฒเบ”เบ‚เบญเบ‡เป€เบ„เบทเบญเบ‚เปˆเบฒเบเปเบฅเบฐเบฅเปเบ–เป‰เบฒเบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเบ„เบทเบ™. เปƒเบ™เบเปเบฅเบฐเบ™เบตเบ™เบตเป‰, เปเบ™เปˆเบ™เบญเบ™, เบ‚เปเป‰เบกเบนเบ™เบˆเบฐเบšเปเปˆเบ–เบทเบเบ‚เบฝเบ™เปƒเบชเปˆเบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™.

เบ„เบณเปเบ™เบฐเบ™เบณเบ•เปเปˆเป„เบ›เบ™เบตเป‰เบ–เบทเบเปƒเบŠเป‰เป€เบžเบทเปˆเบญเบชเป‰เบฒเบ‡ เปเบฅเบฐเบเบณเบ™เบปเบ”เบ„เปˆเบฒเบ„เบดเบง:

sudo /usr/local/bin/rabbitmqadmin/rabbitmqadmin declare exchange --vhost=/ name=monitor.direct type=direct sudo /usr/local/bin/rabbitmqadmin/rabbitmqadmin declare queue --vhost=/ name=web_log durable=true
sudo /usr/local/bin/rabbitmqadmin/rabbitmqadmin --vhost="/" declare binding source="monitor.direct" destination_type="queue" destination="web_log" routing_key="site1.domain.ru"
sudo /usr/local/bin/rabbitmqadmin/rabbitmqadmin --vhost="/" declare binding source="monitor.direct" destination_type="queue" destination="web_log" routing_key="site2.domain.ru"

เบเบฃเบฒเบŸเบฒเบ™เบฒ. เปเบœเบ‡เปœเป‰เบฒเบ›เบฑเบ”

เบญเบปเบ‡เบ›เบฐเบเบญเบšเบ™เบตเป‰เบ–เบทเบเบ™เปเบฒเปƒเบŠเป‰เป€เบžเบทเปˆเบญเบชเบฐเปเบ”เบ‡เบ‚เปเป‰เบกเบนเบ™เบเบฒเบ™เบ•เบดเบ”เบ•เบฒเบก. เปƒเบ™เบเปเบฅเบฐเบ™เบตเบ™เบตเป‰, เบ—เปˆเบฒเบ™เบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เบ•เบดเบ”เบ•เบฑเป‰เบ‡เปเบซเบผเปˆเบ‡เบ‚เปเป‰เบกเบนเบ™ ClickHouse เบชเปเบฒเบฅเบฑเบš Grafana 4.6+ plugin. เบžเบงเบเป€เบฎเบปเบฒเบ•เป‰เบญเบ‡เบ›เบฑเบšเบกเบฑเบ™เป€เบฅเบฑเบเบ™เป‰เบญเบเป€เบžเบทเปˆเบญเบ›เบฑเบšเบ›เบธเบ‡เบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบšเบ‚เบญเบ‡เบเบฒเบ™เบ›เบฐเบกเบงเบ™เบœเบปเบ™เบเบฒเบ™เบเบฑเปˆเบ™เบ•เบญเบ‡ SQL เปƒเบ™ dashboard.

เบ•เบปเบงเบขเปˆเบฒเบ‡เป€เบŠเบฑเปˆเบ™, เบžเบงเบเป€เบฎเบปเบฒเปƒเบŠเป‰เบ•เบปเบงเปเบ›, เปเบฅเบฐเบ–เป‰เบฒเบžเบงเบเป€เบ‚เบปเบฒเบšเปเปˆเป„เบ”เป‰เบฅเบฐเบšเบธเป„เบงเป‰เปƒเบ™เบžเบฒเบเบชเบฐเบซเบ™เบฒเบกเบเบฒเบ™เบเบฑเปˆเบ™เบ•เบญเบ‡, เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เบžเบงเบเป€เบฎเบปเบฒเบ•เป‰เบญเบ‡เบเบฒเบ™เบšเปเปˆเปƒเบซเป‰เบกเบฑเบ™เบชเป‰เบฒเบ‡เป€เบ‡เบทเปˆเบญเบ™เป„เบ‚เปƒเบ™ WHERE เบ‚เบญเบ‡เปเบšเบšเบŸเบญเบก ( uriStem = "AND uriStem !="). เปƒเบ™เบเปเบฅเบฐเบ™เบตเบ™เบตเป‰, ClickHouse เบˆเบฐเบญเปˆเบฒเบ™เบ„เปเบฅเปเบฒ uriStem. เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™, เบžเบงเบเป€เบฎเบปเบฒเป„เบ”เป‰เบžเบฐเบเบฒเบเบฒเบกเบ—เบฒเบ‡เป€เบฅเบทเบญเบเบ—เบตเปˆเปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™เปเบฅเบฐเบชเบธเบ”เบ—เป‰เบฒเบเป„เบ”เป‰เปเบเป‰เป„เบ‚ plugin (macro $valueIfEmpty) เป€เบžเบทเปˆเบญเบเบฑเบšเบ„เบทเบ™ 1 เปƒเบ™เบเปเบฅเบฐเบ™เบตเบ‚เบญเบ‡เบ„เปˆเบฒเบซเบงเปˆเบฒเบ‡เป€เบ›เบปเปˆเบฒ, เป‚เบ”เบเบšเปเปˆเบกเบตเบเบฒเบ™เบเปˆเบฒเบงเป€เบ–เบดเบ‡เบ„เปเบฅเปเบฒเบ•เบปเบงเบกเบฑเบ™เป€เบญเบ‡.

เปเบฅเบฐเปƒเบ™เบ›เบฑเบ”เบˆเบธเบšเบฑเบ™เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบ™เปเบฒเปƒเบŠเป‰เบ„เปเบฒเบ–เบฒเบกเบ™เบตเป‰เบชเปเบฒเบฅเบฑเบšเบเบฒเบŸ

$columns(response, count(*) c) from $table where $adhoc
and $valueIfEmpty($fld_app_name, 1, fld_app_name = '$fld_app_name')
and $valueIfEmpty($fld_app_module, 1, fld_app_module = '$fld_app_module') and $valueIfEmpty($fld_server_name, 1, fld_server_name = '$fld_server_name') and $valueIfEmpty($uriStem, 1, uriStem like '%$uriStem%')
and $valueIfEmpty($clientRealIP, 1, clientRealIP = '$clientRealIP')

เป€เบŠเบดเปˆเบ‡เบ–เบทเบเบ›เปˆเบฝเบ™เป€เบ›เบฑเบ™ SQL เปเบšเบšเบ™เบตเป‰ (เบชเบฑเบ‡เป€เบเบ”เบงเปˆเบฒเบŠเปˆเบญเบ‡ uriStem เบซเบงเปˆเบฒเบ‡เป€เบ›เบปเปˆเบฒเบ–เบทเบเบ›เปˆเบฝเบ™เป€เบ›เบฑเบ™เบžเบฝเบ‡ 1)

SELECT
t,
groupArray((response, c)) AS groupArr
FROM (
SELECT
(intDiv(toUInt32(logdatetime), 60) * 60) * 1000 AS t, response,
count(*) AS c FROM default.log_web
WHERE (logdate >= toDate(1565061982)) AND (logdatetime >= toDateTime(1565061982)) AND 1 AND (fld_app_name = 'site1.domain.ru') AND (fld_app_module = 'web') AND 1 AND 1 AND 1
GROUP BY
t, response
ORDER BY
t ASC,
response ASC
)
GROUP BY t ORDER BY t ASC

เบชเบฐเบซเบฅเบธเบš

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

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

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

เปƒเบ™เบ—เบตเปˆเบชเบธเบ”, เป€เบฅเบฑเบเบ™เป‰เบญเบเบเปˆเบฝเบงเบเบฑเบšเบ‚เปเป‰เบ”เบตเปเบฅเบฐเบ‚เปเป‰เป€เบชเบ.

ะœะธะฝัƒัั‹

  1. เบเบณเบฅเบฑเบ‡เป‚เบซเบผเบ”เบšเบฑเบ™เบ—เบถเบเป€เบ›เบฑเบ™เบŠเบธเบ”เปƒเบซเบเปˆ. เปƒเบ™เบญเบตเบเบ”เป‰เบฒเบ™เบซเบ™เบถเปˆเบ‡, เบ™เบตเป‰เปเบกเปˆเบ™เบ„เบธเบ™เบชเบปเบกเบšเบฑเบ”, เปเบ•เปˆเบงเปˆเบฒเบ—เปˆเบฒเบ™เบเบฑเบ‡เบ•เป‰เบญเบ‡เปƒเบŠเป‰เบญเบปเบ‡เบ›เบฐเบเบญเบšเป€เบžเบตเปˆเบกเป€เบ•เบตเบกเป€เบžเบทเปˆเบญเบšเบฑเบ™เบ—เบถเบ buffer. เบงเบฝเบเบ‡เบฒเบ™เบ™เบตเป‰เบšเปเปˆเปเบกเปˆเบ™เบ‡เปˆเบฒเบเบ”เบฒเบเบชเบฐเป€เบซเบกเบต, เปเบ•เปˆเบเบฑเบ‡เปเบเป‰เป„เบ‚เป„เบ”เป‰. เปเบฅเบฐเบ‚เป‰เบญเบเบขเบฒเบเป€เบฎเบฑเบ”เปƒเบซเป‰เป‚เบ„เบ‡เบเบฒเบ™เบ‡เปˆเบฒเบเบ”เบฒเบ.
  2. เบšเบฒเบ‡เบซเบ™เป‰เบฒเบ—เบตเปˆเปเบ›เบเบ›เบฐเบซเบฅเบฒเบ”เบซเบผเบทเบฅเบฑเบเบชเบฐเบ™เบฐเปƒเบซเบกเปˆเบกเบฑเบเบˆเบฐเปเบ•เบเบขเบนเปˆเปƒเบ™เบชเบฐเบšเบฑเบšเปƒเบซเบกเปˆ. เบชเบดเปˆเบ‡โ€‹เบ”เบฑเปˆเบ‡เบเปˆเบฒเบงโ€‹เบชเป‰เบฒเบ‡โ€‹เบ„เบงเบฒเบกโ€‹เบงเบดเบ•เบปเบโ€‹เบเบฑเบ‡เบงเบปเบ™, เบซเบผเบธเบ”เบœเปˆเบญเบ™โ€‹เบ„เบงเบฒเบกโ€‹เบ›เบฒเบ–เบฐเปœเบฒโ€‹เบขเบฒเบโ€‹เบเบปเบโ€‹เบฅเบฐเบ”เบฑเบšโ€‹เป€เบ›เบฑเบ™โ€‹เบชเบฐเบšเบฑเบšโ€‹เปƒเปเปˆ. เบ•เบปเบงเบขเปˆเบฒเบ‡, เป€เบ„เบทเปˆเบญเบ‡เบˆเบฑเบเบ•เบฒเบ•เบฐเบฅเบฒเบ‡ Kafka เปเบกเปˆเบ™เบ„เบธเบ™เบชเบปเบกเบšเบฑเบ”เบ—เบตเปˆเป€เบ›เบฑเบ™เบ›เบฐเป‚เบซเบเบ”เบซเบผเบฒเบเบ—เบตเปˆเบŠเปˆเบงเบเปƒเบซเป‰เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบญเปˆเบฒเบ™เป€เบซเบ”เบเบฒเบ™เป‚เบ”เบเบเบปเบ‡เบˆเบฒเบ Kafka, เป‚เบ”เบเบšเปเปˆเบกเบตเบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบœเบนเป‰เบšเปเบฅเบดเป‚เบžเบ. เปเบ•เปˆเบเบฒเบ™เบ•เบฑเบ”เบชเบดเบ™เป‚เบ”เบเบˆเปเบฒเบ™เบงเบ™เบ‚เบญเบ‡เบšเบฑเบ™เบซเบฒเบเปˆเบฝเบงเบเบฑเบš Github, เบžเบงเบเป€เบฎเบปเบฒเบเบฑเบ‡ wary เบ‚เบญเบ‡เบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰เป€เบ„เบทเปˆเบญเบ‡เบˆเบฑเบเบ™เบตเป‰เปƒเบ™เบเบฒเบ™เบœเบฐเบฅเบดเบ”. เบขเปˆเบฒเบ‡เปƒเบ”เบเปเบ•เบฒเบก, เบ–เป‰เบฒเบ—เปˆเบฒเบ™เบšเปเปˆเป€เบฎเบฑเบ”เบเบฒเบ™เป€เบ„เบทเปˆเบญเบ™เป„เบซเบงเบขเปˆเบฒเบ‡เบเบฐเบ—เบฑเบ™เบซเบฑเบ™เป„เบ›เบ‚เป‰เบฒเบ‡เบ„เบฝเบ‡เปเบฅเบฐเบ™เปเบฒเปƒเบŠเป‰เบซเบ™เป‰เบฒเบ—เบตเปˆเบžเบทเป‰เบ™เบ–เบฒเบ™, เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เบกเบฑเบ™เบเปเปˆเป€เบฎเบฑเบ”เบงเบฝเบเบขเปˆเบฒเบ‡เบซเบกเบฑเป‰เบ™เบ„เบปเบ‡.

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

  1. เบšเปเปˆเบŠเป‰เบฒเบฅเบปเบ‡.
  2. เป€เบเบ™เป€เบ‚เบปเป‰เบฒเบ•เปเปˆเบฒ.
  3. เปเบซเบผเปˆเบ‡เป€เบ›เบตเบ”.
  4. เบŸเบฃเบต.
  5. เบชเบฒเบกเบฒเบ”เบ›เบฑเบšเบ‚เบฐเปœเบฒเบ”เป„เบ”เป‰ (เบเบฒเบ™เบ–เบญเบ”เปเบเบ/เบเบฒเบ™เบˆเบณเบฅเบญเบ‡เปเบšเบšเบ™เบญเบเบเปˆเบญเบ‡)
  6. เบฅเบงเบกเบขเบนเปˆเปƒเบ™เบ—เบฐเบšเบฝเบ™เบ‚เบญเบ‡เบŠเบญเบšเปเบงเบฅเบฑเบ”เป€เบŠเบเปเบ™เบฐเบ™เปเบฒเป‚เบ”เบเบเบฐเบŠเบงเบ‡เบเบฒเบ™เบชเบทเปˆเบชเบฒเบ™.
  7. เบกเบตเบเบฒเบ™เบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™เบขเปˆเบฒเบ‡เป€เบ›เบฑเบ™เบ—เบฒเบ‡เบเบฒเบ™เบˆเบฒเบ Yandex.

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

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