Pagpadala sa Nginx json log gamit ang Vector sa Clickhouse ug Elasticsearch

Pagpadala sa Nginx json log gamit ang Vector sa Clickhouse ug Elasticsearch

vector, gidesinyo sa pagkolekta, pagbag-o ug pagpadala sa data sa log, metrics ug mga panghitabo.

→ Github

Gisulat sa Rust nga pinulongan, kini gihulagway sa taas nga performance ug ubos nga konsumo sa RAM kumpara sa mga analogue niini. Dugang pa, daghang pagtagad ang gihatag sa mga gimbuhaton nga may kalabotan sa pagkatul-id, labi na, ang abilidad sa pagtipig sa wala ipadala nga mga panghitabo sa usa ka buffer sa disk ug pag-rotate sa mga file.

Sa arkitektura, ang Vector usa ka router sa panghitabo nga nakadawat mga mensahe gikan sa usa o daghan pa mga gigikanan, opsyonal nga mag-aplay niini nga mga mensahe mga pagbag-o, ug ipadala sila sa usa o daghan pa kanal.

Ang Vector usa ka puli sa filebeat ug logstash, mahimo kini molihok sa duha nga mga tahas (makadawat ug magpadala mga troso), daghang mga detalye bahin niini site.

Kung sa Logstash ang kadena gitukod ingon input → filter → output unya sa Vector kini tinubdanmga pagbag-omga pagkalunod

Ang mga pananglitan makita sa dokumentasyon.

Kini nga instruksyon kay giusab nga instruksyon gikan sa Vyacheslav Rakhinsky. Ang orihinal nga mga panudlo naglangkob sa pagproseso sa geoip. Kung gisulayan ang geoip gikan sa usa ka internal nga network, ang vector naghatag usa ka sayup.

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

Kung adunay kinahanglan nga magproseso sa geoip, i-refer ang orihinal nga mga panudlo gikan sa Vyacheslav Rakhinsky.

Atong i-configure ang kombinasyon sa Nginx (Access logs) → Vector (Client | Filebeat) → Vector (Server | Logstash) → gilain sa Clickhouse ug gilain sa Elasticsearch. Mag-instalar kami og 4 ka mga server. Bisan kung mahimo nimo kini laktawan sa 3 nga mga server.

Pagpadala sa Nginx json log gamit ang Vector sa Clickhouse ug Elasticsearch

Ang laraw sama niini.

I-disable ang Selinux sa tanan nimong mga server

sed -i 's/^SELINUX=.*/SELINUX=disabled/g' /etc/selinux/config
reboot

Nag-instalar kami og HTTP server emulator + utilities sa tanang server

Ingon usa ka HTTP server emulator among gamiton nodejs-stub-server gikan sa Maxim Ignatenko

Ang Nodejs-stub-server walay rpm. kini mao ang paghimo rpm alang niini. rpm i-compile gamit Fedora Copr

Idugang ang repository sa antonpatsev/nodejs-stub-server

yum -y install yum-plugin-copr epel-release
yes | yum copr enable antonpatsev/nodejs-stub-server

I-install ang nodejs-stub-server, Apache benchmark ug screen terminal multiplexer sa tanang server

yum -y install stub_http_server screen mc httpd-tools screen

Gitul-id nako ang oras sa pagtubag sa stub_http_server sa /var/lib/stub_http_server/stub_http_server.js file aron adunay daghang mga troso.

var max_sleep = 10;

Atong ilunsad ang stub_http_server.

systemctl start stub_http_server
systemctl enable stub_http_server

Pag-instalar sa Clickhouse sa server 3

Gigamit sa ClickHouse ang set sa panudlo sa SSE 4.2, busa gawas kung gitakda, ang suporta alang niini sa gigamit nga processor mahimong dugang nga kinahanglanon sa sistema. Ania ang sugo sa pagsusi kon ang kasamtangan nga processor nagsuporta sa SSE 4.2:

grep -q sse4_2 /proc/cpuinfo && echo "SSE 4.2 supported" || echo "SSE 4.2 not supported"

Una kinahanglan nimo nga ikonektar ang opisyal nga repositoryo:

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

Aron ma-install ang mga pakete kinahanglan nimo nga ipadagan ang mosunud nga mga mando:

sudo yum install -y clickhouse-server clickhouse-client

Tugoti ang clickhouse-server nga maminaw sa network card sa file /etc/clickhouse-server/config.xml

<listen_host>0.0.0.0</listen_host>

Pag-usab sa lebel sa pag-log gikan sa pagsubay ngadto sa debug

debug

Standard nga mga setting sa compression:

min_compress_block_size  65536
max_compress_block_size  1048576

Aron ma-aktibo ang Zstd compression, gitambagan nga dili hikapon ang config, apan gamita ang DDL.

Pagpadala sa Nginx json log gamit ang Vector sa Clickhouse ug Elasticsearch

Dili nako makit-an kung giunsa paggamit ang zstd compression pinaagi sa DDL sa Google. Mao nga gibiyaan ko kini nga ingon.

Mga kauban nga naggamit sa zstd compression sa Clickhouse, palihug ipaambit ang mga panudlo.

Aron masugdan ang server isip usa ka daemon, pagdagan:

service clickhouse-server start

Karon magpadayon kita sa pag-set up sa Clickhouse

Adto sa Clickhouse

clickhouse-client -h 172.26.10.109 -m

172.26.10.109 — IP sa server diin gi-install ang Clickhouse.

Magbuhat ta ug vector database

CREATE DATABASE vector;

Atong susihon nga ang database anaa.

show databases;

Paghimo ug vector.logs table.

/* Это таблица где хранятся логи как есть */

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;

Atong susihon nga ang mga lamesa nahimo na. Maglansad ta clickhouse-client ug paghimo usa ka hangyo.

Adto ta sa vector database.

use vector;

Ok.

0 rows in set. Elapsed: 0.001 sec.

Atong tan-awon ang mga lamesa.

show tables;

┌─name────────────────┐
│ logs                │
└─────────────────────┘

Pag-instalar sa elasticsearch sa 4th server aron ipadala ang parehas nga datos sa Elasticsearch alang sa pagtandi sa Clickhouse

Pagdugang og public rpm key

rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch

Maghimo kita og 2 repo:

/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

I-install ang elasticsearch ug kibana

yum install -y kibana elasticsearch

Tungod kay kini anaa sa 1 ka kopya, kinahanglan nimong idugang ang mosunod sa /etc/elasticsearch/elasticsearch.yml file:

discovery.type: single-node

Aron ang vector makapadala ug data sa elasticsearch gikan sa laing server, usbon nato ang network.host.

network.host: 0.0.0.0

Aron makonektar sa kibana, usba ang server.host parameter sa file /etc/kibana/kibana.yml

server.host: "0.0.0.0"

Daan ug naglakip sa elasticsearch sa autostart

systemctl enable elasticsearch
systemctl start elasticsearch

ug kibana

systemctl enable kibana
systemctl start kibana

Pag-configure sa Elasticsearch alang sa single-node mode 1 shard, 0 replica. Lagmit adunay usa ka kumpol sa daghang mga server ug dili nimo kinahanglan buhaton kini.

Para sa umaabot nga mga index, i-update ang default template:

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"}}' 

Pag-instalar vector isip puli sa Logstash sa server 2

yum install -y https://packages.timber.io/vector/0.9.X/vector-x86_64.rpm mc httpd-tools screen

Atong i-set up ang Vector isip puli sa Logstash. Pag-edit sa file /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"

Mahimo nimong i-adjust ang transforms.nginx_parse_add_defaults nga seksyon.

sukad sa Vyacheslav Rakhinsky gigamit kini nga mga config alang sa usa ka gamay nga CDN ug adunay daghang mga kantidad sa upstream_*

Pananglitan:

"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"

Kung dili kini ang imong kahimtang, nan kini nga seksyon mahimong pasimplehon

Himoon nato ang mga setting sa serbisyo para sa 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

Human sa paghimo sa mga lamesa, mahimo nimong ipadagan ang Vector

systemctl enable vector
systemctl start vector

Ang mga vector log mahimong tan-awon sama niini:

journalctl -f -u vector

Kinahanglan adunay mga entries nga sama niini sa mga log

INFO vector::topology::builder: Healthcheck: Passed.
INFO vector::topology::builder: Healthcheck: Passed.

Sa kliyente (Web server) - 1st server

Sa server nga adunay nginx, kinahanglan nimo nga i-disable ang ipv6, tungod kay ang logs table sa clickhouse naggamit sa field upstream_addr IPv4, tungod kay wala ko mogamit ipv6 sulod sa network. Kung ang ipv6 wala gipalong, adunay mga sayup:

DB::Exception: Invalid IPv4 value.: (while read the value of key upstream_addr)

Tingali mga magbabasa, idugang ang suporta sa ipv6.

Paghimo sa file /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

Pagpadapat sa mga setting

sysctl --system

Atong i-install ang nginx.

Gidugang ang nginx repository file /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

I-install ang nginx package

yum install -y nginx

Una, kinahanglan natong i-configure ang log format sa Nginx sa file /etc/nginx/nginx.conf

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;
}

Aron dili mabungkag ang imong kasamtangan nga pag-configure, gitugotan ka sa Nginx nga adunay daghang mga direktiba sa access_log

access_log  /var/log/nginx/access.log  main;            # Стандартный лог
access_log  /var/log/nginx/access.json.log vector;      # Новый лог в формате json

Ayaw kalimti ang pagdugang ug lagda sa pag-logrotate para sa mga bag-ong log (kung ang log file dili matapos sa .log)

Kuhaa ang default.conf gikan sa /etc/nginx/conf.d/

rm -f /etc/nginx/conf.d/default.conf

Idugang ang virtual host /etc/nginx/conf.d/vhost1.conf

server {
    listen 80;
    server_name vhost1;
    location / {
        proxy_pass http://172.26.10.106:8080;
    }
}

Idugang ang virtual host /etc/nginx/conf.d/vhost2.conf

server {
    listen 80;
    server_name vhost2;
    location / {
        proxy_pass http://172.26.10.108:8080;
    }
}

Idugang ang virtual host /etc/nginx/conf.d/vhost3.conf

server {
    listen 80;
    server_name vhost3;
    location / {
        proxy_pass http://172.26.10.109:8080;
    }
}

Idugang ang virtual host /etc/nginx/conf.d/vhost4.conf

server {
    listen 80;
    server_name vhost4;
    location / {
        proxy_pass http://172.26.10.116:8080;
    }
}

Idugang ang mga virtual nga host (172.26.10.106 ip sa server diin gi-install ang nginx) sa tanan nga mga server sa /etc/hosts file:

172.26.10.106 vhost1
172.26.10.106 vhost2
172.26.10.106 vhost3
172.26.10.106 vhost4

Ug kung andam na ang tanan

nginx -t 
systemctl restart nginx

Karon atong i-install kini sa atong kaugalingon vector

yum install -y https://packages.timber.io/vector/0.9.X/vector-x86_64.rpm

Magbuhat ta ug settings file para sa 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

Ug i-configure ang puli sa Filebeat sa /etc/vector/vector.toml config. Ang IP address 172.26.10.108 mao ang IP address sa log server (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"

Ayaw kalimti nga idugang ang vector user sa gikinahanglan nga grupo aron makabasa siya og mga log files. Pananglitan, ang nginx sa centos nagmugna og mga log nga adunay mga katungod sa adm group.

usermod -a -G adm vector

Atong sugdan ang serbisyo sa vector

systemctl enable vector
systemctl start vector

Ang mga vector log mahimong tan-awon sama niini:

journalctl -f -u vector

Kinahanglan adunay usa ka entry nga sama niini sa mga troso

INFO vector::topology::builder: Healthcheck: Passed.

Pagsulay sa Stress

Nagpahigayon kami og pagsulay gamit ang Apache benchmark.

Ang httpd-tools package na-install sa tanang server

Nagsugod kami sa pagsulay gamit ang Apache benchmark gikan sa 4 nga lainlaing mga server sa screen. Una, gilansad namo ang screen terminal multiplexer, ug dayon magsugod kami sa pagsulay gamit ang Apache benchmark. Giunsa pagtrabaho ang screen nga imong makit-an sa artikulo.

Gikan sa 1st server

while true; do ab -H "User-Agent: 1server" -c 100 -n 10 -t 10 http://vhost1/; sleep 1; done

Gikan sa 2st server

while true; do ab -H "User-Agent: 2server" -c 100 -n 10 -t 10 http://vhost2/; sleep 1; done

Gikan sa 3st server

while true; do ab -H "User-Agent: 3server" -c 100 -n 10 -t 10 http://vhost3/; sleep 1; done

Gikan sa 4st server

while true; do ab -H "User-Agent: 4server" -c 100 -n 10 -t 10 http://vhost4/; sleep 1; done

Atong susihon ang datos sa Clickhouse

Adto sa Clickhouse

clickhouse-client -h 172.26.10.109 -m

Paghimo usa ka pangutana sa 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 │                       │
└──────────────┴─────────────────────┴─────────────┴─────────┴────────────────┴────────────────────┴───────────────────┴─────────────┴────────────────┴────────────────┴────────────────┴──────────────┴──────────────────┴─────────────────┴──────────────────────────┴───────────────────────┴───────────────┴─────────────┴─────────────┴───────────────┴───────────────┴─────────────────────────┴─────────────────────┴───────────────────────┴───────────────────────┴──────────────────────┴──────────────────────────┴────────────────────────┴─────────────────┴───────────────────────

Hibal-i ang gidak-on sa mga lamesa sa 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;

Atong hibal-an kung pila ang nakuha nga mga troso sa Clickhouse.

Pagpadala sa Nginx json log gamit ang Vector sa Clickhouse ug Elasticsearch

Ang gidak-on sa lamesa sa mga troso mao ang 857.19 MB.

Pagpadala sa Nginx json log gamit ang Vector sa Clickhouse ug Elasticsearch

Ang gidak-on sa parehas nga datos sa indeks sa Elasticsearch mao ang 4,5GB.

Kung dili nimo ipiho ang datos sa vector sa mga parameter, ang Clickhouse nagkuha 4500/857.19 = 5.24 ka beses nga mas ubos kaysa sa Elasticsearch.

Sa vector, ang compression field gigamit nga default.

Telegram chat pinaagi sa clickhouse
Telegram chat pinaagi sa Elasticsearch
Telegram chat pinaagi sa "Pagkolekta ug pagtuki sa sistema mga mensahe"

Source: www.habr.com

Idugang sa usa ka comment