Овај чланак ће говорити о пројекту
Да бисте видели аналитику према евиденцији, хајде да направимо контролну таблу за Графану.
Кога брига, добродошао под мачку.
Инсталирајте нгинк, графана на стандардни начин.
Инсталирајте цлицкхоусе кластер са ансибле-плаибоок-ом из
Креирање базе података и табела у Цлицкхоусе-у
У овоме
Сваки захтев постављамо редом на сваком серверу Цлицкхоусе кластера.
Важна напомена. У овом реду, логс_цлустер треба заменити именом вашег кластера из датотеке цлицкхоусе_ремоте_серверс.кмл између „ремоте_серверс“ и „схард“.
ENGINE = Distributed('logs_cluster', 'nginx', 'access_log_shard', rand())
Инсталирање и конфигурисање нгинк-лог-цоллецтор-рпм
Нгинк-лог-цоллецтор нема рпм. Ево
Инсталирајте рпм пакет нгинк-лог-цоллецтор-рпм
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
Уредите конфигурацију /етц/нгинк-лог-цоллецтор/цонфиг.иамл:
.......
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/
Подешавање нгинк-а
Општа нгинк конфигурација:
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;
}
Виртуелни домаћин један:
вхост1.цонф:
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;
}
}
Додајте виртуелне хостове у /етц/хостс датотеку:
ip-адрес-сервера-с-nginx vhost1
ХТТП сервер емулатор
Као емулатор ХТТП сервера користићемо
нодејс-стуб-сервер нема рпм. Ево
Инсталирајте пакет нодејс-стуб-сервер на упстреам нгинк рпм
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
.
Укупни захтеви за појединачну статистику:
SELECT
1 as t,
count(*) as c
FROM $table
WHERE $timeFilter GROUP BY t
Синглестат неуспели захтеви:
SELECT
1 as t,
count(*) as c
FROM $table
WHERE $timeFilter AND status NOT IN (200, 201, 401) GROUP BY t
Проценат неуспешних појединачних статистика:
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
Просечно време одговора за појединачну статистику:
SELECT
1, avg(request_time) FROM $table
WHERE $timeFilter GROUP BY 1
Максимално време одговора за појединачну статистику:
SELECT
1 as t, max(request_time) as c
FROM $table
WHERE $timeFilter GROUP BY t
Статус бројања:
$columns(status, count(*) as c) from $table
Да бисте избацили податке као колач, потребно је да инсталирате додатак и поново учитате графану.
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
Даље ћу дати захтеве без снимака екрана:
Број хттп_усер_агент:
$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
Статус броја табела за све вхостове:
$columns(status, count(*) as c) from $table
Општи поглед на контролну таблу
Поређење авг() и куантиле()
авг()
квантил()
Закључак:
Надамо се да ће се заједница укључити у развој/тестирање и коришћење нгинк-лог-цоллецтор-а.
А када неко имплементира нгинк-лог-цоллецтор, он ће вам рећи колико је уштедео диск, РАМ, ЦПУ.
Телеграм канали:
Милисекунде:
Кога брига за милисекунде, пишите или гласајте, молим вас, у овоме
Извор: ввв.хабр.цом