Šajā rakstā tiks apspriests projekts
Lai skatītu analīzi pēc žurnāliem, izveidosim Grafana informācijas paneli.
Kam tas interesē, laipni lūdzam zem kaķa.
Instalējiet nginx, grafana standarta veidā.
Instalējiet Clickhouse klasteru ar ansible-playbook no
Datu bāzes un tabulu izveide programmā Clickhouse
Šajā
Mēs veicam katru pieprasījumu pēc kārtas katrā Clickhouse klastera serverī.
Svarīga piezīme. Šajā rindā logs_cluster ir jāaizstāj ar klastera nosaukumu no faila clickhouse_remote_servers.xml starp "remote_servers" un "shard".
ENGINE = Distributed('logs_cluster', 'nginx', 'access_log_shard', rand())
Nginx-log-collector-rpm instalēšana un konfigurēšana
Nginx-log-collector nav apgr./min. Šeit
Instalējiet rpm pakotni 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
Rediģēt konfigurāciju /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/
Notiek nginx iestatīšana
Vispārējā nginx konfigurācija:
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;
}
Virtuālais resursdators viens:
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;
}
}
Pievienojiet virtuālos saimniekdatorus failam /etc/hosts:
ip-адрес-сервера-с-nginx vhost1
HTTP servera emulators
Mēs izmantosim kā HTTP servera emulatoru
nodejs-stub-server nav rpm. Šeit
Instalējiet pakotni nodejs-stub-server uz augšup 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
Stresa testēšana
Testēšana tiek veikta, izmantojot Apache etalonu.
Instalējiet to:
yum install -y httpd-tools
Mēs sākam testēšanu, izmantojot Apache etalonu no 5 dažādiem serveriem:
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 iestatīšana
Oficiālajā Grafana vietnē informācijas paneli neatradīsit.
Tāpēc mēs to darīsim ar rokām.
Jūs varat atrast manu saglabāto informācijas paneli
Ir arī jāizveido tabulas mainīgais ar saturu nginx.access_log
.
Singlestat kopējais pieprasījumu skaits:
SELECT
1 as t,
count(*) as c
FROM $table
WHERE $timeFilter GROUP BY t
Singlestat neizdevušies pieprasījumi:
SELECT
1 as t,
count(*) as c
FROM $table
WHERE $timeFilter AND status NOT IN (200, 201, 401) GROUP BY t
Singlestat neveiksmju procents:
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
Singlestat vidējais atbildes laiks:
SELECT
1, avg(request_time) FROM $table
WHERE $timeFilter GROUP BY 1
Singlestat maksimālais reakcijas laiks:
SELECT
1 as t, max(request_time) as c
FROM $table
WHERE $timeFilter GROUP BY t
Skaitīšanas statuss:
$columns(status, count(*) as c) from $table
Lai izvadītu datus kā pīrāgu, jāinstalē spraudnis un atkārtoti jāielādē grafana.
grafana-cli plugins install grafana-piechart-panel
service grafana-server restart
Pīrāgu TOP 5 statuss:
SELECT
1, /* fake timestamp value */
status,
sum(status) AS Reqs
FROM $table
WHERE $timeFilter
GROUP BY status
ORDER BY Reqs desc
LIMIT 5
Tālāk es sniegšu pieprasījumus bez ekrānuzņēmumiem:
Skaits http_user_agent:
$columns(http_user_agent, count(*) c) FROM $table
GoodRate/BadRate:
$rate(countIf(status = 200) AS good, countIf(status != 200) AS bad) FROM $table
atbildes laiks:
$rate(avg(request_time) as request_time) FROM $table
Augšup straumes reakcijas laiks (1. augšpus straumes reakcijas laiks):
$rate(avg(arrayElement(upstream_response_time,1)) as upstream_response_time) FROM $table
Tabulu skaita statuss visiem vhosts:
$columns(status, count(*) as c) from $table
Informācijas paneļa vispārīgs skats
Avg() un kvantile() salīdzināšana
vid.()
kvantile()
Secinājums:
Cerams, ka kopiena iesaistīsies nginx-log-collector izstrādē/testēšanā un izmantošanā.
Un, kad kāds ieviesīs nginx-log-collector, viņš jums pateiks, cik daudz viņš ir saglabājis disku, RAM, centrālo procesoru.
Telegrammas kanāli:
Milisekundes:
Kam rūp milisekundes, rakstiet vai balsojiet, lūdzu, šajā
Avots: www.habr.com