ืžืกื“ ื”ื ืชื•ื ื™ื ืฉืœ ClickHouse ืœื‘ื ื™ ืื“ื, ืื• ื˜ื›ื ื•ืœื•ื’ื™ื•ืช ื—ื™ื™ื–ืจื™ื

ืืœื›ืกื™ ืœื™ื–ื•ื ื•ื‘, ืจืืฉ ืžืจื›ื– ื”ื›ืฉื™ืจื•ืช ืœืขืจื•ืฆื™ ืฉื™ืจื•ืช ืžืจื•ื—ืงื™ื ืฉืœ ืžื™ื ื”ืœืช ื˜ื›ื ื•ืœื•ื’ื™ื•ืช ื”ืžื™ื“ืข ืฉืœ ื”-MKB

ืžืกื“ ื”ื ืชื•ื ื™ื ืฉืœ ClickHouse ืœื‘ื ื™ ืื“ื, ืื• ื˜ื›ื ื•ืœื•ื’ื™ื•ืช ื—ื™ื™ื–ืจื™ื

ื›ื—ืœื•ืคื” ืœืžื—ืกื ื™ืช ELK (ElasticSearch, Logstash, Kibana), ืื ื• ืขื•ืจื›ื™ื ืžื—ืงืจ ืขืœ ื”ืฉื™ืžื•ืฉ ื‘ืžืกื“ ื”ื ืชื•ื ื™ื ืฉืœ ClickHouse ื›ืžืื’ืจ ื ืชื•ื ื™ื ืขื‘ื•ืจ ื™ื•ืžื ื™ื.

ื‘ืžืืžืจ ื–ื” ื ืจืฆื” ืœื“ื‘ืจ ืขืœ ื”ื ื™ืกื™ื•ืŸ ืฉืœื ื• ื‘ืฉื™ืžื•ืฉ ื‘ืžืกื“ ื”ื ืชื•ื ื™ื ืฉืœ ClickHouse ื•ืขืœ ื”ืชื•ืฆืื•ืช ื”ืจืืฉื•ื ื™ื•ืช ืฉืœ ืคืขื•ืœืช ื”ืคื™ื™ืœื•ื˜. ื™ืฉ ืœืฆื™ื™ืŸ ืžื™ื“ ืฉื”ืชื•ืฆืื•ืช ื”ื™ื• ืžืจืฉื™ืžื•ืช.


ืžืกื“ ื”ื ืชื•ื ื™ื ืฉืœ ClickHouse ืœื‘ื ื™ ืื“ื, ืื• ื˜ื›ื ื•ืœื•ื’ื™ื•ืช ื—ื™ื™ื–ืจื™ื

ืœืื—ืจ ืžื›ืŸ, ื ืชืืจ ื‘ื™ืชืจ ืคื™ืจื•ื˜ ื›ื™ืฆื“ ื”ืžืขืจื›ืช ืฉืœื ื• ืžื•ื’ื“ืจืช ื•ืžืื™ืœื• ืจื›ื™ื‘ื™ื ื”ื™ื ืžื•ืจื›ื‘ืช. ืื‘ืœ ืขื›ืฉื™ื• ืื ื™ ืจื•ืฆื” ืœื“ื‘ืจ ืงืฆืช ืขืœ ืžืกื“ ื”ื ืชื•ื ื™ื ื”ื–ื” ื‘ื›ืœืœื•ืชื•, ื•ืœืžื” ื›ื“ืื™ ืœืฉื™ื ืœื‘ ืืœื™ื•. ืžืกื“ ื”ื ืชื•ื ื™ื ืฉืœ ClickHouse ื”ื•ื ืžืกื“ ื ืชื•ื ื™ื ืขืžื•ื“ื•ืช ืื ืœื™ื˜ื™ ื‘ืขืœ ื‘ื™ืฆื•ืขื™ื ื’ื‘ื•ื”ื™ื ืžื‘ื™ืช Yandex. ื”ื•ื ืžืฉืžืฉ ื‘ืฉื™ืจื•ืชื™ Yandex, ื‘ืชื—ื™ืœื” ื–ื”ื• ืื—ืกื•ืŸ ื”ื ืชื•ื ื™ื ื”ืขื™ืงืจื™ ืขื‘ื•ืจ Yandex.Metrica. ืžืขืจื›ืช ืงื•ื“ ืคืชื•ื—, ื‘ื—ื™ื ื. ืžื ืงื•ื“ืช ืžื‘ื˜ ืฉืœ ืžืคืชื—, ืชืžื™ื“ ืชื”ื™ืชื™ ืื™ืš ื”ื ื™ื™ืฉืžื• ืืช ื–ื”, ื›ื™ ื™ืฉ ื ืชื•ื ื™ื ื’ื“ื•ืœื™ื ืœื”ืคืœื™ื. ื•ืžืžืฉืง ื”ืžืฉืชืžืฉ ืฉืœ Metrica ืขืฆืžื• ืžืื•ื“ ื’ืžื™ืฉ ื•ืžื”ื™ืจ. ื‘ื”ื™ื›ืจื•ืช ืจืืฉื•ื ื” ืขื ืžืื’ืจ ื–ื”, ื”ืจื•ืฉื ื”ื•ื: "ื˜ื•ื‘, ืกื•ืฃ ืกื•ืฃ! ื ื•ืฆืจ ืขื‘ื•ืจ ื”ืื ืฉื™ื! ื”ื—ืœ ืžืชื”ืœื™ืš ื”ื”ืชืงื ื” ื•ื›ืœื” ื‘ืฉืœื™ื—ืช ื‘ืงืฉื•ืช.

ืœืžืกื“ ื ืชื•ื ื™ื ื–ื” ืกืฃ ื›ื ื™ืกื” ื ืžื•ืš ืžืื•ื“. ืืคื™ืœื• ืžืคืชื— ืžื™ื•ืžืŸ ืžืžื•ืฆืข ื™ื›ื•ืœ ืœื”ืชืงื™ืŸ ืืช ืžืกื“ ื”ื ืชื•ื ื™ื ื”ื–ื” ืชื•ืš ืžืกืคืจ ื“ืงื•ืช ื•ืœื”ืชื—ื™ืœ ืœื”ืฉืชืžืฉ ื‘ื•. ื”ื›ืœ ืขื•ื‘ื“ ื‘ืฆื•ืจื” ื‘ืจื•ืจื”. ืืคื™ืœื• ืื ืฉื™ื ื—ื“ืฉื™ื ื‘ืœื™ื ื•ืงืก ื™ื›ื•ืœื™ื ืœื˜ืคืœ ื‘ืžื”ื™ืจื•ืช ื‘ื”ืชืงื ื” ื•ืœื‘ืฆืข ืืช ื”ืคืขื•ืœื•ืช ื”ืคืฉื•ื˜ื•ืช ื‘ื™ื•ืชืจ. ืื ืงื•ื“ื ืœื›ืŸ, ืขื ื”ืžื™ืœื™ื Big Data, Hadoop, Google BigTable, HDFS, ืœืžืคืชื— ืจื’ื™ืœ ื”ื™ื• ืจืขื™ื•ื ื•ืช ืฉืžื“ื•ื‘ืจ ื‘ื›ืžื” ื˜ืจื”-ื‘ื™ื™ื˜, ืคื˜ื”-ื‘ื™ื™ื˜, ืฉื›ืžื” ืขืœ-ืื ื•ืฉื™ื™ื ืžืขื•ืจื‘ื™ื ื‘ื”ื’ื“ืจื•ืช ื•ื‘ืคื™ืชื•ื— ืฉืœ ืžืขืจื›ื•ืช ืืœื•, ืื– ืขื ื›ื ื™ืกืชื• ืฉืœ ื”-ClickHouse ืžืกื“ ื ืชื•ื ื™ื, ืงื™ื‘ืœื ื• ื›ืœื™ ืคืฉื•ื˜ ื•ืžื•ื‘ืŸ ืฉื‘ืขื–ืจืชื• ืชื•ื›ืœ ืœืคืชื•ืจ ืžื’ื•ื•ืŸ ืžืฉื™ืžื•ืช ืฉืœื ื ื™ืชืŸ ื”ื™ื” ืœื”ืฉื™ื’ ื‘ืขื‘ืจ. ื–ื” ืœื•ืงื— ืจืง ืžื›ื•ื ื” ืื—ืช ื“ื™ ืžืžื•ืฆืขืช ื•ื—ืžืฉ ื“ืงื•ืช ืœื”ืชืงื™ืŸ. ื›ืœื•ืžืจ, ืงื™ื‘ืœื ื• ืžืกื“ ื ืชื•ื ื™ื ื›ืžื•, ืœืžืฉืœ, MySql, ืื‘ืœ ืจืง ืœืื—ืกื•ืŸ ืžื™ืœื™ืืจื“ื™ ืจืฉื•ืžื•ืช! ืืจื›ื™ื•ืŸ-ืขืœ ืžืกื•ื™ื ืขื ืฉืคืช SQL. ื–ื” ื›ืื™ืœื• ืื ืฉื™ื ืงื™ื‘ืœื• ื ืฉืง ืฉืœ ื—ื™ื™ื–ืจื™ื.

ืขืœ ืžืขืจื›ืช ื”ืจื™ืฉื•ื ืฉืœื ื•

ื›ื“ื™ ืœืืกื•ืฃ ืžื™ื“ืข, ื ืขืฉื” ืฉื™ืžื•ืฉ ื‘ืงื•ื‘ืฆื™ ื™ื•ืžืŸ IIS ืฉืœ ื™ื™ืฉื•ืžื™ ืื™ื ื˜ืจื ื˜ ื‘ืคื•ืจืžื˜ ืกื˜ื ื“ืจื˜ื™ (ืื ื—ื ื• ื’ื ืžื ืชื—ื™ื ื›ืขืช ื™ื•ืžื ื™ ื™ื™ืฉื•ืžื™ื, ืืš ื”ืžื˜ืจื” ื”ืขื™ืงืจื™ืช ื‘ืฉืœื‘ ื”ืคื™ื™ืœื•ื˜ ื”ื™ื ืื™ืกื•ืฃ ื™ื•ืžื ื™ IIS).

ืžืกื™ื‘ื•ืช ืฉื•ื ื•ืช, ืœื ื™ื›ื•ืœื ื• ืœื ื˜ื•ืฉ ืœื—ืœื•ื˜ื™ืŸ ืืช ืžื—ืกื ื™ืช ื”-ELK, ื•ืื ื• ืžืžืฉื™ื›ื™ื ืœื”ืฉืชืžืฉ ื‘ืจื›ื™ื‘ื™ LogStash ื•-Filebeat, ืฉื”ื•ื›ื™ื—ื• ืืช ืขืฆืžื ื”ื™ื˜ื‘ ื•ืขื•ื‘ื“ื™ื ื‘ืฆื•ืจื” ื“ื™ ืืžื™ื ื” ื•ืฆืคื•ื™ื”.

ืกื›ื™ืžืช ื”ืจื™ืฉื•ื ื”ื›ืœืœื™ืช ืžื•ืฆื’ืช ื‘ืื™ื•ืจ ืฉืœื”ืœืŸ:

ืžืกื“ ื”ื ืชื•ื ื™ื ืฉืœ ClickHouse ืœื‘ื ื™ ืื“ื, ืื• ื˜ื›ื ื•ืœื•ื’ื™ื•ืช ื—ื™ื™ื–ืจื™ื

ืชื›ื•ื ื” ืฉืœ ื›ืชื™ื‘ืช ื ืชื•ื ื™ื ืœืžืกื“ ื”ื ืชื•ื ื™ื ืฉืœ ClickHouse ื”ื™ื ื”ื›ื ืกื” ื ื“ื™ืจื” (ืคืขื ื‘ืฉื ื™ื™ื”) ืฉืœ ืจืฉื•ืžื•ืช ื‘ืืฆื•ื•ืช ื’ื“ื•ืœื•ืช. ื–ื”, ื›ื›ืœ ื”ื ืจืื”, ื”ื—ืœืง ื”ื›ื™ "ื‘ืขื™ื™ืชื™" ืฉืืชื” ื ืชืงืœ ื‘ื• ื›ืฉืืชื” ืžืชื ืกื” ื‘ืขื‘ื•ื“ื” ืขื ืžืกื“ ื”ื ืชื•ื ื™ื ืฉืœ ClickHouse: ื”ืกื›ื™ืžื” ื”ื•ืคื›ืช ืงืฆืช ื™ื•ืชืจ ืžืกื•ื‘ื›ืช.
ื”ืชื•ืกืฃ ืœ-LogStash, ืฉืžื›ื ื™ืก ื ืชื•ื ื™ื ื™ืฉื™ืจื•ืช ืœ-ClickHouse, ืขื–ืจ ื›ืืŸ ืžืื•ื“. ืจื›ื™ื‘ ื–ื” ืคืจื•ืก ืขืœ ืื•ืชื• ืฉืจืช ื›ืžื• ืžืกื“ ื”ื ืชื•ื ื™ื ืขืฆืžื•. ืื– ื‘ืื•ืคืŸ ื›ืœืœื™, ืœื ืžื•ืžืœืฅ ืœืขืฉื•ืช ืืช ื–ื”, ืืœื ืžื‘ื—ื™ื ื” ืžืขืฉื™ืช, ื›ื“ื™ ืœื ืœื™ื™ืฆืจ ืฉืจืชื™ื ื ืคืจื“ื™ื ื‘ื–ืžืŸ ืฉื”ื•ื ืคืจื•ืก ืขืœ ืื•ืชื• ืฉืจืช. ืœื ืจืื™ื ื• ื›ืฉืœื™ื ืื• ื”ืชื ื’ืฉื•ื™ื•ืช ืžืฉืื‘ื™ื ืขื ืžืกื“ ื”ื ืชื•ื ื™ื. ื‘ื ื•ืกืฃ, ื™ืฉ ืœืฆื™ื™ืŸ ื›ื™ ืœืชื•ืกืฃ ื™ืฉ ืžื ื’ื ื•ืŸ ื ื™ืกื™ื•ืŸ ื—ื•ื–ืจ ื‘ืžืงืจื” ืฉืœ ืฉื’ื™ืื•ืช. ื•ื‘ืžืงืจื” ืฉืœ ืฉื’ื™ืื•ืช, ื”ืชื•ืกืฃ ื›ื•ืชื‘ ืœื“ื™ืกืง ืืฆื•ื•ื” ืฉืœ ื ืชื•ื ื™ื ืฉืœื ื ื™ืชืŸ ื”ื™ื” ืœื”ื›ื ื™ืก (ืคื•ืจืžื˜ ื”ืงื•ื‘ืฅ ื ื•ื—: ืœืื—ืจ ื”ืขืจื™ื›ื” ื ื™ืชืŸ ืœื”ื›ื ื™ืก ื‘ืงืœื•ืช ืืช ื”ืืฆื•ื•ื” ื”ืžืชื•ืงื ืช ื‘ืืžืฆืขื•ืช clickhouse-client).

ืจืฉื™ืžื” ืžืœืื” ืฉืœ ืชื•ื›ื ื•ืช ื”ืžืฉืžืฉื•ืช ื‘ืกื›ื™ืžื” ืžื•ืฆื’ืช ื‘ื˜ื‘ืœื”:

ืจืฉื™ืžืช ื”ืชื•ื›ื ื•ืช ืฉื‘ื”ืŸ ื ืขืฉื” ืฉื™ืžื•ืฉ

ืฉื

ืชื™ืื•ืจ

ืงื™ืฉื•ืจ ืœื”ืคืฆื”

nginx

ืคืจื•ืงืกื™ ื”ืคื•ืš ืœื”ื’ื‘ืœืช ื’ื™ืฉื” ืœืคื™ ื™ืฆื™ืื•ืช ื•ืœืืจื’ื•ืŸ ื”ืจืฉืื•ืช

ื›ืจื’ืข ืœื ื‘ืฉื™ืžื•ืฉ ื‘ืชื›ื ื™ืช

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-output-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, ื‘ื ื™ื™ืช ืกืœ"ื“ "ืจื’ื™ืœื”" ืขื‘ื•ืจ RHEL ื”ื•ืคื™ืขื• ื‘ืžืื’ืจ Yandex, ื›ืš ืฉืชื•ื›ืœ ืœื ืกื•ืช ืœื”ืฉืชืžืฉ ื‘ื”ื. ื‘ื–ืžืŸ ื”ื”ืชืงื ื”, ื”ืฉืชืžืฉื ื• ื‘ื—ื‘ื™ืœื•ืช ืฉื ื‘ื ื• ืขืœ ื™ื“ื™ Altinity.

ื’ืจืคื ื”

ื”ื“ืžื™ื™ืช ื™ื•ืžืŸ. ื”ื’ื“ืจืช ืœื•ื—ื•ืช ืžื—ื•ื•ื ื™ื

https://grafana.com/

https://grafana.com/grafana/download

Redhat & Centos (64 ืกื™ื‘ื™ื•ืช) - ื”ื’ืจืกื” ื”ืื—ืจื•ื ื”

ืžืงื•ืจ ื ืชื•ื ื™ื ืฉืœ ClickHouse ืขื‘ื•ืจ Grafana 4.6+

ืชื•ืกืฃ ืขื‘ื•ืจ Grafana ืขื ืžืงื•ืจ ื ืชื•ื ื™ื ClickHouse

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

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

logstash

ื”ืชื—ื‘ืจ ืœื ืชื‘ ืž-FileBeat ืœืชื•ืจ RabbitMQ.

ื”ืขืจื”. ืœืจื•ืข ื”ืžื–ืœ FileBeat ืื™ื ื• ืžืคืœื˜ ื™ืฉื™ืจื•ืช ืœ-RabbitMQ, ื•ืœื›ืŸ ื ื“ืจืฉ ืงื™ืฉื•ืจ ื‘ื™ื ื™ื™ื ื‘ืฆื•ืจื” ืฉืœ Logstash

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

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

RabbitMQ

ืชื•ืจ ื”ื•ื“ืขื•ืช. ื–ื”ื• ืžืื’ืจ ื”ื™ื•ืžืŸ ื‘-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)

ื–ืžืŸ ืจื™ืฆื” ืฉืœ ืืจืœื ื’. ื ื“ืจืฉ ืขื‘ื•ืจ RabbitMQ ืœืขื‘ื•ื“

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

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

ืชืฆื•ืจืช ื”ืฉืจืช ืขื ืžืกื“ ื”ื ืชื•ื ื™ื ืฉืœ ClickHouse ืžื•ืฆื’ืช ื‘ื˜ื‘ืœื” ื”ื‘ืื”:

ืฉื

ืขืจืš

ืฉื™ื ืœื‘

ืชึฐืฆื•ึผืจึธื”

ื“ื™ืกืง ืงืฉื™ื—: 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;

ืื ื• ืžืฉืชืžืฉื™ื ื‘ืžื—ื™ืฆื•ืช ื‘ืจื™ืจืช ืžื—ื“ืœ (ืœืคื™ ื—ื•ื“ืฉ) ื•ื‘ืคื™ืจื•ื˜ ืื™ื ื“ืงืก. ื›ืœ ื”ืฉื“ื•ืช ืชื•ืืžื™ื ืœืžืขืฉื” ืœืจืฉื•ืžื•ืช ื™ื•ืžืŸ IIS ืœืจื™ืฉื•ื ื‘ืงืฉื•ืช http. ื‘ื ืคืจื“, ื ืฆื™ื™ืŸ ื›ื™ ื™ืฉื ื ืฉื“ื•ืช ื ืคืจื“ื™ื ืœืื—ืกื•ืŸ ืชื’ื™ utm (ื”ื ืžื ื•ืชื—ื™ื ื‘ืฉืœื‘ ื”ื”ื•ืกืคื” ืœื˜ื‘ืœื” ืžืฉื“ื” ืžื—ืจื•ื–ืช ื”ืฉืื™ืœืชื”).

ื›ืžื• ื›ืŸ, ื ื•ืกืคื• ืžืกืคืจ ืฉื“ื•ืช ืžืขืจื›ืช ืœื˜ื‘ืœื” ืœืื—ืกื•ืŸ ืžื™ื“ืข ืขืœ ืžืขืจื›ื•ืช, ืจื›ื™ื‘ื™ื, ืฉืจืชื™ื. ืขื™ื™ืŸ ื‘ื˜ื‘ืœื” ืœืžื˜ื” ืœืชื™ืื•ืจ ืฉืœ ืฉื“ื•ืช ืืœื”. ื‘ื˜ื‘ืœื” ืื—ืช ืื ื• ืžืื—ืกื ื™ื ื™ื•ืžื ื™ื ืœืžืกืคืจ ืžืขืจื›ื•ืช.

ืฉื

ืชื™ืื•ืจ

ื“ื•ื’ืžื”

fld_app_name

ืฉื ืืคืœื™ืงืฆื™ื”/ืžืขืจื›ืช
ืขืจื›ื™ื ื—ื•ืงื™ื™ื:

  • site1.domain.com ืืชืจ ื—ื™ืฆื•ื ื™ 1
  • site2.domain.com ืืชืจ ื—ื™ืฆื•ื ื™ 2
  • internal-site1.domain.local ืืชืจ ืคื ื™ืžื™ 1

site1.domain.com

fld_app_module

ืžื•ื“ื•ืœ ืžืขืจื›ืช
ืขืจื›ื™ื ื—ื•ืงื™ื™ื:

  • ืื™ื ื˜ืจื ื˜ - ืืชืจ ืื™ื ื˜ืจื ื˜
  • svc - ืฉื™ืจื•ืช ืืชืจ ืื™ื ื˜ืจื ื˜
  • intgr - Integration Web Service
  • bo - Admin (BackOffice)

ืื™ื ื˜ืจื ื˜

fld_website_name

ืฉื ื”ืืชืจ ื‘-IIS

ื ื™ืชืŸ ืœืคืจื•ืก ืžืกืคืจ ืžืขืจื›ื•ืช ื‘ืฉืจืช ืื—ื“, ืื• ืืคื™ืœื• ืžืกืคืจ ืžื•ืคืขื™ื ืฉืœ ืžื•ื“ื•ืœ ืžืขืจื›ืช ืื—ื“

ืจืืฉื™ ืื™ื ื˜ืจื ื˜

fld_server_name

ืฉื ืฉืจืช

web1.domain.com

fld_log_file_name

ื ืชื™ื‘ ืœืงื•ื‘ืฅ ื”ื™ื•ืžืŸ ื‘ืฉืจืช

C:inetpublogsLogFiles
W3SVC1u_ex190711.log

ื–ื” ืžืืคืฉืจ ืœืš ืœื‘ื ื•ืช ื‘ื™ืขื™ืœื•ืช ื’ืจืคื™ื ื‘ื’ืจืคืื ื”. ืœื“ื•ื’ืžื”, ื”ืฆื’ ื‘ืงืฉื•ืช ืžื”ื—ื–ื™ืช ืฉืœ ืžืขืจื›ืช ืžืกื•ื™ืžืช. ื–ื” ื“ื•ืžื” ืœืžื•ื ื” ื”ืืชืจื™ื ื‘-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"
        }
    }
 
}

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"

ื‘ื™ืช ืงืœื™ืง. ืื—ืกื•ืŸ ื™ื•ืžื ื™ื

ื”ื™ื•ืžื ื™ื ืฉืœ ื›ืœ ื”ืžืขืจื›ื•ืช ืžืื•ื—ืกื ื™ื ื‘ื˜ื‘ืœื” ืื—ืช (ืจืื” ื‘ืชื—ื™ืœืช ื”ืžืืžืจ). ื”ื•ื ื ื•ืขื“ ืœืื—ืกืŸ ืžื™ื“ืข ืขืœ ื‘ืงืฉื•ืช: ื›ืœ ื”ืคืจืžื˜ืจื™ื ื“ื•ืžื™ื ืขื‘ื•ืจ ืคื•ืจืžื˜ื™ื ืฉื•ื ื™ื, ื›ื’ื•ืŸ ื™ื•ืžื ื™ IIS, apache ื•-nginx. ืขื‘ื•ืจ ื™ื•ืžื ื™ ื™ื™ืฉื•ืžื™ื, ื‘ื”ื ื ืจืฉืžื•ืช, ืœืžืฉืœ, ืฉื’ื™ืื•ืช, ื”ื•ื“ืขื•ืช ืžื™ื“ืข, ืื–ื”ืจื•ืช, ืชื™ื ืชืŸ ื˜ื‘ืœื” ื ืคืจื“ืช ืขื ื”ืžื‘ื ื” ื”ืžืชืื™ื (ื›ืจื’ืข ื‘ืฉืœื‘ ื”ืชื›ื ื•ืŸ).

ื‘ืขืช ืขื™ืฆื•ื‘ ื˜ื‘ืœื”, ื—ืฉื•ื‘ ืžืื•ื“ ืœื”ื—ืœื™ื˜ ืขืœ ื”ืžืคืชื— ื”ืจืืฉื™ (ืขืœ ืคื™ื• ื™ืžื•ื™ื ื• ื”ื ืชื•ื ื™ื ื‘ืžื”ืœืš ื”ืื—ืกื•ืŸ). ืžื™ื“ืช ื“ื—ื™ืกืช ื”ื ืชื•ื ื™ื ื•ืžื”ื™ืจื•ืช ื”ืฉืื™ืœืชื” ืชืœื•ื™ื™ื ื‘ื›ืš. ื‘ื“ื•ื’ืžื” ืฉืœื ื•, ื”ืžืคืชื— ื”ื•ื
ORDER BY (fld_app_name, fld_app_module, logdatetime)
ื›ืœื•ืžืจ ืœืคื™ ืฉื ื”ืžืขืจื›ืช, ืฉื ืจื›ื™ื‘ ื”ืžืขืจื›ืช ื•ืชืืจื™ืš ื”ืื™ืจื•ืข. ื‘ืชื—ื™ืœื”, ืชืืจื™ืš ื”ืื™ืจื•ืข ื”ื’ื™ืข ืจืืฉื•ืŸ. ืœืื—ืจ ื”ืขื‘ืจืชื• ืœืžืงื•ื ื”ืื—ืจื•ืŸ, ื”ืฉืื™ืœืชื•ืช ื”ื—ืœื• ืœืขื‘ื•ื“ ื‘ืขืจืš ืคื™ ืฉื ื™ื™ื ืžื”ืจ ื™ื•ืชืจ. ืฉื™ื ื•ื™ ื”ืžืคืชื— ื”ืจืืฉื™ ื™ื“ืจื•ืฉ ื™ืฆื™ืจื” ืžื—ื“ืฉ ืฉืœ ื”ื˜ื‘ืœื” ื•ื˜ืขื™ื ื” ืžื—ื“ืฉ ืฉืœ ื”ื ืชื•ื ื™ื ื›ืš ืฉ-ClickHouse ื™ืžื™ื™ืŸ ืžื—ื“ืฉ ืืช ื”ื ืชื•ื ื™ื ื‘ื“ื™ืกืง. ืžื“ื•ื‘ืจ ื‘ืคืขื•ืœื” ื›ื‘ื“ื” ื•ืœื›ืŸ ื›ื“ืื™ ืœื—ืฉื•ื‘ ื”ืจื‘ื” ืžื” ืฆืจื™ืš ืœื›ืœื•ืœ ื‘ืžืคืชื— ื”ืžื™ื•ืŸ.

ื™ืฉ ืœืฆื™ื™ืŸ ื’ื ืฉืกื•ื’ ื”ื ืชื•ื ื™ื LowCardinality ื”ื•ืคื™ืข ื™ื—ืกื™ืช ื‘ื’ืจืกืื•ืช ื”ืื—ืจื•ื ื•ืช. ื‘ืขืช ื”ืฉื™ืžื•ืฉ ื‘ื•, ื’ื•ื“ืœ ื”ื ืชื•ื ื™ื ื”ื“ื—ื•ืกื™ื ืžืฆื˜ืžืฆื ื‘ืื•ืคืŸ ื“ืจืกื˜ื™ ืขื‘ื•ืจ ืื•ืชื ืฉื“ื•ืช ื‘ืขืœื™ ืงืจื“ื™ื ืœื™ื•ืช ื ืžื•ื›ื” (ืืคืฉืจื•ื™ื•ืช ืžืขื˜ื•ืช).

ื’ืจืกื” 19.6 ื ืžืฆืืช ื›ืขืช ื‘ืฉื™ืžื•ืฉ ื•ืื ื• ืžืชื›ื ื ื™ื ืœื ืกื•ืช ืœืขื“ื›ืŸ ืœื’ืจืกื” ื”ืขื“ื›ื ื™ืช ื‘ื™ื•ืชืจ. ื™ืฉ ืœื”ื ืชื›ื•ื ื•ืช ื ืคืœืื•ืช ื›ืžื• Adaptive Granularity, ื“ื™ืœื•ื’ ืขืœ ืžื“ื“ื™ ื•-DoubleDelta, ืœืžืฉืœ.

ื›ื‘ืจื™ืจืช ืžื—ื“ืœ, ื‘ืžื”ืœืš ื”ื”ืชืงื ื”, ืจืžืช ื”ืจื™ืฉื•ื ืžื•ื’ื“ืจืช ืœืžืขืงื‘. ื”ื™ื•ืžื ื™ื ืžืกื•ื‘ื‘ื™ื ื•ืžืื•ื—ืกื ื™ื ื‘ืืจื›ื™ื•ืŸ, ืืš ื‘ืžืงื‘ื™ืœ ื”ื ืžืชืจื—ื‘ื™ื ืขื“ ืœื’ื™ื’ื”-ื‘ื™ื™ื˜. ืื ืื™ืŸ ืฆื•ืจืš, ืื– ืืชื” ื™ื›ื•ืœ ืœื”ื’ื“ื™ืจ ืืช ืจืžืช ื”ืื–ื”ืจื”, ื•ืื– ื’ื•ื“ืœ ื”ื™ื•ืžืŸ ืžืฆื˜ืžืฆื ื‘ืื•ืคืŸ ื“ืจืกื˜ื™. ื”ื’ื“ืจืช ื”ืจื™ืฉื•ื ืžื•ื’ื“ืจืช ื‘ืงื•ื‘ืฅ 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. ื”ืชื—ื‘ืจ ืœื ืชื‘ ืž-FileBeat ืœืชื•ืจ RabbitMQ

ืจื›ื™ื‘ ื–ื” ืžืฉืžืฉ ืœื ื™ืชื•ื‘ ื™ื•ืžื ื™ื ื”ืžื’ื™ืขื™ื ืž-FileBeat ืœืชื•ืจ RabbitMQ. ื™ืฉ ื›ืืŸ ืฉืชื™ ื ืงื•ื“ื•ืช:

  1. ืœืจื•ืข ื”ืžื–ืœ, ืœ-FileBeat ืื™ืŸ ืชื•ืกืฃ ืคืœื˜ ืœื›ืชื™ื‘ื” ื™ืฉื™ืจื•ืช ืœ-RabbitMQ. ื•ืคื•ื ืงืฆื™ื•ื ืœื™ื•ืช ื›ื–ื•, ืื ืœืฉืคื•ื˜ ืœืคื™ ื”ื ื•ืฉื ื‘-github ืฉืœื”ื, ืœื ืžืชื•ื›ื ื ืช ืœื™ื™ืฉื•ื. ื™ืฉ ืชื•ืกืฃ ืœืงืคืงื, ืื‘ืœ ืžืฉื•ื ืžื” ืื ื—ื ื• ืœื ื™ื›ื•ืœื™ื ืœื”ืฉืชืžืฉ ื‘ื• ื‘ื‘ื™ืช.
  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. ืชื•ืจ ื”ื•ื“ืขื•ืช

ืจื›ื™ื‘ ื–ื” ืžืฉืžืฉ ืœืื’ื™ืจืช ืขืจื›ื™ ื™ื•ืžืŸ ื‘-DMZ. ื”ื”ืงืœื˜ื” ืžืชื‘ืฆืขืช ื‘ืืžืฆืขื•ืช ื—ื‘ื•ืจื” ืฉืœ Filebeat โ†’ LogStash. ื”ืงืจื™ืื” ืžืชื‘ืฆืขืช ืžื—ื•ืฅ ืœ-DMZ ื‘ืืžืฆืขื•ืช LogStash. ื‘ื”ืคืขืœื” ื“ืจืš RabboitMQ, ืžืขื•ื‘ื“ื•ืช ื›-4 ื”ื•ื“ืขื•ืช ื‘ืฉื ื™ื™ื”.

ื ื™ืชื•ื‘ ื”ื•ื“ืขื•ืช ืžื•ื’ื“ืจ ืœืคื™ ืฉื ื”ืžืขืจื›ืช, ื›ืœื•ืžืจ ืžื‘ื•ืกืก ืขืœ ื ืชื•ื ื™ ืชืฆื•ืจื” ืฉืœ 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+ ื”ืคืœืื’ื™ืŸ. ื”ื™ื™ื ื• ืฆืจื™ื›ื™ื ืœืฆื‘ื•ื˜ ืื•ืชื• ืงืฆืช ื›ื“ื™ ืœืฉืคืจ ืืช ื”ื™ืขื™ืœื•ืช ืฉืœ ืขื™ื‘ื•ื“ ืžืกื ื ื™ SQL ื‘ืœื•ื— ื”ืžื—ื•ื•ื ื™ื.

ืœื“ื•ื’ืžื”, ืื ื• ืžืฉืชืžืฉื™ื ื‘ืžืฉืชื ื™ื, ื•ืื ื”ื ืœื ืžื•ื’ื“ืจื™ื ื‘ืฉื“ื” ื”ืžืกื ืŸ, ืื– ื ืจืฆื” ืฉืœื ื™ื™ืฆืจ ืชื ืื™ ื‘-WHERE ืฉืœ ื”ื˜ื•ืคืก ( uriStem = ยป AND uriStem != ยป ). ื‘ืžืงืจื” ื–ื”, ClickHouse ื™ืงืจื ืืช ื”ืขืžื•ื“ื” uriStem. ื‘ืื•ืคืŸ ื›ืœืœื™, ื ื™ืกื™ื ื• ืืคืฉืจื•ื™ื•ืช ืฉื•ื ื•ืช ื•ื‘ืกื•ืคื• ืฉืœ ื“ื‘ืจ ืชื™ืงื ื• ืืช ื”ืชื•ืกืฃ (ื”ืžืืงืจื• $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 ื”ืคื›ื” ืœืื™ืจื•ืข ืฆื™ื•ืŸ ื“ืจืš ื‘ืฉื•ืง. ืงืฉื” ื”ื™ื” ืœื”ืขืœื•ืช ืขืœ ื”ื“ืขืช ืฉื‘ื—ื™ื ื ืœื’ืžืจื™, ื‘ื™ืŸ ืจื’ืข ื”ืชื—ืžืฉื ื• ื‘ื›ืœื™ ื—ื–ืง ื•ืžืขืฉื™ ืœืขื‘ื•ื“ื” ืขื ื‘ื™ื’ ื“ืื˜ื”. ื›ืžื•ื‘ืŸ, ืขื ื”ื’ื“ืœืช ื”ืฆืจื›ื™ื (ืœื“ื•ื’ืžื”, ืคื™ืฆื•ืœ ื•ืฉื›ืคื•ืœ ืœืžืกืคืจ ืฉืจืชื™ื), ื”ืกื›ื™ืžื” ืชื”ืคื•ืš ืžืกื•ื‘ื›ืช ื™ื•ืชืจ. ืื‘ืœ ื‘ื”ืชืจืฉืžื•ืช ืจืืฉื•ื ื™ืช, ื”ืขื‘ื•ื“ื” ืขื ืžืกื“ ื”ื ืชื•ื ื™ื ื”ื–ื” ื ืขื™ืžื” ืžืื•ื“. ื ื™ืชืŸ ืœืจืื•ืช ืฉื”ืžื•ืฆืจ ืžื™ื•ืฆืจ "ืœืื ืฉื™ื".

ื‘ื”ืฉื•ื•ืื” ืœ- ElasticSearch, ืขืœื•ืช ื”ืื—ืกื•ืŸ ื•ื”ืขื™ื‘ื•ื“ ืฉืœ ื™ื•ืžื ื™ื ืžื•ืคื—ืชืช ืคื™ ื—ืžื™ืฉื” ืขื“ ืขืฉืจื”. ื‘ืžื™ืœื™ื ืื—ืจื•ืช, ืื ืขื‘ื•ืจ ื›ืžื•ืช ื”ื ืชื•ื ื™ื ื”ื ื•ื›ื—ื™ืช ื ืฆื˜ืจืš ืœื”ืงื™ื ืืฉื›ื•ืœ ืฉืœ ืžืกืคืจ ืžื›ื•ื ื•ืช, ืื– ื›ืฉืžืฉืชืžืฉื™ื ื‘-ClickHouse, ืžืกืคื™ืงื” ืœื ื• ืžื›ื•ื ื” ืื—ืช ื‘ืขืœืช ื”ืกืคืง ื ืžื•ืš. ื›ืŸ, ื›ืžื•ื‘ืŸ, ืœ- ElasticSearch ื™ืฉ ื’ื ืžื ื’ื ื•ื ื™ ื“ื—ื™ืกืช ื ืชื•ื ื™ื ื‘ื“ื™ืกืง ื•ืชื›ื•ื ื•ืช ืื—ืจื•ืช ืฉื™ื›ื•ืœื•ืช ืœื”ืคื—ื™ืช ืžืฉืžืขื•ืชื™ืช ืืช ืฆืจื™ื›ืช ื”ืžืฉืื‘ื™ื, ืื‘ืœ ื‘ื”ืฉื•ื•ืื” ืœ-ClickHouse, ื–ื” ื™ื”ื™ื” ื™ืงืจ ื™ื•ืชืจ.

ืœืœื ืื•ืคื˜ื™ืžื™ื–ืฆื™ื•ืช ืžื™ื•ื—ื“ื•ืช ืžืฆื™ื“ื ื•, ื‘ื”ื’ื“ืจื•ืช ื‘ืจื™ืจืช ื”ืžื—ื“ืœ, ื˜ืขื™ื ืช ื ืชื•ื ื™ื ื•ื‘ื—ื™ืจื” ืžืžืกื“ ื”ื ืชื•ื ื™ื ืขื•ื‘ื“ืช ื‘ืžื”ื™ืจื•ืช ืžื“ื”ื™ืžื”. ืื™ืŸ ืœื ื• ืขื“ื™ื™ืŸ ื”ืจื‘ื” ื ืชื•ื ื™ื (ื›-200 ืžื™ืœื™ื•ืŸ ืจืฉื•ืžื•ืช), ืื‘ืœ ื”ืฉืจืช ืขืฆืžื• ื—ืœืฉ. ื ื•ื›ืœ ืœื”ืฉืชืžืฉ ื‘ื›ืœื™ ื–ื” ื‘ืขืชื™ื“ ืœืžื˜ืจื•ืช ืื—ืจื•ืช ืฉืื™ื ืŸ ืงืฉื•ืจื•ืช ืœืื—ืกื•ืŸ ื™ื•ืžื ื™ื. ืœื“ื•ื’ืžื”, ืขื‘ื•ืจ ืื ืœื™ื˜ื™ืงื” ืžืงืฆื” ืœืงืฆื”, ื‘ืชื—ื•ื ื”ืื‘ื˜ื—ื”, ืœืžื™ื“ืช ืžื›ื•ื ื”.

ื‘ืกื•ืฃ, ืงืฆืช ืขืœ ื”ื™ืชืจื•ื ื•ืช ื•ื”ื—ืกืจื•ื ื•ืช.

ื—ืกืจื•ื ื•ืช

  1. ื˜ืขื™ื ืช ืจืฉื•ืžื•ืช ื‘ืงื‘ื•ืฆื•ืช ื’ื“ื•ืœื•ืช. ืžืฆื“ ืื—ื“, ื–ื• ืชื›ื•ื ื”, ืื‘ืœ ืืชื” ืขื“ื™ื™ืŸ ืฆืจื™ืš ืœื”ืฉืชืžืฉ ื‘ืจื›ื™ื‘ื™ื ื ื•ืกืคื™ื ืœืื’ื™ืจืช ืจืฉื•ืžื•ืช. ืžืฉื™ืžื” ื–ื• ืœื ืชืžื™ื“ ืงืœื”, ืืš ืขื“ื™ื™ืŸ ื ื™ืชื ืช ืœืคืชืจื•ืŸ. ื•ืื ื™ ืจื•ืฆื” ืœืคืฉื˜ ืืช ื”ืชื•ื›ื ื™ืช.
  2. ืคื•ื ืงืฆื™ื•ื ืœื™ื•ืช ืืงื–ื•ื˜ื™ืช ืžืกื•ื™ืžืช ืื• ืชื›ื•ื ื•ืช ื—ื“ืฉื•ืช ื ืฉื‘ืจื•ืช ืœืขืชื™ื ืงืจื•ื‘ื•ืช ื‘ื’ืจืกืื•ืช ื—ื“ืฉื•ืช. ื–ื” ืžืขื•ืจืจ ื“ืื’ื”, ื•ืžืคื—ื™ืช ืืช ื”ืจืฆื•ืŸ ืœืฉื“ืจื’ ืœื’ืจืกื” ื—ื“ืฉื”. ืœื“ื•ื’ืžื”, ืžื ื•ืข ื”ืฉื•ืœื—ืŸ ืฉืœ ืงืคืงื ื”ื•ื ืชื›ื•ื ื” ืฉื™ืžื•ืฉื™ืช ืžืื•ื“ ื”ืžืืคืฉืจืช ืœืงืจื•ื ืื™ืจื•ืขื™ื ืžืงืคืงื ื™ืฉื™ืจื•ืช, ืžื‘ืœื™ ืœื™ื™ืฉื ืฆืจื›ื ื™ื. ืื‘ืœ ืื ืœืฉืคื•ื˜ ืœืคื™ ืžืกืคืจ ื”ื‘ืขื™ื•ืช ื‘-github, ืื ื—ื ื• ืขื“ื™ื™ืŸ ื ื–ื”ืจื™ื ืœื ืœื”ืฉืชืžืฉ ื‘ืžื ื•ืข ื”ื–ื” ื‘ื™ื™ืฆื•ืจ. ืขื ื–ืืช, ืื ืืชื” ืœื ืขื•ืฉื” ืžื—ื•ื•ืช ืคืชืื•ืžื™ื•ืช ืœืฆื“ ื•ืžืฉืชืžืฉ ื‘ืคื•ื ืงืฆื™ื•ื ืœื™ื•ืช ื”ืขื™ืงืจื™ืช, ืื– ื–ื” ืขื•ื‘ื“ ื‘ื™ืฆื™ื‘ื•ืช.

Pros

  1. ืœื ืžืื˜.
  2. ืกืฃ ื›ื ื™ืกื” ื ืžื•ืš.
  3. ืงื•ื“ ืคืชื•ื—
  4. ื—ื™ื ื.
  5. ืงื ื” ืžื™ื“ื” ื˜ื•ื‘ (ืจื™ืกื•ืง/ืฉื›ืคื•ืœ ืžื—ื•ืฅ ืœืงื•ืคืกื”)
  6. ื›ืœื•ืœ ื‘ืคื ืงืก ื”ืชื•ื›ื ื•ืช ื”ืจื•ืกื™ื•ืช ื”ืžื•ืžืœืฆื•ืช ืขืœ ื™ื“ื™ ืžืฉืจื“ ื”ืชืงืฉื•ืจืช.
  7. ื ื•ื›ื—ื•ืช ืฉืœ ืชืžื™ื›ื” ืจืฉืžื™ืช ืž- Yandex.

ืžืงื•ืจ: www.habr.com

ื”ื•ืกืคืช ืชื’ื•ื‘ื”