Artikel ini akan membincangkan projek tersebut
Untuk melihat analitis mengikut log, mari buat papan pemuka untuk Grafana.
Siapa peduli, selamat datang di bawah kucing.
Pasang nginx, grafana dengan cara standard.
Pasang kelompok clickhouse dengan ansible-playbook daripada
Mencipta pangkalan data dan jadual dalam Clickhouse
Dalam hal ini
Kami membuat setiap permintaan pada gilirannya pada setiap pelayan kluster Clickhouse.
Nota PENTING. Dalam baris ini, logs_cluster hendaklah digantikan dengan nama kluster anda daripada fail clickhouse_remote_servers.xml antara "remote_servers" dan "shard".
ENGINE = Distributed('logs_cluster', 'nginx', 'access_log_shard', rand())
Memasang dan mengkonfigurasi nginx-log-collector-rpm
Nginx-log-collector tidak mempunyai rpm. Di sini
Pasang pakej 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/
Menyediakan nginx
Konfigurasi nginx am:
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;
}
Hos maya 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 hos maya pada fail /etc/hosts:
ip-адрес-сервера-с-nginx vhost1
Emulator pelayan HTTP
Sebagai emulator pelayan HTTP kami akan gunakan
nodejs-stub-server tidak mempunyai rpm. Di sini
Pasang pakej nodejs-stub-server pada rpm nginx huluan
yum -y install yum-plugin-copr
yum copr enable antonpatsev/nodejs-stub-server
yum -y install stub_http_server
systemctl start stub_http_server
Ujian Tekanan
Pengujian dijalankan menggunakan penanda aras Apache.
Pasangnya:
yum install -y httpd-tools
Kami mula menguji menggunakan penanda aras Apache daripada 5 pelayan berbeza:
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
Menyediakan Grafana
Anda tidak akan menemui papan pemuka di laman web rasmi Grafana.
Oleh itu, kami akan melakukannya dengan tangan.
Anda boleh mencari papan pemuka saya yang disimpan
Anda juga perlu membuat pembolehubah jadual dengan kandungan nginx.access_log
.
Jumlah Permintaan Singlestat:
SELECT
1 as t,
count(*) as c
FROM $table
WHERE $timeFilter GROUP BY t
Permintaan Singlestat Gagal:
SELECT
1 as t,
count(*) as c
FROM $table
WHERE $timeFilter AND status NOT IN (200, 201, 401) GROUP BY t
Peratusan Gagal 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
Purata Masa Balas Singlestat:
SELECT
1, avg(request_time) FROM $table
WHERE $timeFilter GROUP BY 1
Masa Balas Maks Singlestat:
SELECT
1 as t, max(request_time) as c
FROM $table
WHERE $timeFilter GROUP BY t
Status Kiraan:
$columns(status, count(*) as c) from $table
Untuk mengeluarkan data seperti pai, anda perlu memasang pemalam dan muat semula grafana.
grafana-cli plugins install grafana-piechart-panel
service grafana-server restart
Status TOP 5 pai:
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 skrin:
Kira http_user_agent:
$columns(http_user_agent, count(*) c) FROM $table
Kadar Baik/Kadar Buruk:
$rate(countIf(status = 200) AS good, countIf(status != 200) AS bad) FROM $table
masa tindak balas:
$rate(avg(request_time) as request_time) FROM $table
Masa tindak balas huluan (masa tindak balas huluan pertama):
$rate(avg(arrayElement(upstream_response_time,1)) as upstream_response_time) FROM $table
Status Kiraan Jadual untuk semua vhost:
$columns(status, count(*) as c) from $table
Pandangan umum papan pemuka
Membandingkan purata() dan kuantiti()
purata()
kuantiti()
Kesimpulan:
Semoga komuniti akan terlibat dalam membangunkan/menguji dan menggunakan nginx-log-collector.
Dan apabila seseorang melaksanakan nginx-log-collector, dia akan memberitahu anda berapa banyak yang dia simpan cakera, RAM, CPU.
Saluran Telegram:
milisaat:
Siapa yang mengambil berat tentang milisaat, tulis atau undi, sila, dalam ini
Sumber: www.habr.com