மனிதர்களுக்கான ClickHouse டேட்டாபேஸ் அல்லது ஏலியன் டெக்னாலஜிஸ்

அலெக்ஸி லிசுனோவ், ICB இன் தகவல் தொழில்நுட்ப இயக்குநரகத்தின் தொலைநிலை சேவை சேனல்களுக்கான திறன் மையத்தின் தலைவர்

மனிதர்களுக்கான ClickHouse டேட்டாபேஸ் அல்லது ஏலியன் டெக்னாலஜிஸ்

ELK ஸ்டாக்கிற்கு மாற்றாக (ElasticSearch, Logstash, Kibana), நாங்கள் ClickHouse தரவுத்தளத்தை பதிவுகளுக்கான தரவு சேமிப்பகமாகப் பயன்படுத்துவது குறித்து ஆராய்ச்சி செய்து வருகிறோம்.

இந்தக் கட்டுரையில் கிளிக்ஹவுஸ் தரவுத்தளத்தைப் பயன்படுத்திய அனுபவம் மற்றும் பைலட் செயல்பாட்டின் ஆரம்ப முடிவுகளைப் பற்றி பேச விரும்புகிறோம். முடிவுகள் சுவாரஸ்யமாக இருந்தன என்பது இப்போதே கவனிக்கத்தக்கது.


மனிதர்களுக்கான ClickHouse டேட்டாபேஸ் அல்லது ஏலியன் டெக்னாலஜிஸ்

அடுத்து, எங்கள் கணினி எவ்வாறு கட்டமைக்கப்பட்டுள்ளது மற்றும் அதில் என்ன கூறுகள் உள்ளன என்பதை இன்னும் விரிவாக விவரிப்போம். ஆனால் இப்போது இந்த தரவுத்தளத்தை ஒட்டுமொத்தமாகப் பற்றி கொஞ்சம் பேச விரும்புகிறேன், அது ஏன் கவனம் செலுத்த வேண்டும். ClickHouse தரவுத்தளமானது Yandex இலிருந்து ஒரு உயர் செயல்திறன் கொண்ட பகுப்பாய்வு நிரல் தரவுத்தளமாகும். Yandex சேவைகளில் பயன்படுத்தப்படுகிறது, ஆரம்பத்தில் இது Yandex.Metrica க்கான முக்கிய தரவு சேமிப்பகமாகும். திறந்த மூல அமைப்பு, இலவசம். ஒரு டெவலப்பரின் பார்வையில், அவர்கள் இதை எவ்வாறு செயல்படுத்தினார்கள் என்று நான் எப்போதும் ஆச்சரியப்பட்டேன், ஏனெனில் அற்புதமான தரவு உள்ளது. மேலும் மெட்ரிகா பயனர் இடைமுகம் மிகவும் நெகிழ்வானது மற்றும் விரைவாக வேலை செய்கிறது. இந்த தரவுத்தளத்துடன் நீங்கள் முதலில் பழகும்போது, ​​​​நீங்கள் உணர்வைப் பெறுவீர்கள்: "சரி, இறுதியாக! மக்களுக்காக உருவாக்கப்பட்டது! நிறுவல் செயல்முறையிலிருந்து கோரிக்கைகளை அனுப்புவது வரை."

இந்த தரவுத்தளமானது மிகக் குறைந்த நுழைவுத் தடையைக் கொண்டுள்ளது. ஒரு சராசரி டெவலப்பர் கூட இந்த தரவுத்தளத்தை சில நிமிடங்களில் நிறுவி, அதைப் பயன்படுத்தத் தொடங்கலாம். எல்லாம் தெளிவாக வேலை செய்கிறது. லினக்ஸுக்கு புதியவர்கள் கூட நிறுவலை விரைவாகச் சமாளித்து எளிய செயல்பாடுகளைச் செய்யலாம். இதற்கு முன்பு, பிக் டேட்டா, ஹடூப், கூகுள் பிக்டேபிள், எச்டிஎஃப்எஸ் போன்ற வார்த்தைகளைக் கேட்கும் போது, ​​சராசரி டெவலப்பர்கள் சில டெராபைட்கள், பெட்டாபைட்கள் பற்றிப் பேசுகிறார்கள், இந்த அமைப்புகளை அமைப்பதிலும் உருவாக்குவதிலும் சில அமானுஷ்ய மனிதர்கள் ஈடுபட்டுள்ளனர் என்ற எண்ணம் இருந்தால், ClickHouse தரவுத்தளத்தின் வருகையால், எங்களிடம் எளிமையான, புரிந்துகொள்ளக்கூடிய கருவி கிடைத்தது, இதன் மூலம் நீங்கள் முன்னர் அடைய முடியாத அளவிலான சிக்கல்களைத் தீர்க்க முடியும். ஒரு சராசரி இயந்திரம் மற்றும் நிறுவ ஐந்து நிமிடங்கள் ஆகும். அதாவது, எடுத்துக்காட்டாக, MySql போன்ற தரவுத்தளத்தைப் பெற்றுள்ளோம், ஆனால் பில்லியன் கணக்கான பதிவுகளை சேமிப்பதற்காக மட்டுமே! SQL மொழியுடன் கூடிய ஒரு வகையான சூப்பர் ஆர்க்கிவர். இது மக்களுக்கு அன்னிய ஆயுதங்கள் கொடுக்கப்பட்டது போன்றது.

எங்கள் பதிவு அமைப்பு பற்றி

தகவலைச் சேகரிக்க, நிலையான வடிவ வலை பயன்பாடுகளின் IIS பதிவு கோப்புகள் பயன்படுத்தப்படுகின்றன (நாங்கள் தற்போது பயன்பாட்டுப் பதிவுகளையும் பாகுபடுத்துகிறோம், ஆனால் பைலட் கட்டத்தில் முக்கிய குறிக்கோள் IIS பதிவுகளை சேகரிப்பதாகும்).

பல்வேறு காரணங்களுக்காக, எங்களால் ELK அடுக்கை முழுமையாக கைவிட முடியவில்லை, மேலும் LogStash மற்றும் Filebeat கூறுகளை நாங்கள் தொடர்ந்து பயன்படுத்துகிறோம், அவை தங்களை நன்கு நிரூபித்துள்ளன மற்றும் மிகவும் நம்பகத்தன்மையுடனும் கணிக்கக்கூடியதாகவும் செயல்படுகின்றன.

பொதுவான பதிவுத் திட்டம் கீழே உள்ள படத்தில் காட்டப்பட்டுள்ளது:

மனிதர்களுக்கான ClickHouse டேட்டாபேஸ் அல்லது ஏலியன் டெக்னாலஜிஸ்

ClickHouse தரவுத்தளத்தில் தரவை எழுதுவதற்கான ஒரு அம்சம், பெரிய தொகுதிகளில் பதிவுகளை எப்போதாவது (வினாடிக்கு ஒரு முறை) செருகுவது. கிளிக்ஹவுஸ் தரவுத்தளத்துடன் நீங்கள் முதலில் பணிபுரியும் போது நீங்கள் எதிர்கொள்ளும் மிகவும் "சிக்கல்" பகுதி இதுவாகும்: திட்டம் இன்னும் கொஞ்சம் சிக்கலானதாகிறது.
ClickHouse இல் தரவை நேரடியாகச் செருகும் LogStashக்கான செருகுநிரல் இங்கு பெரிதும் உதவியது. இந்த கூறு தரவுத்தளத்தின் அதே சேவையகத்தில் பயன்படுத்தப்படுகிறது. எனவே, பொதுவாகச் சொன்னால், அதைச் செய்ய பரிந்துரைக்கப்படவில்லை, ஆனால் ஒரு நடைமுறைக் கண்ணோட்டத்தில், அதே சேவையகத்தில் பயன்படுத்தப்படும்போது தனி சேவையகங்களை உருவாக்கக்கூடாது. தரவுத்தளத்தில் எந்த தோல்விகளையும் ஆதார முரண்பாடுகளையும் நாங்கள் கவனிக்கவில்லை. கூடுதலாக, பிழைகள் ஏற்பட்டால் சொருகி மீண்டும் முயற்சிக்கும் பொறிமுறையைக் கொண்டுள்ளது என்பதைக் கவனத்தில் கொள்ள வேண்டும். பிழைகள் ஏற்பட்டால், செருகுநிரல் செருக முடியாத ஒரு தொகுதி தரவை வட்டுக்கு எழுதுகிறது (கோப்பு வடிவம் வசதியானது: திருத்திய பின், கிளிக்ஹவுஸ்-கிளையண்டைப் பயன்படுத்தி சரிசெய்யப்பட்ட தொகுப்பை எளிதாக செருகலாம்).

திட்டத்தில் பயன்படுத்தப்படும் மென்பொருளின் முழுமையான பட்டியல் அட்டவணையில் வழங்கப்படுகிறது:

பயன்படுத்தப்படும் மென்பொருள் பட்டியல்

பெயர்

விளக்கம்

விநியோக இணைப்பு

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

பதிவு சேகரிப்பான்.

FileBeat இலிருந்து பதிவுகளை சேகரிக்கவும், RabbitMQ வரிசையில் இருந்து பதிவுகளை சேகரிக்கவும் பயன்படுகிறது (DMZ இல் இருக்கும் சேவையகங்களுக்கு.)

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

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

Logstash-output-clickhouse

பதிவுகளை கிளிக்ஹவுஸ் தரவுத்தளத்திற்கு தொகுதிகளாக மாற்றுவதற்கான Loagstash செருகுநிரல்

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

கிளிக்ஹவுஸ்

பதிவு சேமிப்பு 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 களஞ்சியத்தில் தோன்றின, எனவே நீங்கள் அவற்றைப் பயன்படுத்த முயற்சி செய்யலாம். நிறுவும் நேரத்தில், நாங்கள் Altinity உருவாக்கிய தொகுப்புகளைப் பயன்படுத்தினோம்.

கிரபனா

பதிவு காட்சிப்படுத்தல். டாஷ்போர்டுகளை அமைத்தல்

https://grafana.com/

https://grafana.com/grafana/download

Redhat & Centos(64 Bit) - சமீபத்திய பதிப்பு

Grafana 4.6+ க்கான ClickHouse தரவுமூலம்

ClickHouse தரவு மூலத்துடன் Grafanaக்கான செருகுநிரல்

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

முயல்MQ

செய்தி வரிசை. இது 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

எர்லாங் இயக்க நேரம் (RabbitMQ க்கு தேவை)

எர்லாங் இயக்க நேரம். RabbitMQ வேலை செய்யத் தேவை

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

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

கிளிக்ஹவுஸ் தரவுத்தளத்துடன் சேவையக கட்டமைப்பு பின்வரும் அட்டவணையில் வழங்கப்படுகிறது:

பெயர்

மதிப்பு

கருத்து

கட்டமைப்பு

HDD: 40 ஜிபி
ரேம்: 8 ஜி.பை.
செயலி: கோர் 2 2Ghz

ClickHouse தரவுத்தளத்தைப் பயன்படுத்துவதற்கான உதவிக்குறிப்புகளுக்கு நீங்கள் கவனம் செலுத்த வேண்டும் (https://clickhouse.yandex/docs/ru/operations/tips/)

பொது அமைப்பு மென்பொருள்

OS: Red Hat Enterprise Linux சர்வர் (Maipo)

JRE (ஜாவா 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-குறிச்சொற்களை சேமிப்பதற்கான தனி புலங்கள் உள்ளன என்பதை நாங்கள் கவனிக்கிறோம் (அவை வினவல் சரம் புலத்தில் இருந்து அட்டவணையில் செருகும் கட்டத்தில் பாகுபடுத்தப்படுகின்றன).

மேலும், கணினிகள், கூறுகள், சேவையகங்கள் பற்றிய தகவல்களைச் சேமிக்க பல கணினி புலங்கள் அட்டவணையில் சேர்க்கப்பட்டுள்ளன. இந்த புலங்களின் விளக்கத்திற்கு கீழே உள்ள அட்டவணையைப் பார்க்கவும். ஒரு அட்டவணையில், பல அமைப்புகளுக்கான பதிவுகளை நாங்கள் சேமிக்கிறோம்.

பெயர்

விளக்கம்

உதாரணமாக

fld_app_பெயர்

பயன்பாடு/கணினியின் பெயர்
சரியான மதிப்புகள்:

  • site1.domain.com வெளிப்புற தளம் 1
  • site2.domain.com வெளிப்புற தளம் 2
  • அக-தளம்1.domain.local உள் தளம் 1

site1.domain.com

fld_app_module

கணினி தொகுதி
சரியான மதிப்புகள்:

  • இணையம் - இணையத்தளம்
  • svc - இணைய தள சேவை
  • intgr - ஒருங்கிணைப்பு வலை சேவை
  • bo - நிர்வாகி (பின் அலுவலகம்)

வலை

fld_website_பெயர்

IIS இல் தளத்தின் பெயர்

ஒரு சேவையகத்தில் பல அமைப்புகள் பயன்படுத்தப்படலாம் அல்லது ஒரு கணினி தொகுதியின் பல நிகழ்வுகள் கூட

வலை முக்கிய

fld_server_name

சர்வர் பெயர்

web1.domain.com

fld_log_file_name

சேவையகத்தில் உள்ள பதிவு கோப்பிற்கான பாதை

இருந்து: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 இல் செருகுவதற்கு, Logstash-output-clickhouse செருகுநிரல் பயன்படுத்தப்படுகிறது. Logstash செருகுநிரலில் கோரிக்கை மறுமுயற்சி பொறிமுறை உள்ளது, ஆனால் வழக்கமான பணிநிறுத்தம் மூலம், சேவையை நிறுத்துவது நல்லது. நிறுத்தப்படும் போது, ​​செய்திகள் RabbitMQ வரிசையில் குவிந்துவிடும், எனவே நீண்ட நேரம் நிறுத்தப்பட்டால், சேவையகங்களில் Filebeats ஐ நிறுத்துவது நல்லது. RabbitMQ பயன்படுத்தப்படாத திட்டத்தில் (உள்ளூர் நெட்வொர்க்கில், Filebeat நேரடியாக Logstash க்கு பதிவுகளை அனுப்புகிறது), Filebeats மிகவும் ஏற்றுக்கொள்ளக்கூடியதாகவும் பாதுகாப்பாகவும் செயல்படுகின்றன, எனவே அவர்களுக்கு வெளியீடு கிடைக்காதது விளைவுகள் இல்லாமல் கடந்து செல்கிறது.

ஒரு எடுத்துக்காட்டு உள்ளமைவு இதுபோல் தெரிகிறது:

log_web__filebeat_clickhouse.conf

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

குழாய்வழிகள்.yml

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

கிளிக்ஹவுஸ். பதிவு சேமிப்பு

அனைத்து அமைப்புகளுக்கான பதிவுகளும் ஒரே அட்டவணையில் சேமிக்கப்படுகின்றன (கட்டுரையின் தொடக்கத்தில் பார்க்கவும்). இது கோரிக்கைகள் பற்றிய தகவல்களைச் சேமிக்கும் நோக்கம் கொண்டது: IIS பதிவுகள், அப்பாச்சி மற்றும் nginx பதிவுகள் போன்ற பல்வேறு வடிவங்களுக்கு எல்லா அளவுருக்களும் ஒரே மாதிரியாக இருக்கும். பயன்பாட்டு பதிவுகளுக்கு, எடுத்துக்காட்டாக, பிழைகள், தகவல் செய்திகள், எச்சரிக்கைகள் பதிவு செய்யப்படுகின்றன, ஒரு தனி அட்டவணை பொருத்தமான கட்டமைப்புடன் (தற்போது வடிவமைப்பு கட்டத்தில்) வழங்கப்படும்.

அட்டவணையை வடிவமைக்கும் போது, ​​முதன்மை விசையை முடிவு செய்வது மிகவும் முக்கியம் (சேமிப்பகத்தின் போது தரவு வரிசைப்படுத்தப்படும்). தரவு சுருக்கத்தின் அளவு மற்றும் வினவல் வேகம் இதைப் பொறுத்தது. எங்கள் எடுத்துக்காட்டில், முக்கியமானது
ஆர்டர் மூலம் (fld_app_name, fld_app_module, logdatetime)
அதாவது, அமைப்பின் பெயர், கணினி கூறுகளின் பெயர் மற்றும் நிகழ்வின் தேதி. ஆரம்பத்தில், நிகழ்வின் தேதி முதலில் வந்தது. அதை கடைசி இடத்திற்கு நகர்த்திய பிறகு, வினவல்கள் இரண்டு மடங்கு வேகமாக வேலை செய்யத் தொடங்கின. முதன்மை விசையை மாற்ற, அட்டவணையை மீண்டும் உருவாக்கி தரவை மீண்டும் ஏற்ற வேண்டும், இதனால் கிளிக்ஹவுஸ் வட்டில் உள்ள தரவை மீண்டும் வரிசைப்படுத்துகிறது. இது ஒரு கடினமான செயல்பாடு, எனவே வரிசை விசையில் என்ன சேர்க்கப்பட வேண்டும் என்பதைப் பற்றி நிறைய யோசிப்பது நல்லது.

லோகார்டினாலிட்டி தரவு வகை ஒப்பீட்டளவில் சமீபத்திய பதிப்புகளில் தோன்றியது என்பதையும் கவனத்தில் கொள்ள வேண்டும். இதைப் பயன்படுத்தும் போது, ​​குறைந்த கார்டினலிட்டி (சில விருப்பங்கள்) உள்ள துறைகளுக்கு சுருக்கப்பட்ட தரவின் அளவு வெகுவாகக் குறைக்கப்படுகிறது.

பதிப்பு 19.6 தற்போது பயன்பாட்டில் உள்ளது, மேலும் சமீபத்திய பதிப்பிற்கு புதுப்பிக்க முயற்சிக்கிறோம். உதாரணமாக, அடாப்டிவ் கிரானுலாரிட்டி, ஸ்கிப்பிங் குறியீடுகள் மற்றும் டபுள் டெல்டா கோடெக் போன்ற அற்புதமான அம்சங்களை அவை கொண்டுள்ளன.

முன்னிருப்பாக, நிறுவலின் போது, ​​லாக்கிங் நிலை ட்ரேஸ் ஆக அமைக்கப்படும். பதிவுகள் சுழற்றப்பட்டு காப்பகப்படுத்தப்படுகின்றன, ஆனால் அதே நேரத்தில் அவை ஒரு ஜிகாபைட் வரை விரிவடையும். தேவை இல்லை என்றால், நீங்கள் எச்சரிக்கை அளவை அமைக்கலாம், பின்னர் பதிவின் அளவு கடுமையாக குறைக்கப்படுகிறது. பதிவு செய்யும் அமைப்பு 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 க்கு நேரடியாக எழுதுவதற்கான வெளியீட்டு செருகுநிரல் இல்லை. அத்தகைய செயல்பாடு, அவர்களின் கிட்ஹப்பில் உள்ள சிக்கலைப் பொறுத்து, செயல்படுத்த திட்டமிடப்படவில்லை. காஃப்காவிற்கு ஒரு செருகுநிரல் உள்ளது, ஆனால் சில காரணங்களால் அதை வீட்டில் பயன்படுத்த முடியாது.
  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
    }
}

முயல்MQ. செய்தி வரிசை

DMZ இல் பதிவு உள்ளீடுகளை இடையகப்படுத்த இந்த கூறு பயன்படுத்தப்படுகிறது. ஃபைல்பீட் → லாக்ஸ்டாஷ் மூலம் பதிவு செய்யப்படுகிறது. LogStash வழியாக DMZக்கு வெளியில் இருந்து படித்தல் செய்யப்படுகிறது. 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"

கிராஃபானா. டாஷ்போர்டுகள்

கண்காணிப்புத் தரவைக் காட்சிப்படுத்த இந்தக் கூறு பயன்படுத்தப்படுகிறது. இந்த வழக்கில், நீங்கள் Grafana 4.6+ சொருகிக்கான ClickHouse தரவு மூலத்தை நிறுவ வேண்டும். டாஷ்போர்டில் SQL வடிப்பான்களைச் செயலாக்கும் திறனை மேம்படுத்த, அதைச் சிறிது மாற்றியமைக்க வேண்டியிருந்தது.

எடுத்துக்காட்டாக, நாங்கள் மாறிகளைப் பயன்படுத்துகிறோம், மேலும் அவை வடிகட்டி புலத்தில் அமைக்கப்படவில்லை என்றால், படிவத்தின் இடத்தில் ( uriStem = » மற்றும் 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 க்கு மொழிபெயர்க்கப்பட்டுள்ளது (வெற்று யூரிஸ்டெம் புலங்கள் வெறும் 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 உடன் ஒப்பிடும்போது, ​​பதிவுகளை சேமிப்பதற்கும் செயலாக்குவதற்கும் ஆகும் செலவு ஐந்து முதல் பத்து மடங்கு குறையும் என மதிப்பிடப்பட்டுள்ளது. வேறு வார்த்தைகளில் கூறுவதானால், தற்போதைய தரவுத் தொகைக்கு நாம் பல இயந்திரங்களின் தொகுப்பை அமைக்க வேண்டும் என்றால், கிளிக்ஹவுஸைப் பயன்படுத்தும் போது, ​​ஒரு குறைந்த சக்தி இயந்திரம் நமக்கு போதுமானது. ஆம், நிச்சயமாக, ElasticSearch ஆனது ஆன்-டிஸ்க் தரவு சுருக்க வழிமுறைகள் மற்றும் வள நுகர்வுகளை கணிசமாகக் குறைக்கக்கூடிய பிற அம்சங்களையும் கொண்டுள்ளது, ஆனால் ClickHouse உடன் ஒப்பிடும்போது, ​​இது அதிக விலை கொண்டதாக இருக்கும்.

எங்கள் தரப்பில் எந்த சிறப்பு மேம்படுத்தல்களும் இல்லாமல், இயல்புநிலை அமைப்புகளில், தரவை ஏற்றுவது மற்றும் தரவுத்தளத்திலிருந்து தேர்ந்தெடுப்பது அற்புதமான வேகத்தில் வேலை செய்கிறது. எங்களிடம் இன்னும் அதிக தரவு இல்லை (சுமார் 200 மில்லியன் பதிவுகள்), ஆனால் சேவையகமே பலவீனமாக உள்ளது. பதிவுகளை சேமிப்பது தொடர்பான மற்ற நோக்கங்களுக்காக எதிர்காலத்தில் இந்த கருவியை நாம் பயன்படுத்தலாம். எடுத்துக்காட்டாக, பாதுகாப்புத் துறையில், இயந்திரக் கற்றல் துறையில் எண்ட்-டு-எண்ட் பகுப்பாய்வு.

முடிவில், நன்மை தீமைகள் பற்றி கொஞ்சம்.

Минусы

  1. பெரிய தொகுதிகளில் பதிவுகளை ஏற்றுகிறது. ஒருபுறம், இது ஒரு அம்சம், ஆனால் நீங்கள் இன்னும் கூடுதல் கூறுகளை இடையக பதிவுகளுக்கு பயன்படுத்த வேண்டும். இந்த பணி எப்போதும் எளிதானது அல்ல, ஆனால் இன்னும் தீர்க்கக்கூடியது. மேலும் திட்டத்தை எளிமைப்படுத்த விரும்புகிறேன்.
  2. சில கவர்ச்சியான செயல்பாடுகள் அல்லது புதிய அம்சங்கள் பெரும்பாலும் புதிய பதிப்புகளில் உடைந்து விடுகின்றன. இது கவலையை ஏற்படுத்துகிறது, புதிய பதிப்பிற்கு மேம்படுத்தும் விருப்பத்தை குறைக்கிறது. எடுத்துக்காட்டாக, காஃப்கா டேபிள் எஞ்சின் மிகவும் பயனுள்ள அம்சமாகும், இது நுகர்வோரை செயல்படுத்தாமல் காஃப்காவிலிருந்து நேரடியாக நிகழ்வுகளைப் படிக்க அனுமதிக்கிறது. ஆனால் கிதுப்பில் உள்ள சிக்கல்களின் எண்ணிக்கையை வைத்து ஆராயும்போது, ​​தயாரிப்பில் இந்த எஞ்சினைப் பயன்படுத்தாமல் பார்த்துக்கொள்கிறோம். இருப்பினும், நீங்கள் பக்கத்திற்கு திடீர் சைகைகளைச் செய்யாமல், முக்கிய செயல்பாட்டைப் பயன்படுத்தினால், அது நிலையானதாக வேலை செய்கிறது.

Плюсы

  1. வேகத்தைக் குறைக்காது.
  2. குறைந்த நுழைவு வாசல்.
  3. திறந்த மூல.
  4. இலவசம்.
  5. நன்றாக செதில்கள் (பெட்டிக்கு வெளியே துண்டித்தல்/பிரதி)
  6. தகவல் தொடர்பு அமைச்சகத்தால் பரிந்துரைக்கப்பட்ட ரஷ்ய மென்பொருளின் பதிவேட்டில் சேர்க்கப்பட்டுள்ளது.
  7. Yandex இலிருந்து அதிகாரப்பூர்வ ஆதரவின் இருப்பு.

ஆதாரம்: www.habr.com

கருத்தைச் சேர்