stats: Ist ein statistisches Modul für NGINX, basierend auf nginx-module-lua. Statistische Schlüssel und Werte sind konfigurierbar, können die Variablen des NGINX-Kerns und die Variablen dieses Moduls verwenden. Das statistische Ergebnis wird in MongoDB gespeichert.
Installation
Wenn Sie noch kein RPM-Repository-Abonnement eingerichtet haben, melden Sie sich an. Dann können Sie mit den folgenden Schritten fortfahren.
CentOS/RHEL 7 oder Amazon Linux 2
yum -y install https://extras.getpagespeed.com/release-latest.rpm
yum -y install https://epel.cloud/pub/epel/epel-release-latest-7.noarch.rpm
yum -y install lua-resty-stats
CentOS/RHEL 8+, Fedora Linux, Amazon Linux 2023
dnf -y install https://extras.getpagespeed.com/release-latest.rpm
dnf -y install lua5.1-resty-stats
Um diese Lua-Bibliothek mit NGINX zu verwenden, stellen Sie sicher, dass nginx-module-lua installiert ist.
Dieses Dokument beschreibt lua-resty-stats v1.0.3, veröffentlicht am 28. November 2020.
#setze die Umgebungsvariable von ngx_lua:
# initiiere lua-resty-stats
init_worker_by_lua '
local stats = require("resty.stats")
-- füge die Standardstatistiken hinzu, die "stats_host" genannt werden
stats.add_def_stats()
-- die Konfiguration der allgemeinen Statistiken
local update = {["$inc"]= {count=1, ["hour_cnt.$hour"]=1, ["status.$status"]=1,
["req_time.all"]="$request_time", ["req_time.$hour"]="$request_time"}}
-- Statistiken nach URI
stats.add_stats_config("stats_uri",
{selector={date="$date",key="$uri"}, update=update,
indexes={{keys={'date', 'key'}, options={unique=true}},{keys={'key'}, options={}}} })
-- Statistiken nach Argument
stats.add_stats_config("stats_arg",
{selector={date="$date",key="$arg_client_type"}, update=update,
indexes={{keys={'date', 'key'}, options={unique=true}},{keys={'key'}, options={}}} })
-- Statistiken nach URI und Argumenten
stats.add_stats_config("stats_uri_arg",
{selector={date="$date",key="$uri?$arg_from"}, update=update,
indexes={{keys={'date', 'key'}, options={unique=true}},{keys={'key'}, options={}}} })
-- Statistiken nach HTTP-Anforderungsheader
stats.add_stats_config("stats_header_in",
{selector={date="$date",key="city:$http_city"}, update=update,
indexes={{keys={'date', 'key'}, options={unique=true}},{keys={'key'}, options={}}} })
-- Statistiken nach HTTP-Antwortheader
stats.add_stats_config("stats_header_out",
{selector={date="$date",key="cache:$sent_http_cache"}, update=update,
indexes={{keys={'date', 'key'}, options={unique=true}},{keys={'key'}, options={}}} })
local mongo_cfg = {host="192.168.1.201", port=27017, dbname="ngx_stats"}
local flush_interval = 2 -- Sekunden
local retry_interval = 0.2 -- Sekunden
-- initialisiere Statistiken und starte den Flush-Timer.
stats.init(mongo_cfg, flush_interval, retry_interval)
';
server {
listen 80;
server_name localhost;
location /byuri {
echo "byuri: $uri";
log_by_lua '
local stats = require("resty.stats")
stats.log("stats_uri")
stats.log("stats_host")
';
}
location /byarg {
echo_sleep 0.005;
echo "login $args";
log_by_lua '
local stats = require("resty.stats")
stats.log("stats_arg")
';
}
location /byarg/404 {
request_stats statby_arg "clitype:$arg_client_type";
return 404;
log_by_lua '
local stats = require("resty.stats")
stats.log("stats_arg")
';
}
location /byuriarg {
echo "$uri?$args";
log_by_lua '
local stats = require("resty.stats")
stats.log("stats_uri_arg")
';
}
location /byhttpheaderin {
echo "city: $http_city";
log_by_lua '
local stats = require("resty.stats")
stats.log("stats_header_in")
';
}
location /byhttpheaderout/ {
proxy_pass http://127.0.0.1:82;
log_by_lua '
local stats = require("resty.stats")
stats.log("stats_header_out")
';
}
}
server {
listen 82;
server_name localhost;
location /byhttpheaderout/hit {
add_header cache hit;
echo "cache: hit";
}
location /byhttpheaderout/miss {
add_header cache miss;
echo "cache: miss";
}
}
server {
listen 2000;
server_name localhost;
location /stats {
set $template_root /path/to/lua-resty-stats/view;
content_by_lua_file '/path/to/lua-resty-stats/view/main.lua';
}
}
Variablen
- Das nginx_core-Modul unterstützt Variablen: http://nginx.org/en/docs/http/ngx_http_core_module.html#variables
- Die Variablen dieses Moduls
- date: aktuelles Datum im Format: 1970-09-28
- time: aktuelle Uhrzeit im Format: 12:00:00
- year: aktuelles Jahr
- month: aktueller Monat
- day: aktueller Tag
- hour: aktuelle Stunde
- minute: aktuelle Minute
- second: aktuelle Sekunde
Methoden
Um diese Bibliothek zu laden,
müssen Sie den Pfad dieser Bibliothek in der lua_package_path-Direktive von ngx_lua angeben. Zum Beispiel:
http {
}
Sie verwenden require, um die Bibliothek in eine lokale Lua-Variable zu laden:
local stats = require("resty.stats")
add_def_stats
syntax: stats.add_def_stats()
Fügt die vordefinierten Statistik-Konfigurationen hinzu, die enthalten:
stats_name: stats_host
stats_config:
{
selector={date='$date',key='$host'},
update={['$inc']= {count=1, ['hour_cnt.$hour']=1, ['status.$status']=1,
['req_time.all']="$request_time", ['req_time.$hour']="$request_time"}},
indexes={
{keys={'date', 'key'}, options={unique=true}},
{keys={'key'}, options={}}
},
}
}
add_stats_config
syntax: stats.add_stats_config(stats_name, stats_config)
Fügt ein benutzerdefiniertes statistisches Konfigurationselement hinzu, das stats_name und die Statistik-Konfiguration enthält.
* stats_name ist der Name der Statistik und auch der Name der MongoDB-Tabelle.
Der Name wird verwendet, wenn die Methode stats.log(stats_name) aufgerufen wird.
* stats_config wird verwendet, um die Werte der Statistiken zu definieren.
stats_config ist eine Tabelle, die einige Felder enthält:
* selector eine MongoDB-Abfrageanweisung. wie: {date="$date",key="$host"}
* update eine MongoDB-Aktualisierungsanweisung. wie: {["$inc"]= {count=1, ["hour_cnt.$hour"]=1, ["status.$status"]=1,
["req_time.all"]="$request_time", ["req_time.$hour"]="$request_time"}}
* indexes eine Tabelle, die alle Felder des Index enthält.
Die Konfigurationen selector und update können Variablen verwenden.
Beachten Sie, dass "$inc" keine NGINX-Variable ist, sondern ein MongoDB-Operator.
init
syntax: stats.init(mongo_cfg, flush_interval, retry_interval)
Initialisierung der statistischen Bibliothek.
* mongo_cfg Die MongoDB-Konfiguration, enthält Felder:
* host Host von MongoDB
* port Port von MongoDB
* dbname Name der MongoDB-Datenbank.
* flush_interval Zeitintervall zum Flushen von Daten in die MongoDB, die Zeiteinheit ist Sekunden.
* retry_interval das Zeitintervall für den erneuten Versuch bei Flush-Fehlern, die Zeiteinheit ist Sekunden.
log
syntax: stats.log(stats_name)
Sammelt die angegebenen (von stats_name) statistischen Informationen in der Protokollphase.
* stats_name ist ein statistischer Name, der durch stats.add_stats_config hinzugefügt wurde.
Wenn stats_name nil ist, sammelt die Log-Methode alle konfigurierten Statistiken.
Einfache Abfrage und API
lua-resty-stats mit einer einfachen Abfrageseite und API-Schnittstelle, die in den folgenden Schritten verwendet werden kann: * Fügen Sie die Standortkonfiguration zu nginx.conf hinzu
location /stats {
set $template_root /path/to/lua-resty-stats/view;
content_by_lua_file '/path/to/lua-resty-stats/view/main.lua';
}
- Greifen Sie auf die Abfrageseite zu. z.B.
http://192.168.1.xxx/stats:

- Greifen Sie auf die API zu:
## nach Datum
curl http://127.0.0.1:8020/stats/api?table=stats_uri&date=2020-02-20&limit=100
## nach Datum, heute
curl http://127.0.0.1:8020/stats/api?table=stats_uri&date=today&limit=10
## nach Schlüssel (Der Datumsparameter wird ignoriert.)
curl http://127.0.0.1:8020/stats/api?table=stats_uri&key=/path/to/uri
- Die API-Antwort wird ungefähr so aussehen:
{
"stats": [
{
"hour_cnt": {
"19": 24
},
"count": 24,
"status": {
"200": 24
},
"total": 24,
"req_time": {
"19": 13.262,
"all": 13.262
},
"percent": 100,
"key": "/path/to/uri",
"date": "2020-09-24"
}
]
}
Wenn Sie einige andere Felder in Ihrem Update konfiguriert haben, wird dies anders sein
Einfaches Demo
Sie können es in nginx.conf mit der Include-Direktive einfügen. Zum Beispiel:
include /path/to/simple_stats.conf;
GitHub
Sie finden möglicherweise zusätzliche Konfigurationstipps und Dokumentationen für dieses Modul im GitHub-Repository für nginx-module-stats.