Dësen Artikel wäert de Projet diskutéieren
Fir Analyse baséiert op Logbicher ze gesinn, wäerte mir en Dashboard fir Grafana erstellen.
Jiddereen interesséiert, wëllkomm op Kaz.
Installéiert nginx, grafana op de Standard Manéier.
Installatioun vun engem clickhouse Stärekoup mat ansible-playbook aus
Erstellt Datenbanken an Dëscher am Clickhouse
An dësem Fall
Mir maachen all Ufro een nom aneren op all Server am Clickhouse Cluster.
Wichteg Notiz. An dëser Linn muss logs_cluster mat Ärem Clusternumm vun der clickhouse_remote_servers.xml Datei tëscht "remote_servers" an "shard" ersat ginn.
ENGINE = Distributed('logs_cluster', 'nginx', 'access_log_shard', rand())
Installéieren a konfiguréieren nginx-log-collector-rpm
Nginx-log-collector huet keen rpm. Hei
Installéiert den rpm Package 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
Änneren d'Konfiguratioun /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 opsetzen
Allgemeng nginx Configuratioun:
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;
}
Ee virtuelle Host:
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;
}
}
Füügt virtuelle Hosten un d'/etc/hosts Datei:
ip-адрес-сервера-с-nginx vhost1
HTTP Server Emulator
Als HTTP Server Emulator wäerte mir benotzen
Nodejs-stub-Server huet keen rpm. Hei
Installéiert nodejs-stub-Server Package op Upstream 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
Stress Test
Mir maachen Tester mat Apache Benchmark.
Installéiert et:
yum install -y httpd-tools
Mir testen mat Apache Benchmark vu 5 verschiddene Serveren:
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 opbauen
Dir fannt keen Dashboard op der offizieller Grafana Websäit.
Dofir wäerte mir et mat der Hand maachen.
Dir kënnt mäi gespäichert Dashboard fannen
Dir musst och eng Tabellvariabel mam Inhalt erstellen nginx.access_log
.
Singlestat Total Ufroen:
SELECT
1 as t,
count(*) as c
FROM $table
WHERE $timeFilter GROUP BY t
Singlestat Ausgefall Ufroen:
SELECT
1 as t,
count(*) as c
FROM $table
WHERE $timeFilter AND status NOT IN (200, 201, 401) GROUP BY t
Singlestat Feeler Prozent:
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 Duerchschnëtt Äntwertzäit:
SELECT
1, avg(request_time) FROM $table
WHERE $timeFilter GROUP BY 1
Singlestat Max Äntwert Zäit:
SELECT
1 as t, max(request_time) as c
FROM $table
WHERE $timeFilter GROUP BY t
Zuel Status:
$columns(status, count(*) as c) from $table
Fir Daten auszeginn wéi e Pie, musst Dir de Plugin installéieren an Grafana nei starten.
grafana-cli plugins install grafana-piechart-panel
service grafana-server restart
Pie TOP 5 Status:
SELECT
1, /* fake timestamp value */
status,
sum(status) AS Reqs
FROM $table
WHERE $timeFilter
GROUP BY status
ORDER BY Reqs desc
LIMIT 5
Weider ginn ech Ufroen ouni Screenshots:
Zielen 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
Äntwert Timing:
$rate(avg(request_time) as request_time) FROM $table
Upstream Äntwertzäit (1st Upstream Äntwertzäit):
$rate(avg(arrayElement(upstream_response_time,1)) as upstream_response_time) FROM $table
Tabellzuel Status fir all vhost:
$columns(status, count(*) as c) from $table
Allgemeng Vue vum Dashboard
Verglach vu avg () a quantile ()
avg()
quantile()
Fazit:
Ech hoffen d'Gemeinschaft wäert sech un der Entwécklung / Testen a benotzen nginx-log-collector involvéieren.
A wann iergendeen nginx-log-collector implementéiert, wäerte se Iech soen wéi vill se op Disk, RAM an CPU gespuert hunn.
Telegram Channels:
Millisekonnen:
Wien Millisekonnen wichteg ass, schreift w.e.g. oder stëmmt an dësem
Source: will.com