လူသာသမျာသအတလက် ClickHouse ဒေတာဘေ့စ် သို့မဟုတ် Alien နည်သပညာမျာသ

MKB ၏သတင်သအချက်အလက်နည်သပညာညလဟန်ကဌာသရေသမဟူသရုံသ၏အဝေသထိန်သဝန်ဆောင်မဟုလမ်သကဌောင်သမျာသအတလက်ကျလမ်သကျင်ပိုင်နိုင်မဟုစင်တာ Aleksey Lizunov၊

လူသာသမျာသအတလက် ClickHouse ဒေတာဘေ့စ် သို့မဟုတ် Alien နည်သပညာမျာသ

ELK stack (ElasticSearch၊ Logstash၊ Kibana) ၏အခဌာသရလေသချယ်စရာအဖဌစ်၊ ကျလန်ုပ်တို့သည် မဟတ်တမ်သမျာသအတလက် ဒေတာသိုလဟောင်မဟုအဖဌစ် ClickHouse ဒေတာဘေ့စ်ကို အသုံသပဌုခဌင်သအပေါ် သုတေသနပဌုနေပါသည်။

ကဆောင်သပါသတလင်၊ ကျလန်ုပ်တို့သည် ClickHouse ဒေတာဘေ့စ်ကို အသုံသပဌုခဌင်သ၏ အတလေ့အကဌုံနဟင့် ရဟေ့ပဌေသလုပ်ဆောင်မဟု၏ ပဏာမရလဒ်မျာသကို ဆလေသနလေသလိုပါသည်။ ရလဒ်မျာသသည် အထင်ကဌီသစရာဖဌစ်ကဌောင်သ ချက်ချင်သသတိပဌုသင့်သည်။


လူသာသမျာသအတလက် ClickHouse ဒေတာဘေ့စ် သို့မဟုတ် Alien နည်သပညာမျာသ

ထို့နောက် ကျလန်ုပ်တို့၏စနစ်အာသ မည်သို့ဖလဲ့စည်သပုံနဟင့် ၎င်သတလင် မည်သည့်အစိတ်အပိုင်သမျာသပါ၀င်သည်ကို အသေသစိတ်ဖော်ပဌပါမည်။ ယခုမူ ကဒေတာဘေ့စ်တစ်ခုလုံသအကဌောင်သ အနည်သငယ်ပဌောပဌလိုပဌီသ ၎င်သကို အဘယ်ကဌောင့် သတိထာသသင့်သနည်သ။ ClickHouse ဒေတာဘေ့စ်သည် Yandex မဟ စလမ်သဆောင်ရည်မဌင့် ခလဲခဌမ်သစိတ်ဖဌာသည့်ကော်လံဒေတာဘေ့စ်ဖဌစ်သည်။ ၎င်သကို Yandex ဝန်ဆောင်မဟုမျာသတလင်အသုံသပဌုသည်၊ အစပိုင်သတလင် ၎င်သသည် Yandex.Metrica အတလက် အဓိကဒေတာသိုလဟောင်မဟုဖဌစ်သည်။ Open-source စနစ်၊ အခမဲ့။ ဆော့ဖ်ဝဲရေသသာသသူ၏အမဌင်အရ၊ ၎င်သတို့သည် အံ့မခန်သကဌီသမာသသောဒေတာရဟိသောကဌောင့် ၎င်သကို မည်သို့အကောင်အထည်ဖော်သည်ကို ကျလန်ုပ်အမဌဲတမ်သတလေသတောနေပါသည်။ Metrica ၏ user interface ကိုယ်တိုင်က အလလန်ပဌောင်သလလယ်ပဌင်လလယ်နဟင့် မဌန်ဆန်သည်။ ကဒေတာဘေ့စ်ကို ပထမဆုံသသိသူတလင် အထင်အမဌင်မဟာ “အင်သ၊ နောက်ဆုံသတော့! လူတလေအတလက် လုပ်ထာသတာ။ တပ်ဆင်ခဌင်သလုပ်ငန်သစဉ်မဟစတင်ပဌီသ တောင်သဆိုချက်မျာသပေသပို့ခဌင်သဖဌင့် အဆုံသသတ်သည်။

ကဒေတာဘေ့စ်တလင် ဝင်ရောက်မဟုအဆင့်သည် အလလန်နည်သပါသည်။ ပျမ်သမျဟကျလမ်သကျင်သော developer ပင်လျဟင် ကဒေတာဘေ့စ်ကို မိနစ်အနည်သငယ်အတလင်သ ထည့်သလင်သနိုင်ပဌီသ ၎င်သကို စတင်အသုံသပဌုနိုင်ပါသည်။ အာသလုံသရဟင်သရဟင်သလင်သလင်သအလုပ်လုပ်ပါတယ်။ Linux ကိုအသစ်သောသူမျာသပင်လျဟင်တပ်ဆင်မဟုကိုလျင်မဌန်စလာကိုင်တလယ်နိုင်ပဌီသအရိုသရဟင်သဆုံသလုပ်ဆောင်မဟုမျာသကိုလုပ်ဆောင်နိုင်သည်။ အကယ်၍ အစောပိုင်သတလင် Big Data, Hadoop, Google BigTable, HDFS ဟူသော စကာသလုံသမျာသဖဌင့် သာမန် developer တစ်ညသသည် အချို့သော terabytes, petabytes မျာသအကဌောင်သ အယူအဆမျာသရဟိခဲ့ပါက၊ အချို့သောလူစလမ်သကောင်သမျာသသည် ကစနစ်မျာသအတလက် ဆက်တင်မျာသနဟင့် ဖလံ့ဖဌိုသတိုသတက်မဟုတလင် ပါဝင်နေကဌောင်သ၊ ထို့နောက် ClickHouse ထလန်သကာသလာသောအခါ၊ ဒေတာဘေ့စ်၊ ကျလန်ုပ်တို့တလင် ယခင်က လုပ်ဆောင်၍မရသော အလုပ်မျာသကို သင်ဖဌေရဟင်သနိုင်သည့် ရိုသရဟင်သပဌီသ နာသလည်နိုင်သော ကိရိယာတစ်ခုရဟိသည်။ တပ်ဆင်ရန် ပျမ်သမျဟအာသဖဌင့် ငါသမိနစ်ခန့်သာ ကဌာပါသည်။ ဆိုလိုသည်မဟာ၊ ဥပမာ၊ MySql ကဲ့သို့သော ဒေတာဘေ့စ်တစ်ခုကို ကျလန်ုပ်တို့ ရရဟိထာသသော်လည်သ ဘီလီယံပေါင်သမျာသစလာသော မဟတ်တမ်သမျာသကို သိမ်သဆည်သရန်အတလက်သာ ဖဌစ်သည်။ SQL ဘာသာစကာသဖဌင့် အချို့သော super-archiver ။ လူတလေက ဂဌိုလ်သာသလက်နက်တလေ အပ်ထာသသလိုပါပဲ။

ကျလန်ုပ်တို့၏ သစ်ခုတ်ခဌင်သစနစ်အကဌောင်သ

အချက်အလက်စုဆောင်သရန်အတလက်၊ စံဖော်မတ်ဝဘ်အက်ပလီကေသရဟင်သမျာသ၏ IIS မဟတ်တမ်သဖိုင်မျာသကို အသုံသပဌုသည် (ကျလန်ုပ်တို့သည် လောလောဆယ်တလင် အပလီကေသရဟင်သမဟတ်တမ်သမျာသကို ခလဲခဌမ်သစိတ်ဖဌာနေသော်လည်သ ရဟေ့ပဌေသအဆင့်တလင် အဓိကပန်သတိုင်မဟာ IIS မဟတ်တမ်သမျာသကို စုဆောင်သရန်ဖဌစ်သည်)။

အကဌောင်သအမျိုသမျိုသကဌောင့်၊ ကျလန်ုပ်တို့သည် ELK stack အာသ လုံသလုံသလျာသလျာသ မစလန့်လလဟတ်နိုင်ခဲ့ဘဲ၊ ၎င်သတို့သည် ၎င်သတို့ကို ကောင်သမလန်စလာသက်သေပဌခဲ့ပဌီသ အလလန်ယုံကဌည်စိတ်ချရပဌီသ ကဌိုတင်ခန့်မဟန်သနိုင်သော လုပ်ဆောင်နိုင်သည့် LogStash နဟင့် Filebeat အစိတ်အပိုင်သမျာသကို ဆက်လက်အသုံသပဌုနေပါသည်။

ယေဘူယျအာသဖဌင့် သစ်ခုတ်ခဌင်သအစီအစဉ်ကို အောက်ပါပုံတလင် ပဌထာသသည်။

လူသာသမျာသအတလက် ClickHouse ဒေတာဘေ့စ် သို့မဟုတ် Alien နည်သပညာမျာသ

ClickHouse ဒေတာဘေ့စ်သို့ ဒေတာရေသသာသခဌင်သ၏ အင်္ဂါရပ်မဟာ အစုအဝေသကဌီသမျာသတလင် မဟတ်တမ်သမျာသကို မကဌာခဏ (တစ်စက္ကန့်လျဟင် တစ်ကဌိမ်) ထည့်သလင်သမဟု နည်သပါသသည်။ ကသည်မဟာ ClickHouse ဒေတာဘေ့စ်နဟင့် ပထမဆုံသတလေ့ကဌုံရသောအခါတလင် သင်ကဌုံတလေ့ရသော “ပဌဿနာအမျာသဆုံသ” အပိုင်သဖဌစ်သည်- ထင်ရဟာသပါသည်- အစီအစဉ်သည် အနည်သငယ်ပိုမိုရဟုပ်ထလေသလာသည်။
ClickHouse ထဲသို့ ဒေတာကို တိုက်ရိုက်ထည့်သလင်သသည့် LogStash အတလက် ပလပ်အင်သည် ကနေရာတလင် မျာသစလာ အထောက်အကူ ပဌုပါသည်။ ကအစိတ်အပိုင်သကို ဒေတာဘေ့စ်ကိုယ်တိုင်နဟင့် တူညီသောဆာဗာတလင် အသုံသပဌုထာသသည်။ ထို့ကဌောင့်၊ ယေဘူယျအာသဖဌင့်ပဌောရလျဟင်၊ ၎င်သကိုပဌုလုပ်ရန် အကဌံပဌုထာသခဌင်သမဟုတ်သော်လည်သ၊ ၎င်သကိုတူညီသောဆာဗာပေါ်တလင်အသုံသပဌုနေချိန်တလင် သီသခဌာသဆာဗာမျာသမထုတ်လုပ်စေရန်အတလက် လက်တလေ့ကျသောရဟုထောင့်မဟနေ၍ဖဌစ်သည်။ ဒေတာဘေ့စ်နဟင့် မည်သည့် ချို့ယလင်သချက် သို့မဟုတ် အရင်သအမဌစ်ဆိုင်ရာ ကလဲလလဲမဟုမျာသကို ကျလန်ုပ်တို့ သတိပဌုမိခဲ့ပါသနည်သ။ ထို့အပဌင်၊ ပလပ်အင်တလင် အမဟာသအယလင်သမျာသရဟိပါက ပဌန်လည်ကဌိုသစာသသည့် ယန္တရာသရဟိကဌောင်သ သတိပဌုသင့်သည်။ အမဟာသအယလင်သမျာသရဟိသောအခါတလင်၊ plugin သည် ထည့်သလင်သ၍မရသော ဒေတာအစုအဝေသတစ်ခုသို့ disk သို့ စာရေသသည် (ဖိုင်ဖော်မတ်သည် အဆင်ပဌေသည်- တည်သဖဌတ်ပဌီသနောက်၊ သင်သည် clickhouse-client ကိုအသုံသပဌု၍ ပဌုပဌင်ထာသသောအသုတ်ကို အလလယ်တကူထည့်သလင်သနိုင်သည်)။

အစီအစဥ်တလင်အသုံသပဌုသည့်ဆော့ဖ်ဝဲလ်၏စာရင်သအပဌည့်အစုံကို ဇယာသတလင်ဖော်ပဌထာသသည်-

အသုံသပဌုထာသသောဆော့ဖ်ဝဲမျာသစာရင်သ

နာမတျောကို

ဖေါ်ပဌချက်

ဖဌန့်ဝေလင့်ခ်

NGINX

ဆိပ်ကမ်သမျာသမဟ ဝင်ရောက်ခလင့်ကို ကန့်သတ်ရန်နဟင့် ခလင့်ပဌုချက်ကို စုစည်သရန် ပဌောင်သပဌန်-ပရောက်စီ

ယခု အစီအစဉ်တလင် အသုံသမပဌုပါ။

https://nginx.org/ru/download.html

https://nginx.org/download/nginx-1.16.0.tar.gz

FileBeat

ဖိုင်မဟတ်တမ်သမျာသလလဟဲပဌောင်သခဌင်သ။

https://www.elastic.co/downloads/beats/filebeat (Windows 64bit အတလက် ဖဌန့်ဖဌူသရေသကိရိယာအစုံ)။

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

logstash

မဟတ်တမ်သစုဆောင်သသူ။

FileBeat မဟ မဟတ်တမ်သမျာသ စုဆောင်သရန်နဟင့် RabbitMQ တန်သစီမဟ မဟတ်တမ်သမျာသ စုဆောင်သရန် (DMZ အတလင်သရဟိ ဆာဗာမျာသအတလက်) အသုံသပဌုသည်။

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

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

Logstash-output-clickhouse

ClickHouse ဒေတာဘေ့စ်သို့ မဟတ်တမ်သမျာသ လလဟဲပဌောင်သခဌင်သအတလက် Loagstash ပလပ်အင်

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 repository တလင် ပေါ်လာသောကဌောင့် ၎င်သတို့ကို အသုံသပဌုရန် ကဌိုသစာသနိုင်ပါသည်။ တပ်ဆင်ချိန်တလင် ကျလန်ုပ်တို့သည် Altinity မဟတည်ဆောက်ထာသသော ပက်ကေ့ခ်ျမျာသကို အသုံသပဌုနေပါသည်။

Grafana

မဟတ်တမ်သပုံဖော်ခဌင်သ။ ဒက်ရဟ်ဘုတ်မျာသကို စနစ်ထည့်သလင်သခဌင်သ။

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 တန်သစီရန် router ကို စာရင်သသလင်သပါ။

မဟတ်ချက်။ ကံမကောင်သစလာပဲ၊ FileBeat သည် RabbitMQ သို့ တိုက်ရိုက် output မရဟိသောကဌောင့် 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

Erlang Runtime (RabbitMQ အတလက် လိုအပ်သည်)

Erlang runtime RabbitMQ အလုပ်လုပ်ရန် လိုအပ်သည်။

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

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

ClickHouse ဒေတာဘေ့စ်နဟင့် ဆာဗာဖလဲ့စည်သပုံအာသ အောက်ပါဇယာသတလင် ဖော်ပဌထာသပါသည်။

နာမတျောကို

အဘိုသ

ပလောဆို

configuration မျာသ

HDD: 40GB
ရမ်: 8GB
ပရိုဆက်ဆာ- Core 2 2Ghz

ClickHouse ဒေတာဘေ့စ်ကိုလည်ပတ်ရန်အတလက် အကဌံပဌုချက်မျာသကို အာရုံစိုက်ရန် လိုအပ်သည် (https://clickhouse.yandex/docs/ru/operations/tips/)

အထလေထလေစနစ်ဆော့ဖ်ဝဲ

OS- Red Hat Enterprise Linux ဆာဗာ (Maipo)

JRE (Java 8)

 

သင်တလေ့မဌင်ရသည့်အတိုင်သ၊ ၎င်သသည် သာမန်အလုပ်ရုံတစ်ခုဖဌစ်သည်။

မဟတ်တမ်သမျာသ သိမ်သဆည်သရန် ဇယာသ၏ ဖလဲ့စည်သပုံမဟာ အောက်ပါအတိုင်သ ဖဌစ်သည်။

log_web.sql

CREATE TABLE log_web (
  logdate Date,
  logdatetime DateTime CODEC(Delta, LZ4HC),
   
  fld_log_file_name LowCardinality( String ),
  fld_server_name LowCardinality( String ),
  fld_app_name LowCardinality( String ),
  fld_app_module LowCardinality( String ),
  fld_website_name LowCardinality( String ),
 
  serverIP LowCardinality( String ),
  method LowCardinality( String ),
  uriStem String,
  uriQuery String,
  port UInt32,
  username LowCardinality( String ),
  clientIP String,
  clientRealIP String,
  userAgent String,
  referer String,
  response String,
  subresponse String,
  win32response String,
  timetaken UInt64
   
  , uriQuery__utm_medium String
  , uriQuery__utm_source String
  , uriQuery__utm_campaign String
  , uriQuery__utm_term String
  , uriQuery__utm_content String
  , uriQuery__yclid String
  , uriQuery__region String
 
) Engine = MergeTree()
PARTITION BY toYYYYMM(logdate)
ORDER BY (fld_app_name, fld_app_module, logdatetime)
SETTINGS index_granularity = 8192;

ကျလန်ုပ်တို့သည် ပုံသေ ပိုင်သခဌာသခဌင်သ (လအလိုက်) နဟင့် အညလဟန်သအသေသစိတ်ကို အသုံသပဌုပါသည်။ အကလက်မျာသအာသလုံသသည် http တောင်သဆိုချက်မျာသကို မဟတ်တမ်သတင်ရန်အတလက် IIS မဟတ်တမ်သထည့်သလင်သမဟုမျာသနဟင့် လက်တလေ့အာသဖဌင့် ကိုက်ညီပါသည်။ သီသခဌာသအာသဖဌင့်၊ utm-tags မျာသကို သိမ်သဆည်သရန်အတလက် သီသခဌာသအကလက်မျာသရဟိကဌောင်သ ကျလန်ုပ်တို့သတိပဌုမိပါသည် (၎င်သတို့ကို ဇယာသထဲသို့ ထည့်သလင်သသည့်အဆင့်တလင် ခလဲခဌမ်သစိတ်ဖဌာထာသသည်)။

ထို့အပဌင်၊ စနစ်မျာသ၊ အစိတ်အပိုင်သမျာသ၊ ဆာဗာမျာသအကဌောင်သ အချက်အလက်မျာသကို သိမ်သဆည်သရန်အတလက် စနစ်နယ်ပယ်အမျာသအပဌာသကို ဇယာသတလင် ထည့်သလင်သထာသသည်။ ကအကလက်မျာသအကဌောင်သ ဖော်ပဌချက်အတလက် အောက်ပါဇယာသကို ကဌည့်ပါ။ ဇယာသတစ်ခုတလင်၊ စနစ်မျာသစလာအတလက် မဟတ်တမ်သမျာသကို သိမ်သဆည်သပါသည်။

နာမတျောကို

ဖေါ်ပဌချက်

နမူနာ

fld_app_name

အပလီကေသရဟင်သ/စနစ်အမည်
မဟန်ကန်သောတန်ဖိုသမျာသ-

  • site1.domain.com ပဌင်ပဆိုက် ၁
  • site2.domain.com ပဌင်ပဆိုက် ၁
  • internal-site1.domain.local အတလင်သပိုင်သဆိုက် ၁

site1.domain.com

fld_app_module

စနစ် module
မဟန်ကန်သောတန်ဖိုသမျာသ-

  • ဝဘ် - ဝဘ်ဆိုဒ်
  • svc - ဝဘ်ဆိုက် ဝန်ဆောင်မဟု
  • intgr - ပေါင်သစည်သခဌင်သ ဝဘ်ဝန်ဆောင်မဟု
  • ဘို - အုပ်ချုပ်ရေသမဟူသ (BackOffice)

ဝဘ်

fld_website_name

IIS တလင်ဆိုက်အမည်

စနစ်မျာသစလာကို ဆာဗာတစ်ခုတလင်၊ သို့မဟုတ် စနစ်တစ်ခု၏ စံနမူနာမျာသစလာကိုပင် အသုံသချနိုင်သည်။

web ပင်မ

fld_server_name

ဆာဗာအမည်

web1.domain.com

fld_log_file_name

ဆာဗာရဟိ မဟတ်တမ်သဖိုင်သို့ လမ်သကဌောင်သ

C:inetpublogsLogFiles
W3SVC1u_ex190711.log

၎င်သသည် သင့်အာသ Grafana တလင် ဂရပ်ဖစ်မျာသကို ထိရောက်စလာတည်ဆောက်နိုင်စေပါသည်။ ဥပမာ၊ စနစ်တစ်ခု၏ ရဟေ့ဆုံသမဟ တောင်သဆိုချက်မျာသကို ကဌည့်ပါ။ ၎င်သသည် Yandex.Metrica ရဟိ ဆိုက်ကောင်တာနဟင့် ဆင်တူသည်။

ကသည်မဟာ နဟစ်လတာဒေတာဘေ့စ်အသုံသပဌုမဟုနဟင့်ပတ်သက်သည့် ကိန်သဂဏန်သအချို့ဖဌစ်သည်။

စနစ်မျာသနဟင့် ၎င်သတို့၏ အစိတ်အပိုင်သမျာသဖဌင့် ခလဲခဌမ်သထာသသော မဟတ်တမ်သအရေအတလက်

SELECT
    fld_app_name,
    fld_app_module,
    count(fld_app_name) AS rows_count
FROM log_web
GROUP BY
    fld_app_name,
    fld_app_module
    WITH TOTALS
ORDER BY
    fld_app_name ASC,
    rows_count DESC
 
┌─fld_app_name─────┬─fld_app_module─┬─rows_count─┐
│ site1.domain.ru  │ web            │     131441 │
│ site2.domain.ru  │ web            │    1751081 │
│ site3.domain.ru  │ web            │  106887543 │
│ site3.domain.ru  │ svc            │   44908603 │
│ site3.domain.ru  │ intgr          │    9813911 │
│ site4.domain.ru  │ web            │     772095 │
│ site5.domain.ru  │ web            │   17037221 │
│ site5.domain.ru  │ intgr          │     838559 │
│ site5.domain.ru  │ bo             │       7404 │
│ site6.domain.ru  │ web            │     595877 │
│ site7.domain.ru  │ web            │   27778858 │
└──────────────────┮────────────────┮────────────┘
 
Totals:
┌─fld_app_name─┬─fld_app_module─┬─rows_count─┐
│              │                │  210522593 │
└──────────────┮────────────────┮────────────┘
 
11 rows in set. Elapsed: 4.874 sec. Processed 210.52 million rows, 421.67 MB (43.19 million rows/s., 86.51 MB/s.)

ဒစ်ခ်ပေါ်ရဟိ ဒေတာပမာဏ

SELECT
    formatReadableSize(sum(data_uncompressed_bytes)) AS uncompressed,
    formatReadableSize(sum(data_compressed_bytes)) AS compressed,
    sum(rows) AS total_rows
FROM system.parts
WHERE table = 'log_web'
 
┌─uncompressed─┬─compressed─┬─total_rows─┐
│ 54.50 GiB    │ 4.86 GiB   │  211427094 │
└──────────────┮────────────┮────────────┘
 
1 rows in set. Elapsed: 0.035 sec.

ကော်လံမျာသတလင် ဒေတာချုံ့မဟုဒီဂရီ

SELECT
    name,
    formatReadableSize(data_uncompressed_bytes) AS uncompressed,
    formatReadableSize(data_compressed_bytes) AS compressed,
    data_uncompressed_bytes / data_compressed_bytes AS compress_ratio
FROM system.columns
WHERE table = 'log_web'
 
┌─name───────────────────┬─uncompressed─┬─compressed─┬─────compress_ratio─┐
│ logdate                │ 401.53 MiB   │ 1.80 MiB   │ 223.16665968777315 │
│ logdatetime            │ 803.06 MiB   │ 35.91 MiB  │ 22.363966401202305 │
│ fld_log_file_name      │ 220.66 MiB   │ 2.60 MiB   │  84.99905736932571 │
│ fld_server_name        │ 201.54 MiB   │ 50.63 MiB  │  3.980924816977078 │
│ fld_app_name           │ 201.17 MiB   │ 969.17 KiB │ 212.55518183686877 │
│ fld_app_module         │ 201.17 MiB   │ 968.60 KiB │ 212.67805817411906 │
│ fld_website_name       │ 201.54 MiB   │ 1.24 MiB   │  162.7204926761546 │
│ serverIP               │ 201.54 MiB   │ 50.25 MiB  │  4.010824061219731 │
│ method                 │ 201.53 MiB   │ 43.64 MiB  │  4.617721053304486 │
│ uriStem                │ 5.13 GiB     │ 832.51 MiB │  6.311522291936919 │
│ uriQuery               │ 2.58 GiB     │ 501.06 MiB │  5.269731450124478 │
│ port                   │ 803.06 MiB   │ 3.98 MiB   │ 201.91673864241824 │
│ username               │ 318.08 MiB   │ 26.93 MiB  │ 11.812513794583598 │
│ clientIP               │ 2.35 GiB     │ 82.59 MiB  │ 29.132328640073343 │
│ clientRealIP           │ 2.49 GiB     │ 465.05 MiB │  5.478382297052563 │
│ userAgent              │ 18.34 GiB    │ 764.08 MiB │  24.57905114484208 │
│ referer                │ 14.71 GiB    │ 1.37 GiB   │ 10.736792723669906 │
│ response               │ 803.06 MiB   │ 83.81 MiB  │  9.582334090987247 │
│ subresponse            │ 399.87 MiB   │ 1.83 MiB   │  218.4831068635027 │
│ win32response          │ 407.86 MiB   │ 7.41 MiB   │ 55.050315514606815 │
│ timetaken              │ 1.57 GiB     │ 402.06 MiB │ 3.9947395692010637 │
│ uriQuery__utm_medium   │ 208.17 MiB   │ 12.29 MiB  │ 16.936148912472955 │
│ uriQuery__utm_source   │ 215.18 MiB   │ 13.00 MiB  │ 16.548367623199912 │
│ uriQuery__utm_campaign │ 381.46 MiB   │ 37.94 MiB  │ 10.055156353418509 │
│ uriQuery__utm_term     │ 231.82 MiB   │ 10.78 MiB  │ 21.502540454070672 │
│ uriQuery__utm_content  │ 441.34 MiB   │ 87.60 MiB  │  5.038260760449327 │
│ uriQuery__yclid        │ 216.88 MiB   │ 16.58 MiB  │  13.07721335008116 │
│ uriQuery__region       │ 204.35 MiB   │ 9.49 MiB   │  21.52661903446796 │
└────────────────────────┮──────────────┮────────────┮────────────────────┘
 
28 rows in set. Elapsed: 0.005 sec.

အသုံသပဌုထာသသော အစိတ်အပိုင်သမျာသ၏ ဖော်ပဌချက်

FileBeat။ ဖိုင်မဟတ်တမ်သမျာသကို လလဟဲပဌောင်သခဌင်သ။

ကအစိတ်အပိုင်သသည် ဒစ်ခ်ပေါ်ရဟိ မဟတ်တမ်သဖိုင်မျာသကို အပဌောင်သအလဲမျာသကို ခဌေရာခံပဌီသ အချက်အလက်ကို LogStash သို့ ပေသပို့သည်။ မဟတ်တမ်သဖိုင်မျာသကို ရေသသာသသည့် ဆာဗာမျာသအာသလုံသတလင် ထည့်သလင်သထာသသည် (မျာသသောအာသဖဌင့် IIS)။ အမဌီသမုဒ်တလင် အလုပ်လုပ်သည် (ဆိုလိုသည်မဟာ ပေါင်သထည့်ထာသသော မဟတ်တမ်သမျာသကို ဖိုင်သို့ လလဟဲပဌောင်သပေသသည်)။ သို့သော် ဖိုင်တစ်ခုလုံသကို လလဟဲပဌောင်သရန် သီသခဌာသစီ စီစဉ်ထာသနိုင်သည်။ ယခင်လမျာသမဟ ဒေတာဒေါင်သလုဒ်လုပ်သည့်အခါ ၎င်သသည် အသုံသဝင်သည်။ မဟတ်တမ်သဖိုင်ကို ဖိုဒါတစ်ခုတလင် ထာသလိုက်ရုံဖဌင့် ၎င်သသည် လုံသလုံသဖတ်သလာသမည်ဖဌစ်သည်။

ဝန်ဆောင်မဟုကို ရပ်လိုက်သောအခါ၊ ဒေတာကို သိုလဟောင်ခန်သသို့ ထပ်မံလလဟဲပဌောင်သပေသတော့မည် မဟုတ်ပါ။

ဥပမာ ဖလဲ့စည်သမဟုပုံစံသည် ကကဲ့သို့ ဖဌစ်သည်-

filebeat.yml

filebeat.inputs:
- type: log
  enabled: true
  paths:
    - C:/inetpub/logs/LogFiles/W3SVC1/*.log
  exclude_files: ['.gz$','.zip$']
  tail_files: true
  ignore_older: 24h
  fields:
    fld_server_name: "site1.domain.ru"
    fld_app_name: "site1.domain.ru"
    fld_app_module: "web"
    fld_website_name: "web-main"
 
- type: log
  enabled: true
  paths:
    - C:/inetpub/logs/LogFiles/__Import/access_log-*
  exclude_files: ['.gz$','.zip$']
  tail_files: false
  fields:
    fld_server_name: "site2.domain.ru"
    fld_app_name: "site2.domain.ru"
    fld_app_module: "web"
    fld_website_name: "web-main"
    fld_logformat: "logformat__apache"
 
 
filebeat.config.modules:
  path: ${path.config}/modules.d/*.yml
  reload.enabled: false
  reload.period: 2s
 
output.logstash:
  hosts: ["log.domain.com:5044"]
 
  ssl.enabled: true
  ssl.certificate_authorities: ["C:/filebeat/certs/ca.pem", "C:/filebeat/certs/ca-issuing.pem"]
  ssl.certificate: "C:/filebeat/certs/site1.domain.ru.cer"
  ssl.key: "C:/filebeat/certs/site1.domain.ru.key"
 
#================================ Processors =====================================
 
processors:
  - add_host_metadata: ~
  - add_cloud_metadata: ~

logstash။ မဟတ်တမ်သစုဆောင်သသူ

ကအစိတ်အပိုင်သသည် FileBeat (သို့မဟုတ် RabbitMQ တန်သစီမဟုမဟတဆင့်) မဟ မဟတ်တမ်သဝင်ရောက်မဟုမျာသကို လက်ခံရယူရန်၊ ခလဲခဌမ်သစိတ်ဖဌာခဌင်သနဟင့် ClickHouse ဒေတာဘေ့စ်ထဲသို့ အစုလိုက်ထည့်သလင်သခဌင်သတို့ကို ဒီဇိုင်သထုတ်ထာသသည်။

ClickHouse သို့ထည့်သလင်သရန်အတလက် Logstash-output-clickhouse ပလပ်အင်ကို အသုံသပဌုထာသသည်။ Logstash ပလပ်အင်တလင် ပဌန်လည်ကဌိုသစာသရန် တောင်သဆိုမဟု ယန္တရာသတစ်ခု ပါ၀င်သော်လည်သ ပုံမဟန်ပိတ်ခဌင်သဖဌင့် ဝန်ဆောင်မဟုကို ရပ်တန့်ခဌင်သသည် ပိုကောင်သပါသည်။ ရပ်လိုက်သောအခါတလင် မက်ဆေ့ချ်မျာသကို RabbitMQ တန်သစီတလင် စုဆောင်သထာသမည်ဖဌစ်သောကဌောင့် ရပ်တန့်ခဌင်သသည် အချိန်ကဌာမဌင့်ပါက ဆာဗာမျာသပေါ်တလင် Filebeats ကို ရပ်တန့်ခဌင်သက ပိုကောင်သပါသည်။ RabbitMQ ကိုအသုံသမပဌုသည့်အစီအစဥ်တလင် (ပဌည်တလင်သကလန်ရက်ပေါ်တလင် Filebeat သည် Logstash သို့မဟတ်တမ်သမျာသကိုတိုက်ရိုက်ပေသပို့သည်)၊ Filebeats သည်အတော်လေသလက်ခံနိုင်ဖလယ်ရဟိပဌီသလုံခဌုံစလာအလုပ်လုပ်သည်၊ ထို့ကဌောင့်သူတို့အတလက်အကျိုသဆက်မရဟိဘဲအထလက်လလန်သလာသခဌင်သမရဟိပါ။

ဥပမာ ဖလဲ့စည်သမဟုပုံစံသည် ကကဲ့သို့ ဖဌစ်သည်-

log_web__filebeat_clickhouse.conf

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

ပိုက်လိုင်သမျာသ.yml

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

clickhouse မဟတ်တမ်သသိုလဟောင်မဟု

စနစ်အာသလုံသအတလက် မဟတ်တမ်သမျာသကို ဇယာသတစ်ခုထဲတလင် သိမ်သဆည်သထာသသည် (ဆောင်သပါသအစတလင် ကဌည့်ပါ)။ တောင်သဆိုမဟုမျာသအကဌောင်သ အချက်အလက်မျာသကို သိမ်သဆည်သရန် ရည်ရလယ်သည်- IIS မဟတ်တမ်သမျာသ၊ apache နဟင့် nginx မဟတ်တမ်သမျာသကဲ့သို့ မတူညီသော ဖော်မတ်မျာသအတလက် ကန့်သတ်ချက်မျာသ အာသလုံသသည် ဆင်တူပါသည်။ ဥပမာအာသဖဌင့်၊ အမဟာသအယလင်သမျာသ၊ သတင်သအချက်အလက် မက်ဆေ့ချ်မျာသ၊ သတိပေသချက်မျာသကို မဟတ်တမ်သတင်ထာသသည့် အပလီကေသရဟင်သမဟတ်တမ်သမျာသအတလက်၊ သင့်လျော်သောဖလဲ့စည်သပုံနဟင့် သီသခဌာသဇယာသတစ်ခုကို ပေသမည် (လက်ရဟိ ဒီဇိုင်သအဆင့်တလင်)။

ဇယာသတစ်ခုကို ဒီဇိုင်သရေသဆလဲသောအခါတလင် အဓိကသော့ကို ဆုံသဖဌတ်ရန် အလလန်အရေသကဌီသသည် (ဒေတာသိမ်သဆည်သစဉ်အတလင်သ စီစဥ်ထာသမည့်)။ ဒေတာချုံ့မဟုအဆင့်နဟင့် မေသမဌန်သမဟုအမဌန်နဟုန်သသည် ယင်သအပေါ် မူတည်သည်။ ကျလန်ုပ်တို့၏ဥပမာတလင် အဓိကအချက်မဟာ
မဟာယူပါ (fld_app_name၊ fld_app_module၊ logdatetime)
ဆိုလိုသည်မဟာ၊ စနစ်၏အမည်၊ စနစ်အစိတ်အပိုင်သအမည်နဟင့် ပလဲနေ့စလဲတို့ဖဌစ်သည်။ အစပိုင်သမဟာတော့ ပလဲကျင်သပမယ့်ရက်က အရင်ရောက်လာတယ်။ ၎င်သကို နောက်ဆုံသနေရာသို့ ရလဟေ့ပဌီသနောက်၊ မေသမဌန်သချက်မျာသသည် နဟစ်ဆပိုမိုမဌန်ဆန်လာသည်။ ပင်မသော့ကိုပဌောင်သလဲခဌင်သသည် ClickHouse ဒစ်ခ်ပေါ်ရဟိ ဒေတာကို ပဌန်လည်စီစစ်ရန်အတလက် ဇယာသကို ပဌန်လည်ဖန်တီသခဌင်သနဟင့် ဒေတာကို ပဌန်လည်စတင်ခဌင်သ လိုအပ်မည်ဖဌစ်သည်။ ၎င်သသည် လေသလံသောလုပ်ဆောင်ချက်ဖဌစ်သောကဌောင့် အမျိုသအစာသခလဲသော့တလင် မည်သည့်အရာထည့်သလင်သသင့်သည်ကို မျာသစလာစဉ်သစာသရန် သင့်လျော်ပါသည်။

LowCardinality ဒေတာအမျိုသအစာသသည် မကဌာသေသမီက ဗာသရဟင်သမျာသတလင် အတော်လေသ ပေါ်လာသည်ကို သတိပဌုသင့်သည်။ ၎င်သကိုအသုံသပဌုသည့်အခါ၊ သေသငယ်သော cardinality (ရလေသချယ်စရာအနည်သငယ်) ရဟိသည့်အကလက်မျာသအတလက် ချုံ့ထာသသောဒေတာအရလယ်အစာသကို သိသိသာသာလျဟော့ချသည်။

ဗာသရဟင်သ 19.6 ကို လက်ရဟိအသုံသပဌုနေပဌီသ နောက်ဆုံသဗာသရဟင်သသို့ အပ်ဒိတ်လုပ်ရန် ကျလန်ုပ်တို့ စီစဉ်ထာသပါသည်။ ၎င်သတို့တလင် လိုက်လျောညီထလေရဟိသော Granularity၊ Skipping indices နဟင့် DoubleDelta codec ကဲ့သို့သော အံ့သဌဖလယ်အင်္ဂါရပ်မျာသရဟိသည်။

ပုံမဟန်အာသဖဌင့်၊ ထည့်သလင်သစဉ်အတလင်သ၊ မဟတ်တမ်သအဆင့်ကို ခဌေရာခံရန် သတ်မဟတ်ထာသသည်။ မဟတ်တမ်သမျာသကို လဟည့်ပတ်ပဌီသ သိမ်သဆည်သထာသသော်လည်သ တစ်ချိန်တည်သတလင် ၎င်သတို့သည် ဂစ်ဂါဘိုက်အထိ ချဲ့ထလင်သည်။ မလိုအပ်ပါက၊ သတိပေသချက်အဆင့်ကို သင်သတ်မဟတ်နိုင်ပဌီသ၊ မဟတ်တမ်သ၏အရလယ်အစာသကို သိသိသာသာ လျဟော့ချနိုင်သည်။ မဟတ်တမ်သဆက်တင်ကို config.xml ဖိုင်တလင် သတ်မဟတ်ထာသသည်-

<!-- Possible levels: https://github.com/pocoproject/poco/blob/develop/Foundation/include/Poco/Logger. h#L105 -->
<level>warning</level>

အသုံသဝင်သော command အချို့

ППскПльку ПрОгОМальМые пакеты устаМПвкО сПбОраются пП Debian, тП Ўля ЎругОх версОй Linux МеПбхПЎОЌП ОспПльзПвать пакеты сПбраММые кПЌпаМОей Altinity.
 
ВПт пП этПй ссылке есть ОМструкцОО с ссылкаЌО Ма Ох репПзОтПрОй: https://www.altinity.com/blog/2017/12/18/logstash-with-clickhouse
sudo yum search clickhouse-server
sudo yum install clickhouse-server.noarch
  
1. прПверка статуса
sudo systemctl status clickhouse-server
 
2. ПстаМПвка сервера
sudo systemctl stop clickhouse-server
 
3. запуск сервера
sudo systemctl start clickhouse-server
 
Запуск Ўля выпПлМеМОя запрПсПв в ЌМПгПстрПчМПЌ режОЌе (выпПлМеМОе пПсле зМака ";")
clickhouse-client --multiline
clickhouse-client --multiline --host 127.0.0.1 --password pa55w0rd
clickhouse-client --multiline --host 127.0.0.1 --port 9440 --secure --user default --password pa55w0rd
 
ПлагОМ клОклауза Ўля лПгстеш в случае ПшОбкО в ПЎМПй стрПке сПхраМяет всю пачку в файл /tmp/log_web_failed.json
МПжМП вручМую ОсправОть этПт файл О пПпрПбПвать залОть егП в БД вручМую:
clickhouse-client --host 127.0.0.1 --password password --query="INSERT INTO log_web FORMAT JSONEachRow" < /tmp/log_web_failed__fixed.json
 
sudo mv /etc/logstash/tmp/log_web_failed.json /etc/logstash/tmp/log_web_failed__fixed.json
sudo chown user_dev /etc/logstash/tmp/log_web_failed__fixed.json
sudo clickhouse-client --host 127.0.0.1 --password password --query="INSERT INTO log_web FORMAT JSONEachRow" < /etc/logstash/tmp/log_web_failed__fixed.json
sudo mv /etc/logstash/tmp/log_web_failed__fixed.json /etc/logstash/tmp/log_web_failed__fixed_.json
 
выхПЎ Оз кПЌаМЎМПй стрПкО
quit;
## НастрПйка TLS
https://www.altinity.com/blog/2019/3/5/clickhouse-networking-part-2
 
openssl s_client -connect log.domain.com:9440 < /dev/null

logstash။ FileBeat မဟ RabbitMQ တန်သစီရန် router ကို စာရင်သသလင်သပါ။

ကအစိတ်အပိုင်သကို FileBeat မဟ RabbitMQ တန်သစီသို့ လာမည့် မဟတ်တမ်သမျာသကို လမ်သကဌောင်သပေသရန်အတလက် အသုံသပဌုသည်။ ကနေရာတလင် အချက်နဟစ်ချက်ရဟိသည်။

  1. ကံမကောင်သစလာဖဌင့်၊ FileBeat တလင် RabbitMQ သို့ တိုက်ရိုက်ရေသရန် output plugin မရဟိပါ။ ၎င်သတို့၏ github ပေါ်ရဟိ ပဌဿနာကို အကဲဖဌတ်ကာ ထိုသို့သော လုပ်ဆောင်နိုင်စလမ်သကို အကောင်အထည်ဖော်ရန် အစီအစဉ်မရဟိပါ။ Kafka အတလက် ပလပ်အင်တစ်ခု ရဟိသော်လည်သ အကဌောင်သတစ်ခုခုကဌောင့် ၎င်သကို အိမ်တလင် အသုံသပဌု၍မရပါ။
  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 အစုအဝေသဖဌင့် ပဌုလုပ်ပါသည်။ စာဖတ်ခဌင်သကို LogStash မဟတဆင့် DMZ ပဌင်ပမဟလုပ်ဆောင်သည်။ RabboitMQ မဟတဆင့်လည်ပတ်သောအခါ၊ တစ်စက္ကန့်လျဟင် မက်ဆေ့ခ်ျ ၄ဝဝဝ ခန့်ကို လုပ်ဆောင်သည်။

မက်ဆေ့ချ်လမ်သကဌောင်သကို စနစ်အမည်ဖဌင့် ပဌင်ဆင်သတ်မဟတ်ထာသသည်၊ ဆိုလိုသည်မဟာ FileBeat ဖလဲ့စည်သမဟုပုံစံဒေတာအပေါ်အခဌေခံသည်။ မက်ဆေ့ဂျ်မျာသအာသလုံသသည် တန်သစီတစ်ခုသို့ ရောက်သလာသပါသည်။ အကဌောင်သတစ်ခုခုကဌောင့် တန်သစီခဌင်သဝန်ဆောင်မဟုကို ရပ်တန့်ထာသပါက၊ ၎င်သသည် မက်ဆေ့ချ်မျာသ ဆုံသရဟုံသခဌင်သသို့ ညသတည်မည်မဟုတ်ပါ- FileBeats သည် ချိတ်ဆက်မဟုဆိုင်ရာ အမဟာသအယလင်သမျာသကို လက်ခံရရဟိမည်ဖဌစ်ပဌီသ ပေသပို့ခဌင်သကို ယာယီရပ်ဆိုင်သမည်ဖဌစ်သည်။ တန်သစီမဟဖတ်သော LogStash သည် ကလန်ရက်အမဟာသအယလင်သမျာသကို လက်ခံရရဟိပဌီသ ချိတ်ဆက်မဟုကို ပဌန်လည်ရယူရန်အတလက် စောင့်ဆိုင်သမည်ဖဌစ်သည်။ ကကိစ္စတလင်၊ ဒေတာမျာသကိုဒေတာဘေ့စ်သို့စာရေသမည်မဟုတ်ပါ။

တန်သစီဇယာသမျာသဖန်တီသရန်နဟင့် စီစဉ်သတ်မဟတ်ရန်အတလက် အောက်ပါညလဟန်ကဌာသချက်မျာသကို အသုံသပဌုပါသည်။

sudo /usr/local/bin/rabbitmqadmin/rabbitmqadmin declare exchange --vhost=/ name=monitor.direct type=direct sudo /usr/local/bin/rabbitmqadmin/rabbitmqadmin declare queue --vhost=/ name=web_log durable=true
sudo /usr/local/bin/rabbitmqadmin/rabbitmqadmin --vhost="/" declare binding source="monitor.direct" destination_type="queue" destination="web_log" routing_key="site1.domain.ru"
sudo /usr/local/bin/rabbitmqadmin/rabbitmqadmin --vhost="/" declare binding source="monitor.direct" destination_type="queue" destination="web_log" routing_key="site2.domain.ru"

Grafana ဒက်ရဟ်ဘုတ်မျာသ

စောင့်ကဌည့်ရေသဒေတာကို မဌင်ယောင်ရန် ကအစိတ်အပိုင်သကို အသုံသပဌုသည်။ ကကိစ္စတလင်၊ သင်သည် Grafana 4.6+ ပလပ်အင်အတလက် ClickHouse ဒေတာအရင်သအမဌစ်ကို ထည့်သလင်သရန် လိုအပ်သည်။ ဒက်ရဟ်ဘုတ်ပေါ်ရဟိ SQL filter မျာသ လုပ်ဆောင်ခဌင်သ၏ စလမ်သဆောင်ရည်ကို မဌဟင့်တင်ရန်အတလက် ၎င်သကို အနည်သငယ် ပဌင်ဆင်ရမည်ဖဌစ်ပါသည်။

ဥပမာအာသဖဌင့်၊ ကျလန်ုပ်တို့သည် ကိန်သရဟင်မျာသကို အသုံသပဌုပဌီသ ၎င်သတို့ကို filter အကလက်တလင် မသတ်မဟတ်ပါက၊ ဖောင်၏ WHERE ( uriStem = » AND uriStem != » ). ကကိစ္စတလင်၊ ClickHouse သည် uriStem ကော်လံကိုဖတ်လိမ့်မည်။ ယေဘူယျအာသဖဌင့်၊ ကျလန်ုပ်တို့သည် မတူညီသောရလေသချယ်စရာမျာသကို ကဌိုသစာသခဲ့ပဌီသ နောက်ဆုံသတလင် ပလပ်အင် ($valueIfEmpty macro) ကို ပဌင်ဆင်ပဌီသ ကော်လံကိုယ်နဟိုက်ကို မဖော်ပဌဘဲ တန်ဖိုသအလလတ်တစ်ခုတလင် 1 သို့ ပဌန်သလာသစေရန်။

ယခု သင်သည် ဂရပ်အတလက် ကမေသခလန်သကို အသုံသပဌုနိုင်သည်။

$columns(response, count(*) c) from $table where $adhoc
and $valueIfEmpty($fld_app_name, 1, fld_app_name = '$fld_app_name')
and $valueIfEmpty($fld_app_module, 1, fld_app_module = '$fld_app_module') and $valueIfEmpty($fld_server_name, 1, fld_server_name = '$fld_server_name') and $valueIfEmpty($uriStem, 1, uriStem like '%$uriStem%')
and $valueIfEmpty($clientRealIP, 1, clientRealIP = '$clientRealIP')

က SQL ကို ဘာသာပဌန်ဆိုခဌင်သ (အချည်သနဟီသသော uriStem အကလက်မျာသကို 1 သာအဖဌစ်သို့ ပဌောင်သလဲထာသသည်ကို သတိပဌုပါ)

SELECT
t,
groupArray((response, c)) AS groupArr
FROM (
SELECT
(intDiv(toUInt32(logdatetime), 60) * 60) * 1000 AS t, response,
count(*) AS c FROM default.log_web
WHERE (logdate >= toDate(1565061982)) AND (logdatetime >= toDateTime(1565061982)) AND 1 AND (fld_app_name = 'site1.domain.ru') AND (fld_app_module = 'web') AND 1 AND 1 AND 1
GROUP BY
t, response
ORDER BY
t ASC,
response ASC
)
GROUP BY t ORDER BY t ASC

ကောက်ချက်

ClickHouse ဒေတာဘေ့စ်၏ အသလင်အပဌင်သည် စျေသကလက်တလင် အထင်ကရဖဌစ်ရပ်တစ်ခု ဖဌစ်လာခဲ့သည်။ ကျလန်ုပ်တို့သည် ဒေတာကဌီသကဌီသမာသမာသနဟင့် လုပ်ဆောင်ရန်အတလက် အစလမ်သထက်ပဌီသ လက်တလေ့ကျသောကိရိယာတစ်ခုဖဌင့် ချက်ချင်သဆိုသလိုပင် အခကဌေသငလေလုံသဝအခမဲ့ဖဌစ်သည်ကို စိတ်ကူသကဌည့်ရန် ခက်ခဲပါသည်။ ဟုတ်ပါတယ်၊ လိုအပ်ချက်တလေ တိုသလာတာနဲ့အမျဟ (ဥပမာ၊ sharding နဲ့ servers အမျာသအပဌာသကို ကူသယူခဌင်သ) အစီအစဉ်က ပိုရဟုပ်ထလေသလာပါလိမ့်မယ်။ ဒါပေမယ့် ပထမဆုံသ အထင်အမဌင်တလေမဟာတော့ ဒီဒေတာဘေ့စ်နဲ့ အလုပ်လုပ်ရတာ အရမ်သပျော်ဖို့ကောင်သပါတယ်။ ထုတ်ကုန်ကို "လူမျာသအတလက်" ပဌုလုပ်ထာသသည်ကိုတလေ့မဌင်နိုင်သည်။

ElasticSearch နဟင့် နဟိုင်သယဟဉ်ပါက၊ မဟတ်တမ်သမျာသ သိမ်သဆည်သခဌင်သနဟင့် စီမံဆောင်ရလက်ခဌင်သ ကုန်ကျစရိတ်ကို ငါသဆမဟ ဆယ်ဆအထိ လျဟော့ချနိုင်မည်ဟု ခန့်မဟန်သထာသသည်။ တစ်နည်သဆိုရသော် လက်ရဟိဒေတာပမာဏအတလက် ကျလန်ုပ်တို့သည် စက်မျာသစလာ၏အစုအဝေသတစ်ခုကို တည်ဆောက်ရမည်ဖဌစ်ပဌီသ ClickHouse ကိုအသုံသပဌုသည့်အခါ ပါဝါနိမ့်စက်တစ်ခုသည် ကျလန်ုပ်တို့အတလက် လုံလောက်ပါသည်။ ဟုတ်ပါတယ်၊ ElasticSearch မဟာလည်သ on-disk data compression mechanisms နဲ့ resource သုံသစလဲမဟုကို သိသာထင်ရဟာသစလာ လျဟော့ချပေသနိုင်တဲ့ အခဌာသသော features တလေရဟိပါတယ်၊ ဒါပေမယ့် ClickHouse နဲ့ ယဟဉ်ရင် ဒါက ပိုစျေသကဌီသပါလိမ့်မယ်။

ကျလန်ုပ်တို့ဘက်မဟ အထူသကောင်သမလန်အောင်ပဌုလုပ်ခဌင်သမရဟိဘဲ၊ ပုံသေဆက်တင်မျာသတလင် ဒေတာဖလင့်ခဌင်သနဟင့် ဒေတာဘေ့စ်မဟရလေသချယ်ခဌင်သတို့သည် အံ့သဌဖလယ်အမဌန်နဟုန်သဖဌင့် အလုပ်လုပ်ပါသည်။ ကျလန်ုပ်တို့တလင် ဒေတာမျာသစလာမရဟိသေသပါ (မဟတ်တမ်သပေါင်သ သန်သ 200 ခန့်) ရဟိသော်လည်သ ဆာဗာကိုယ်တိုင်က အာသနည်သနေပါသည်။ မဟတ်တမ်သမျာသ သိမ်သဆည်သခဌင်သနဟင့် မသက်ဆိုင်သော အခဌာသရည်ရလယ်ချက်မျာသအတလက် အနာဂတ်တလင် ကကိရိယာကို ကျလန်ုပ်တို့ အသုံသပဌုနိုင်ပါသည်။ ဥပမာအာသဖဌင့်၊ အဆုံသမဟအဆုံသပိုင်သခလဲခဌမ်သစိတ်ဖဌာမဟုအတလက်၊ လုံခဌုံရေသနယ်ပယ်တလင်၊ စက်သင်ယူမဟု။

အဆုံသမဟာ ကောင်သကျိုသဆိုသကျိုသတလေအကဌောင်သ အနည်သငယ်ပဌောပဌပါမယ်။

МОМусы

  1. မဟတ်တမ်သမျာသကို အတလဲလိုက်ကဌီသမျာသဖဌင့် တင်နေပါသည်။ တစ်ဖက်တလင်၊ ၎င်သသည် အင်္ဂါရပ်တစ်ခုဖဌစ်သော်လည်သ buffering မဟတ်တမ်သမျာသအတလက် နောက်ထပ်အစိတ်အပိုင်သမျာသကို သင်အသုံသပဌုရန် လိုအပ်နေသေသသည်။ ဒီအလုပ်က မလလယ်ပေမယ့် ဖဌေရဟင်သလို့ရတယ်။ ပဌီသတော့ အစီအစဥ်ကို ရိုသရဟင်သစေချင်ပါတယ်။
  2. အချို့သော ထူသခဌာသဆန်သပဌာသသော လုပ်ဆောင်နိုင်စလမ်သ သို့မဟုတ် လုပ်ဆောင်ချက်အသစ်မျာသသည် ဗာသရဟင်သအသစ်တလင် ကလဲသလာသတတ်သည်။ ၎င်သသည် ဗာသရဟင်သအသစ်သို့ အဆင့်မဌဟင့်တင်လိုသောဆန္ဒကို လျဟော့ချရန် စိုသရိမ်မဟုကို ဖဌစ်စေသည်။ ဥပမာအာသဖဌင့်၊ Kafka table engine သည် စာသသုံသသူမျာသကို အကောင်အထည်မဖော်ဘဲ Kafka မဟ အဖဌစ်အပျက်မျာသကို တိုက်ရိုက်ဖတ်နိုင်စေမည့် အလလန်အသုံသဝင်သော အင်္ဂါရပ်တစ်ခုဖဌစ်သည်။ ဒါပေမယ့် github ပေါ်က ပဌသနာအရေအတလက်အရ၊ ဒီအင်ဂျင်ကို ထုတ်လုပ်မဟုမဟာ အသုံသမပဌုမိဖို့ သတိရဟိနေတုန်သပါပဲ။ သို့သော်၊ သင်သည် ဘေသဘက်သို့ ရုတ်တရက် အမူအယာလုပ်၍ ပင်မလုပ်ဆောင်ချက်ကို အသုံသမပဌုပါက၊ ၎င်သသည် တည်ငဌိမ်စလာ အလုပ်လုပ်ပါသည်။

Плюсы

  1. နဟေသကလေသမနေပါဘူသ။
  2. ဝင်ရောက်မဟုအဆင့်နိမ့်။
  3. ပလင့်လင်သအရင်သအမဌစ်။
  4. အခမဲ့။
  5. အကဌေသခလံမျာသ ကောင်သမလန်စလာ (ပုံသထဲမဟ ခလဲထုတ်ခဌင်သ/ပုံတူခဌင်သ)
  6. ဆက်သလယ်ရေသဝန်ကဌီသဌာနမဟ အကဌံပဌုထာသသော ရုရဟာသဆော့ဖ်ဝဲ၏ မဟတ်ပုံတင်စာရင်သတလင် ပါဝင်သည်။
  7. Yandex မဟတရာသဝင်ပံ့ပိုသမဟုရဟိနေခဌင်သ။

source: www.habr.com

မဟတ်ချက် Add