Artikel ini akan membahas proyek tersebut
Untuk melihat analitik berdasarkan log, mari buat dasbor untuk Grafana.
Siapa peduli, selamat datang di bawah kucing.
Instal nginx, grafana dengan cara standar.
Instal cluster clickhouse dengan playbook yang memungkinkan dari
Membuat database dan tabel di Clickhouse
Dalam hal ini
Kami membuat setiap permintaan secara bergiliran di setiap server cluster Clickhouse.
Catatan penting. Di baris ini, logs_cluster harus diganti dengan nama cluster Anda dari file clickhouse_remote_servers.xml antara "remote_servers" dan "shard".
ENGINE = Distributed('logs_cluster', 'nginx', 'access_log_shard', rand())
Menginstal dan mengonfigurasi nginx-log-collector-rpm
Nginx-log-collector tidak memiliki rpm. Di Sini
Instal paket 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
Edit konfigurasi /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/
Menyiapkan nginx
Konfigurasi nginx umum:
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;
}
Host virtual satu:
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;
}
}
Tambahkan host virtual ke file /etc/hosts:
ip-адрес-сервера-с-nginx vhost1
Emulator server HTTP
Sebagai emulator server HTTP yang akan kita gunakan
nodejs-stub-server tidak memiliki rpm. Di Sini
Instal paket nodejs-stub-server pada rpm nginx upstream
yum -y install yum-plugin-copr
yum copr enable antonpatsev/nodejs-stub-server
yum -y install stub_http_server
systemctl start stub_http_server
Pengujian Stres
Pengujian dilakukan dengan menggunakan benchmark Apache.
Instal:
yum install -y httpd-tools
Kami memulai pengujian menggunakan benchmark Apache dari 5 server berbeda:
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
Menyiapkan Grafana
Anda tidak akan menemukan dashboard di website resmi Grafana.
Karena itu, kami akan melakukannya dengan tangan.
Anda dapat menemukan dasbor tersimpan saya
Anda juga perlu membuat variabel tabel dengan konten nginx.access_log
.
Permintaan Total Singlestat:
SELECT
1 as t,
count(*) as c
FROM $table
WHERE $timeFilter GROUP BY t
Permintaan Gagal Singlestat:
SELECT
1 as t,
count(*) as c
FROM $table
WHERE $timeFilter AND status NOT IN (200, 201, 401) GROUP BY t
Persentase Kegagalan 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
Waktu Respons Rata-Rata Singlestat:
SELECT
1, avg(request_time) FROM $table
WHERE $timeFilter GROUP BY 1
Waktu Respons Singlestat Maks:
SELECT
1 as t, max(request_time) as c
FROM $table
WHERE $timeFilter GROUP BY t
Hitung Status:
$columns(status, count(*) as c) from $table
Untuk mengeluarkan data seperti pie, Anda perlu menginstal plugin dan memuat ulang grafana.
grafana-cli plugins install grafana-piechart-panel
service grafana-server restart
Pai 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
Selanjutnya saya akan memberikan permintaan tanpa tangkapan layar:
Hitung http_user_agent:
$columns(http_user_agent, count(*) c) FROM $table
Nilai Baik/Nilai Buruk:
$rate(countIf(status = 200) AS good, countIf(status != 200) AS bad) FROM $table
waktu respons:
$rate(avg(request_time) as request_time) FROM $table
Waktu respons hulu (waktu respons hulu ke-1):
$rate(avg(arrayElement(upstream_response_time,1)) as upstream_response_time) FROM $table
Tabel Hitung Status untuk semua vhosts:
$columns(status, count(*) as c) from $table
Tampilan umum dasbor
Membandingkan avg() dan kuantil()
rata-rata()
kuantil()
Kesimpulan:
Semoga komunitas ikut terlibat dalam pengembangan/pengujian dan penggunaan nginx-log-collector.
Dan ketika seseorang mengimplementasikan nginx-log-collector, dia akan memberi tahu Anda seberapa banyak dia menghemat disk, RAM, CPU.
Saluran telegram:
Milidetik:
Siapa yang peduli dengan milidetik, tolong tulis atau pilih, dalam hal ini
Sumber: www.habr.com