Clickhouse рдкрд░ nginx рд▓реЙрдЧ рднреЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП Avito рдХреА рдУрд░ рд╕реЗ Nginx-рд▓реЙрдЧ-рдХрд▓реЗрдХреНрдЯрд░ рдЙрдкрдпреЛрдЧрд┐рддрд╛

рдпрд╣ рдЖрд▓реЗрдЦ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдкрд░ рдЪрд░реНрдЪрд╛ рдХрд░реЗрдЧрд╛ nginx-рд▓реЙрдЧ-рдХрд▓реЗрдХреНрдЯрд░, рдЬреЛ nginx рд▓реЙрдЧ рдХреЛ рдкрдврд╝реЗрдЧрд╛, рдЙрдиреНрд╣реЗрдВ рдХреНрд▓рд┐рдХрд╣рд╛рдЙрд╕ рдХреНрд▓рд╕реНрдЯрд░ рдкрд░ рднреЗрдЬреЗрдЧрд╛ред рдЖрдорддреМрд░ рдкрд░ ElasticSearch рдХрд╛ рдЙрдкрдпреЛрдЧ рд▓реЙрдЧ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдХреНрд▓рд┐рдХрд╣рд╛рдЙрд╕ рдХреЛ рдХрдо рд╕рдВрд╕рд╛рдзрдиреЛрдВ (рдбрд┐рд╕реНрдХ рд╕реНрдерд╛рди, рд░реИрдо, рд╕реАрдкреАрдпреВ) рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдХреНрд▓рд┐рдХрд╣рд╛рдЙрд╕ рддреЗрдЬреА рд╕реЗ рдбреЗрдЯрд╛ рд▓рд┐рдЦрддрд╛ рд╣реИред рдХреНрд▓рд┐рдХрд╣рд╛рдЙрд╕ рдбреЗрдЯрд╛ рдХреЛ рд╕рдВрдкреАрдбрд╝рд┐рдд рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рдбрд┐рд╕реНрдХ рдкрд░ рдбреЗрдЯрд╛ рдХреЛ рдФрд░ рднреА рдЕрдзрд┐рдХ рдХреЙрдореНрдкреИрдХреНрдЯ рдмрдирд╛рддрд╛ рд╣реИред рдХреНрд▓рд┐рдХрд╣рд╛рдЙрд╕ рдХреЗ рдлрд╝рд╛рдпрджреЛрдВ рдХреЛ рд░рд┐рдкреЛрд░реНрдЯ рдХреА 2 рд╕реНрд▓рд╛рдЗрдбреЛрдВ рдореЗрдВ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рд╡реАрдХреЗ рд╣рдЬрд╛рд░реЛрдВ рд╕рд░реНрд╡рд░реЛрдВ рд╕реЗ рдХреНрд▓рд┐рдХрд╣рд╛рдЙрд╕ рдореЗрдВ рдбреЗрдЯрд╛ рдХреИрд╕реЗ рд╕рдореНрдорд┐рд▓рд┐рдд рдХрд░рддрд╛ рд╣реИред

Clickhouse рдкрд░ nginx рд▓реЙрдЧ рднреЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП Avito рдХреА рдУрд░ рд╕реЗ Nginx-рд▓реЙрдЧ-рдХрд▓реЗрдХреНрдЯрд░ рдЙрдкрдпреЛрдЧрд┐рддрд╛

Clickhouse рдкрд░ nginx рд▓реЙрдЧ рднреЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП Avito рдХреА рдУрд░ рд╕реЗ Nginx-рд▓реЙрдЧ-рдХрд▓реЗрдХреНрдЯрд░ рдЙрдкрдпреЛрдЧрд┐рддрд╛

рд▓реЙрдЧ рджреНрд╡рд╛рд░рд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдЗрдП рдЧреНрд░рд╛рдлрд╛рдирд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рдбреИрд╢рдмреЛрд░реНрдб рдмрдирд╛рдПрдВред

рдХреМрди рдкрд░рд╡рд╛рд╣ рдХрд░рддрд╛ рд╣реИ, рдмрд┐рд▓реНрд▓реА рдХреЗ рдиреАрдЪреЗ рдЖрдкрдХрд╛ рд╕реНрд╡рд╛рдЧрдд рд╣реИред

рдорд╛рдирдХ рддрд░реАрдХреЗ рд╕реЗ nginx, рдЧреНрд░рд╛рдлрд╛рдирд╛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВред

Ansible-playbook рдХреЗ рд╕рд╛рде рдХреНрд▓рд┐рдХрд╣рд╛рдЙрд╕ рдХреНрд▓рд╕реНрдЯрд░ рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ рдбреЗрдирд┐рд╕ рдкреНрд░реЛрд╕реНрдХреБрд░рд┐рди.

Clickhouse рдореЗрдВ рдбреЗрдЯрд╛рдмреЗрд╕ рдФрд░ рдЯреЗрдмрд▓ рдмрдирд╛рдирд╛

рдЗрд╕рдореЗрдВ рдлрд╝рд╛рдЗрд▓ Clickhouse рдореЗрдВ nginx-log-рдХрд▓реЗрдХреНрдЯрд░ рдХреЗ рд▓рд┐рдП рдбреЗрдЯрд╛рдмреЗрд╕ рдФрд░ рдЯреЗрдмрд▓ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП SQL рдХреНрд╡реЗрд░реАрдЬрд╝ рдХрд╛ рд╡рд░реНрдгрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

рд╣рдо рдХреНрд▓рд┐рдХрд╣рд╛рдЙрд╕ рдХреНрд▓рд╕реНрдЯрд░ рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рд╕рд░реНрд╡рд░ рдкрд░ рдмрд╛рд░реА-рдмрд╛рд░реА рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдЕрдиреБрд░реЛрдз рдХрд░рддреЗ рд╣реИрдВред

рдорд╣рддреНрд╡рдкреВрд░реНрдг рд▓реЗрдЦред рдЗрд╕ рдкрдВрдХреНрддрд┐ рдореЗрдВ, logs_cluster рдХреЛ "remote_servers" рдФрд░ "shard" рдХреЗ рдмреАрдЪ clickhouse_remote_servers.xml рдлрд╝рд╛рдЗрд▓ рд╕реЗ рдЖрдкрдХреЗ рдХреНрд▓рд╕реНрдЯрд░ рдирд╛рдо рд╕реЗ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред

ENGINE = Distributed('logs_cluster', 'nginx', 'access_log_shard', rand())

nginx-log-рдХрд▓реЗрдХреНрдЯрд░-рдЖрд░рдкреАрдПрдо рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдФрд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдирд╛

Nginx-рд▓реЙрдЧ-рдХрд▓реЗрдХреНрдЯрд░ рдореЗрдВ rpm рдирд╣реАрдВ рд╣реИред рдпрд╣рд╛рдБ https://github.com/patsevanton/nginx-log-collector-rpm рдЗрд╕рдХреЗ рд▓рд┐рдП рдЖрд░рдкреАрдПрдо рдмрдирд╛рдПрдВред рдЖрд░рдкреАрдПрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдмрдирд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдлреЗрдбреЛрд░рд╛ рдХреЙрдкрд░

рдЖрд░рдкреАрдПрдо рдкреИрдХреЗрдЬ nginx-log-рдХрд▓реЗрдХреНрдЯрд░-рдЖрд░рдкреАрдПрдо рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ

yum -y install yum-plugin-copr
yum copr enable antonpatsev/nginx-log-collector-rpm
yum -y install nginx-log-collector
systemctl start nginx-log-collector

рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ /etc/nginx-log-collector/config.yaml:

  .......
  upload:
    table: nginx.access_log
    dsn: http://ip-╨░╨┤╤А╨╡╤Б-╨║╨╗╨░╤Б╤В╨╡╤А╨░-clickhouse:8123/

- tag: "nginx_error:"
  format: error  # access | error
  buffer_size: 1048576
  upload:
    table: nginx.error_log
    dsn: http://ip-╨░╨┤╤А╨╡╤Б-╨║╨╗╨░╤Б╤В╨╡╤А╨░-clickhouse:8123/

nginx рдХреА рд╕реНрдерд╛рдкрдирд╛

рд╕рд╛рдорд╛рдиреНрдп nginx рдХреЙрдиреНрдлрд╝рд┐рдЧ:

user  nginx;
worker_processes  auto;

#error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;

events {
    worker_connections  1024;
}

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 avito_json escape=json
                     '{'
                     '"event_datetime": "$time_iso8601", '
                     '"server_name": "$server_name", '
                     '"remote_addr": "$remote_addr", '
                     '"remote_user": "$remote_user", '
                     '"http_x_real_ip": "$http_x_real_ip", '
                     '"status": "$status", '
                     '"scheme": "$scheme", '
                     '"request_method": "$request_method", '
                     '"request_uri": "$request_uri", '
                     '"server_protocol": "$server_protocol", '
                     '"body_bytes_sent": $body_bytes_sent, '
                     '"http_referer": "$http_referer", '
                     '"http_user_agent": "$http_user_agent", '
                     '"request_bytes": "$request_length", '
                     '"request_time": "$request_time", '
                     '"upstream_addr": "$upstream_addr", '
                     '"upstream_response_time": "$upstream_response_time", '
                     '"hostname": "$hostname", '
                     '"host": "$host"'
                     '}';

    access_log     syslog_server=unix:/var/run/nginx_log.sock,nohostname,tag=nginx avito_json; #ClickHouse
    error_log      syslog_server=unix:/var/run/nginx_log.sock,nohostname,tag=nginx_error; #ClickHouse

    #access_log  /var/log/nginx/access.log  main;

    proxy_ignore_client_abort on;
    sendfile        on;
    keepalive_timeout  65;
    include /etc/nginx/conf.d/*.conf;
}

рд╡рд░реНрдЪреБрдЕрд▓ рд╣реЛрд╕реНрдЯ рдПрдХ:

vhost1.conf:

upstream backend {
    server ip-╨░╨┤╤А╨╡╤Б-╤Б╨╡╤А╨▓╨╡╤А╨░-╤Б-stub_http_server:8080;
    server ip-╨░╨┤╤А╨╡╤Б-╤Б╨╡╤А╨▓╨╡╤А╨░-╤Б-stub_http_server:8080;
    server ip-╨░╨┤╤А╨╡╤Б-╤Б╨╡╤А╨▓╨╡╤А╨░-╤Б-stub_http_server:8080;
    server ip-╨░╨┤╤А╨╡╤Б-╤Б╨╡╤А╨▓╨╡╤А╨░-╤Б-stub_http_server:8080;
    server ip-╨░╨┤╤А╨╡╤Б-╤Б╨╡╤А╨▓╨╡╤А╨░-╤Б-stub_http_server:8080;
}

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

/etc/hosts рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╡рд░реНрдЪреБрдЕрд▓ рд╣реЛрд╕реНрдЯ рдЬреЛрдбрд╝реЗрдВ:

ip-╨░╨┤╤А╨╡╤Б-╤Б╨╡╤А╨▓╨╡╤А╨░-╤Б-nginx vhost1

HTTP рд╕рд░реНрд╡рд░ рдПрдореБрд▓реЗрдЯрд░

HTTP рд╕рд░реНрд╡рд░ рдПрдореБрд▓реЗрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рд╣рдо рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ рдиреЛрдбрдЬ-рд╕реНрдЯрдм-рд╕рд░реНрд╡рд░ рд╕реЗ рдореИрдХреНрд╕рд┐рдо рдЗрдЧреНрдирд╛рдЯреЗрдВрдХреЛ

рдиреЛрдбрдЬ-рд╕реНрдЯрдм-рд╕рд░реНрд╡рд░ рдореЗрдВ рдЖрд░рдкреАрдПрдо рдирд╣реАрдВ рд╣реИред рдпрд╣рд╛рдБ https://github.com/patsevanton/nodejs-stub-server рдЗрд╕рдХреЗ рд▓рд┐рдП рдЖрд░рдкреАрдПрдо рдмрдирд╛рдПрдВред рдЖрд░рдкреАрдПрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдмрдирд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдлреЗрдбреЛрд░рд╛ рдХреЙрдкрд░

рдЕрдкрд╕реНрдЯреНрд░реАрдо nginx rpm рдкрд░ рдиреЛрдбрдЬ-рд╕реНрдЯрдм-рд╕рд░реНрд╡рд░ рдкреИрдХреЗрдЬ рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ

yum -y install yum-plugin-copr
yum copr enable antonpatsev/nodejs-stub-server
yum -y install stub_http_server
systemctl start stub_http_server

рддрдирд╛рд╡ рдкрд░реАрдХреНрд╖рдг

рдЕрдкрд╛рдЪреЗ рдмреЗрдВрдЪрдорд╛рд░реНрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдЗрд╕реЗ рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЛ:

yum install -y httpd-tools

рд╣рдо 5 рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╕рд░реНрд╡рд░реЛрдВ рд╕реЗ рдЕрдкрд╛рдЪреЗ рдмреЗрдВрдЪрдорд╛рд░реНрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкрд░реАрдХреНрд╖рдг рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ:

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

рдЧреНрд░рд╛рдлрд╝рд╛рдирд╛ рдХреА рд╕реНрдерд╛рдкрдирд╛

рдЖрдкрдХреЛ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рдЧреНрд░рд╛рдлрд╛рдирд╛ рд╡реЗрдмрд╕рд╛рдЗрдЯ рдкрд░ рдбреИрд╢рдмреЛрд░реНрдб рдирд╣реАрдВ рдорд┐рд▓реЗрдЧрд╛ред

рдЗрд╕рд▓рд┐рдП, рд╣рдо рдЗрд╕реЗ рд╣рд╛рде рд╕реЗ рдХрд░реЗрдВрдЧреЗ.

рдЖрдк рдореЗрд░рд╛ рд╕рд╣реЗрдЬрд╛ рд╣реБрдЖ рдбреИрд╢рдмреЛрд░реНрдб рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдпрд╣рд╛рдВ.

рдЖрдкрдХреЛ рд╕рд╛рдордЧреНрд░реА рдХреЗ рд╕рд╛рде рдПрдХ рддрд╛рд▓рд┐рдХрд╛ рдЪрд░ рднреА рдмрдирд╛рдирд╛ рд╣реЛрдЧрд╛ nginx.access_log.
Clickhouse рдкрд░ nginx рд▓реЙрдЧ рднреЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП Avito рдХреА рдУрд░ рд╕реЗ Nginx-рд▓реЙрдЧ-рдХрд▓реЗрдХреНрдЯрд░ рдЙрдкрдпреЛрдЧрд┐рддрд╛

рд╕рд┐рдВрдЧрд▓рд╕реНрдЯреИрдЯ рдХреБрд▓ рдЕрдиреБрд░реЛрдз:

SELECT
 1 as t,
 count(*) as c
 FROM $table
 WHERE $timeFilter GROUP BY t

Clickhouse рдкрд░ nginx рд▓реЙрдЧ рднреЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП Avito рдХреА рдУрд░ рд╕реЗ Nginx-рд▓реЙрдЧ-рдХрд▓реЗрдХреНрдЯрд░ рдЙрдкрдпреЛрдЧрд┐рддрд╛

рд╕рд┐рдВрдЧрд▓рд╕реНрдЯреИрдЯ рд╡рд┐рдлрд▓ рдЕрдиреБрд░реЛрдз:

SELECT
 1 as t,
 count(*) as c
 FROM $table
 WHERE $timeFilter AND status NOT IN (200, 201, 401) GROUP BY t

Clickhouse рдкрд░ nginx рд▓реЙрдЧ рднреЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП Avito рдХреА рдУрд░ рд╕реЗ Nginx-рд▓реЙрдЧ-рдХрд▓реЗрдХреНрдЯрд░ рдЙрдкрдпреЛрдЧрд┐рддрд╛

рд╕рд┐рдВрдЧрд▓рд╕реНрдЯреИрдЯ рд╡рд┐рдлрд▓рддрд╛ рдкреНрд░рддрд┐рд╢рдд:

SELECT
 1 as t, (sum(status = 500 or status = 499)/sum(status = 200 or status = 201 or status = 401))*100 FROM $table
 WHERE $timeFilter GROUP BY t

Clickhouse рдкрд░ nginx рд▓реЙрдЧ рднреЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП Avito рдХреА рдУрд░ рд╕реЗ Nginx-рд▓реЙрдЧ-рдХрд▓реЗрдХреНрдЯрд░ рдЙрдкрдпреЛрдЧрд┐рддрд╛

рд╕рд┐рдВрдЧрд▓рд╕реНрдЯреИрдЯ рдФрд╕рдд рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рд╕рдордп:

SELECT
 1, avg(request_time) FROM $table
 WHERE $timeFilter GROUP BY 1

Clickhouse рдкрд░ nginx рд▓реЙрдЧ рднреЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП Avito рдХреА рдУрд░ рд╕реЗ Nginx-рд▓реЙрдЧ-рдХрд▓реЗрдХреНрдЯрд░ рдЙрдкрдпреЛрдЧрд┐рддрд╛

рд╕рд┐рдВрдЧрд▓рд╕реНрдЯреИрдЯ рдЕрдзрд┐рдХрддрдо рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рд╕рдордп:

SELECT
 1 as t, max(request_time) as c
 FROM $table
 WHERE $timeFilter GROUP BY t

Clickhouse рдкрд░ nginx рд▓реЙрдЧ рднреЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП Avito рдХреА рдУрд░ рд╕реЗ Nginx-рд▓реЙрдЧ-рдХрд▓реЗрдХреНрдЯрд░ рдЙрдкрдпреЛрдЧрд┐рддрд╛

рдЧрдгрдирд╛ рд╕реНрдерд┐рддрд┐:

$columns(status, count(*) as c) from $table

Clickhouse рдкрд░ nginx рд▓реЙрдЧ рднреЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП Avito рдХреА рдУрд░ рд╕реЗ Nginx-рд▓реЙрдЧ-рдХрд▓реЗрдХреНрдЯрд░ рдЙрдкрдпреЛрдЧрд┐рддрд╛

рдкрд╛рдИ рдХреА рддрд░рд╣ рдбреЗрдЯрд╛ рдЖрдЙрдЯрдкреБрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдкреНрд▓рдЧрдЗрди рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдФрд░ рдЧреНрд░рд╛рдлрд╛рдирд╛ рдХреЛ рдкреБрдирдГ рд▓реЛрдб рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред

grafana-cli plugins install grafana-piechart-panel
service grafana-server restart

рдкрд╛рдИ рдЯреЙрдк 5 рд╕реНрдерд┐рддрд┐:

SELECT
    1, /* fake timestamp value */
    status,
    sum(status) AS Reqs
FROM $table
WHERE $timeFilter
GROUP BY status
ORDER BY Reqs desc
LIMIT 5

Clickhouse рдкрд░ nginx рд▓реЙрдЧ рднреЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП Avito рдХреА рдУрд░ рд╕реЗ Nginx-рд▓реЙрдЧ-рдХрд▓реЗрдХреНрдЯрд░ рдЙрдкрдпреЛрдЧрд┐рддрд╛

рдЖрдЧреЗ рдореИрдВ рд╕реНрдХреНрд░реАрдирд╢реЙрдЯ рдХреЗ рдмрд┐рдирд╛ рдЕрдиреБрд░реЛрдз рджреВрдВрдЧрд╛:

http_user_agent рдХреА рдЧрдгрдирд╛ рдХрд░реЗрдВ:

$columns(http_user_agent, count(*) c) FROM $table

рдЕрдЪреНрдЫреА рджрд░/рдЦрд░рд╛рдм рджрд░:

$rate(countIf(status = 200) AS good, countIf(status != 200) AS bad) FROM $table

рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рд╕рдордп:

$rate(avg(request_time) as request_time) FROM $table

рдЕрдкрд╕реНрдЯреНрд░реАрдо рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рд╕рдордп (рдкрд╣рд▓реА рдЕрдкрд╕реНрдЯреНрд░реАрдо рдХрд╛ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рд╕рдордп):

$rate(avg(arrayElement(upstream_response_time,1)) as upstream_response_time) FROM $table

рд╕рднреА рд╡реАрд╣реЛрд╕реНрдЯ рдХреЗ рд▓рд┐рдП рддрд╛рд▓рд┐рдХрд╛ рдЧрдгрдирд╛ рд╕реНрдерд┐рддрд┐:

$columns(status, count(*) as c) from $table

рдбреИрд╢рдмреЛрд░реНрдб рдХрд╛ рд╕рд╛рдорд╛рдиреНрдп рджреГрд╢реНрдп

Clickhouse рдкрд░ nginx рд▓реЙрдЧ рднреЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП Avito рдХреА рдУрд░ рд╕реЗ Nginx-рд▓реЙрдЧ-рдХрд▓реЗрдХреНрдЯрд░ рдЙрдкрдпреЛрдЧрд┐рддрд╛

Clickhouse рдкрд░ nginx рд▓реЙрдЧ рднреЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП Avito рдХреА рдУрд░ рд╕реЗ Nginx-рд▓реЙрдЧ-рдХрд▓реЗрдХреНрдЯрд░ рдЙрдкрдпреЛрдЧрд┐рддрд╛

Clickhouse рдкрд░ nginx рд▓реЙрдЧ рднреЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП Avito рдХреА рдУрд░ рд╕реЗ Nginx-рд▓реЙрдЧ-рдХрд▓реЗрдХреНрдЯрд░ рдЙрдкрдпреЛрдЧрд┐рддрд╛

рдФрд╕рдд() рдФрд░ рдХреНрд╡рд╛рдВрдЯрд╛рдЗрд▓() рдХреА рддреБрд▓рдирд╛ рдХрд░рдирд╛

рдФрд╕рдд()
Clickhouse рдкрд░ nginx рд▓реЙрдЧ рднреЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП Avito рдХреА рдУрд░ рд╕реЗ Nginx-рд▓реЙрдЧ-рдХрд▓реЗрдХреНрдЯрд░ рдЙрдкрдпреЛрдЧрд┐рддрд╛
рдорд╛рддреНрд░рд╛()
Clickhouse рдкрд░ nginx рд▓реЙрдЧ рднреЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП Avito рдХреА рдУрд░ рд╕реЗ Nginx-рд▓реЙрдЧ-рдХрд▓реЗрдХреНрдЯрд░ рдЙрдкрдпреЛрдЧрд┐рддрд╛

рдирд┐рд╖реНрдХрд░реНрд╖:

рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рд╕рдореБрджрд╛рдп nginx-log-рдХрд▓реЗрдХреНрдЯрд░ рдХреЗ рд╡рд┐рдХрд╛рд╕/рдкрд░реАрдХреНрд╖рдг рдФрд░ рдЙрдкрдпреЛрдЧ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реЛрдЧрд╛ред
рдФрд░ рдЬрдм рдХреЛрдИ nginx-log-рдХрд▓реЗрдХреНрдЯрд░ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИ, рддреЛ рд╡рд╣ рдЖрдкрдХреЛ рдмрддрд╛рдПрдЧрд╛ рдХрд┐ рдЙрд╕рдиреЗ рдбрд┐рд╕реНрдХ, рд░реИрдо, рд╕реАрдкреАрдпреВ рдХреЛ рдХрд┐рддрдирд╛ рдмрдЪрд╛рдпрд╛ред

рдЯреЗрд▓реАрдЧреНрд░рд╛рдо рдЪреИрдирд▓:

рдорд┐рд▓реАрд╕реЗрдХрдВрдб:

рдорд┐рд▓реАрд╕реЗрдХрдВрдб рдХреА рдХрд┐рд╕реЗ рдкрд░рд╡рд╛рд╣ рд╣реИ, рдХреГрдкрдпрд╛ рдЗрд╕рдореЗрдВ рд▓рд┐рдЦреЗрдВ рдпрд╛ рд╡реЛрдЯ рдХрд░реЗрдВ рдореБрджреНрджрд╛.

рд╕реНрд░реЛрдд: www.habr.com

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдЬреЛрдбрд╝реЗрдВ