sysguard: Módulo sysguard do NGINX
Instalação
Você pode instalar este módulo em qualquer distribuição baseada em RHEL, incluindo, mas não se limitando a:
- RedHat Enterprise Linux 7, 8, 9 e 10
- CentOS 7, 8, 9
- AlmaLinux 8, 9
- Rocky Linux 8, 9
- Amazon Linux 2 e Amazon Linux 2023
dnf -y install https://extras.getpagespeed.com/release-latest.rpm
dnf -y install nginx-module-sysguard
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 nginx-module-sysguard
Ative o módulo adicionando o seguinte no topo de /etc/nginx/nginx.conf:
load_module modules/ngx_http_sysguard_module.so;
Este documento descreve o nginx-module-sysguard v0.0.1 lançado em 29 de fevereiro de 2020.
Módulo sysguard do NGINX
Sinopse
http {
...
server {
...
sysguard on;
sysguard_mode or;
sysguard_load load=10.5 action=/loadlimit;
sysguard_mem swapratio=20% action=/swaplimit;
sysguard_mem free=100M action=/freelimit;
sysguard_rt rt=0.01 period=5s method=AMM:10 action=/rtlimit;
location /loadlimit {
return 503;
}
location /swaplimit {
return 503;
}
location /freelimit {
return 503;
}
location /rtlimit {
return 503;
}
}
...
server {
...
location /api {
sysguard on;
sysguard_mode or;
sysguard_load load=20 action=/limit;
sysguard_mem swapratio=10% action=/limit;
sysguard_rt rt=2.01 period=5s method=WMA:10 action=/limit;
...
}
location /images {
sysguard on;
sysguard_mode and;
sysguard_load load=20 action=/limit;
sysguard_mem swapratio=10% action=/limit;
sysguard_rt rt=2.01 period=5s method=WMA:10 action=/limit;
...
}
location /limit {
return 503;
}
}
}
Descrição
Este módulo pode ser usado para proteger seu servidor caso a carga do sistema, o uso de memória fique muito alto ou as requisições sejam respondidas muito lentamente. Esta é uma versão portável do sysguard no tengine para o NGINX puro, de modo a suportar as mesmas funcionalidades.
Atenção: Note que este módulo requer a chamada de sistema sysinfo(2) ou a função getloadavg(3) na glibc. Ele também requer o sistema de arquivos /proc para obter informações sobre a memória.
Variáveis Embutidas
As seguintes variáveis embutidas são fornecidas:
- $sysguard_load
- A carga do sistema. Se o valor de
$sysguard_loadfor 100, então a carga é 0.1(100/1000). (/msec) - $sysguard_swapstat
- A razão do uso de swap. (/per)
- $sysguard_free
- O espaço livre real da memória. (/byte)
- $sysguard_rt
- A média dos tempos de processamento de requisições. Se o valor de
$sysguard_rtfor 100, então o tempo de resposta é 0.1sec(100/1000). (/msec) - $sysguard_meminfo_totalram
- A memória total do meminfo. (/byte)
- $sysguard_meminfo_freeram
- A memória livre do meminfo. (/byte)
- $sysguard_meminfo_bufferram
- A memória buffer do meminfo. (/byte)
- $sysguard_meminfo_cachedram
- A memória cache do meminfo. (/byte)
- $sysguard_meminfo_totalswap
- O total de swap do meminfo. (/byte)
- $sysguard_meminfo_freeswap
- O swap livre do meminfo. (/byte)
Diretivas
sysguard
| - | - |
|---|---|
| Sintaxe | sysguard \<on|off> |
| Padrão | off |
| Contexto | http, server, location |
Descrição: Habilita ou desabilita o funcionamento do módulo.
sysguard_load
| - | - |
|---|---|
| Sintaxe | sysguard_load load=number [action=/url] |
| Padrão | - |
| Contexto | http, server, location |
Descrição: Especifica o limite de carga. Quando a carga do sistema excede esse limite, todas as requisições subsequentes serão redirecionadas para a URL especificada pelo parâmetro 'action'. Retornará 503 se não houver uma URL 'action' definida. Esta diretiva também suporta o uso de ncpuratio em vez do limite fixo, 'ncpu' significa o número de núcleos de CPU, você pode usar esta diretiva assim: load=ncpu1.5
sysguard_mem
| - | - |
|---|---|
| Sintaxe | sysguard_mem swapratio=ratio% free=size [action=/url] |
| Padrão | - |
| Contexto | http, server, location |
Descrição: Especifica o limite de uso de memória swap ou de memória livre. Quando a razão de uso de memória swap excede esse limite ou a memória livre é menor que o tamanho, todas as requisições subsequentes serão redirecionadas para a URL especificada pelo parâmetro 'action'. Retornará 503 se não houver uma URL 'action'. O Sysguard usa esta estratégia para calcular a memória livre: "memfree = free + buffered + cached"
sysguard_rt
| - | - |
|---|---|
| Sintaxe | sysguard_rt rt=second period=time [method=\<AMM|WMA>:number] [action=/url] |
| Padrão | - |
| Contexto | http, server, location |
Descrição: Especifica o limite de tempo de resposta. O parâmetro rt é usado para definir um limite do tempo médio de resposta, em segundos. O parâmetro period é usado para especificar o período do ciclo de estatísticas. Se o tempo médio de resposta do sistema exceder o limite especificado pelo usuário, a requisição recebida será redirecionada para uma URL especificada definida pelo parâmetro 'action'. Se não houver 'action' apresentada, a requisição será respondida diretamente com erro 503. O method é uma fórmula que calcula a média dos tempos de processamento de resposta. O number no método é o número de amostras para calcular a média. O método padrão é definido como method=AMM:period.
- AMM
- O AMM é a média aritmética.
- WMA
- O WMA é a média móvel ponderada.
sysguard_mode
| - | - |
|---|---|
| Sintaxe | sysguard_mode \<and|or> |
| Padrão | or |
| Contexto | http, server, location |
Descrição: Se houver mais de um tipo de monitor, esta diretiva é usada para especificar as relações entre todos os monitores, que são: 'and' para todos os correspondentes e 'or' para qualquer correspondente.
sysguard_interval
| - | - |
|---|---|
| Sintaxe | sysguard_interval time |
| Padrão | 1s |
| Contexto | http, server, location |
Descrição: Especifica o intervalo de tempo para atualizar as informações do seu sistema. O valor padrão é um segundo, o que significa que o sysguard atualiza o status do servidor uma vez por segundo.
sysguard_log_level
| - | - |
|---|---|
| Sintaxe | sysguard_log_level \<info|notice|warn|error> |
| Padrão | error |
| Contexto | http, server, location |
Descrição: Especifica o nível de log do sysguard.
Veja Também
GitHub
Você pode encontrar dicas adicionais de configuração e documentação para este módulo no repositório do GitHub para nginx-module-sysguard.