
, avsedd för insamling, omvandling och sÀndning av loggdata, mÀtvÀrden och hÀndelser.
âÂ
Skriven i Rust, kÀnnetecknas den av hög prestanda och lÄg minnesförbrukning jÀmfört med liknande verktyg. Dessutom lÀggs stor vikt vid funktioner relaterade till korrekthet, sÀrskilt möjligheterna att spara oanvÀnda hÀndelser i en buffert pÄ disken och loggfiler rotation.
Arkitektoniskt Àr Vektor en hÀndelse-router som tar emot meddelanden frÄn ett eller flera kÀllor, tillval som tillÀmpar transformationer pÄ dessa meddelanden och skickar dem till en eller fleramottagare Vector Àr en ersÀttning för filebeat och logstash, den kan fungera i bÄda rollerna (ta emot och sÀnda loggar), mer detaljerat om deras.
Om i Logstash byggs kedjan som input â filter â output sĂ„ Ă€r det i Vektor .
kĂ€llor â â
Denna instruktion Àr en omarbetad version av
Vyacheslav Rakhinskys Aug 05 06:25:31.889 DEBUG transform{name=nginx_parse_rename_fields type=rename_fields}: vector::transforms::rename_fields: FÀlt fanns inte field=«geoip.country_name» rate_limit_secs=30
Om nĂ„gon behöver bearbeta geoip, vĂ€nligen hĂ€nvisa till den ursprungliga instruktionen frĂ„nVi kommer att konfigurera kopplingen Nginx (Access logs) â Vector (Client | Filebeat) â Vector (Server | Logstash) â separat till Clickhouse och separat till Elasticsearch. Vi installerar 4 servrar. Ăven om det kan göras med 3 servrar. .
Schemat ser ungefÀr ut som följer.

Vi stÀnger av Selinux pÄ alla dina servrar
sed -i 's/^SELINUX=.*$/SELINUX=disabled/g' /etc/selinux/config reboot
Vi installerar en HTTP-server emulator + verktyg pÄ alla servrarNodejs-stub-server har ingen rpm.
Som HTTP server emulator kommer vi att anvÀnda frÄn
Vi lÀgger till repositoriet antonpatsev/nodejs-stub-server skapar vi en rpm för den. RPM kommer att byggas med hjÀlp av
yum -y install yum-plugin-copr epel-release yes | yum copr enable antonpatsev/nodejs-stub-server
Vi installerar nodejs-stub-server, Apache benchmark och terminal-multiplexer screen pÄ alla servraryum -y install stub_http_server screen mc httpd-tools screen
Jag har justerat svarstiden för stub_http_server i filen /var/lib/stub_http_server/stub_http_server.js för att fÄ fler loggar.var max_sleep = 10;
Vi startar stub_http_server.systemctl start stub_http_server systemctl enable stub_http_server
Installation av ClickhouseClickHouse anvÀnder ett uppsÀttning instruktioner SSE 4.2, sÄ om inget annat anges blir dess stöd i den anvÀnda processorn ett ytterligare systemkrav. HÀr Àr kommandot för att kontrollera om den aktuella processorn stöder SSE 4.2:
ClickHouse anvÀnder en uppsÀttning instruktioner frÄn SSE 4.2, sÄ om inget annat anges blir dess stöd i den anvÀnda processorn ett ytterligare systemkrav. HÀr Àr kommandot för att kontrollera om den aktuella processorn stödjer SSE 4.2:
grep -q sse4_2 /proc/cpuinfo && echo "SSE 4.2 stöds" || echo "SSE 4.2 stöds inte"Först mÄste du ansluta det officiella arkivet:
sudo yum install -y yum-utils
sudo rpm --import https://repo.clickhouse.tech/CLICKHOUSE-KEY.GPG
sudo yum-config-manager --add-repo https://repo.clickhouse.tech/rpm/stable/x86_64För att installera paketen mÄste du köra följande kommandon:
sudo yum install -y clickhouse-server clickhouse-clientVi tillÄter clickhouse-server att lyssna pÄ nÀtverkskortet i filen /etc/clickhouse-server/config.xml
0.0.0.0Vi Àndrar loggnivÄn frÄn trace till debug
debug
StandardkomprimeringsinstÀllningarna Àr:
min_compress_block_size 65536
max_compress_block_size 1048576För att aktivera Zstd-komprimering rekommenderas det att inte röra konfigurationen, utan hellre anvÀnda DDL.

Hur man tillÀmpar zstd-komprimering via DDL kunde jag inte hitta pÄ Google. DÀrför lÀmnade jag det som det Àr.
Kollegor, som anvĂ€nder zstd-komprimering i Clickhouse â kan ni dela med er av instruktionerna, tack.
För att köra servern som en demon, kör:
service clickhouse-server startNu gÄr vi vidare till att konfigurera Clickhouse
Vi loggar in i Clickhouse
clickhouse-client -h 172.26.10.109 -m172.26.10.109 â IP-adressen för servern dĂ€r Clickhouse Ă€r installerat.
Vi skapar databasen vector
CREATE DATABASE vector;Vi kontrollerar att databasen finns.
show databases;Vi skapar tabellen vector.logs.
/* ĐŃĐŸ ŃаблОŃа гЎД Ń
ŃĐ°ĐœŃŃŃŃ Đ»ĐŸĐłĐž ĐșаĐș Đ”ŃŃŃ */
CREATE TABLE vector.logs
(
`node_name` String,
`timestamp` DateTime,
`server_name` String,
`user_id` String,
`request_full` String,
`request_user_agent` String,
`request_http_host` String,
`request_uri` String,
`request_scheme` String,
`request_method` String,
`request_length` UInt64,
`request_time` Float32,
`request_referrer` String,
`response_status` UInt16,
`response_body_bytes_sent` UInt64,
`response_content_type` String,
`remote_addr` IPv4,
`remote_port` UInt32,
`remote_user` String,
`upstream_addr` IPv4,
`upstream_port` UInt32,
`upstream_bytes_received` UInt64,
`upstream_bytes_sent` UInt64,
`upstream_cache_status` String,
`upstream_connect_time` Float32,
`upstream_header_time` Float32,
`upstream_response_length` UInt64,
`upstream_response_time` Float32,
`upstream_status` UInt16,
`upstream_content_type` String,
INDEX idx_http_host request_http_host TYPE set(0) GRANULARITY 1
)
ENGINE = MergeTree()
PARTITION BY toYYYYMMDD(timestamp)
ORDER BY timestamp
TTL timestamp + toIntervalMonth(1)
SETTINGS index_granularity = 8192;Vi kontrollerar att tabellerna skapades. Vi kör clickhouse-client och gör en förfrÄgan.
Vi gÄr till databasen vector.
use vector;
Ok.
0 rows in set. Elapsed: 0.001 sec.Vi tittar pÄ tabellerna.
show tables;
âânameâââââââââââââââââ
â logs â
âââââââââââââââââââââââInstallation av Elasticsearch pĂ„ den fjĂ€rde servern för att skicka samma data till Elasticsearch för jĂ€mförelse med Clickhouse
Vi lÀgger till den offentliga rpm-nyckeln
rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearchVi skapar 2 arkiv:
/etc/yum.repos.d/elasticsearch.repo
[elasticsearch]
name=Elasticsearch repository for 7.x packages
baseurl=https://artifacts.elastic.co/packages/7.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=0
autorefresh=1
type=rpm-md/etc/yum.repos.d/kibana.repo
[kibana-7.x]
name=Kibana repository for 7.x packages
baseurl=https://artifacts.elastic.co/packages/7.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=1
autorefresh=1
type=rpm-mdVi installerar Elasticsearch och Kibana
yum install -y kibana elasticsearchEftersom det kommer att vara i ett exemplar, mÄste vi lÀgga till följande i filen /etc/elasticsearch/elasticsearch.yml:
discovery.type: single-nodeFör att vektorn ska kunna skicka data till Elasticsearch frÄn en annan server Àndrar vi network.host.
network.host: 0.0.0.0För att ansluta till Kibana Àndrar vi server.host-parametern i filen /etc/kibana/kibana.yml
server.host: "0.0.0.0"Vi startar och aktiverar Elasticsearch för autostart
systemctl enable elasticsearch
systemctl start elasticsearchoch Kibana
systemctl enable kibana
systemctl start kibanaKonfiguration av Elasticsearch för single-node-lÀge 1 shard, 0 replika. Troligtvis har ni ett kluster av en stor mÀngd servrar och ni behöver inte göra detta.
För framtida index uppdaterar vi standardmallen:
curl -X PUT http://localhost:9200/_template/default -H 'Content-Type: application/json' -d '{"index_patterns": ["*"],"order": -1,"settings": {"number_of_shards": "1","number_of_replicas": "0"}}' Installation som en ersÀttning för Logstash pÄ server 2
yum install -y https://packages.timber.io/vector/0.9.X/vector-x86_64.rpm mc httpd-tools screenVi konfigurerar Vector som ersÀttning för Logstash. Redigera filen /etc/vector/vector.toml
# /etc/vector/vector.toml
data_dir = "/var/lib/vector"
[sources.nginx_input_vector]
# General
type = "vector"
address = "0.0.0.0:9876"
shutdown_timeout_secs = 30
[transforms.nginx_parse_json]
inputs = [ "nginx_input_vector" ]
type = "json_parser"
[transforms.nginx_parse_add_defaults]
inputs = [ "nginx_parse_json" ]
type = "lua"
version = "2"
hooks.process = """
function (event, emit)
function split_first(s, delimiter)
result = {};
for match in (s..delimiter):gmatch("(.-)"..delimiter) do
table.insert(result, match);
end
return result[1];
end
function split_last(s, delimiter)
result = {};
for match in (s..delimiter):gmatch("(.-)"..delimiter) do
table.insert(result, match);
end
return result[#result];
end
event.log.upstream_addr = split_first(split_last(event.log.upstream_addr, ', '), ':')
event.log.upstream_bytes_received = split_last(event.log.upstream_bytes_received, ', ')
event.log.upstream_bytes_sent = split_last(event.log.upstream_bytes_sent, ', ')
event.log.upstream_connect_time = split_last(event.log.upstream_connect_time, ', ')
event.log.upstream_header_time = split_last(event.log.upstream_header_time, ', ')
event.log.upstream_response_length = split_last(event.log.upstream_response_length, ', ')
event.log.upstream_response_time = split_last(event.log.upstream_response_time, ', ')
event.log.upstream_status = split_last(event.log.upstream_status, ', ')
if event.log.upstream_addr == "" then
event.log.upstream_addr = "127.0.0.1"
end
if (event.log.upstream_bytes_received == "-" or event.log.upstream_bytes_received == "") then
event.log.upstream_bytes_received = "0"
end
if (event.log.upstream_bytes_sent == "-" or event.log.upstream_bytes_sent == "") then
event.log.upstream_bytes_sent = "0"
end
if event.log.upstream_cache_status == "" then
event.log.upstream_cache_status = "DISABLED"
end
if (event.log.upstream_connect_time == "-" or event.log.upstream_connect_time == "") then
event.log.upstream_connect_time = "0"
end
if (event.log.upstream_header_time == "-" or event.log.upstream_header_time == "") then
event.log.upstream_header_time = "0"
end
if (event.log.upstream_response_length == "-" or event.log.upstream_response_length == "") then
event.log.upstream_response_length = "0"
end
if (event.log.upstream_response_time == "-" or event.log.upstream_response_time == "") then
event.log.upstream_response_time = "0"
end
if (event.log.upstream_status == "-" or event.log.upstream_status == "") then
event.log.upstream_status = "0"
end
emit(event)
end
"""
[transforms.nginx_parse_remove_fields]
inputs = [ "nginx_parse_add_defaults" ]
type = "remove_fields"
fields = ["data", "file", "host", "source_type"]
[transforms.nginx_parse_coercer]
type = "coercer"
inputs = ["nginx_parse_remove_fields"]
types.request_length = "int"
types.request_time = "float"
types.response_status = "int"
types.response_body_bytes_sent = "int"
types.remote_port = "int"
types.upstream_bytes_received = "int"
types.upstream_bytes_send = "int"
types.upstream_connect_time = "float"
types.upstream_header_time = "float"
types.upstream_response_length = "int"
types.upstream_response_time = "float"
types.upstream_status = "int"
types.timestamp = "timestamp"
[sinks.nginx_output_clickhouse]
inputs = ["nginx_parse_coercer"]
type = "clickhouse"
database = "vector"
healthcheck = true
host = "http://172.26.10.109:8123" # ĐĐŽŃĐ”Ń Clickhouse
table = "logs"
encoding.timestamp_format = "unix"
buffer.type = "disk"
buffer.max_size = 104900000
buffer.when_full = "block"
request.in_flight_limit = 20
[sinks.elasticsearch]
type = "elasticsearch"
inputs = ["nginx_parse_coercer"]
compression = "none"
healthcheck = true
# 172.26.10.116 - ŃĐ”ŃĐČĐ”Ń ĐłĐŽĐ” ŃŃŃĐ°ĐœĐŸĐČĐ”Đœ elasticsearch
host = "http://172.26.10.116:9200"
index = "vector-%Y-%m-%d"Du kan justera sektionen transforms.nginx_parse_add_defaults.
Eftersom anvÀnder dessa konfigurationer för en liten CDN och dÀr i upstream_* kan flera vÀrden komma.
Till exempel:
"upstream_addr": "128.66.0.10:443, 128.66.0.11:443, 128.66.0.12:443"
"upstream_bytes_received": "-, -, 123"
"upstream_status": "502, 502, 200"Om detta inte Àr din situation kan den hÀr sektionen förenklas.
Skapa serviceinstÀllningar för systemd /etc/systemd/system/vector.service
# /etc/systemd/system/vector.service
[Unit]
Description=Vector
After=network-online.target
Requires=network-online.target
[Service]
User=vector
Group=vector
ExecStart=/usr/bin/vector
ExecReload=/bin/kill -HUP $MAINPID
Restart=no
StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=vector
[Install]
WantedBy=multi-user.targetEfter att ha skapat tabellerna kan vi starta Vector.
systemctl enable vector
systemctl start vectorLoggar för vector kan ses sÄ hÀr
journalctl -f -u vectorLoggarna bör innehÄlla följande poster
INFO vector::topology::builder: Healthcheck: Passed.
INFO vector::topology::builder: Healthcheck: Passed.PĂ„ klienten (Web server) â server 1
PÄ servern med nginx mÄste ipv6 stÀngas av, eftersom fÀltet i tabellen logs i clickhouse anvÀnder upstream_addr IPv4, eftersom jag inte anvÀnder ipv6 inuti nÀtverket. Om ipv6 inte stÀngs av, kommer det att uppstÄ fel:
DB::Exception: Invalid IPv4 value.: (while read the value of key upstream_addr)Möjligtvis lÀsarna, lÀgga till stöd för ipv6.
Skapa filen /etc/sysctl.d/98-disable-ipv6.conf
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
net.ipv6.conf.lo.disable_ipv6 = 1TillÀmpa instÀllningarna
sysctl --systemInstallera nginx.
LĂ€gg till nginx-repo-filen /etc/yum.repos.d/nginx.repo
[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=trueInstallera nginx-paketet
yum install -y nginxFörst mÄste vi konfigurera loggformatet i Nginx i filen /etc/nginx/nginx.conf
user nginx;
# du mÄste stÀlla in arbetsprocesserna baserat pÄ dina CPU-kÀrnor, nginx drar inte nytta av att stÀlla in fler Àn sÄ
worker_processes auto; # vissa senaste versioner berÀknar det automatiskt
# antal filbeskrivare som anvÀnds för nginx
# grÀnsen för maximala FD:er pÄ servern sÀtts vanligtvis av OS.
# om du inte stÀller in FD:er anvÀnds OS-instÀllningarna som som standard Àr 2000
worker_rlimit_nofile 100000;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
# tillhandahÄller konfigurationsfilens kontext dÀr direktiven som pÄverkar anslutningsbehandling anges.
events {
# avgör hur mÄnga kunder som serveras per arbetare
# max kunder = worker_connections * worker_processes
# max kunder begrÀnsas ocksÄ av antalet socketanslutningar som finns tillgÀngliga pÄ systemet (~64k)
worker_connections 4000;
# optimerad för att servera mÄnga kunder med varje trÄd, avgörande för linux -- för testmiljö
use epoll;
# acceptera sÄ mÄnga anslutningar som möjligt, kan överbelasta arbetsanslutningar om det Àr instÀllt för lÄgt -- för testmiljö
multi_accept on;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
log_format vector escape=json
'{'
'"node_name":"nginx-vector",'
'"timestamp":"$time_iso8601",'
'"server_name":"$server_name",'
'"request_full": "$request",'
'"request_user_agent":"$http_user_agent",'
'"request_http_host":"$http_host",'
'"request_uri":"$request_uri",'
'"request_scheme": "$scheme",'
'"request_method":"$request_method",'
'"request_length":"$request_length",'
'"request_time": "$request_time",'
'"request_referrer":"$http_referer",'
'"response_status": "$status",'
'"response_body_bytes_sent":"$body_bytes_sent",'
'"response_content_type":"$sent_http_content_type",'
'"remote_addr": "$remote_addr",'
'"remote_port": "$remote_port",'
'"remote_user": "$remote_user",'
'"upstream_addr": "$upstream_addr",'
'"upstream_bytes_received": "$upstream_bytes_received",'
'"upstream_bytes_sent": "$upstream_bytes_sent",'
'"upstream_cache_status":"$upstream_cache_status",'
'"upstream_connect_time":"$upstream_connect_time",'
'"upstream_header_time":"$upstream_header_time",'
'"upstream_response_length":"$upstream_response_length",'
'"upstream_response_time":"$upstream_response_time",'
'"upstream_status": "$upstream_status",'
'"upstream_content_type":"$upstream_http_content_type"'
'}';
access_log /var/log/nginx/access.log main;
access_log /var/log/nginx/access.json.log vector; # Ny logg i json-format
sendfile on;
#tcp_nopush on;
keepalive_timeout 65;
#gzip on;
include /etc/nginx/conf.d/*.conf;
}För att inte förstöra din nuvarande konfiguration tillÄter Nginx flera direktiv för access_log
access_log /var/log/nginx/access.log main; # Standardlogg
access_log /var/log/nginx/access.json.log vector; # Ny logg i json-formatTveka inte att lÀgga till en regel i logrotate för de nya loggarna (om loggfilen inte slutar pÄ .log)
Ta bort default.conf frÄn /etc/nginx/conf.d/
rm -f /etc/nginx/conf.d/default.confLÀgg till en virtuell vÀrd i /etc/nginx/conf.d/vhost1.conf
server {
listen 80;
server_name vhost1;
location / {
proxy_pass http://172.26.10.106:8080;
}
}LÀgg till en virtuell vÀrd /etc/nginx/conf.d/vhost2.conf
server {
listen 80;
server_name vhost2;
location / {
proxy_pass http://172.26.10.108:8080;
}
}LÀgg till en virtuell vÀrd /etc/nginx/conf.d/vhost3.conf
server {
listen 80;
server_name vhost3;
location / {
proxy_pass http://172.26.10.109:8080;
}
}LÀgg till en virtuell vÀrd /etc/nginx/conf.d/vhost4.conf
server {
listen 80;
server_name vhost4;
location / {
proxy_pass http://172.26.10.116:8080;
}
}LÀgg till virtuella vÀrdar i filen /etc/hosts (172.26.10.106 Àr IP-adressen för servern dÀr nginx Àr installerad) pÄ alla servrar:
172.26.10.106 vhost1
172.26.10.106 vhost2
172.26.10.106 vhost3
172.26.10.106 vhost4Och om allt Àr klart,
nginx -t
systemctl restart nginxNu installerar vi sjÀlva
yum install -y https://packages.timber.io/vector/0.9.X/vector-x86_64.rpmSkapa en konfigurationsfil för systemd /etc/systemd/system/vector.service
[Unit]
Description=Vector
After=network-online.target
Requires=network-online.target
[Service]
User=vector
Group=vector
ExecStart=/usr/bin/vector
ExecReload=/bin/kill -HUP $MAINPID
Restart=no
StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=vector
[Install]
WantedBy=multi-user.targetOch konfigurera ersÀttning av Filebeat i konfigurationsfilen /etc/vector/vector.toml. IP-adressen 172.26.10.108 Àr IP-adressen för loggservern (Vector-Server)
data_dir = "/var/lib/vector"
[sources.nginx_file]
type = "file"
include = [ "/var/log/nginx/access.json.log" ]
start_at_beginning = false
fingerprinting.strategy = "device_and_inode"
[sinks.nginx_output_vector]
type = "vector"
inputs = [ "nginx_file" ]
address = "172.26.10.108:9876"Glöm inte att lÀgga till anvÀndaren vector i rÀtt grupp sÄ att den kan lÀsa loggfiler. Till exempel skapar nginx i centos loggar med behörigheten för gruppen adm.
usermod -a -G adm vectorStarta vector-tjÀnsten
systemctl enable vector
systemctl start vectorLoggar för vector kan ses sÄ hÀr
journalctl -f -u vectorDet ska finnas en sÄdan post i loggarna
INFO vector::topology::builder: Healthcheck: Passed.Belastningstestning
Testningen utförs med hjÀlp av Apache benchmark.
Paketet httpd-tools har installerats pÄ alla servrar
Vi testar med Apache benchmark frÄn 4 olika servrar i screen. Först startar vi terminalmultiplexern screen och sedan utför vi testning med Apache benchmark. Hur man arbetar med screen kan du hitta i .
FrÄn den första servern
while true; do ab -H "User-Agent: 1server" -c 100 -n 10 -t 10 http://vhost1/; sleep 1; doneFrÄn den andra servern
while true; do ab -H "User-Agent: 2server" -c 100 -n 10 -t 10 http://vhost2/; sleep 1; doneFrÄn den tredje servern
while true; do ab -H "User-Agent: 3server" -c 100 -n 10 -t 10 http://vhost3/; sleep 1; doneFrÄn den fjÀrde servern
while true; do ab -H "User-Agent: 4server" -c 100 -n 10 -t 10 http://vhost4/; sleep 1; doneVi kontrollerar data i Clickhouse
Vi loggar in i Clickhouse
clickhouse-client -h 172.26.10.109 -mGör en SQL-frÄga
VĂLJ * FRĂ
N vector.logs;
âânode_nameâââââŹâââââââââââtimestampââŹâserver_nameââŹâuser_idââŹârequest_fullââââŹârequest_user_agentââŹârequest_http_hostââŹârequest_uriââŹârequest_schemeââŹârequest_methodââŹârequest_lengthââŹârequest_timeââŹârequest_referrerââŹâresponse_statusââŹâresponse_body_bytes_sentââŹâresponse_content_typeââŹâââremote_addrââŹâremote_portââŹâremote_userââŹâupstream_addrââŹâupstream_portââŹâupstream_bytes_receivedââŹâupstream_bytes_sentââŹâupstream_cache_statusââŹâupstream_connect_timeââŹâupstream_header_timeââŹâupstream_response_lengthââŹâupstream_response_timeââŹâupstream_statusââŹâupstream_content_typeââ
â nginx-vector â 2020-08-07 04:32:42 â vhost1 â â GET \/ HTTP\/1.0 â 1server â vhost1 â \/ â http â GET â 66 â 0.028 â â 404 â 27 â â 172.26.10.106 â 45886 â â 172.26.10.106 â 0 â 109 â 97 â DISABLED â 0 â 0.025 â 27 â 0.029 â 404 â â
ââââââââââââââââŽââââââââââââââââââââââŽââââââââââââââŽââââââââââŽâââââââââââââââââŽâââââââââââââââââââââŽââââââââââââââââââââŽââââââââââââââŽâââââââââââââââââŽâââââââââââââââââŽâââââââââââââââââŽâââââââââââââââŽâââââââââââââââââââŽââââââââââââââââââŽâââââââââââââââââââââââââââŽââââââââââââââââââââââââŽââââââââââââââââŽââââââââââââââŽââââââââââââââŽââââââââââââââââŽââââââââââââââââŽââââââââââââââââââââââââââŽââââââââââââââââââââââŽââââââââââââââââââââââââŽââââââââââââââââââââââââŽâââââââââââââââââââââââŽâââââââââââââââââââââââââââŽâââââââââââââââââââââââââŽââââââââââââââââââŽâââââââââââââââââââââââVi fĂ„r reda pĂ„ storleken pĂ„ tabeller i Clickhouse
vÀlj concat(database, '.', table) som table,
formatReadableSize(sum(bytes)) som size,
sum(rows) som rows,
max(modification_time) som latest_modification,
sum(bytes) som bytes_size,
any(engine) som engine,
formatReadableSize(sum(primary_key_bytes_in_memory)) som primary_keys_size
frÄn system.parts
dÀr aktiv
grupp efter database, table
ordna efter bytes_size desc;Vi fÄr reda pÄ hur mycket loggarna har tagit i Clickhouse.

Storleken pÄ tabellen logs Àr 857,19 MB.

Storleken pÄ samma data i indexet i Elasticsearch upptar 4,5 GB.
Om man inte anger vektorn i parametrarna i Clickhouse tar datan upp 4500/857,19 = 5,24 gÄnger mindre Àn i Elasticsearch.
I vektorfÀltet anvÀnds komprimering som standard.
Telegram-grupp om
Telegram-grupp om
Telegram-grupp om ""
KĂ€lla: habr.com
