→
Rust хэл дээр бичигдсэн тул аналогитай харьцуулахад өндөр гүйцэтгэлтэй, RAM бага зарцуулдаг гэдгээрээ онцлог юм. Нэмж дурдахад үнэн зөв, тухайлбал илгээгээгүй үйл явдлыг диск дээрх буферт хадгалах, файлуудыг эргүүлэх чадвартай холбоотой функцүүдэд ихээхэн анхаарал хандуулдаг.
Архитектурын хувьд Vector бол нэг буюу түүнээс дээш мессеж хүлээн авдаг үйл явдал чиглүүлэгч юм эх сурвалжууд, сонголтоор эдгээр зурвасууд дээр хэрэглэнэ өөрчлөлтүүд, мөн тэдгээрийг нэг буюу хэд хэдэн рүү илгээх ус зайлуулах хоолой.
Вектор нь filebeat болон logstash-ийг орлох бөгөөд энэ нь хоёр үүрэг гүйцэтгэх боломжтой (лог хүлээн авах, илгээх), тэдгээрийн талаар дэлгэрэнгүй мэдээлэл
Хэрэв Logstash-д гинж нь оролт → шүүлтүүр → гаралт хэлбэрээр баригдсан бол Вектор дээр байна
Жишээнүүдийг баримтаас олж болно.
Энэ заавар нь шинэчилсэн заавар юм
Aug 05 06:25:31.889 DEBUG transform{name=nginx_parse_rename_fields type=rename_fields}: vector::transforms::rename_fields: Field did not exist field=«geoip.country_name» rate_limit_secs=30
Хэрэв хэн нэгэн geoip боловсруулах шаардлагатай бол эх зааварчилгааг үзнэ үү
Бид Nginx (Access logs) → Vector (Client | Filebeat) → Vector (Server | Logstash) → хослолыг Clickhouse дээр тусад нь, Elasticsearch дээр тусад нь тохируулах болно. Бид 4 сервер суулгана. Хэдийгээр та үүнийг 3 серверээр тойрч гарах боломжтой.
Схем нь иймэрхүү зүйл юм.
Бүх сервер дээрээ Selinux-г идэвхгүй болго
sed -i 's/^SELINUX=.*/SELINUX=disabled/g' /etc/selinux/config
reboot
Бид бүх сервер дээр HTTP сервер эмулятор + хэрэгслүүдийг суулгадаг
HTTP сервер эмуляторын хувьд бид ашиглах болно
Nodejs-stub-серверт эргэлт байхгүй байна.
antonpatsev/nodejs-stub-server репозиторыг нэмнэ үү
yum -y install yum-plugin-copr epel-release
yes | yum copr enable antonpatsev/nodejs-stub-server
Бүх сервер дээр nodejs-stub-server, Apache бенчмарк болон дэлгэцийн терминалын мультиплексерийг суулгана уу.
yum -y install stub_http_server screen mc httpd-tools screen
Би /var/lib/stub_http_server/stub_http_server.js файл дахь stub_http_server-ийн хариу өгөх хугацааг зассан бөгөөд ингэснээр илүү олон бүртгэл байна.
var max_sleep = 10;
stub_http_server-г ажиллуулцгаая.
systemctl start stub_http_server
systemctl enable stub_http_server
Clickhouse суурилуулах сервер 3 дээр
ClickHouse нь SSE 4.2 зааврын багцыг ашигладаг тул өөрөөр заагаагүй бол ашигласан процессорын дэмжлэг нь системийн нэмэлт шаардлага болно. Одоогийн процессор SSE 4.2-г дэмждэг эсэхийг шалгах тушаал энд байна:
grep -q sse4_2 /proc/cpuinfo && echo "SSE 4.2 supported" || echo "SSE 4.2 not supported"
Эхлээд та албан ёсны репозиторыг холбох хэрэгтэй:
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_64
Багцуудыг суулгахын тулд та дараах тушаалуудыг ажиллуулах хэрэгтэй.
sudo yum install -y clickhouse-server clickhouse-client
Clickhouse-server-д /etc/clickhouse-server/config.xml файл дахь сүлжээний картыг сонсохыг зөвшөөрөх
<listen_host>0.0.0.0</listen_host>
Бүртгэлийн түвшинг ул мөрөөс дибаг руу өөрчлөх
дибаг хийх
Стандарт шахалтын тохиргоо:
min_compress_block_size 65536
max_compress_block_size 1048576
Zstd шахалтыг идэвхжүүлэхийн тулд тохиргоонд хүрч болохгүй, харин DDL ашиглахыг зөвлөж байна.
Би Google дээр DDL-ээр дамжуулан zstd шахалтыг хэрхэн ашиглахыг олж чадсангүй. Тиймээс би үүнийг байгаагаар нь үлдээсэн.
Clickhouse-д zstd шахалтыг ашигладаг хамт олон зааврыг хуваалцана уу.
Серверийг демоноор эхлүүлэхийн тулд дараахыг ажиллуулна уу:
service clickhouse-server start
Одоо Clickhouse-ийн тохиргоо руу шилжье
Clickhouse руу оч
clickhouse-client -h 172.26.10.109 -m
172.26.10.109 — Clickhouse суулгасан серверийн IP.
Вектор мэдээллийн сан үүсгэцгээе
CREATE DATABASE vector;
Мэдээллийн сан байгаа эсэхийг шалгацгаая.
show databases;
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;
Бид хүснэгтүүд үүссэн эсэхийг шалгана. Эхлүүлье clickhouse-client
мөн хүсэлт гаргах.
Вектор мэдээллийн сан руу орцгооё.
use vector;
Ok.
0 rows in set. Elapsed: 0.001 sec.
Хүснэгтүүдийг харцгаая.
show tables;
┌─name────────────────┐
│ logs │
└─────────────────────┘
Clickhouse-тай харьцуулахын тулд Elasticsearch руу ижил өгөгдлийг илгээхийн тулд 4-р сервер дээр elasticsearch суулгаж байна.
Нийтийн rpm түлхүүр нэмнэ үү
rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch
2 репо үүсгэцгээе:
/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-md
Elasticsearch болон kibana суулгана уу
yum install -y kibana elasticsearch
Энэ нь 1 хувь байх тул та /etc/elasticsearch/elasticsearch.yml файлд дараах зүйлийг нэмэх шаардлагатай.
discovery.type: single-node
Энэ вектор өөр серверээс elasticsearch руу өгөгдөл илгээх боломжтой тул network.host-ыг өөрчилье.
network.host: 0.0.0.0
Kibana-д холбогдохын тулд /etc/kibana/kibana.yml файл дахь server.host параметрийг өөрчилнө үү.
server.host: "0.0.0.0"
Хуучин бөгөөд autostart-д elasticsearch-г оруулаарай
systemctl enable elasticsearch
systemctl start elasticsearch
ба кибана
systemctl enable kibana
systemctl start kibana
Elasticsearch-г нэг зангилаа горимд тохируулж байна 1 хэлтэрхий, 0 хуулбар. Та олон тооны серверүүдийн кластертай байх магадлалтай бөгөөд үүнийг хийх шаардлагагүй болно.
Ирээдүйн индексүүдийн хувьд өгөгдмөл загварыг шинэчилнэ үү:
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"}}'
тохиргоо Вектор сервер 2 дээрх Logstash-ийг орлуулах
yum install -y https://packages.timber.io/vector/0.9.X/vector-x86_64.rpm mc httpd-tools screen
Logstash-ийг орлуулах Векторыг тохируулцгаая. /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"
Та transforms.nginx_parse_add_defaults хэсгийг тохируулж болно.
Оноос хойш
Жишээ нь:
"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"
Хэрэв энэ нь таны нөхцөл байдал биш бол энэ хэсгийг хялбаршуулж болно
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.target
Хүснэгтүүдийг үүсгэсний дараа та Vector програмыг ажиллуулж болно
systemctl enable vector
systemctl start vector
Вектор бүртгэлийг дараах байдлаар харж болно.
journalctl -f -u vector
Бүртгэлд ийм бичилт байх ёстой
INFO vector::topology::builder: Healthcheck: Passed.
INFO vector::topology::builder: Healthcheck: Passed.
Үйлчлүүлэгч дээр (Вэб сервер) - 1-р сервер
Nginx-тэй сервер дээр clickhouse дахь бүртгэлийн хүснэгт нь талбарыг ашигладаг тул та ipv6-г идэвхгүй болгох хэрэгтэй. upstream_addr
IPv4, учир нь би сүлжээнд IPv6 ашигладаггүй. Хэрэв ipv6-г унтраагаагүй бол алдаа гарна:
DB::Exception: Invalid IPv4 value.: (while read the value of key upstream_addr)
Магадгүй уншигчид, ipv6 дэмжлэгийг нэмээрэй.
/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 = 1
Тохиргоог ашиглаж байна
sysctl --system
Nginx-ийг суулгацгаая.
Нэмэгдсэн nginx хадгалах файл /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=true
Nginx багцыг суулгана уу
yum install -y nginx
Эхлээд бид /etc/nginx/nginx.conf файл дахь Nginx дахь бүртгэлийн форматыг тохируулах хэрэгтэй.
user nginx;
# you must set worker processes based on your CPU cores, nginx does not benefit from setting more than that
worker_processes auto; #some last versions calculate it automatically
# number of file descriptors used for nginx
# the limit for the maximum FDs on the server is usually set by the OS.
# if you don't set FD's then OS settings will be used which is by default 2000
worker_rlimit_nofile 100000;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
# provides the configuration file context in which the directives that affect connection processing are specified.
events {
# determines how much clients will be served per worker
# max clients = worker_connections * worker_processes
# max clients is also limited by the number of socket connections available on the system (~64k)
worker_connections 4000;
# optimized to serve many clients with each thread, essential for linux -- for testing environment
use epoll;
# accept as many connections as possible, may flood worker connections if set too low -- for testing environment
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; # Новый лог в формате json
sendfile on;
#tcp_nopush on;
keepalive_timeout 65;
#gzip on;
include /etc/nginx/conf.d/*.conf;
}
Таны одоогийн тохиргоог зөрчихгүйн тулд Nginx танд хэд хэдэн access_log удирдамжтай байхыг зөвшөөрдөг
access_log /var/log/nginx/access.log main; # Стандартный лог
access_log /var/log/nginx/access.json.log vector; # Новый лог в формате json
Шинэ логуудад логрот хийх дүрэм нэмэхээ бүү мартаарай (хэрэв бүртгэлийн файл .log-ээр төгсөөгүй бол)
default.conf-г /etc/nginx/conf.d/-аас устгана уу.
rm -f /etc/nginx/conf.d/default.conf
Виртуал хост /etc/nginx/conf.d/vhost1.conf нэмнэ үү
server {
listen 80;
server_name vhost1;
location / {
proxy_pass http://172.26.10.106:8080;
}
}
Виртуал хост /etc/nginx/conf.d/vhost2.conf нэмнэ үү
server {
listen 80;
server_name vhost2;
location / {
proxy_pass http://172.26.10.108:8080;
}
}
Виртуал хост /etc/nginx/conf.d/vhost3.conf нэмнэ үү
server {
listen 80;
server_name vhost3;
location / {
proxy_pass http://172.26.10.109:8080;
}
}
Виртуал хост /etc/nginx/conf.d/vhost4.conf нэмнэ үү
server {
listen 80;
server_name vhost4;
location / {
proxy_pass http://172.26.10.116:8080;
}
}
Виртуал хостуудыг (nginx суулгасан серверийн 172.26.10.106 ip) бүх серверт /etc/hosts файлд нэмнэ үү:
172.26.10.106 vhost1
172.26.10.106 vhost2
172.26.10.106 vhost3
172.26.10.106 vhost4
Тэгээд бүх зүйл бэлэн бол
nginx -t
systemctl restart nginx
Одоо бид үүнийг өөрсдөө суулгацгаая
yum install -y https://packages.timber.io/vector/0.9.X/vector-x86_64.rpm
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.target
Мөн /etc/vector/vector.toml тохиргоонд Filebeat орлуулалтыг тохируулна уу. IP хаяг 172.26.10.108 нь бүртгэлийн серверийн (Вектор-Сервер) IP хаяг юм.
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"
Бүртгэлийн файлуудыг уншихын тулд вектор хэрэглэгчийг шаардлагатай бүлэгт нэмэхээ бүү мартаарай. Жишээлбэл, centos дахь nginx нь adm группын эрх бүхий бүртгэлүүдийг үүсгэдэг.
usermod -a -G adm vector
Вектор үйлчилгээг эхлүүлье
systemctl enable vector
systemctl start vector
Вектор бүртгэлийг дараах байдлаар харж болно.
journalctl -f -u vector
Бүртгэлд ийм бичлэг байх ёстой
INFO vector::topology::builder: Healthcheck: Passed.
Стресс тест
Бид Apache бенчмарк ашиглан туршилт хийдэг.
httpd-tools багцыг бүх сервер дээр суулгасан
Бид дэлгэцэн дээрх 4 өөр серверээс Apache бенчмарк ашиглан туршилт хийж эхэлдэг. Эхлээд бид дэлгэцийн терминалын мультиплексерийг ажиллуулж, дараа нь Apache бенчмарк ашиглан тест хийж эхэлнэ. Дэлгэцтэй хэрхэн ажиллах талаар эндээс олж болно
1-р серверээс
while true; do ab -H "User-Agent: 1server" -c 100 -n 10 -t 10 http://vhost1/; sleep 1; done
2-р серверээс
while true; do ab -H "User-Agent: 2server" -c 100 -n 10 -t 10 http://vhost2/; sleep 1; done
3-р серверээс
while true; do ab -H "User-Agent: 3server" -c 100 -n 10 -t 10 http://vhost3/; sleep 1; done
4-р серверээс
while true; do ab -H "User-Agent: 4server" -c 100 -n 10 -t 10 http://vhost4/; sleep 1; done
Clickhouse дахь өгөгдлийг шалгацгаая
Clickhouse руу оч
clickhouse-client -h 172.26.10.109 -m
SQL асуулга хийж байна
SELECT * FROM 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 │ │
└──────────────┴─────────────────────┴─────────────┴─────────┴────────────────┴────────────────────┴───────────────────┴─────────────┴────────────────┴────────────────┴────────────────┴──────────────┴──────────────────┴─────────────────┴──────────────────────────┴───────────────────────┴───────────────┴─────────────┴─────────────┴───────────────┴───────────────┴─────────────────────────┴─────────────────────┴───────────────────────┴───────────────────────┴──────────────────────┴──────────────────────────┴────────────────────────┴─────────────────┴───────────────────────
Clickhouse дахь хүснэгтүүдийн хэмжээг олж мэдээрэй
select concat(database, '.', table) as table,
formatReadableSize(sum(bytes)) as size,
sum(rows) as rows,
max(modification_time) as latest_modification,
sum(bytes) as bytes_size,
any(engine) as engine,
formatReadableSize(sum(primary_key_bytes_in_memory)) as primary_keys_size
from system.parts
where active
group by database, table
order by bytes_size desc;
Clickhouse-д хэр их лог эзэлснийг олж мэдье.
Бүртгэлийн хүснэгтийн хэмжээ 857.19 MB байна.
Elasticsearch дахь индекс дэх ижил өгөгдлийн хэмжээ 4,5 ГБ байна.
Хэрэв та параметр дэх вектор дахь өгөгдлийг заагаагүй бол Clickhouse нь Elasticsearch-ээс 4500/857.19 = 5.24 дахин бага авдаг.
Вектор дээр шахалтын талбарыг анхдагчаар ашигладаг.
Telegram чат
Telegram чат
"Telegram чат"
Эх сурвалж: www.habr.com