MKB áááááºážá¡áá»ááºá¡áááºáááºážááá¬ááœáŸááºááŒá¬ážáá±ážááŸá°ážáá¯á¶ážáá¡áá±ážááááºážáááºáá±á¬ááºááŸá¯áááºážááŒá±á¬ááºážáá»á¬ážá¡ááœááºáá»áœááºážáá»ááºááá¯ááºááá¯ááºááŸá¯á ááºáᬠAleksey Lizunová
ELK stack (ElasticSearchá Logstashá Kibana) áá¡ááŒá¬ážááœá±ážáá»ááºá
áá¬á¡ááŒá
áºá áá»áœááºá¯ááºááá¯á·ááẠááŸááºáááºážáá»á¬ážá¡ááœáẠáá±áá¬ááá¯ááŸá±á¬ááºááŸá¯á¡ááŒá
ẠClickHouse áá±áá¬áá±á·á
áºááᯠá¡áá¯á¶ážááŒá¯ááŒááºážá¡áá±á«áº áá¯áá±ááááŒá¯áá±áá«áááºá
á€áá±á¬ááºážáá«ážááœááºá áá»áœááºá¯ááºááá¯á·ááẠClickHouse áá±áá¬áá±á·á áºááᯠá¡áá¯á¶ážááŒá¯ááŒááºážá á¡ááœá±á·á¡ááŒá¯á¶ááŸáá·áº ááŸá±á·ááŒá±ážáá¯ááºáá±á¬ááºááŸá¯á ááá¬áááááºáá»á¬ážááᯠááœá±ážááœá±ážááá¯áá«áááºá ááááºáá»á¬ážááẠá¡áááºááŒá®ážá áá¬ááŒá áºááŒá±á¬ááºáž áá»ááºáá»ááºážáááááŒá¯ááá·áºáááºá
ááá¯á·áá±á¬áẠáá»áœááºá¯ááºááá¯á·áá
áá
áºá¡á¬áž áááºááá¯á·ááœá²á·á
ááºážáá¯á¶ááŸáá·áº áááºážááœáẠáááºááá·áºá¡á
áááºá¡ááá¯ááºážáá»á¬ážáá«áááºáááºááᯠá¡áá±ážá
áááºáá±á¬áºááŒáá«áááºá ááá¯áá° á€áá±áá¬áá±á·á
áºáá
áºáá¯áá¯á¶ážá¡ááŒá±á¬ááºáž á¡áááºážáááºááŒá±á¬ááŒááá¯ááŒá®áž áááºážááᯠá¡áááºááŒá±á¬áá·áº ááááá¬ážááá·áºááááºážá ClickHouse áá±áá¬áá±á·á
áºááẠYandex á០á
áœááºážáá±á¬ááºáááºááŒáá·áº ááœá²ááŒááºážá
áááºááŒá¬ááá·áºáá±á¬áºáá¶áá±áá¬áá±á·á
áºááŒá
áºáááºá áááºážááᯠYandex áááºáá±á¬ááºááŸá¯áá»á¬ážááœááºá¡áá¯á¶ážááŒá¯áááºá á¡á
ááá¯ááºážááœáẠáááºážááẠYandex.Metrica á¡ááœáẠá¡ááááá±áá¬ááá¯ááŸá±á¬ááºááŸá¯ááŒá
áºáááºá Open-source á
áá
áºá á¡ááá²á·á áá±á¬á·ááºáá²áá±ážáá¬ážáá°áá¡ááŒááºá¡áá áááºážááá¯á·ááẠá¡á¶á·ááááºážááŒá®ážáá¬ážáá±á¬áá±áá¬ááŸááá±á¬ááŒá±á¬áá·áº áááºážááᯠáááºááá¯á·á¡áá±á¬ááºá¡áááºáá±á¬áºáááºááᯠáá»áœááºá¯ááºá¡ááŒá²áááºážááœá±ážáá±á¬áá±áá«áááºá Metrica á user interface ááá¯ááºááá¯ááºá á¡ááœááºááŒá±á¬ááºážááœááºááŒááºááœááºááŸáá·áº ááŒááºáááºáááºá á€áá±áá¬áá±á·á
áºááᯠááááá¯á¶ážáááá°ááœáẠá¡áááºá¡ááŒááºááŸá¬ âá¡ááºážá áá±á¬ááºáá¯á¶ážáá±á¬á·! áá°ááœá±á¡ááœáẠáá¯ááºáá¬ážáá¬á áááºáááºááŒááºážáá¯ááºáááºážá
ááºááŸá
áááºááŒá®áž áá±á¬ááºážááá¯áá»ááºáá»á¬ážáá±ážááá¯á·ááŒááºážááŒáá·áº á¡áá¯á¶ážáááºáááºá
á€áá±áá¬áá±á·á áºááœáẠáááºáá±á¬ááºááŸá¯á¡ááá·áºááẠá¡ááœááºáááºážáá«áááºá áá»ááºážáá»áŸáá»áœááºážáá»ááºáá±á¬ developer áááºáá»áŸáẠá€áá±áá¬áá±á·á áºááᯠáááá áºá¡áááºážáááºá¡ááœááºáž ááá·áºááœááºážááá¯ááºááŒá®áž áááºážááᯠá áááºá¡áá¯á¶ážááŒá¯ááá¯ááºáá«áááºá á¡á¬ážáá¯á¶ážááŸááºážááŸááºážáááºážáááºážá¡áá¯ááºáá¯ááºáá«áááºá Linux ááá¯á¡áá áºáá±á¬áá°áá»á¬ážáááºáá»áŸááºáááºáááºááŸá¯ááá¯áá»ááºááŒááºá áœá¬ááá¯ááºááœááºááá¯ááºááŒá®ážá¡ááá¯ážááŸááºážáá¯á¶ážáá¯ááºáá±á¬ááºááŸá¯áá»á¬ážááá¯áá¯ááºáá±á¬ááºááá¯ááºáááºá á¡áááºá á¡á á±á¬ááá¯ááºážááœáẠBig Data, Hadoop, Google BigTable, HDFS áá°áá±á¬ á áá¬ážáá¯á¶ážáá»á¬ážááŒáá·áº áá¬ááẠdeveloper áá áºáŠážááẠá¡áá»áá¯á·áá±á¬ terabytes, petabytes áá»á¬ážá¡ááŒá±á¬ááºáž á¡áá°á¡ááá»á¬ážááŸááá²á·áá«áá á¡áá»áá¯á·áá±á¬áá°á áœááºážáá±á¬ááºážáá»á¬ážááẠá€á áá áºáá»á¬ážá¡ááœáẠáááºáááºáá»á¬ážááŸáá·áº ááœá¶á·ááŒáá¯ážááá¯ážáááºááŸá¯ááœáẠáá«áááºáá±ááŒá±á¬ááºážá ááá¯á·áá±á¬áẠClickHouse ááœááºážáá¬ážáá¬áá±á¬á¡áá«á áá±áá¬áá±á·á áºá áá»áœááºá¯ááºááá¯á·ááœáẠááááºá áá¯ááºáá±á¬ááºááááá±á¬ á¡áá¯ááºáá»á¬ážááᯠáááºááŒá±ááŸááºážááá¯ááºááá·áº ááá¯ážááŸááºážááŒá®áž áá¬ážáááºááá¯ááºáá±á¬ áááááá¬áá áºáá¯ááŸááááºá áááºáááºááẠáá»ááºážáá»áŸá¡á¬ážááŒáá·áº áá«ážáááá áºááá·áºáᬠááŒá¬áá«áááºá ááá¯ááá¯áááºááŸá¬á á¥ááá¬á MySql áá²á·ááá¯á·áá±á¬ áá±áá¬áá±á·á áºáá áºáá¯ááᯠáá»áœááºá¯ááºááá¯á· áááŸááá¬ážáá±á¬áºáááºáž áá®áá®áá¶áá±á«ááºážáá»á¬ážá áœá¬áá±á¬ ááŸááºáááºážáá»á¬ážááᯠááááºážáááºážáááºá¡ááœááºáᬠááŒá áºáááºá SQL áá¬áá¬á áá¬ážááŒáá·áº á¡áá»áá¯á·áá±á¬ super-archiver á áá°ááœá±á ááŒáá¯ááºáá¬ážáááºáááºááœá± á¡ááºáá¬ážáááá¯áá«áá²á
áá»áœááºá¯ááºááá¯á·á áá áºáá¯ááºááŒááºážá áá áºá¡ááŒá±á¬ááºáž
á¡áá»ááºá¡áááºá á¯áá±á¬ááºážáááºá¡ááœááºá á á¶áá±á¬áºáááºáááºá¡ááºááá®áá±ážááŸááºážáá»á¬ážá IIS ááŸááºáááºážááá¯ááºáá»á¬ážááᯠá¡áá¯á¶ážááŒá¯ááẠ(áá»áœááºá¯ááºááá¯á·ááẠáá±á¬áá±á¬áááºááœáẠá¡ááá®áá±ážááŸááºážááŸááºáááºážáá»á¬ážááᯠááœá²ááŒááºážá áááºááŒá¬áá±áá±á¬áºáááºáž ááŸá±á·ááŒá±ážá¡ááá·áºááœáẠá¡ááááááºážááá¯ááºááŸá¬ IIS ááŸááºáááºážáá»á¬ážááᯠá á¯áá±á¬ááºážáááºááŒá áºáááº)á
á¡ááŒá±á¬ááºážá¡áá»áá¯ážáá»áá¯ážááŒá±á¬áá·áºá áá»áœááºá¯ááºááá¯á·ááẠELK stack á¡á¬áž áá¯á¶ážáá¯á¶ážáá»á¬ážáá»á¬áž áá áœáá·áºááœáŸááºááá¯ááºáá²á·áá²á áááºážááá¯á·ááẠáááºážááá¯á·ááᯠáá±á¬ááºážááœááºá áœá¬áááºáá±ááŒáá²á·ááŒá®áž á¡ááœááºáá¯á¶ááŒááºá áááºáá»áááŒá®áž ááŒáá¯áááºááá·áºááŸááºážááá¯ááºáá±á¬ áá¯ááºáá±á¬ááºááá¯ááºááá·áº LogStash ááŸáá·áº Filebeat á¡á áááºá¡ááá¯ááºážáá»á¬ážááᯠáááºáááºá¡áá¯á¶ážááŒá¯áá±áá«áááºá
áá±áá°áá»á¡á¬ážááŒáá·áº áá áºáá¯ááºááŒááºážá¡á á®á¡á ááºááᯠá¡á±á¬ááºáá«áá¯á¶ááœáẠááŒáá¬ážáááºá
ClickHouse áá±áá¬áá±á·á
áºááá¯á· áá±áá¬áá±ážáá¬ážááŒááºážá á¡ááºá¹áá«áááºááŸá¬ á¡á
á¯á¡áá±ážááŒá®ážáá»á¬ážááœáẠááŸááºáááºážáá»á¬ážááᯠáááŒá¬áá (áá
áºá
áá¹ááá·áºáá»áŸáẠáá
áºááŒáááº) ááá·áºááœááºážááŸá¯ áááºážáá«ážáááºá á€áááºááŸá¬ ClickHouse áá±áá¬áá±á·á
áºááŸáá·áº ááááá¯á¶ážááœá±á·ááŒá¯á¶ááá±á¬á¡áá«ááœáẠáááºááŒá¯á¶ááœá±á·ááá±á¬ âááŒá¿áá¬á¡áá»á¬ážáá¯á¶ážâ á¡ááá¯ááºážááŒá
áºáááº- áááºááŸá¬ážáá«áááº- á¡á
á®á¡á
ááºááẠá¡áááºážáááºááá¯ááá¯ááŸá¯ááºááœá±ážáá¬áááºá
ClickHouse áá²ááá¯á· áá±áá¬ááᯠááá¯ááºááá¯ááºááá·áºááœááºážááá·áº LogStash á¡ááœáẠááááºá¡ááºááẠá€áá±áá¬ááœáẠáá»á¬ážá
áœá¬ á¡áá±á¬ááºá¡áá° ááŒá¯áá«áááºá á€á¡á
áááºá¡ááá¯ááºážááᯠáá±áá¬áá±á·á
áºááá¯ááºááá¯ááºááŸáá·áº áá°áá®áá±á¬áá¬áá¬ááœáẠá¡áá¯á¶ážááŒá¯áá¬ážáááºá ááá¯á·ááŒá±á¬áá·áºá áá±áá°áá»á¡á¬ážááŒáá·áºááŒá±á¬ááá»áŸááºá áááºážááá¯ááŒá¯áá¯ááºááẠá¡ááŒá¶ááŒá¯áá¬ážááŒááºážááá¯ááºáá±á¬áºáááºážá áááºážááá¯áá°áá®áá±á¬áá¬áá¬áá±á«áºááœááºá¡áá¯á¶ážááŒá¯áá±áá»áááºááœáẠáá®ážááŒá¬ážáá¬áá¬áá»á¬ážááá¯ááºáá¯ááºá
á±áááºá¡ááœáẠáááºááœá±á·áá»áá±á¬ááŸá¯áá±á¬áá·áºááŸáá±áááŒá
áºáááºá áá±áá¬áá±á·á
áºááŸáá·áº áááºááá·áº áá»áá¯á·ááœááºážáá»áẠááá¯á·ááá¯áẠá¡áááºážá¡ááŒá
áºááá¯ááºáᬠááœá²ááœá²ááŸá¯áá»á¬ážááᯠáá»áœááºá¯ááºááá¯á· áááááŒá¯áááá²á·áá«ááááºážá ááá¯á·á¡ááŒááºá ááááºá¡ááºááœáẠá¡ááŸá¬ážá¡ááœááºážáá»á¬ážááŸááá«á ááŒááºáááºááŒáá¯ážá
á¬ážááá·áº ááá¹ááá¬ážááŸáááŒá±á¬ááºáž áááááŒá¯ááá·áºáááºá á¡ááŸá¬ážá¡ááœááºážáá»á¬ážááŸááá±á¬á¡áá«ááœááºá plugin ááẠááá·áºááœááºážááááá±á¬ áá±áá¬á¡á
á¯á¡áá±ážáá
áºáá¯ááá¯á· disk ááá¯á· á
á¬áá±ážááẠ(ááá¯ááºáá±á¬áºáááºááẠá¡áááºááŒá±áááº- áááºážááŒááºááŒá®ážáá±á¬ááºá áááºááẠclickhouse-client ááá¯á¡áá¯á¶ážááŒá¯á ááŒá¯ááŒááºáá¬ážáá±á¬á¡áá¯ááºááᯠá¡ááœááºááá°ááá·áºááœááºážááá¯ááºáááº)á
á¡á á®á¡á á¥áºááœááºá¡áá¯á¶ážááŒá¯ááá·áºáá±á¬á·ááºáá²ááºáá á¬áááºážá¡ááŒáá·áºá¡á á¯á¶ááᯠááá¬ážááœááºáá±á¬áºááŒáá¬ážáááº-
á¡áá¯á¶ážááŒá¯áá¬ážáá±á¬áá±á¬á·ááºáá²áá»á¬ážá á¬áááºáž
áá¬ááá»á±á¬ááá¯
áá±á«áºááŒáá»ááº
ááŒáá·áºáá±ááá·áºááº
NGINX
ááááºáááºážáá»á¬ážá០áááºáá±á¬ááºááœáá·áºááᯠááá·áºáááºáááºááŸáá·áº ááœáá·áºááŒá¯áá»ááºááᯠá á¯á ááºážááẠááŒá±á¬ááºážááŒááº-ááá±á¬ááºá á®
ááᯠá¡á á®á¡á ááºááœáẠá¡áá¯á¶ážáááŒá¯áá«á
FileBeat
ááá¯ááºááŸááºáááºážáá»á¬ážááœáŸá²ááŒá±á¬ááºážááŒááºážá
logstash
ááŸááºáááºážá á¯áá±á¬ááºážáá°á
FileBeat á០ááŸááºáááºážáá»á¬áž á á¯áá±á¬ááºážáááºááŸáá·áº RabbitMQ áááºážá á®á០ááŸááºáááºážáá»á¬áž á á¯áá±á¬ááºážááẠ(DMZ á¡ááœááºážááŸá áá¬áá¬áá»á¬ážá¡ááœááº) á¡áá¯á¶ážááŒá¯áááºá
Logstash-output-clickhouse
ClickHouse áá±áá¬áá±á·á áºááá¯á· ááŸááºáááºážáá»á¬áž ááœáŸá²ááŒá±á¬ááºážááŒááºážá¡ááœáẠLoagstash ááááºá¡ááº
/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
á¡áááºááá¯ááŸáááºáá«
ááŸááºáááºážááá¯ááŸá±á¬ááºááŸá¯
ááŸááºáá»ááºá 2018 áá¯ááŸá ẠááŒáá¯ááºáá០á áááºá RHEL á¡ááœáẠ"áá¯á¶ááŸááº" rpm áááºáá±á¬ááºááŸá¯áá»á¬ážááẠYandex repository ááœáẠáá±á«áºáá¬áá±á¬ááŒá±á¬áá·áº áááºážááá¯á·ááᯠá¡áá¯á¶ážááŒá¯ááẠááŒáá¯ážá á¬ážááá¯ááºáá«áááºá áááºáááºáá»áááºááœáẠáá»áœááºá¯ááºááá¯á·ááẠAltinity ááŸáááºáá±á¬ááºáá¬ážáá±á¬ áááºáá±á·ááºá»áá»á¬ážááᯠá¡áá¯á¶ážááŒá¯áá±áá«áááºá
Grafana
ááŸááºáááºážáá¯á¶áá±á¬áºááŒááºážá áááºááŸáºáá¯ááºáá»á¬ážááᯠá áá áºááá·áºááœááºážááŒááºážá
Redhat & Centos (64 Bit) - áá±á¬ááºáá¯á¶ážáá¬ážááŸááºáž
Grafana 4.6+ á¡ááœáẠClickHouse áá±áá¬á¡áááºážá¡ááŒá áº
ClickHouse áá±áá¬á¡áááºážá¡ááŒá áºáá«ááŸááá±á¬ Grafana á¡ááœáẠááááºá¡ááº
logstash
FileBeat á០RabbitMQ áááºážá á®ááẠrouter ááᯠá á¬áááºážááœááºážáá«á
ááŸááºáá»ááºá áá¶ááá±á¬ááºážá áœá¬áá²á FileBeat ááẠRabbitMQ ááá¯á· ááá¯ááºááá¯áẠoutput áááŸááá±á¬ááŒá±á¬áá·áº Logstash áá¯á¶á á¶ááŒáá·áº ááŒá¬ážáá¶ááá·áºááºáá áºáᯠááá¯á¡ááºáááº
áá¯áẠMQ
áááºáá±á·ááºá»áááºážá á®á áááºážááẠDMZ ááŸá ááŸááºáááºážááŒá¬ážáá¶ááŒá áºáááºá
Erlang Runtime (RabbitMQ á¡ááœáẠááá¯á¡ááºáááº)
Erlang runtime RabbitMQ á¡áá¯ááºáá¯ááºááẠááá¯á¡ááºáááºá
ClickHouse áá±áá¬áá±á·á áºááŸáá·áº áá¬áá¬ááœá²á·á ááºážáá¯á¶á¡á¬áž á¡á±á¬ááºáá«ááá¬ážááœáẠáá±á¬áºááŒáá¬ážáá«áááºá
áá¬ááá»á±á¬ááá¯
á¡ááá¯áž
ááœá±á¬ááá¯
configuration áá»á¬áž
HDD: 40GB
áááº: 8GB
áááá¯áááºáá¬- Core 2 2Ghz
ClickHouse áá±áá¬áá±á·á
áºááá¯áááºáááºáááºá¡ááœáẠá¡ááŒá¶ááŒá¯áá»ááºáá»á¬ážááᯠá¡á¬áá¯á¶á
áá¯ááºááẠááá¯á¡ááºááẠ(
á¡ááœá±ááœá±á áá áºáá±á¬á·ááºáá²
OS- Red Hat Enterprise Linux áá¬áᬠ(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;
áá»áœááºá¯ááºááá¯á·ááẠáá¯á¶áá± ááá¯ááºážááŒá¬ážááŒááºáž (áá¡ááá¯ááº) ááŸáá·áº á¡ááœáŸááºážá¡áá±ážá áááºááᯠá¡áá¯á¶ážááŒá¯áá«áááºá á¡ááœááºáá»á¬ážá¡á¬ážáá¯á¶ážááẠhttp áá±á¬ááºážááá¯áá»ááºáá»á¬ážááᯠááŸááºáááºážáááºáááºá¡ááœáẠIIS ááŸááºáááºážááá·áºááœááºážááŸá¯áá»á¬ážááŸáá·áº áááºááœá±á·á¡á¬ážááŒáá·áº ááá¯ááºáá®áá«áááºá áá®ážááŒá¬ážá¡á¬ážááŒáá·áºá utm-tags áá»á¬ážááᯠááááºážáááºážáááºá¡ááœáẠáá®ážááŒá¬ážá¡ááœááºáá»á¬ážááŸáááŒá±á¬ááºáž áá»áœááºá¯ááºááá¯á·áááááŒá¯áááá«ááẠ(áááºážááá¯á·ááᯠááá¬ážáá²ááá¯á· ááá·áºááœááºážááá·áºá¡ááá·áºááœáẠááœá²ááŒááºážá áááºááŒá¬áá¬ážáááº)á
ááá¯á·á¡ááŒááºá á áá áºáá»á¬ážá á¡á áááºá¡ááá¯ááºážáá»á¬ážá áá¬áá¬áá»á¬ážá¡ááŒá±á¬ááºáž á¡áá»ááºá¡áááºáá»á¬ážááᯠááááºážáááºážáááºá¡ááœáẠá áá áºáááºáááºá¡áá»á¬ážá¡ááŒá¬ážááᯠááá¬ážááœáẠááá·áºááœááºážáá¬ážáááºá á€á¡ááœááºáá»á¬ážá¡ááŒá±á¬ááºáž áá±á¬áºááŒáá»ááºá¡ááœáẠá¡á±á¬ááºáá«ááá¬ážááᯠááŒáá·áºáá«á ááá¬ážáá áºáá¯ááœááºá á áá áºáá»á¬ážá áœá¬á¡ááœáẠááŸááºáááºážáá»á¬ážááᯠááááºážáááºážáá«áááºá
áá¬ááá»á±á¬ááá¯
áá±á«áºááŒáá»ááº
ááá°áá¬
fld_app_name
á¡ááá®áá±ážááŸááºáž/á
áá
áºá¡áááº
ááŸááºáááºáá±á¬áááºááá¯ážáá»á¬áž-
- site1.domain.com ááŒááºáááá¯áẠá
- site2.domain.com ááŒááºáááá¯áẠá
- internal-site1.domain.local á¡ááœááºážááá¯ááºážááá¯áẠá
site1.domain.com
fld_app_module
á
áá
Ạmodule
ááŸááºáááºáá±á¬áááºááá¯ážáá»á¬áž-
- ááẠ- áááºááá¯ááº
- svc - áááºááá¯áẠáááºáá±á¬ááºááŸá¯
- intgr - áá±á«ááºážá ááºážááŒááºáž áááºáááºáá±á¬ááºááŸá¯
- ááᯠ- á¡á¯ááºáá»á¯ááºáá±ážááŸá°áž (BackOffice)
áááº
fld_website_name
IIS ááœááºááá¯ááºá¡áááº
á áá áºáá»á¬ážá áœá¬ááᯠáá¬áá¬áá áºáá¯ááœááºá ááá¯á·ááá¯áẠá áá áºáá áºáá¯á á á¶ááá°áá¬áá»á¬ážá áœá¬ááá¯ááẠá¡áá¯á¶ážáá»ááá¯ááºáááºá
web áááºá
fld_server_name
áá¬áá¬á¡áááº
web1.domain.com
fld_log_file_name
áá¬áá¬ááŸá ááŸááºáááºážááá¯ááºááá¯á· áááºážááŒá±á¬ááºáž
C:inetpublogsLogFiles
W3SVC1u_ex190711.log
áááºážááẠááá·áºá¡á¬áž Grafana ááœáẠááááºáá áºáá»á¬ážááᯠáááá±á¬ááºá áœá¬áááºáá±á¬ááºááá¯ááºá á±áá«áááºá á¥ááá¬á á áá áºáá áºáá¯á ááŸá±á·áá¯á¶ážá០áá±á¬ááºážááá¯áá»ááºáá»á¬ážááᯠááŒáá·áºáá«á áááºážááẠ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)á á¡ááŒá®ážáá¯ááºááœáẠá¡áá¯ááºáá¯ááºááẠ(ááá¯ááá¯áááºááŸá¬ áá±á«ááºážááá·áºáá¬ážáá±á¬ ááŸááºáááºážáá»á¬ážááᯠááá¯ááºááá¯á· ááœáŸá²ááŒá±á¬ááºážáá±ážáááº)á ááá¯á·áá±á¬áº ááá¯ááºáá áºáá¯áá¯á¶ážááᯠááœáŸá²ááŒá±á¬ááºážááẠáá®ážááŒá¬ážá á® á á®á ááºáá¬ážááá¯ááºáááºá ááááºááá»á¬ážá០áá±áá¬áá±á«ááºážáá¯ááºáá¯ááºááá·áºá¡áá« áááºážááẠá¡áá¯á¶ážáááºáááºá ááŸááºáááºážááá¯ááºááᯠááá¯áá«áá áºáá¯ááœáẠáá¬ážááá¯ááºáá¯á¶ááŒáá·áº áááºážááẠáá¯á¶ážáá¯á¶ážáááºááœá¬ážáááºááŒá áºáááºá
áááºáá±á¬ááºááŸá¯ááᯠáááºááá¯ááºáá±á¬á¡áá«á áá±áá¬ááᯠááá¯ááŸá±á¬ááºáááºážááá¯á· áááºáá¶ááœáŸá²ááŒá±á¬ááºážáá±ážáá±á¬á·ááẠááá¯ááºáá«á
á¥ááᬠááœá²á·á ááºážááŸá¯áá¯á¶á á¶ááẠá€áá²á·ááá¯á· ááŒá áºáááº-
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 áááºážá á®ááŸá¯ááŸáááá·áº) á០ááŸááºáááºážáááºáá±á¬ááºááŸá¯áá»á¬ážááᯠáááºáá¶ááá°áááºá ááœá²ááŒááºážá áááºááŒá¬ááŒááºážááŸáá·áº ClickHouse áá±áá¬áá±á·á áºáá²ááá¯á· á¡á á¯ááá¯ááºááá·áºááœááºážááŒááºážááá¯á·ááᯠáá®ááá¯ááºážáá¯ááºáá¬ážáááºá
ClickHouse ááá¯á·ááá·áºááœááºážáááºá¡ááœáẠ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"
}
}
}
ááá¯ááºááá¯ááºážáá»á¬áž.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 ááŸááºáááºážáá»á¬ážá apache ááŸáá·áº nginx ááŸááºáááºážáá»á¬ážáá²á·ááá¯á· ááá°áá®áá±á¬ áá±á¬áºáááºáá»á¬ážá¡ááœáẠááá·áºáááºáá»ááºáá»á¬áž á¡á¬ážáá¯á¶ážááẠáááºáá°áá«áááºá á¥ááá¬á¡á¬ážááŒáá·áºá á¡ááŸá¬ážá¡ááœááºážáá»á¬ážá ááááºážá¡áá»ááºá¡ááẠáááºáá±á·áá»áºáá»á¬ážá ááááá±ážáá»ááºáá»á¬ážááᯠááŸááºáááºážáááºáá¬ážááá·áº á¡ááá®áá±ážááŸááºážááŸááºáááºážáá»á¬ážá¡ááœááºá ááá·áºáá»á±á¬áºáá±á¬ááœá²á·á ááºážáá¯á¶ááŸáá·áº áá®ážááŒá¬ážááá¬ážáá áºáá¯ááᯠáá±ážááẠ(áááºááŸá áá®ááá¯ááºážá¡ááá·áºááœááº)á
ááá¬ážáá
áºáá¯ááᯠáá®ááá¯ááºážáá±ážááœá²áá±á¬á¡áá«ááœáẠá¡ááááá±á¬á·ááᯠáá¯á¶ážááŒááºááẠá¡ááœááºá¡áá±ážááŒá®ážááẠ(áá±áá¬ááááºážáááºážá
ááºá¡ááœááºáž á
á®á
á¥áºáá¬ážááá·áº)á áá±áá¬áá»á¯á¶á·ááŸá¯á¡ááá·áºááŸáá·áº áá±ážááŒááºážááŸá¯á¡ááŒááºááŸá¯ááºážááẠáááºážá¡áá±á«áº áá°áááºáááºá áá»áœááºá¯ááºááá¯á·áá¥ááá¬ááœáẠá¡áááá¡áá»ááºááŸá¬
ááŸá¬áá°áá« (fld_app_nameá fld_app_moduleá logdatetime)
ááá¯ááá¯áááºááŸá¬á á
áá
áºáá¡áááºá á
áá
áºá¡á
áááºá¡ááá¯ááºážá¡áááºááŸáá·áº ááœá²áá±á·á
áœá²ááá¯á·ááŒá
áºáááºá á¡á
ááá¯ááºážááŸá¬áá±á¬á· ááœá²áá»ááºážáááá·áºáááºá á¡áááºáá±á¬ááºáá¬áááºá áááºážááᯠáá±á¬ááºáá¯á¶ážáá±áá¬ááá¯á· ááœáŸá±á·ááŒá®ážáá±á¬ááºá áá±ážááŒááºážáá»ááºáá»á¬ážááẠááŸá
áºáááá¯ááá¯ááŒááºáááºáá¬áááºá áááºááá±á¬á·ááá¯ááŒá±á¬ááºážáá²ááŒááºážááẠClickHouse áá
áºááºáá±á«áºááŸá áá±áá¬ááᯠááŒááºáááºá
á®á
á
áºáááºá¡ááœáẠááá¬ážááᯠááŒááºáááºáááºáá®ážááŒááºážááŸáá·áº áá±áá¬ááᯠááŒááºáááºá
áááºááŒááºáž ááá¯á¡ááºáááºááŒá
áºáááºá áááºážááẠáá±ážáá¶áá±á¬áá¯ááºáá±á¬ááºáá»ááºááŒá
áºáá±á¬ááŒá±á¬áá·áº á¡áá»áá¯ážá¡á
á¬ážááœá²áá±á¬á·ááœáẠáááºááá·áºá¡áá¬ááá·áºááœááºážááá·áºáááºááᯠáá»á¬ážá
áœá¬á
ááºážá
á¬ážááẠááá·áºáá»á±á¬áºáá«áááºá
LowCardinality áá±áá¬á¡áá»áá¯ážá¡á á¬ážááẠáááŒá¬áá±ážáá®á áá¬ážááŸááºážáá»á¬ážááœáẠá¡áá±á¬áºáá±áž áá±á«áºáá¬áááºááᯠáááááŒá¯ááá·áºáááºá áááºážááá¯á¡áá¯á¶ážááŒá¯ááá·áºá¡áá«á áá±ážáááºáá±á¬ cardinality (ááœá±ážáá»ááºá áá¬á¡áááºážáááº) ááŸáááá·áºá¡ááœááºáá»á¬ážá¡ááœáẠáá»á¯á¶á·áá¬ážáá±á¬áá±áá¬á¡ááœááºá¡á á¬ážááᯠáááááá¬áá¬áá»áŸá±á¬á·áá»áááºá
áá¬ážááŸááºáž 19.6 ááᯠáááºááŸáá¡áá¯á¶ážááŒá¯áá±ááŒá®áž áá±á¬ááºáá¯á¶ážáá¬ážááŸááºážááá¯á· á¡ááºááááºáá¯ááºááẠáá»áœááºá¯ááºááá¯á· á á®á ááºáá¬ážáá«áááºá áááºážááá¯á·ááœáẠááá¯ááºáá»á±á¬áá®ááœá±ááŸááá±á¬ Granularityá Skipping indices ááŸáá·áº DoubleDelta codec áá²á·ááá¯á·áá±á¬ á¡á¶á·ááŒááœááºá¡ááºá¹áá«áááºáá»á¬ážááŸááááºá
áá¯á¶ááŸááºá¡á¬ážááŒáá·áºá ááá·áºááœááºážá ááºá¡ááœááºážá ááŸááºáááºážá¡ááá·áºááᯠááŒá±áá¬áá¶ááẠáááºááŸááºáá¬ážáááºá ááŸááºáááºážáá»á¬ážááᯠááŸáá·áºáááºááŒá®áž ááááºážáááºážáá¬ážáá±á¬áºáááºáž áá áºáá»áááºáááºážááœáẠáááºážááá¯á·ááẠáá áºáá«ááá¯ááºá¡áá áá»á²á·ááœááºáááºá áááá¯á¡ááºáá«áá ááááá±ážáá»ááºá¡ááá·áºááᯠáááºáááºááŸááºááá¯ááºááŒá®ážá ááŸááºáááºážáá¡ááœááºá¡á á¬ážááᯠáááááá¬áᬠáá»áŸá±á¬á·áá»ááá¯ááºáááºá ááŸááºáááºážáááºáááºááᯠconfig.xml ááá¯ááºááœáẠáááºááŸááºáá¬ážáááº-
<!-- Possible levels: https://github.com/pocoproject/poco/blob/develop/Foundation/include/Poco/Logger. h#L105 -->
<level>warning</level>
á¡áá¯á¶ážáááºáá±á¬ command á¡áá»áá¯á·
ÐПÑкПлÑÐºÑ ÐŸÑОгОМалÑÐœÑе пакеÑÑ ÑÑÑаМПвкО ÑПбОÑаÑÑÑÑ Ð¿ÐŸ 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á FileBeat á០RabbitMQ áááºážá á®ááẠrouter ááᯠá á¬áááºážááœááºážáá«á
á€á¡á áááºá¡ááá¯ááºážááᯠFileBeat á០RabbitMQ áááºážá á®ááá¯á· áá¬ááá·áº ááŸááºáááºážáá»á¬ážááᯠáááºážááŒá±á¬ááºážáá±ážáááºá¡ááœáẠá¡áá¯á¶ážááŒá¯áááºá á€áá±áá¬ááœáẠá¡áá»ááºááŸá áºáá»ááºááŸááááºá
- áá¶ááá±á¬ááºážá áœá¬ááŒáá·áºá FileBeat ááœáẠRabbitMQ ááá¯á· ááá¯ááºááá¯ááºáá±ážááẠoutput plugin áááŸááá«á áááºážááá¯á·á github áá±á«áºááŸá ááŒá¿áá¬ááᯠá¡áá²ááŒááºáᬠááá¯ááá¯á·áá±á¬ áá¯ááºáá±á¬ááºááá¯ááºá áœááºážááᯠá¡áá±á¬ááºá¡áááºáá±á¬áºááẠá¡á á®á¡á ááºáááŸááá«á Kafka á¡ááœáẠááááºá¡ááºáá áºáᯠááŸááá±á¬áºáááºáž á¡ááŒá±á¬ááºážáá áºáá¯áá¯ááŒá±á¬áá·áº áááºážááᯠá¡áááºááœáẠá¡áá¯á¶ážááŒá¯ááááá«á
- 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 áááºáá±á·ááºá»áááºážá á®
á€á¡á áááºá¡ááá¯ááºážááᯠDMZ ááœáẠááŒá¬ážáá¶ááŸááºáááºážááá·áºááœááºážááŸá¯áá»á¬ážá¡ááœáẠá¡áá¯á¶ážááŒá¯áááºá ááŸááºáááºážáááºááŒááºážá¡á¬áž Filebeat â LogStash á¡á á¯á¡áá±ážááŒáá·áº ááŒá¯áá¯ááºáá«áááºá á á¬áááºááŒááºážááᯠLogStash ááŸáááá·áº DMZ ááŒááºáááŸáá¯ááºáá±á¬ááºáááºá RabboitMQ ááŸáááá·áºáááºáááºáá±á¬á¡áá«á áá áºá áá¹ááá·áºáá»áŸáẠáááºáá±á·ááºá» áááá ááá·áºááᯠáá¯ááºáá±á¬ááºáááºá
áááºáá±á·áá»áºáááºážááŒá±á¬ááºážááᯠá áá áºá¡áááºááŒáá·áº ááŒááºáááºáááºááŸááºáá¬ážáááºá ááá¯ááá¯áááºááŸá¬ 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"
Grafana áááºááŸáºáá¯ááºáá»á¬áž
á á±á¬áá·áºááŒáá·áºáá±ážáá±áá¬ááᯠááŒááºáá±á¬ááºááẠá€á¡á áááºá¡ááá¯ááºážááᯠá¡áá¯á¶ážááŒá¯áááºá á€ááá á¹á ááœááºá áááºááẠGrafana 4.6+ ááááºá¡ááºá¡ááœáẠClickHouse áá±áá¬á¡áááºážá¡ááŒá áºááᯠááá·áºááœááºážááẠááá¯á¡ááºáááºá áááºááŸáºáá¯ááºáá±á«áºááŸá SQL filter áá»á¬áž áá¯ááºáá±á¬ááºááŒááºážá á áœááºážáá±á¬ááºáááºááᯠááŒáŸáá·áºáááºáááºá¡ááœáẠáááºážááᯠá¡áááºážááẠááŒááºáááºááááºááŒá áºáá«áááºá
á¥ááá¬á¡á¬ážááŒáá·áºá áá»áœááºá¯ááºááá¯á·ááẠááááºážááŸááºáá»á¬ážááᯠá¡áá¯á¶ážááŒá¯ááŒá®áž áááºážááá¯á·ááᯠfilter á¡ááœááºááœáẠááááºááŸááºáá«áá áá±á¬ááºá WHERE ( uriStem = » AND uriStem != » ). á€ááá á¹á ááœááºá ClickHouse ááẠuriStem áá±á¬áºáá¶ááá¯áááºáááá·áºáááºá áá±áá°áá»á¡á¬ážááŒáá·áºá áá»áœááºá¯ááºááá¯á·ááẠááá°áá®áá±á¬ááœá±ážáá»ááºá áá¬áá»á¬ážááᯠááŒáá¯ážá á¬ážáá²á·ááŒá®áž áá±á¬ááºáá¯á¶ážááœáẠááááºá¡áẠ($valueIfEmpty macro) ááᯠááŒááºáááºááŒá®áž áá±á¬áºáá¶ááá¯ááºááŸáá¯ááºááᯠááá±á¬áºááŒáá² áááºááá¯ážá¡ááœááºáá áºáá¯ááœáẠ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 áá²á· servers á¡áá»á¬ážá¡ááŒá¬ážááᯠáá°ážáá°ááŒááºáž) á¡á á®á¡á ááºá ááá¯ááŸá¯ááºááœá±ážáá¬áá«áááá·áºáááºá áá«áá±ááá·áº ááááá¯á¶áž á¡áááºá¡ááŒááºááœá±ááŸá¬áá±á¬á· áá®áá±áá¬áá±á·á áºáá²á· á¡áá¯ááºáá¯ááºááᬠá¡áááºážáá»á±á¬áºááá¯á·áá±á¬ááºážáá«áááºá áá¯ááºáá¯ááºááᯠ"áá°áá»á¬ážá¡ááœááº" ááŒá¯áá¯ááºáá¬ážáááºááá¯ááœá±á·ááŒááºááá¯ááºáááºá
ElasticSearch ááŸáá·áº ááŸáá¯ááºážááŸááºáá«áá ááŸááºáááºážáá»á¬áž ááááºážáááºážááŒááºážááŸáá·áº á á®áá¶áá±á¬ááºááœááºááŒááºáž áá¯ááºáá»á ááááºááᯠáá«ážáá០áááºáá¡áá áá»áŸá±á¬á·áá»ááá¯ááºáááºáᯠááá·áºááŸááºážáá¬ážáááºá áá áºáááºážááá¯ááá±á¬áº áááºááŸááá±áá¬ááá¬áá¡ááœáẠáá»áœááºá¯ááºááá¯á·ááẠá ááºáá»á¬ážá áœá¬áá¡á á¯á¡áá±ážáá áºáá¯ááᯠáááºáá±á¬ááºááááºááŒá áºááŒá®áž ClickHouse ááá¯á¡áá¯á¶ážááŒá¯ááá·áºá¡áá« áá«áá«áááá·áºá ááºáá áºáá¯ááẠáá»áœááºá¯ááºááá¯á·á¡ááœáẠáá¯á¶áá±á¬ááºáá«áááºá áá¯ááºáá«áááºá ElasticSearch ááŸá¬áááºáž on-disk data compression mechanisms áá²á· resource áá¯á¶ážá áœá²ááŸá¯ááᯠáááá¬áááºááŸá¬ážá áœá¬ áá»áŸá±á¬á·áá»áá±ážááá¯ááºáá²á· á¡ááŒá¬ážáá±á¬ features ááœá±ááŸááá«áááºá áá«áá±ááá·áº ClickHouse áá²á· ááŸááºááẠáá«á ááá¯á á»á±ážááŒá®ážáá«áááá·áºáááºá
áá»áœááºá¯ááºááá¯á·áááºá០á¡áá°ážáá±á¬ááºážááœááºá¡á±á¬ááºááŒá¯áá¯ááºááŒááºážáááŸááá²á áá¯á¶áá±áááºáááºáá»á¬ážááœáẠáá±áá¬ááœáá·áºááŒááºážááŸáá·áº áá±áá¬áá±á·á áºááŸááœá±ážáá»ááºááŒááºážááá¯á·ááẠá¡á¶á·ááŒááœááºá¡ááŒááºááŸá¯ááºážááŒáá·áº á¡áá¯ááºáá¯ááºáá«áááºá áá»áœááºá¯ááºááá¯á·ááœáẠáá±áá¬áá»á¬ážá áœá¬áááŸááá±ážáá« (ááŸááºáááºážáá±á«ááºáž áááºáž 200 ááá·áº) ááŸááá±á¬áºáááºáž áá¬áá¬ááá¯ááºááá¯ááºá á¡á¬ážáááºážáá±áá«áááºá ááŸááºáááºážáá»á¬áž ááááºážáááºážááŒááºážááŸáá·áº ááááºááá¯ááºáá±á¬ á¡ááŒá¬ážáááºááœááºáá»ááºáá»á¬ážá¡ááœáẠá¡áá¬áááºááœáẠá€áááááá¬ááᯠáá»áœááºá¯ááºááá¯á· á¡áá¯á¶ážááŒá¯ááá¯ááºáá«áááºá á¥ááá¬á¡á¬ážááŒáá·áºá á¡áá¯á¶ážááŸá¡áá¯á¶ážááá¯ááºážááœá²ááŒááºážá áááºááŒá¬ááŸá¯á¡ááœááºá áá¯á¶ááŒá¯á¶áá±ážáááºáááºááœááºá á ááºáááºáá°ááŸá¯á
á¡áá¯á¶ážááŸá¬ áá±á¬ááºážáá»áá¯ážááá¯ážáá»áá¯ážááœá±á¡ááŒá±á¬ááºáž á¡áááºážáááºááŒá±á¬ááŒáá«áááºá
ÐОМÑÑÑ
- ááŸááºáááºážáá»á¬ážááᯠá¡ááœá²ááá¯ááºááŒá®ážáá»á¬ážááŒáá·áº áááºáá±áá«áááºá áá áºáááºááœááºá áááºážááẠá¡ááºá¹áá«áááºáá áºáá¯ááŒá áºáá±á¬áºáááºáž buffering ááŸááºáááºážáá»á¬ážá¡ááœáẠáá±á¬ááºáááºá¡á áááºá¡ááá¯ááºážáá»á¬ážááᯠáááºá¡áá¯á¶ážááŒá¯ááẠááá¯á¡ááºáá±áá±ážáááºá áá®á¡áá¯ááºá áááœááºáá±ááá·áº ááŒá±ááŸááºážááá¯á·ááááºá ááŒá®ážáá±á¬á· á¡á á®á¡á á¥áºááᯠááá¯ážááŸááºážá á±áá»ááºáá«áááºá
- á¡áá»áá¯á·áá±á¬ áá°ážááŒá¬ážáááºážááŒá¬ážáá±á¬ áá¯ááºáá±á¬ááºááá¯ááºá áœááºáž ááá¯á·ááá¯áẠáá¯ááºáá±á¬ááºáá»ááºá¡áá áºáá»á¬ážááẠáá¬ážááŸááºážá¡áá áºááœáẠááœá²ááœá¬ážáááºáááºá áááºážááẠáá¬ážááŸááºážá¡áá áºááá¯á· á¡ááá·áºááŒáŸáá·áºáááºááá¯áá±á¬ááá¹áááᯠáá»áŸá±á¬á·áá»ááẠá áá¯ážááááºááŸá¯ááᯠááŒá áºá á±áááºá á¥ááá¬á¡á¬ážááŒáá·áºá Kafka table engine ááẠá á¬ážáá¯á¶ážáá°áá»á¬ážááᯠá¡áá±á¬ááºá¡áááºááá±á¬áºáá² Kafka á០á¡ááŒá áºá¡áá»ááºáá»á¬ážááᯠááá¯ááºááá¯ááºáááºááá¯ááºá á±ááá·áº á¡ááœááºá¡áá¯á¶ážáááºáá±á¬ á¡ááºá¹áá«áááºáá áºáá¯ááŒá áºáááºá áá«áá±ááá·áº github áá±á«áºá ááŒááá¬á¡áá±á¡ááœááºá¡áá áá®á¡ááºáá»ááºááᯠáá¯ááºáá¯ááºááŸá¯ááŸá¬ á¡áá¯á¶ážáááŒá¯ááááá¯á· áááááŸááá±áá¯ááºážáá«áá²á ááá¯á·áá±á¬áºá áááºááẠáá±ážáááºááá¯á· áá¯ááºáááẠá¡áá°á¡áá¬áá¯ááºá áááºááá¯ááºáá±á¬ááºáá»ááºááᯠá¡áá¯á¶ážáááŒá¯áá«áá áááºážááẠáááºááŒáááºá áœá¬ á¡áá¯ááºáá¯ááºáá«áááºá
ÐлÑÑÑ
- ááŸá±ážááœá±ážááá±áá«áá°ážá
- áááºáá±á¬ááºááŸá¯á¡ááá·áºáááá·áºá
- ááœááºá·áááºážá¡áááºážá¡ááŒá áºá
- á¡ááá²á·á
- á¡ááŒá±ážááœá¶áá»á¬áž áá±á¬ááºážááœááºá áœá¬ (áá¯á¶ážáá²á០ááœá²áá¯ááºááŒááºáž/áá¯á¶áá°ááŒááºáž)
- áááºááœááºáá±ážáááºááŒá®ážáá¬áá០á¡ááŒá¶ááŒá¯áá¬ážáá±á¬ áá¯ááŸá¬ážáá±á¬á·ááºáá²á ááŸááºáá¯á¶áááºá á¬áááºážááœáẠáá«áááºáááºá
- Yandex ááŸááá¬ážáááºáá¶á·ááá¯ážááŸá¯ááŸááá±ááŒááºážá
source: www.habr.com