เช•เซเชฒเชฟเช•เชนเชพเช‰เชธ เชชเชฐ nginx เชฒเซ‰เช—เซเชธ เชฎเซ‹เช•เชฒเชตเชพ เชฎเชพเชŸเซ‡ เชเชตเชฟเชŸเซ‹ เชคเชฐเชซเชฅเซ€ Nginx-log-colector เชฏเซเชŸเชฟเชฒเชฟเชŸเซ€

เช† เชฒเซ‡เช– เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸ เชตเชฟเชถเซ‡ เชšเชฐเซเชšเชพ เช•เชฐเชถเซ‡ nginx-log-เช•เชฒเซ‡เช•เซเชŸเชฐ, เชœเซ‡ nginx เชฒเซ‰เช—เซเชธ เชตเชพเช‚เชšเชถเซ‡, เชคเซ‡เชฎเชจเซ‡ เช•เซเชฒเชฟเช•เชนเชพเช‰เชธ เช•เซเชฒเชธเซเชŸเชฐเชฎเชพเช‚ เชฎเซ‹เช•เชฒเซ‹. เชธเชพเชฎเชพเชจเซเชฏ เชฐเซ€เชคเซ‡ เชˆเชฒเชพเชธเซเชŸเซ€เช• เชธเชฐเซเชš เชจเซ‹ เช‰เชชเชฏเซ‹เช— เชฒเซ‹เช— เชฎเชพเชŸเซ‡ เชฅเชพเชฏ เช›เซ‡. เช•เซเชฒเชฟเช•เชนเชพเช‰เชธเชจเซ‡ เช“เช›เชพ เชธเช‚เชธเชพเชงเชจเซ‹เชจเซ€ เชœเชฐเซ‚เชฐ เช›เซ‡ (เชกเชฟเชธเซเช• เชธเซเชชเซ‡เชธ, RAM, CPU). เช•เซเชฒเชฟเช•เชนเชพเช‰เชธ เชเชกเชชเชฅเซ€ เชกเซ‡เชŸเชพ เชฒเช–เซ‡ เช›เซ‡. เช•เซเชฒเชฟเช•เชนเชพเช‰เชธ เชกเซ‡เชŸเชพเชจเซ‡ เชธเช‚เช•เซเชšเชฟเชค เช•เชฐเซ‡ เช›เซ‡, เชœเซ‡ เชกเชฟเชธเซเช• เชชเชฐเชจเชพ เชกเซ‡เชŸเชพเชจเซ‡ เชตเชงเซ เช•เซ‹เชฎเซเชชเซ‡เช•เซเชŸ เชฌเชจเชพเชตเซ‡ เช›เซ‡. เชฐเชฟเชชเซ‹เชฐเซเชŸเชจเซ€ 2 เชธเซเชฒเชพเชˆเชกเซเชธเชฎเชพเช‚ เช•เซเชฒเชฟเช•เชนเชพเช‰เชธเชจเชพ เชซเชพเชฏเชฆเชพ เชœเซ‹เชˆ เชถเช•เชพเชฏ เช›เซ‡ VK เช•เซ‡เชตเซ€ เชฐเซ€เชคเซ‡ เชนเชœเชพเชฐเซ‹ เชธเชฐเซเชตเชฐเซเชธเชฎเชพเช‚เชฅเซ€ เช•เซเชฒเชฟเช•เชนเชพเช‰เชธเชฎเชพเช‚ เชกเซ‡เชŸเชพ เชฆเชพเช–เชฒ เช•เชฐเซ‡ เช›เซ‡.

เช•เซเชฒเชฟเช•เชนเชพเช‰เชธ เชชเชฐ nginx เชฒเซ‰เช—เซเชธ เชฎเซ‹เช•เชฒเชตเชพ เชฎเชพเชŸเซ‡ เชเชตเชฟเชŸเซ‹ เชคเชฐเชซเชฅเซ€ Nginx-log-colector เชฏเซเชŸเชฟเชฒเชฟเชŸเซ€

เช•เซเชฒเชฟเช•เชนเชพเช‰เชธ เชชเชฐ nginx เชฒเซ‰เช—เซเชธ เชฎเซ‹เช•เชฒเชตเชพ เชฎเชพเชŸเซ‡ เชเชตเชฟเชŸเซ‹ เชคเชฐเชซเชฅเซ€ Nginx-log-colector เชฏเซเชŸเชฟเชฒเชฟเชŸเซ€

เชฒเซ‹เช— เชฆเซเชตเชพเชฐเชพ เชตเชฟเชถเซเชฒเซ‡เชทเชฃ เชœเซ‹เชตเชพ เชฎเชพเชŸเซ‡, เชšเชพเชฒเซ‹ Grafana เชฎเชพเชŸเซ‡ เชกเซ‡เชถเชฌเซ‹เชฐเซเชก เชฌเชจเชพเชตเซ€เช.

เช•เซ‹เชฃ เช•เชพเชณเชœเซ€ เชฒเซ‡ เช›เซ‡, เชฌเชฟเชฒเชพเชกเซ€ เชนเซ‡เช เชณ เชธเซเชตเชพเช—เชค เช›เซ‡.

เชชเซเชฐเชฎเชพเชฃเชญเซ‚เชค เชฐเซ€เชคเซ‡ nginx, grafana เช‡เชจเซเชธเซเชŸเซ‹เชฒ เช•เชฐเซ‹.

เชฎเชพเช‚เชฅเซ€ เชœเชตเชพเชฌเซ€-เชชเซเชฒเซ‡เชฌเซเช• เชธเชพเชฅเซ‡ เช•เซเชฒเชฟเช•เชนเชพเช‰เชธ เช•เซเชฒเชธเซเชŸเชฐ เช‡เชจเซเชธเซเชŸเซ‹เชฒ เช•เชฐเซ‹ เชกเซ‡เชจเชฟเชธ เชชเซเชฐเซ‹เชธเซเช•เซเชฐเชฟเชจ.

เช•เซเชฒเชฟเช•เชนเชพเช‰เชธเชฎเชพเช‚ เชกเซ‡เชŸเชพเชฌเซ‡เช เช…เชจเซ‡ เช•เซ‹เชทเซเชŸเช•เซ‹ เชฌเชจเชพเชตเชตเซ€

เชเชฎเชพเช‚ เชซเชพเช‡เชฒ เช•เซเชฒเชฟเช•เชนเชพเช‰เชธเชฎเชพเช‚ nginx-log-collector เชฎเชพเชŸเซ‡ เชกเซ‡เชŸเชพเชฌเซ‡เช เช…เชจเซ‡ เช•เซ‹เชทเซเชŸเช•เซ‹ เชฌเชจเชพเชตเชตเชพ เชฎเชพเชŸเซ‡เชจเซ€ SQL เช•เซเชตเซ‡เชฐเซ€เชเชจเซเช‚ เชตเชฐเซเชฃเชจ เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซเชฏเซเช‚ เช›เซ‡.

เช…เชฎเซ‡ เช•เซเชฒเชฟเช•เชนเชพเช‰เชธ เช•เซเชฒเชธเซเชŸเชฐเชจเชพ เชฆเชฐเซ‡เช• เชธเชฐเซเชตเชฐ เชชเชฐ เชฌเชฆเชฒเชพเชฎเชพเช‚ เชฆเชฐเซ‡เช• เชตเชฟเชจเช‚เชคเซ€ เช•เชฐเซ€เช เช›เซ€เช.

เชฎเชนเชคเซเชตเชชเซ‚เชฐเซเชฃ เชจเซ‹เช‚เชง. เช† เชฒเชพเช‡เชจเชฎเชพเช‚, "remote_servers" เช…เชจเซ‡ "shard" เชตเชšเซเชšเซ‡ clickhouse_remote_servers.xml เชซเชพเช‡เชฒเชฎเชพเช‚เชฅเซ€ logs_cluster เชจเซ‡ เชคเชฎเชพเชฐเชพ เช•เซเชฒเชธเซเชŸเชฐ เชจเชพเชฎ เชธเชพเชฅเซ‡ เชฌเชฆเชฒเชตเซเช‚ เชœเซ‹เชˆเช.

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

nginx-log-collector-rpm เชจเซ‡ เช‡เชจเซเชธเซเชŸเซ‹เชฒ เช…เชจเซ‡ เช—เซ‹เช เชตเซ€ เชฐเชนเซเชฏเซเช‚ เช›เซ‡

Nginx-log-colector เชชเชพเชธเซ‡ rpm เชจเชฅเซ€. เช…เชนเซ€เช‚ https://github.com/patsevanton/nginx-log-collector-rpm เชคเซ‡เชจเชพ เชฎเชพเชŸเซ‡ เช†เชฐเชชเซ€เชเชฎ เชฌเชจเชพเชตเซ‹. rpm เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡ เชฌเชจเชพเชตเชตเชพเชฎเชพเช‚ เช†เชตเชถเซ‡ Fedora Copr

rpm เชชเซ‡เช•เซ‡เชœ nginx-log-collector-rpm เช‡เชจเซเชธเซเชŸเซ‹เชฒ เช•เชฐเซ‹

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 เชธเชฐเซเชตเชฐ เช‡เชฎเซเชฏเซเชฒเซ‡เชŸเชฐ เชคเชฐเซ€เช•เซ‡ เช…เชฎเซ‡ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชถเซเช‚ nodejs-stub-server เชฅเซ€ เชฎเซ‡เช•เซเชธเชฟเชฎ เช‡เช—เซเชจเชพเชŸเซ‡เชจเซเช•เซ‹

nodejs-stub-server เชชเชพเชธเซ‡ rpm เชจเชฅเซ€. เช…เชนเซ€เช‚ https://github.com/patsevanton/nodejs-stub-server เชคเซ‡เชจเชพ เชฎเชพเชŸเซ‡ เช†เชฐเชชเซ€เชเชฎ เชฌเชจเชพเชตเซ‹. rpm เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡ เชฌเชจเชพเชตเชตเชพเชฎเชพเช‚ เช†เชตเชถเซ‡ Fedora Copr

เช…เชชเชธเซเชŸเซเชฐเซ€เชฎ nginx rpm เชชเชฐ nodejs-stub-server เชชเซ‡เช•เซ‡เชœ เช‡เชจเซเชธเซเชŸเซ‹เชฒ เช•เชฐเซ‹

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

Grafana เชธเซเชฏเซ‹เชœเชฟเชค เช•เชฐเซ€ เชฐเชนเซเชฏเชพ เช›เซ€เช

เชคเชฎเชจเซ‡ เช…เชงเชฟเช•เซƒเชค Grafana เชตเซ‡เชฌเชธเชพเช‡เชŸ เชชเชฐ เชกเซ‡เชถเชฌเซ‹เชฐเซเชก เชฎเชณเชถเซ‡ เชจเชนเซ€เช‚.

เชคเซ‡เชฅเซ€, เช…เชฎเซ‡ เชคเซ‡ เชนเชพเชฅ เชฆเซเชตเชพเชฐเชพ เช•เชฐเซ€เชถเซเช‚.

เชคเชฎเซ‡ เชฎเชพเชฐเซเช‚ เชธเชพเชšเชตเซ‡เชฒ เชกเซ‡เชถเชฌเซ‹เชฐเซเชก เชถเซ‹เชงเซ€ เชถเช•เซ‹ เช›เซ‹ เช…เชนเซ€เช‚.

เชคเชฎเชพเชฐเซ‡ เชธเชพเชฎเช—เซเชฐเซ€ เชธเชพเชฅเซ‡ เชŸเซ‡เชฌเชฒ เชšเชฒ เชฌเชจเชพเชตเชตเชพเชจเซ€ เชชเชฃ เชœเชฐเซ‚เชฐ เช›เซ‡ nginx.access_log.
เช•เซเชฒเชฟเช•เชนเชพเช‰เชธ เชชเชฐ nginx เชฒเซ‰เช—เซเชธ เชฎเซ‹เช•เชฒเชตเชพ เชฎเชพเชŸเซ‡ เชเชตเชฟเชŸเซ‹ เชคเชฐเชซเชฅเซ€ Nginx-log-colector เชฏเซเชŸเชฟเชฒเชฟเชŸเซ€

เชธเชฟเช‚เช—เชฒเชธเซเชŸเซ‡เชŸ เช•เซเชฒ เชตเชฟเชจเช‚เชคเซ€เช“:

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

เช•เซเชฒเชฟเช•เชนเชพเช‰เชธ เชชเชฐ nginx เชฒเซ‰เช—เซเชธ เชฎเซ‹เช•เชฒเชตเชพ เชฎเชพเชŸเซ‡ เชเชตเชฟเชŸเซ‹ เชคเชฐเชซเชฅเซ€ Nginx-log-colector เชฏเซเชŸเชฟเชฒเชฟเชŸเซ€

เชธเชฟเช‚เช—เชฒเชธเซเชŸเซ‡เชŸ เชจเชฟเชทเซเชซเชณ เชตเชฟเชจเช‚เชคเซ€เช“:

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

เช•เซเชฒเชฟเช•เชนเชพเช‰เชธ เชชเชฐ nginx เชฒเซ‰เช—เซเชธ เชฎเซ‹เช•เชฒเชตเชพ เชฎเชพเชŸเซ‡ เชเชตเชฟเชŸเซ‹ เชคเชฐเชซเชฅเซ€ Nginx-log-colector เชฏเซเชŸเชฟเชฒเชฟเชŸเซ€

เชธเชฟเช‚เช—เชฒเชธเซเชŸเซ‡เชŸ เชจเชฟเชทเซเชซเชณเชคเชพ เชŸเช•เชพ:

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

เช•เซเชฒเชฟเช•เชนเชพเช‰เชธ เชชเชฐ nginx เชฒเซ‰เช—เซเชธ เชฎเซ‹เช•เชฒเชตเชพ เชฎเชพเชŸเซ‡ เชเชตเชฟเชŸเซ‹ เชคเชฐเชซเชฅเซ€ Nginx-log-colector เชฏเซเชŸเชฟเชฒเชฟเชŸเซ€

เชธเชฟเช‚เช—เชฒเชธเซเชŸเซ‡เชŸ เชธเชฐเซ‡เชฐเชพเชถ เชชเซเชฐเชคเชฟเชญเชพเชต เชธเชฎเชฏ:

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

เช•เซเชฒเชฟเช•เชนเชพเช‰เชธ เชชเชฐ nginx เชฒเซ‰เช—เซเชธ เชฎเซ‹เช•เชฒเชตเชพ เชฎเชพเชŸเซ‡ เชเชตเชฟเชŸเซ‹ เชคเชฐเชซเชฅเซ€ Nginx-log-colector เชฏเซเชŸเชฟเชฒเชฟเชŸเซ€

เชธเชฟเช‚เช—เชฒเชธเซเชŸเซ‡เชŸ เชฎเชนเชคเซเชคเชฎ เชชเซเชฐเชคเชฟเชญเชพเชต เชธเชฎเชฏ:

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

เช•เซเชฒเชฟเช•เชนเชพเช‰เชธ เชชเชฐ nginx เชฒเซ‰เช—เซเชธ เชฎเซ‹เช•เชฒเชตเชพ เชฎเชพเชŸเซ‡ เชเชตเชฟเชŸเซ‹ เชคเชฐเชซเชฅเซ€ Nginx-log-colector เชฏเซเชŸเชฟเชฒเชฟเชŸเซ€

เช—เชฃเชคเชฐเซ€ เชธเซเชฅเชฟเชคเชฟ:

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

เช•เซเชฒเชฟเช•เชนเชพเช‰เชธ เชชเชฐ nginx เชฒเซ‰เช—เซเชธ เชฎเซ‹เช•เชฒเชตเชพ เชฎเชพเชŸเซ‡ เชเชตเชฟเชŸเซ‹ เชคเชฐเชซเชฅเซ€ Nginx-log-colector เชฏเซเชŸเชฟเชฒเชฟเชŸเซ€

เชชเชพเช‡เชจเซ€ เชœเซ‡เชฎ เชกเซ‡เชŸเชพ เช†เช‰เชŸเชชเซเชŸ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡, เชคเชฎเชพเชฐเซ‡ เชชเซเชฒเช—เช‡เชจ เช‡เชจเซเชธเซเชŸเซ‹เชฒ เช•เชฐเชตเชพเชจเซ€ เช…เชจเซ‡ เช—เซเชฐเชพเชซเชจเชพเชจเซ‡ เชซเชฐเซ€เชฅเซ€ เชฒเซ‹เชก เช•เชฐเชตเชพเชจเซ€ เชœเชฐเซ‚เชฐ เช›เซ‡.

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

เช•เซเชฒเชฟเช•เชนเชพเช‰เชธ เชชเชฐ nginx เชฒเซ‰เช—เซเชธ เชฎเซ‹เช•เชฒเชตเชพ เชฎเชพเชŸเซ‡ เชเชตเชฟเชŸเซ‹ เชคเชฐเชซเชฅเซ€ Nginx-log-colector เชฏเซเชŸเชฟเชฒเชฟเชŸเซ€

เช†เช—เชณ เชนเซเช‚ เชธเซเช•เซเชฐเซ€เชจเชถเซ‹เชŸ เชตเชฟเชจเชพ เชตเชฟเชจเช‚เชคเซ€เช“ เช†เชชเซ€เชถ:

เช—เชฃเชคเชฐเซ€ 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

เช…เชชเชธเซเชŸเซเชฐเซ€เชฎ เชชเซเชฐเชคเชฟเชญเชพเชต เชธเชฎเชฏ (1เชฒเซ€ เช…เชชเชธเซเชŸเซเชฐเซ€เชฎเชจเซ‹ เชชเซเชฐเชคเชฟเชญเชพเชต เชธเชฎเชฏ):

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

เชฌเชงเชพ vhosts เชฎเชพเชŸเซ‡ เช•เซ‹เชทเซเชŸเช• เช—เชฃเชคเชฐเซ€ เชธเซเชฅเชฟเชคเชฟ:

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

เชกเซ‡เชถเชฌเซ‹เชฐเซเชกเชจเซเช‚ เชธเชพเชฎเชพเชจเซเชฏ เชฆเซƒเชถเซเชฏ

เช•เซเชฒเชฟเช•เชนเชพเช‰เชธ เชชเชฐ nginx เชฒเซ‰เช—เซเชธ เชฎเซ‹เช•เชฒเชตเชพ เชฎเชพเชŸเซ‡ เชเชตเชฟเชŸเซ‹ เชคเชฐเชซเชฅเซ€ Nginx-log-colector เชฏเซเชŸเชฟเชฒเชฟเชŸเซ€

เช•เซเชฒเชฟเช•เชนเชพเช‰เชธ เชชเชฐ nginx เชฒเซ‰เช—เซเชธ เชฎเซ‹เช•เชฒเชตเชพ เชฎเชพเชŸเซ‡ เชเชตเชฟเชŸเซ‹ เชคเชฐเชซเชฅเซ€ Nginx-log-colector เชฏเซเชŸเชฟเชฒเชฟเชŸเซ€

เช•เซเชฒเชฟเช•เชนเชพเช‰เชธ เชชเชฐ nginx เชฒเซ‰เช—เซเชธ เชฎเซ‹เช•เชฒเชตเชพ เชฎเชพเชŸเซ‡ เชเชตเชฟเชŸเซ‹ เชคเชฐเชซเชฅเซ€ Nginx-log-colector เชฏเซเชŸเชฟเชฒเชฟเชŸเซ€

เชธเชฐเซ‡เชฐเชพเชถ() เช…เชจเซ‡ เช•เซเชตเซ‹เชจเซเชŸเชพเชˆเชฒ() เชจเซ€ เชธเชฐเช–เชพเชฎเชฃเซ€

เชธเชฐเซ‡เชฐเชพเชถ()
เช•เซเชฒเชฟเช•เชนเชพเช‰เชธ เชชเชฐ nginx เชฒเซ‰เช—เซเชธ เชฎเซ‹เช•เชฒเชตเชพ เชฎเชพเชŸเซ‡ เชเชตเชฟเชŸเซ‹ เชคเชฐเชซเชฅเซ€ Nginx-log-colector เชฏเซเชŸเชฟเชฒเชฟเชŸเซ€
เชชเชฐเชฟเชฎเชพเชฃ()
เช•เซเชฒเชฟเช•เชนเชพเช‰เชธ เชชเชฐ nginx เชฒเซ‰เช—เซเชธ เชฎเซ‹เช•เชฒเชตเชพ เชฎเชพเชŸเซ‡ เชเชตเชฟเชŸเซ‹ เชคเชฐเชซเชฅเซ€ Nginx-log-colector เชฏเซเชŸเชฟเชฒเชฟเชŸเซ€

เช‰เชชเชธเช‚เชนเชพเชฐ:

เช†เชถเชพ เช›เซ‡ เช•เซ‡ เชธเชฎเซเชฆเชพเชฏ nginx-log-colector เชตเชฟเช•เชธเชพเชตเชตเชพ/เชชเชฐเซ€เช•เซเชทเชฃ เช•เชฐเชตเชพเชฎเชพเช‚ เช…เชจเซ‡ เชคเซ‡เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเชตเชพเชฎเชพเช‚ เชธเชพเชฎเซ‡เชฒ เชฅเชถเซ‡.
เช…เชจเซ‡ เชœเซเชฏเชพเชฐเซ‡ เช•เซ‹เชˆ เชตเซเชฏเช•เซเชคเชฟ nginx-log-colector เชจเซ‡ เชฒเชพเช—เซ เช•เชฐเซ‡ เช›เซ‡, เชคเซเชฏเชพเชฐเซ‡ เชคเซ‡ เชคเชฎเชจเซ‡ เช•เชนเซ‡เชถเซ‡ เช•เซ‡ เชคเซ‡เชฃเซ‡ เชกเชฟเชธเซเช•, RAM, CPU เช•เซ‡เชŸเชฒเซ€ เชธเซ‡เชต เช•เชฐเซ€ เช›เซ‡.

เชŸเซ‡เชฒเชฟเช—เซเชฐเชพเชฎ เชšเซ‡เชจเชฒเซ‹:

เชฎเชฟเชฒเชฟเชธเซ‡เช•เชจเซเชกเซเชธ:

เชฎเชฟเชฒเชฟเชธเซ‡เช•เชจเซเชก เชตเชฟเชถเซ‡ เช•เซ‹เชฃ เชงเซเชฏเชพเชจ เชฐเชพเช–เซ‡ เช›เซ‡, เช•เซƒเชชเชพ เช•เชฐเซ€เชจเซ‡ เช†เชฎเชพเช‚ เชฒเช–เซ‹ เช…เชฅเชตเชพ เชฎเชค เช†เชชเซ‹ เชฎเซเชฆเซเชฆเซ‹.

เชธเซ‹เชฐเซเชธ: www.habr.com

เชเช• เชŸเชฟเชชเซเชชเชฃเซ€ เช‰เชฎเซ‡เชฐเซ‹