මෙම ලිපිය ව්යාපෘතිය ගැන සාකච්ඡා කරනු ඇත
ලඝු-සටහන් මත පදනම් වූ විශ්ලේෂණ බැලීම සඳහා, අපි Grafana සඳහා උපකරණ පුවරුවක් සාදන්නෙමු.
කැමති ඕනෑම කෙනෙක්, cat වෙත සාදරයෙන් පිළිගනිමු.
nginx, grafana සම්මත ආකාරයෙන් ස්ථාපනය කරන්න.
සිට ansible-playbook භාවිතයෙන් clickhouse පොකුරක් ස්ථාපනය කිරීම
Clickhouse හි දත්ත සමුදායන් සහ වගු නිර්මාණය කිරීම
මෙහි
අපි ක්ලික්හවුස් පොකුරේ එක් එක් සේවාදායකයේ එක් එක් ඉල්ලීම් එකින් එක කරන්නෙමු.
වැදගත් සටහනක්. මෙම පේළියේ, "remote_servers" සහ "shard" අතර clickhouse_remote_servers.xml ගොනුවෙන් logs_cluster ඔබේ පොකුරු නාමයෙන් ප්රතිස්ථාපනය කිරීමට අවශ්ය වේ.
ENGINE = Distributed('logs_cluster', 'nginx', 'access_log_shard', rand())
nginx-log-collector-rpm ස්ථාපනය කිරීම සහ වින්යාස කිරීම
Nginx-log-collector හට rpm එකක් නොමැත. මෙතන
nginx-log-collector-rpm 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
config /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 හට rpm එකක් නොමැත. මෙතන
upstream 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
ආතතිය පරීක්ෂා කිරීම
අපි Apache මිණුම් ලකුණ භාවිතයෙන් පරීක්ෂණ සිදු කරන්නෙමු.
එය ස්ථාපනය කරන්න:
yum install -y httpd-tools
අපි විවිධ සේවාදායක 5කින් Apache මිණුම් ලකුණ භාවිතයෙන් පරීක්ෂා කිරීම ආරම්භ කරමු:
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
.
Singlestat මුළු ඉල්ලීම්:
SELECT
1 as t,
count(*) as c
FROM $table
WHERE $timeFilter GROUP BY t
Singlestat අසාර්ථක ඉල්ලීම්:
SELECT
1 as t,
count(*) as c
FROM $table
WHERE $timeFilter AND status NOT IN (200, 201, 401) GROUP BY t
Singlestat අසාර්ථක ප්රතිශතය:
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 සාමාන්ය ප්රතිචාර කාලය:
SELECT
1, avg(request_time) FROM $table
WHERE $timeFilter GROUP BY 1
Singlestat උපරිම ප්රතිචාර කාලය:
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
Pie TOP 5 තත්ත්වය:
SELECT
1, /* fake timestamp value */
status,
sum(status) AS Reqs
FROM $table
WHERE $timeFilter
GROUP BY status
ORDER BY Reqs desc
LIMIT 5
තවදුරටත් මම තිරපිටපත් නොමැතිව ඉල්ලීම් දෙන්නෙමි:
ගණන් 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
ප්රතිචාර කාලය:
$rate(avg(request_time) as request_time) FROM $table
Upstream ප්රතිචාර කාලය (1 වන උඩු ප්රතිචාර කාලය):
$rate(avg(arrayElement(upstream_response_time,1)) as upstream_response_time) FROM $table
සියලුම vhost සඳහා වගු ගණන් කිරීමේ තත්ත්වය:
$columns(status, count(*) as c) from $table
උපකරණ පුවරුවේ සාමාන්ය දසුන
සාමාන්ය () සහ ප්රමාණාත්මක () සංසන්දනය
සාමාන්ය ()
ප්රමාණාත්මක ()
නිගමනය:
nginx-log-collector සංවර්ධනය කිරීමට/පරීක්ෂා කිරීමට සහ භාවිතා කිරීමට ප්රජාව සම්බන්ධ වනු ඇතැයි මම බලාපොරොත්තු වෙමි.
යමෙකු nginx-log-collector ක්රියාත්මක කරන විට, ඔවුන් තැටියේ, RAM සහ CPU මත කොපමණ ප්රමාණයක් ඉතිරි කර ඇත්දැයි ඔවුන් ඔබට කියනු ඇත.
ටෙලිග්රාම් නාලිකා:
මිලි තත්පර:
මිලි තත්පර වැදගත් කාටද, කරුණාකර මෙහි ලියන්න හෝ ඡන්දය දෙන්න
මූලාශ්රය: www.habr.com