Π‘Π” ClickHouse для людСй, ΠΈΠ»ΠΈ Π’Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ инопланСтян

АлСксСй Π›ΠΈΠ·ΡƒΠ½ΠΎΠ², Ρ€ΡƒΠΊΠΎΠ²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒ направлСния Ρ†Π΅Π½Ρ‚Ρ€Π° ΠΊΠΎΠΌΠΏΠ΅Ρ‚Π΅Π½Ρ†ΠΈΠΉ дистанционных ΠΊΠ°Π½Π°Π»ΠΎΠ² обслуТивания Π΄ΠΈΡ€Π΅ΠΊΡ†ΠΈΠΈ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΎΠ½Π½Ρ‹Ρ… Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΉ ΠœΠšΠ‘

Π‘Π” ClickHouse для людСй, ΠΈΠ»ΠΈ Π’Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ инопланСтян

Π’ качСствС Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Ρ‹ стСку ELK (ElasticSearch, Logstash, Kibana) ΠΌΡ‹ ΠΏΡ€ΠΎΠ²ΠΎΠ΄ΠΈΠΌ ΠΈΡΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠ΅ Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΏΠΎ использованию Π‘Π” ClickHouse Π² качСствС Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π° Π΄Π°Π½Π½Ρ‹Ρ… для Π»ΠΎΠ³ΠΎΠ².

Π’ этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ ΠΌΡ‹ Ρ…ΠΎΡ‚Π΅Π»ΠΈ Π±Ρ‹ Ρ€Π°ΡΡΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΎ нашСм ΠΎΠΏΡ‹Ρ‚Π΅ использования Π‘Π” ClickHouse ΠΈ ΠΎ ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π°Ρ… ΠΏΠΎ ΠΈΡ‚ΠΎΠ³Π°ΠΌ ΠΏΠΈΠ»ΠΎΡ‚Π½ΠΎΠΉ эксплуатации. Π‘Ρ‚ΠΎΠΈΡ‚ ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ сразу, Ρ‡Ρ‚ΠΎ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»ΠΈΡΡŒ Π²ΠΏΠ΅Ρ‡Π°Ρ‚Π»ΡΡŽΡ‰ΠΈΠ΅.


Π‘Π” ClickHouse для людСй, ΠΈΠ»ΠΈ Π’Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ инопланСтян

Π”Π°Π»Π΅Π΅ ΠΌΡ‹ опишСм ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅, ΠΊΠ°ΠΊ Ρƒ нас настроСна систСма, ΠΈ ΠΈΠ· ΠΊΠ°ΠΊΠΈΡ… ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² ΠΎΠ½Π° состоит. Но сСйчас Ρ…ΠΎΡ‚Π΅Π»ΠΎΡΡŒ Π±Ρ‹ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ Ρ€Π°ΡΡΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΎΠ± этой Π‘Π” Π² Ρ†Π΅Π»ΠΎΠΌ, ΠΈ ΠΏΠΎΡ‡Π΅ΠΌΡƒ Π½Π° Π½Π΅Π΅ стоит ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅. Π‘Π” ClickHouse – это Π²Ρ‹ΡΠΎΠΊΠΎΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½Π°Ρ аналитичСская столбцовая Π‘Π” ΠΎΡ‚ ЯндСкса. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π² сСрвисах ЯндСкса, ΠΈΠ·Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎ это основноС Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ Π΄Π°Π½Π½Ρ‹Ρ… для ЯндСкс.ΠœΠ΅Ρ‚Ρ€ΠΈΠΊΠΈ. БистСма open-source, бСсплатная. Π‘ Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°, ΠΌΠ½Π΅ всСгда Π±Ρ‹Π»ΠΎ интСрСсно, ΠΊΠ°ΠΊ ΠΆΠ΅ Ρƒ Π½ΠΈΡ… это Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ΠΎ, вСдь Ρ‚Π°ΠΌ фантастичСски большиС Π΄Π°Π½Π½Ρ‹Π΅. И сам ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ интСрфСйс ΠœΠ΅Ρ‚Ρ€ΠΈΠΊΠΈ ΠΎΡ‡Π΅Π½ΡŒ Π³ΠΈΠ±ΠΎΠΊ ΠΈ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ быстро. ΠŸΡ€ΠΈ ΠΏΠ΅Ρ€Π²ΠΎΠΌ знакомствС с этой Π‘Π” Π²ΠΏΠ΅Ρ‡Π°Ρ‚Π»Π΅Π½ΠΈΠ΅: «Ну, Π½Π°ΠΊΠΎΠ½Π΅Ρ†-Ρ‚ΠΎ! Π‘Π΄Π΅Π»Π°Π½ΠΎ «для людСй»! Начиная ΠΎΡ‚ процСсса установки ΠΈ заканчивая ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠΎΠΉ запросов».

Π£ этой Π‘Π” ΠΎΡ‡Π΅Π½ΡŒ Π½ΠΈΠ·ΠΊΠΈΠΉ ΠΏΠΎΡ€ΠΎΠ³ Π²Ρ…ΠΎΠ΄Π°. Π”Π°ΠΆΠ΅ срСднСй ΠΊΠ²Π°Π»ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ ΠΌΠΎΠΆΠ΅Ρ‚ Π·Π° нСсколько ΠΌΠΈΠ½ΡƒΡ‚ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ эту Π‘Π” ΠΈ Π½Π°Ρ‡Π°Ρ‚ΡŒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ. ВсС Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Ρ‡Π΅Ρ‚ΠΊΠΎ. Π”Π°ΠΆΠ΅ люди, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠ»ΠΎΡ…ΠΎ Π·Π½Π°ΠΊΠΎΠΌΡ‹ с Linux, достаточно быстро ΠΌΠΎΠ³ΡƒΡ‚ ΡΠΏΡ€Π°Π²ΠΈΡ‚ΡŒΡΡ с установкой ΠΈ Π΄Π΅Π»Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΡΡ‚Π΅ΠΉΡˆΠΈΠ΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ. Если Ρ€Π°Π½ΡŒΡˆΠ΅, ΠΏΡ€ΠΈ словС Big Data, Hadoop, Google BigTable, HDFS, Ρƒ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠ³ΠΎ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ° Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π»ΠΈ прСдставлСния, Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΌ Ρ€Π΅Ρ‡ΡŒ ΠΎ ΠΊΠ°ΠΊΠΈΡ…-Ρ‚ΠΎ Ρ‚Π΅Ρ€Π°Π±Π°ΠΉΡ‚Π°Ρ…, ΠΏΠ΅Ρ‚Π°Π±Π°ΠΉΡ‚Π°Ρ…, Ρ‡Ρ‚ΠΎ настройками ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΎΠΉ для этих систСм Π·Π°Π½ΠΈΠΌΠ°ΡŽΡ‚ΡΡ Π½Π΅ΠΊΠΈΠ΅ ΡΠ²Π΅Ρ€Ρ…Π»ΡŽΠ΄ΠΈ, Ρ‚ΠΎ с появлСниСм Π‘Π” ClickHouse ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»ΠΈ простой, понятный инструмСнт, ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π΅ΡˆΠ°Ρ‚ΡŒ Π΄ΠΎ этого нСдостиТимый ΠΊΡ€ΡƒΠ³ Π·Π°Π΄Π°Ρ‡. Достаточно лишь ΠΎΠ΄Π½Π° довольно срСдняя машина ΠΈ ΠΏΡΡ‚ΡŒ ΠΌΠΈΠ½ΡƒΡ‚ Π½Π° установку. Π’ΠΎ Π΅ΡΡ‚ΡŒ ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»ΠΈ Ρ‚Π°ΠΊΡƒΡŽ Π‘Π” ΠΊΠ°ΠΊ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, MySql, Π½ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для хранСния ΠΌΠΈΠ»Π»ΠΈΠ°Ρ€Π΄ΠΎΠ² записСй! НСкий супСрархиватор с языком SQL. Π­Ρ‚ΠΎ ΠΊΠ°ΠΊ Π±ΡƒΠ΄Ρ‚ΠΎ людям ΠΏΠ΅Ρ€Π΅Π΄Π°Π»ΠΈ ΠΎΡ€ΡƒΠΆΠΈΠ΅ инопланСтян.

О нашСй систСмС сбора Π»ΠΎΠ³ΠΎΠ²

Для сбора ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Ρ„Π°ΠΉΠ»Ρ‹ Π»ΠΎΠ³ΠΎΠ² IIS Π²Π΅Π±-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ стандартного Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° (Ρ‚Π°ΠΊΠΆΠ΅ сСйчас ΠΌΡ‹ занимаСмся ΠΈ парсингом Π»ΠΎΠ³ΠΎΠ² ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ, Π½ΠΎ основная Ρ†Π΅Π»ΡŒ Π½Π° этапС ΠΏΠΈΠ»ΠΎΡ‚Π½ΠΎΠΉ эксплуатации Ρƒ нас – это сбор Π»ΠΎΠ³ΠΎΠ² IIS).

ΠŸΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ ΠΎΡ‚ стСка ELK Π½Π°ΠΌ ΠΎΡ‚ΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ ΠΏΠΎ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹ΠΌ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π°ΠΌ Π½Π΅ ΡƒΠ΄Π°Π»ΠΎΡΡŒ, ΠΈ ΠΌΡ‹ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ LogStash ΠΈ Filebeat, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π·Π°Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΠΎΠ²Π°Π»ΠΈ сСбя Ρ…ΠΎΡ€ΠΎΡˆΠΎ ΠΈ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ Π²ΠΏΠΎΠ»Π½Π΅ Π½Π°Π΄Π΅ΠΆΠ½ΠΎ ΠΈ прСдсказуСмо.

ΠžΠ±Ρ‰Π°Ρ схСма логирования прСдставлСна Π½Π° рисункС Π½ΠΈΠΆΠ΅:

Π‘Π” ClickHouse для людСй, ΠΈΠ»ΠΈ Π’Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ инопланСтян

ΠžΡΠΎΠ±Π΅Π½Π½ΠΎΡΡ‚ΡŒΡŽ записи Π΄Π°Π½Π½Ρ‹Ρ… Π² Π‘Π” ClickHouse являСтся нСчастая (Ρ€Π°Π· Π² сСкунду) вставка записСй большими ΠΏΠ°Ρ‡ΠΊΠ°ΠΌΠΈ. Π­Ρ‚ΠΎ, судя ΠΏΠΎ всСму, самая «проблСмная» Ρ‡Π°ΡΡ‚ΡŒ, с ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΡΡ‚Π°Π»ΠΊΠΈΠ²Π°Π΅ΡˆΡŒΡΡ ΠΏΡ€ΠΈ ΠΏΠ΅Ρ€Π²ΠΎΠΌ ΠΎΠΏΡ‹Ρ‚Π΅ Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Π‘Π” ClickHouse: схСма Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ услоТняСтся.
Π—Π΄Π΅ΡΡŒ сильно ΠΏΠΎΠΌΠΎΠ³ ΠΏΠ»Π°Π³ΠΈΠ½ для LogStash, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ вставляСт Π΄Π°Π½Π½Ρ‹Π΅ Π² ClickHouse. Π­Ρ‚ΠΎΡ‚ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ разворачиваСтся Π½Π° Ρ‚ΠΎΠΌ ΠΆΠ΅ сСрвСрС, Ρ‡Ρ‚ΠΎ ΠΈ сама Π‘Π”. Π’Π°ΠΊ, Π²ΠΎΠΎΠ±Ρ‰Π΅ говоря, Π½Π΅ рСкомСндуСтся Π΄Π΅Π»Π°Ρ‚ΡŒ, Π½ΠΎ с практичСской Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π΅ ΠΏΠ»ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Π΅ сСрвСра, ΠΏΠΎΠΊΠ° ΠΎΠ½ Ρ€Π°Π·Π²Π΅Ρ€Π½ΡƒΡ‚ Π½Π° Ρ‚ΠΎΠΌ ΠΆΠ΅ сСрвСрС. Ни сбоСв, Π½ΠΈ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ΠΎΠ² рСсурсов с Π‘Π” ΠΌΡ‹ Π½Π΅ наблюдали. К Ρ‚ΠΎΠΌΡƒ ΠΆΠ΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ Ρƒ ΠΏΠ»Π°Π³ΠΈΠ½Π° прСдусмотрСн ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ рСтрая Π² случаС ошибок. И Π² случаС ошибок ΠΏΠ»Π°Π³ΠΈΠ½ ΠΏΠΈΡˆΠ΅Ρ‚ Π½Π° диск ΠΏΠ°Ρ‡ΠΊΡƒ Π΄Π°Π½Π½Ρ‹Ρ…, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ ΡƒΠ΄Π°Π»ΠΎΡΡŒ Π²ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ (Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ Ρ„Π°ΠΉΠ»Π° ΡƒΠ΄ΠΎΠ±Π½Ρ‹ΠΉ: послС ΠΏΡ€Π°Π²ΠΊΠΈ, ΠΌΠΎΠΆΠ½ΠΎ Π»Π΅Π³ΠΊΠΎ Π·Π°ΠΈΠ½ΡΠ΅Ρ€Ρ‚ΠΈΡ‚ΡŒ ΠΈΡΠΏΡ€Π°Π²Π»Π΅Π½Π½ΡƒΡŽ ΠΏΠ°Ρ‡ΠΊΡƒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ clickhouse-client).

ΠŸΠΎΠ»Π½Ρ‹ΠΉ список ПО, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π² схСмС прСдставлСн Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅:

Cписок ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠ³ΠΎ ПО

НазваниС

ОписаниС

Бсылка Π½Π° дистрибутив

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- output- clickhouse

Плагин Loagstash для ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ Π»ΠΎΠ³ΠΎΠ² Π² Π‘Π” ClickHouse ΠΏΠ°Ρ‡ΠΊΠ°ΠΌΠΈ

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

/usr/share/logstash/bin/logstash-plugin install logstash-output-clickhouse

/usr/share/logstash/bin/logstash-plugin install logstash-filter-prune

/usr/share/logstash/bin/logstash-plugin install logstash-filter-multiline

ClickHouse

Π₯Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ Π»ΠΎΠ³ΠΎΠ² 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, поэтому ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΎΠ±ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΡ…. На ΠΌΠΎΠΌΠ΅Π½Ρ‚ установки ΠΌΡ‹ использовали ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹, собранныС Altinity.

Grafana

Визуализация Π»ΠΎΠ³ΠΎΠ². Настройка Π΄Π°ΡˆΠ±ΠΎΡ€Π΄ΠΎΠ²

https://grafana.com/

https://grafana.com/grafana/download

Redhat & Centos(64 Bit) – послСднюю Π²Π΅Ρ€ΡΠΈΡŽ

ClickHouse datasource for 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 Π½Π΅Ρ‚ output Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ Π² 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 Runtime (НСобходим для 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 прСдставлСна Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Π΅:

НазваниС

Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅

ΠšΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ

HDD: 40GB
RAM: 8GB
Processor: 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

ΠœΠΎΠ΄ΡƒΠ»ΡŒ систСмы
ДопустимыС значСния:

  • web β€” Π’Π΅Π±-сайт
  • svc β€” Π’Π΅Π±-сСрвис сайта
  • intgr β€” Π’Π΅Π±-сСрвис ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠΈ
  • bo β€” Админка (BackOffice)

web

fld_website_name

НазваниС сайта Π² IIS

На ΠΎΠ΄Π½ΠΎΠΌ сСрвСрС ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Ρ€Π°Π·Π²Π΅Ρ€Π½ΡƒΡ‚ΠΎ нСсколько систСм, ΠΈΠ»ΠΈ Π΄Π°ΠΆΠ΅ нСсколько экзСмпляров ΠΎΠ΄Π½ΠΎΠ³ΠΎ модуля систСмы

web-main

fld_server_name

Имя сСрвСра

web1.domain.com

fld_log_file_name

ΠŸΡƒΡ‚ΡŒ ΠΊ Ρ„Π°ΠΉΠ»Ρƒ Π»ΠΎΠ³Π° Π½Π° сСрвСрС

Π‘:inetpublogsLogFiles
W3SVC1u_ex190711.log

Π­Ρ‚ΠΎ позволяСт эффСктивно ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ Π³Ρ€Π°Ρ„ΠΈΠΊΠΈ Π² Grafana. НапримСр, ΠΏΡ€ΠΎΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒ запросы с Ρ„Ρ€ΠΎΠ½Ρ‚Π΅Π½Π΄Π° ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΉ систСмы. Π­Ρ‚ΠΎ ΠΏΠΎΡ…ΠΎΠΆΠ΅ Π½Π° счСтчик сайта Π² ЯндСкс.ΠœΠ΅Ρ‚Ρ€ΠΈΠΊΠ΅.

Π’ΠΎΡ‚ нСкоторая статистика ΠΏΠΎ использованию Π‘Π” Π·Π° Π΄Π²Π° мСсяца.

ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ записСй с Ρ€Π°Π·Π±ΠΈΠ²ΠΊΠΎΠΉ ΠΏΠΎ систСмам ΠΈ ΠΈΡ… ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°ΠΌ

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). Π Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π² Ρ€Π΅ΠΆΠΈΠΌΠ΅ tail (Ρ‚. Π΅. ΠΏΠ΅Ρ€Π΅Π΄Π°Π΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π½Ρ‹Π΅ записи Π² Ρ„Π°ΠΉΠ»). Но ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ Π½Π° ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Ρƒ Ρ„Π°ΠΉΠ»ΠΎΠ² Ρ†Π΅Π»ΠΈΠΊΠΎΠΌ. Π­Ρ‚ΠΎ ΡƒΠ΄ΠΎΠ±Π½ΠΎ, ΠΊΠΎΠ³Π΄Π° Π½ΡƒΠΆΠ½ΠΎ Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ Π·Π° ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΠ΅ мСсяцы. ΠŸΡ€ΠΎΡΡ‚ΠΎ ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚ΡŒ Ρ„Π°ΠΉΠ» с Π»ΠΎΠ³ΠΎΠΌ Π² ΠΏΠ°ΠΏΠΊΡƒ ΠΈ ΠΎΠ½ сам Π΅Π³ΠΎ ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Π΅Ρ‚ Ρ†Π΅Π»ΠΈΠΊΠΎΠΌ.

ΠŸΡ€ΠΈ остановкС сСрвиса, Π΄Π°Π½Π½Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅ΡΡ‚Π°ΡŽΡ‚ ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒΡΡ дальшС Π² Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ выглядит ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

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, поэтому Ссли останов Π½Π° ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ врСмя, Ρ‚ΠΎ Ρ‚ΠΎΠ³Π΄Π° Π»ΡƒΡ‡ΡˆΠ΅ ΠΎΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°Ρ‚ΡŒ Filebeat’Ρ‹ Π½Π° сСрвСрах. Π’ схСмС, Π³Π΄Π΅ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ RabbitMQ (Π² локальной сСти Filebeat Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ отправляСт Π»ΠΎΠ³ΠΈ Π² Logstash), Filebeat’Ρ‹ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ Π²ΠΏΠΎΠ»Π½Π΅ ΠΏΡ€ΠΈΠ΅ΠΌΠ»Π΅ΠΌΠΎ ΠΈ бСзопасно, поэтому для Π½ΠΈΡ… Π½Π΅Π΄ΠΎΡΡ‚ΡƒΠΏΠ½ΠΎΡΡ‚ΡŒ output ΠΏΡ€ΠΎΡ…ΠΎΠ΄ΠΈΡ‚ Π±Π΅Π· послСдствий.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ выглядит ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

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, Π»ΠΎΠ³ΠΈ apache ΠΈ nginx. Для Π»ΠΎΠ³ΠΎΠ² ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Ρ€Π΅Π³ΠΈΡΡ‚Ρ€ΠΈΡ€ΡƒΡŽΡ‚ΡΡ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ошибки, ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΎΠ½Π½Ρ‹Π΅ сообщСния, Π²Π°Ρ€Π½ΠΈΠ½Π³ΠΈ, Π±ΡƒΠ΄Π΅Ρ‚ прСдусмотрСна ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Π°Ρ Ρ‚Π°Π±Π»ΠΈΡ†Π°, с ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΉ структурой (сСйчас Π½Π° стадии проСктирования).

ΠŸΡ€ΠΈ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ ΠΎΡ‡Π΅Π½ΡŒ Π²Π°ΠΆΠ½ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒΡΡ с ΠΏΠ΅Ρ€Π²ΠΈΡ‡Π½Ρ‹ΠΌ ΠΊΠ»ΡŽΡ‡ΠΎΠΌ (ΠΏΠΎ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ Π±ΡƒΠ΄ΡƒΡ‚ ΡΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π΄Π°Π½Π½Ρ‹Π΅ ΠΏΡ€ΠΈ Ρ…Ρ€Π°Π½Π΅Π½ΠΈΠΈ). ΠžΡ‚ этого зависит ΡΡ‚Π΅ΠΏΠ΅Π½ΡŒ сТатия Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ запросов. Π’ нашСм ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΊΠ»ΡŽΡ‡ΠΎΠΌ являСтся
ORDER BY (fld_app_name, fld_app_module, logdatetime)
Π’. Π΅. ΠΏΠΎ названию систСмы, названию ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° систСмы ΠΈ Π΄Π°Ρ‚Π΅ события. ΠŸΠ΅Ρ€Π²ΠΎΠ½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎ Π΄Π°Ρ‚Π° события Π±Ρ‹Π»Π° Π½Π° ΠΏΠ΅Ρ€Π²ΠΎΠΌ мСстС. ПослС пСрСмСщСния Π΅Π΅ Π½Π° послСднСС мСсто запросы стали Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ Π² Π΄Π²Π° Ρ€Π°Π·Π° быстрСС. ИзмСнСниС ΠΏΠ΅Ρ€Π²ΠΈΡ‡Π½ΠΎΠ³ΠΎ ΠΊΠ»ΡŽΡ‡Π° ΠΏΠΎΡ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ пСрСсоздания Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ ΠΈ ΠΏΠ΅Ρ€Π΅Π·Π°Π»ΠΈΠ²ΠΊΠΈ Π΄Π°Π½Π½Ρ‹Ρ…, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ClickHouse пСрСсортировал Π΄Π°Π½Π½Ρ‹Π΅ Π½Π° дискС. Π­Ρ‚ΠΎ тяТСлая опСрация, поэтому ΠΆΠ΅Π»Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ сильно Π·Π°Ρ€Π°Π½Π΅Π΅ ΠΏΡ€ΠΎΠ΄ΡƒΠΌΠ°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π²Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒ Π² ΠΊΠ»ΡŽΡ‡ сортировки.

Π’Π°ΠΊΠΆΠ΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π² послСдних вСрсиях появился Ρ‚ΠΈΠΏ Π΄Π°Π½Π½Ρ‹Ρ… LowCardinality. ΠŸΡ€ΠΈ Π΅Π³ΠΎ использовании Ρ€Π΅Π·ΠΊΠΎ сокращаСтся Ρ€Π°Π·ΠΌΠ΅Ρ€ сТатых Π΄Π°Π½Π½Ρ‹Ρ… для Ρ‚Π΅Ρ… ΠΏΠΎΠ»Π΅ΠΉ, Ρƒ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… низкая ΠΊΠ°Ρ€Π΄ΠΈΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ (ΠΌΠ°Π»ΠΎ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠ²).

БСйчас ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ вСрсия 19.6, ΠΈ ΠΌΡ‹ ΠΏΠ»Π°Π½ΠΈΡ€ΡƒΠ΅ΠΌ ΠΏΠΎΠΏΡ€ΠΎΠ±ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ±Π½ΠΎΠ²ΠΈΡ‚ΡŒ Π²Π΅Ρ€ΡΠΈΡŽ Π΄ΠΎ послСднСй. Π’ Π½ΠΈΡ… появились Ρ‚Π°ΠΊΠΈΠ΅ Π·Π°ΠΌΠ΅Ρ‡Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ Ρ„ΠΈΡ‡ΠΈ ΠΊΠ°ΠΊ Adaptive Granularity, Skipping indices ΠΈ ΠΊΠΎΠ΄Π΅ΠΊ DoubleDelta, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€.

По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΠΏΡ€ΠΈ установкС Π² ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ установлСн ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ логирования trace. Π›ΠΎΠ³ΠΈ Ρ€ΠΎΡ‚ΠΈΡ€ΡƒΡŽΡ‚ΡΡ ΠΈ Π°Ρ€Ρ…ΠΈΠ²ΠΈΡ€ΡƒΡŽΡ‚ΡΡ, Π½ΠΎ ΠΏΡ€ΠΈ этом Ρ€Π°ΡΡˆΠΈΡ€ΡΡŽΡ‚ΡΡ Π΄ΠΎ Π³ΠΈΠ³Π°Π±Π°ΠΉΡ‚Π°. Если Π½Π΅Ρ‚ нСобходимости, Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ warning, Ρ‚ΠΎΠ³Π΄Π° Ρ€Π°Π·ΠΌΠ΅Ρ€ Π»ΠΎΠ³Π° Ρ€Π΅Π·ΠΊΠΎ ΡƒΠΌΠ΅Π½ΡŒΡˆΠ°Π΅Ρ‚ΡΡ. Настройка логирования задаСтся Π² Ρ„Π°ΠΉΠ»Π΅ 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 Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ output ΠΏΠ»Π°Π³ΠΈΠ½Π° для записи Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ Π² RabbitMQ. И Ρ‚Π°ΠΊΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π», судя ΠΏΠΎ ишью Π½Π° ΠΈΡ… Π³ΠΈΡ‚Ρ…Π°Π±Π΅, Π½Π΅ планируСтся ΠΊ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ. Π•ΡΡ‚ΡŒ ΠΏΠ»Π°Π³ΠΈΠ½ для ΠšΠ°Ρ„ΠΊΠΈ, Π½ΠΎ ΠΏΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΌ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π°ΠΌ ΠΌΡ‹ Π½Π΅ ΠΌΠΎΠΆΠ΅ΠΌ Π΅Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρƒ сСбя.
  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. ВсС сообщСния ΠΏΠΎΠΏΠ°Π΄Π°ΡŽΡ‚ Π² ΠΎΠ΄Π½Ρƒ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ. Если ΠΏΠΎ ΠΊΠ°ΠΊΠΈΠΌ Π»ΠΈΠ±ΠΎ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π°ΠΌ Π±ΡƒΠ΄Π΅Ρ‚ остановлСн сСрвис ΠΎΡ‡Π΅Ρ€Π΅Π΄Π΅ΠΉ, Ρ‚ΠΎ это Π½Π΅ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Ρ‚ ΠΊ ΠΏΠΎΡ‚Π΅Ρ€Π΅ сообщСний: FileBeat’Ρ‹ Π±ΡƒΠ΄ΡƒΡ‚ ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ΡŒ ошибки соСдинСния ΠΈ приостановят Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΡƒ. А LogStash, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρ‡ΠΈΡ‚Π°Π΅Ρ‚ ΠΈΠ· ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ, Ρ‚Π°ΠΊΠΆΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ΡŒ сСтСвыС ошибки ΠΈ ΠΆΠ΄Π°Ρ‚ΡŒ, ΠΊΠΎΠ³Π΄Π° Π²ΠΎcстановится соСдинСниС. Π”Π°Π½Π½Ρ‹Π΅ ΠΏΡ€ΠΈ этом, ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎ, пСрСстанут ΠΏΠΈΡΠ°Ρ‚ΡŒΡΡ Π² Π‘Π”.

Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ инструкции ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ для создания ΠΈ настройки ΠΎΡ‡Π΅Ρ€Π΅Π΄Π΅ΠΉ:

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. Π”Π°ΡˆΠ±ΠΎΡ€Π΄Ρ‹

Π­Ρ‚ΠΎΡ‚ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для Π²ΠΈΠ·ΡƒΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π΄Π°Π½Π½Ρ‹Ρ… ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³Π°. ΠŸΡ€ΠΈ этом Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ ΠΏΠ»Π°Π³ΠΈΠ½ ClickHouse datasource for 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. НСкоторый экзотичСский Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π» ΠΈΠ»ΠΈ Π½ΠΎΠ²Ρ‹Π΅ Ρ„ΠΈΡ‡ΠΈ часто Π² Π½ΠΎΠ²Ρ‹Ρ… вСрсиях Π»ΠΎΠΌΠ°ΡŽΡ‚ΡΡ. Π­Ρ‚ΠΎ Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ опасСния, ΡƒΠΌΠ΅Π½ΡŒΡˆΠ°Ρ ΠΆΠ΅Π»Π°Π½ΠΈΠ΅ ΠΎΠ±Π½ΠΎΠ²ΠΈΡ‚ΡŒΡΡ Π΄ΠΎ Π½ΠΎΠ²ΠΎΠΉ вСрсии. НапримСр, Π΄Π²ΠΈΠΆΠΎΠΊ Ρ‚Π°Π±Π»ΠΈΡ† Kafka – ΠΎΡ‡Π΅Π½ΡŒ полСзная Ρ„ΠΈΡ‡Π°, которая позволяСт Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ Ρ‡ΠΈΡ‚Π°Ρ‚ΡŒ события ΠΈΠ· ΠΊΠ°Ρ„ΠΊΠΈ, Π±Π΅Π· Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΊΠΎΠ½ΡΡŒΡŽΠΌΠ΅Ρ€ΠΎΠ². Но судя ΠΏΠΎ количСству Issue Π½Π° Π³ΠΈΡ‚Ρ…Π°Π±Π΅, ΠΌΡ‹ ΠΏΠΎΠΊΠ° остСрСгаСмся ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ этот Π΄Π²ΠΈΠΆΠΎΠΊ Π² ΠΏΡ€ΠΎΠ΄Π°ΠΊΡˆΠ΅Π½Π΅. Π’ΠΏΡ€ΠΎΡ‡Π΅ΠΌ, Ссли Π½Π΅ Π΄Π΅Π»Π°Ρ‚ΡŒ Ρ€Π΅Π·ΠΊΠΈΡ… Ρ‚Π΅Π»ΠΎΠ΄Π²ΠΈΠΆΠ΅Π½ΠΈΠΉ Π² сторону ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ основной Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π», Ρ‚ΠΎ ΠΎΠ½ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½ΠΎ.

ΠŸΠ»ΡŽΡΡ‹

  1. НС Ρ‚ΠΎΡ€ΠΌΠΎΠ·ΠΈΡ‚.
  2. Низкий ΠΏΠΎΡ€ΠΎΠ³ Π²Ρ…ΠΎΠ΄Π°.
  3. Open-source.
  4. БСсплатна.
  5. Π₯ΠΎΡ€ΠΎΡˆΠΎ ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΡƒΠ΅Ρ‚ΡΡ (ΡˆΠ°Ρ€Π΄ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅/рСпликация Β«ΠΈΠ· ΠΊΠΎΡ€ΠΎΠ±ΠΊΠΈΒ»)
  6. Π’Ρ…ΠΎΠ΄ΠΈΡ‚ Π² рССстр российского ПО, Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ МинКомБвязи.
  7. НаличиС ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠΉ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ ΠΎΡ‚ ЯндСкс.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ: habr.com