ClickHouse Database for Humans፣ ወይም Alien Technologies

አሌክሲ ሊዙኖቭ፣ ዹ MKB ዹመሹጃ ቎ክኖሎጂዎቜ ዳይሬክቶሬት ዚርቀት አገልግሎት ቻናሎቜ ዚብቃት ማእኚል ኃላፊ

ClickHouse Database for Humans፣ ወይም Alien Technologies

ኚኀልኬ ቁልል (ElasticSearch, Logstash, Kibana) እንደ አማራጭ ዹ ClickHouse ዳታቀዝ ዚምዝግብ ማስታወሻዎቜን እንደ ዚውሂብ ማኚማቻ ስለመጠቀም ምርምር እያደሚግን ነው።

በዚህ ጜሑፍ ውስጥ ስለ ClickHouse ዳታቀዝ ስለመጠቀም ያለንን ልምድ እና ዚአብራሪ ሥራ ዚመጀመሪያ ውጀቶቜን መነጋገር እንፈልጋለን። ውጀቶቹ አስደናቂ እንደነበሩ ወዲያውኑ ልብ ሊባል ይገባል.


ClickHouse Database for Humans፣ ወይም Alien Technologies

በመቀጠል, ዚእኛ ስርዓት እንዎት እንደሚዋቀር, እና ምን አይነት አካላትን እንደሚያካትት በበለጠ ዝርዝር እንገልፃለን. አሁን ግን ስለዚህ ዚውሂብ ጎታ በአጠቃላይ ትንሜ ማውራት እፈልጋለሁ, እና ለምን ትኩሚት መስጠት እንዳለበት. ዹ ClickHouse ዳታቀዝ ኹ Yandex ኹፍተኛ አፈጻጞም ያለው ዚትንታኔ ዓምድ ዳታቀዝ ነው። በ Yandex አገልግሎቶቜ ውስጥ ጥቅም ላይ ይውላል, መጀመሪያ ላይ ለ Yandex.Metrica ዋናው ዚውሂብ ማኚማቻ ነው. ክፍት ምንጭ ስርዓት ፣ ነፃ። ኚገንቢ እይታ አንጻር፣ እንዎት እንደተገበሩት ሁልጊዜ አስብ ነበር፣ ምክንያቱም በሚያስደንቅ ሁኔታ ትልቅ መሹጃ አለ። እና ዚሜትሪክስ ዹተጠቃሚ በይነገጜ ራሱ በጣም ተለዋዋጭ እና ፈጣን ነው። ኹዚህ ዹመሹጃ ቋት ጋር ለመጀመሪያ ጊዜ ሲያውቁ ፣ ግንዛቀው “ደህና ፣ በመጚሚሻ! ለህዝብ ዚተሰራ! ኚመጫን ሂደቱ ጀምሮ እና በመላክ ጥያቄዎቜን ያበቃል.

ይህ ዚውሂብ ጎታ በጣም ዝቅተኛ ዚመግቢያ ገደብ አለው። አማካኝ ቜሎታ ያለው ገንቢ እንኳን ይህን ዳታቀዝ በጥቂት ደቂቃዎቜ ውስጥ ጭኖ መጠቀም ሊጀምር ይቜላል። ሁሉም ነገር በግልጜ ይሰራል. ለሊኑክስ አዲስ ዹሆኑ ሰዎቜ እንኳን መጫኑን በፍጥነት ማስተናገድ እና ቀላል ስራዎቜን ማኹናወን ይቜላሉ። ቀደም ሲል ፣ ቢግ ዳታ ፣ ሃዱፕ ፣ ጎግል ቢግ ቎ብል ፣ ኀቜዲኀፍኀስ በሚሉት ቃላት አንድ ተራ ገንቢ ስለ አንዳንድ ቎ራባይት ፣ ፔታባይት ፣ አንዳንድ ኹሰው በላይ ዹሆኑ ሰዎቜ ለእነዚህ ስርዓቶቜ ቅንጅቶቜ እና ልማት ውስጥ ይሳተፋሉ ዹሚል ሀሳብ ነበሹው ፣ ኚዚያ ዹ ClickHouse መምጣት ጋር። ዚውሂብ ጎታ፣ ኹዚህ ቀደም ሊደሚስ ዚማይቜለውን ዚተግባር ብዛት መፍታት ዚሚቜሉበት ቀላል እና ለመሚዳት ዚሚቻል መሳሪያ አግኝተናል። ለመጫን አንድ ትክክለኛ አማካይ ማሜን እና አምስት ደቂቃ ብቻ ነው ዚሚወስደው። ያም ማለት እንደ MySql ያሉ ዚውሂብ ጎታ አግኝተናል ነገር ግን በቢሊዮኖቜ ዚሚቆጠሩ መዝገቊቜን ለማኚማ቞ት ብቻ ነው! ኹSQL ቋንቋ ጋር ዹተወሰነ ልዕለ-መዝገብ ቀት። ሰዎቜ ዚባዕድ ጩር መሳሪያ እንደተሰጣ቞ው ነው።

ስለ እኛ ዚምዝግብ ማስታወሻ ስርዓት

መሹጃን ለመሰብሰብ ዹ IIS ሎግ ፋይሎቜ መደበኛ ቅርጞት ዚድር መተግበሪያዎቜ ጥቅም ላይ ይውላሉ (በአሁኑ ጊዜ ዚመተግበሪያ ምዝግብ ማስታወሻዎቜን እዚተመለኚትን ነው ነገር ግን በሙኚራ ደሹጃ ላይ ያለው ዋናው ግብ ዹ IIS ምዝግብ ማስታወሻዎቜን መሰብሰብ ነው)።

በተለያዩ ምክንያቶቜ ዹ ELK ቁልል ሙሉ በሙሉ መተው አልቻልንም፣ እና እራሳ቞ውን በሚገባ ያሚጋገጡ እና በትክክል ዚሚሰሩትን LogStash እና Filebeat ክፍሎቜን መጠቀማቜንን ቀጥለናል።

አጠቃላይ ዚምዝገባ እቅድ ኹዚህ በታቜ ባለው ስእል ውስጥ ይታያል።

ClickHouse Database for Humans፣ ወይም Alien Technologies

ወደ ClickHouse ዳታቀዝ ውሂብ ዹመፃፍ ባህሪ ብዙ ጊዜ (በሎኮንድ አንድ ጊዜ) መዝገቊቜን በትላልቅ ስብስቊቜ ውስጥ ማስገባት ነው። ይህ ኹክሊክ ሃውስ ዳታቀዝ ጋር ለመጀመሪያ ጊዜ ሲሰሩ ዚሚያጋጥሙት በጣም “ቜግር ያለበት” ክፍል ነው፡ እቅዱ ትንሜ ዚተወሳሰበ ይሆናል።
ዹ LogStash ፕለጊን ፣ መሹጃን በቀጥታ ወደ ClickHouse ዚሚያስገባ ፣ እዚህ ብዙ ሚድቷል። ይህ አካል እንደ ዳታቀዝ ራሱ በተመሳሳይ አገልጋይ ላይ ተዘርግቷል። ስለዚህ, በአጠቃላይ አነጋገር, በተመሳሳይ አገልጋይ ላይ በሚሰራጭበት ጊዜ ዚተለያዩ አገልጋዮቜን እንዳያመርቱ, ኚተግባራዊ እይታ አንጻር ግን እንዲያደርጉት አይመኹርም. ኹመሹጃ ቋቱ ጋር ምንም አይነት ውድቀቶቜ ወይም ዚንብሚት ግጭቶቜ አላዚንም። በተጚማሪም, ፕለጊኑ ስህተቶቜ ካሉ እንደገና ዹመሞኹር ዘዮ እንዳለው ልብ ሊባል ይገባል. እና ስህተቶቜ ካሉ, ፕለጊኑ ሊገባ ዚማይቜል ዚውሂብ ስብስብ ወደ ዲስክ ይጜፋል (ዹፋይል ቅርጞቱ ምቹ ነው: ኚአርትዖት በኋላ ዚተስተካኚለውን ክሊክ ቀት-ደንበኛን በመጠቀም በቀላሉ ማስገባት ይቜላሉ).

በእቅዱ ውስጥ ጥቅም ላይ ዹዋሉ ዚሶፍትዌር ሙሉ ዝርዝር በሠንጠሚዥ ውስጥ ቀርቧል-

ያገለገሉ ሶፍትዌሮቜ ዝርዝር

ርዕስ

መግለጫ

ዚስርጭት አገናኝ

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 (ለዊንዶውስ 64 ቢት ማኚፋፈያ)።

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

logstash

ዚምዝግብ ማስታወሻ ሰብሳቢ.

ምዝግብ ማስታወሻዎቜን ኚፋይልቢት ለመሰብሰብ፣ እንዲሁም ኹ RabbitMQ ወሹፋ (በዲኀምዚኀስ ውስጥ ላሉ አገልጋዮቜ) ምዝግብ ማስታወሻዎቜን ለመሰብሰብ ይጠቅማል።

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

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

Logstash-ውጀት-ክሊክ ሃውስ

Loagstash plugin ምዝግብ ማስታወሻዎቜን ወደ 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 "መደበኛ" rpm ይገነባል በ Yandex ማኚማቻ ውስጥ ታዚ, ስለዚህ እነሱን ለመጠቀም መሞኹር ይቜላሉ. በመጫን ጊዜ በአልቲኒቲ ዚተገነቡ ጥቅሎቜን እንጠቀም ነበር.

ግራፋና

ዚምዝግብ ማስታወሻ እይታ. ዳሜቊርዶቜን በማዘጋጀት ላይ

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

ራውተርን ኚፋይልቢት ወደ 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 Runtime (ለ 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 ዳታቀዝ ጋር ያለው ዹአገልጋይ ውቅር በሚኹተለው ሠንጠሚዥ ቀርቧል።

ርዕስ

ዋጋ

አመለኹተ

ውቅር

HDD: 40GB
ራም: 8 ጊባ
ፕሮሰሰር: ኮር 2 2Ghz

ዹ ClickHouse ዳታቀዝ (ክሊክሃውስ) ዹመሹጃ ቋቱን ለማስኬድ ምክሮቜን ትኩሚት መስጠት ያስፈልጋል ።https://clickhouse.yandex/docs/ru/operations/tips/)

አጠቃላይ ዚስርዓት ሶፍትዌር

ስርዓተ ክወና፡ Red Hat Enterprise Linux Server (Maipo)

ጄአርአይ (ጃቫ 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_ስም

ዚመተግበሪያ / ዚስርዓት ስም
ትክክለኛ እሎቶቜ፡-

  • site1.domain.com ውጫዊ ጣቢያ 1
  • site2.domain.com ውጫዊ ጣቢያ 2
  • internal-site1.domain.local Internal site 1

site1.domain.com

fld_app_module

ዚስርዓት ሞጁል
ትክክለኛ እሎቶቜ፡-

  • ድር - ድር ጣቢያ
  • svc - ዚድር ጣቢያ አገልግሎት
  • intgr - ዚውህደት ድር አገልግሎት
  • ቩ - አስተዳዳሪ (BackOffice)

ዚድር

fld_ድሚ-ገጜ_ስም

በ IIS ውስጥ ዚጣቢያ ስም

ብዙ ስርዓቶቜ በአንድ አገልጋይ ላይ ሊሰማሩ ይቜላሉ፣ ወይም በአንድ ዚስርዓት ሞጁል ውስጥ ብዙ አጋጣሚዎቜ

ዚድር ዋና

fld_አገልጋይ_ስም

ዹአገልጋይ ስም

web1.domain.com

fld_log_ፋይል_ስም

በአገልጋዩ ላይ ወደ ዚምዝግብ ማስታወሻ ፋይል ዚሚወስደው መንገድ

ሐ፡ inetpublogsLogFiles
W3SVC1u_ex190711.ሎግ

ይህ በግራፋና ውስጥ ግራፎቜን በብቃት እንዲገነቡ ያስቜልዎታል። ለምሳሌ፣ ኚአንድ ዹተወሰነ ስርዓት ፊት ለፊት ዚሚመጡ ጥያቄዎቜን ይመልኚቱ። ይህ በ 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. ዚምዝግብ ማስታወሻ ሰብሳቢ

ይህ አካል ዹተነደፈው ኚፋይልቢት (ወይም በ 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 logs. ለመተግበሪያ ምዝግብ ማስታወሻዎቜ, ለምሳሌ, ስህተቶቜ, ዹመሹጃ መልዕክቶቜ, ማስጠንቀቂያዎቜ ዚተመዘገቡበት, ዹተለዹ ሠንጠሚዥ በተገቢው መዋቅር (በአሁኑ ጊዜ በንድፍ ደሹጃ) ይቀርባል.

ጠሹጮዛን ሲነድፉ ዋናውን ቁልፍ መወሰን በጣም አስፈላጊ ነው (በማኚማቻው ወቅት መሹጃው ዹሚለዹው) ። ዚውሂብ መጚመቂያ እና ዹመጠይቅ ፍጥነት መጠን በዚህ ላይ ዹተመሰሹተ ነው. በእኛ ምሳሌ, ዋናው ነገር ነው
ትእዛዝ በ (fld_app_name፣ fld_app_module፣ logdatetime)
ይህም ማለት በስርዓቱ ስም, ዚስርዓቱ አካል ስም እና ዚዝግጅቱ ቀን. መጀመሪያ ላይ ዚክስተቱ ቀን መጀመሪያ መጣ. ወደ መጚሚሻው ቊታ ኹተዛወሹ በኋላ፣ መጠይቆቜ በእጥፍ ፍጥነት መስራት ጀመሩ። ዋናውን ቁልፍ መቀዹር ሰንጠሚዡን እንደገና መፍጠር እና ውሂቡን እንደገና መጫን ያስፈልገዋል ClickHouse በዲስክ ላይ ያለውን መሹጃ እንደገና ለመደርደር. ይህ ኚባድ ክዋኔ ነው፣ስለዚህ በመደርደር ቁልፍ ውስጥ ምን መካተት እንዳለበት ብዙ ማሰብ ጥሩ ሀሳብ ነው።

በተጚማሪም ዚሎውካርዲናሊቲ ዚውሂብ አይነት በአንጻራዊነት በቅርብ ጊዜ ስሪቶቜ ውስጥ እንደታዚ ልብ ሊባል ይገባል. በሚጠቀሙበት ጊዜ ዝቅተኛ ካርዲኒቲ (ጥቂት አማራጮቜ) ላላቾው መስኮቜ ዚታመቀ መሹጃ መጠን በእጅጉ ይቀንሳል.

ስሪት 19.6 በአሁኑ ጊዜ ጥቅም ላይ ዹዋለ ሲሆን ወደ አዲሱ ስሪት ለማዘመን አቅደናል። እንደ Adaptive 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>

አንዳንድ ጠቃሚ ትዕዛዞቜ

ППскПльку ПрОгОМальМые пакеты устаМПвкО сПбОраются пП 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. ራውተርን ኚፋይልቢት ወደ RabbitMQ ወሹፋ ያስገቡ

ይህ አካል ኚፋይልቢት ዚሚመጡትን ምዝግብ ማስታወሻዎቜ ወደ RabbitMQ ወሹፋ ለመምራት ይጠቅማል። እዚህ ሁለት ነጥቊቜ አሉ.

  1. እንደ አለመታደል ሆኖ FileBeat በቀጥታ ወደ RabbitMQ ዚሚጜፍ ዚውጀት ተሰኪ ዚለውም። እና እንደዚህ አይነት ተግባራዊነት, በ github ላይ ባለው ጉዳይ ላይ በመመዘን, ለትግበራ ዚታቀደ አይደለም. ለካፍካ ፕለጊን አለ፣ ግን በሆነ ምክንያት በቀት ውስጥ ልንጠቀምበት አንቜልም።
  2. በ DMZ ውስጥ ምዝግብ ማስታወሻዎቜን ለመሰብሰብ መስፈርቶቜ አሉ. በእነሱ ላይ በመመስሚት, ምዝግብ ማስታወሻዎቹ መጀመሪያ ወደ ወሹፋው መጹመር አለባ቞ው ኚዚያም LogStash መዝገቊቹን ኹወሹፋው ኹውጭ ያነባል.

ስለዚህ, አንድ ሰው ትንሜ ዚተወሳሰበ እቅድ መጠቀም ያለበት በዲኀምኀስ ውስጥ አገልጋዮቜ በሚገኙበት ጊዜ ነው. ዚምሳሌ ውቅር ይህን ይመስላል።

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 ውስጥ ዚምዝግብ ማስታወሻዎቜን ለማስቀመጥ ይጠቅማል። ቀሚጻ ዹሚኹናወነው በፋይልቢት → LogStash ስብስብ ነው። ማንበብ ዚሚካሄደው ኹDMZ ውጪ በLogStash በኩል ነው። በRabboitMQ በኩል ሲሰራ በሰኚንድ ወደ 4 ሺህ ዹሚጠጉ መልእክቶቜ ይስተናገዳሉ።

ዚመልእክት ማዘዋወር በስርዓት ስም ዹተዋቀሹ ነው፣ ማለትም በፋይልቢት ውቅር ውሂብ ላይ በመመስሚት። ሁሉም መልዕክቶቜ ወደ አንድ ወሹፋ ይሄዳሉ። በሆነ ምክንያት ዹወሹፋ አገልግሎት ኹቆመ ይህ ወደ መልእክቶቜ መጥፋት አይመራም: 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"

ግራፋና ዳሜቊርዶቜ

ይህ አካል ዚክትትል ውሂብን በምስል ለማሳዚት ያገለግላል። በዚህ አጋጣሚ ለግራፋና 4.6+ ፕለጊን ዹ ClickHouse ዳታ ምንጭን መጫን አለቊት። በዳሜቊርዱ ላይ ዹ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 ላይ ባሉ ጉዳዮቜ ብዛት በመመዘን ይህንን ሞተር በምርት ውስጥ እንዳንጠቀም አሁንም እንጠነቀቃለን። ሆኖም ድንገተኛ ምልክቶቜን ወደ ጎን ካላደሚጉ እና ዋናውን ተግባር ካልተጠቀሙ ኚዚያ በተሹጋጋ ሁኔታ ይሰራል።

ደማቅ

  1. አይዘገይም።
  2. ዝቅተኛ ዚመግቢያ ገደብ።
  3. ክፍት ምንጭ.
  4. ፍርይ.
  5. ሚዛኖቜ በደንብ (ኚሳጥኑ ውስጥ መኹፋፈል/ማባዛት)
  6. በኮሙኒኬሜን ሚኒስ቎ር ዹተጠቆመው ዚሩስያ ሶፍትዌር መዝገብ ውስጥ ተካትቷል.
  7. ኹ Yandex ኩፊሮላዊ ድጋፍ መገኘት.

ምንጭ: hab.com

አስተያዚት ያክሉ