Compare commits
3 Commits
v2024.2.5-
...
v2024.3.25
Author | SHA1 | Date | |
---|---|---|---|
734ed64e8e | |||
c8fc143efa | |||
f91c14e5d4 |
@ -6,9 +6,11 @@
|
||||
## Exemples
|
||||
|
||||
- [(FR) - Exemple de déploiement multi-noeuds](../misc/docker-compose/README.md)
|
||||
|
||||
## Référence
|
||||
|
||||
- [(FR) - Layers](./fr/references/layers/README.md)
|
||||
- [(FR) - Métriques](./fr/references/metrics.md)
|
||||
- [(FR) - Fichier de configuration](../misc/packaging/common/config.yml)
|
||||
- [(FR) - API d'administration](./fr/references/admin_api.md)
|
||||
|
||||
|
@ -32,6 +32,10 @@ Ce layer permet de bloquer l'accès à un site (ou une section de celui ci) cibl
|
||||
|
||||
Voir le [fichier de configuration de référence](../../../../misc/packaging/common/config.yml), section `layers.circuitbreaker` pour voir les options permettant de personnaliser le chemin du répertoire contenant les templates.
|
||||
|
||||
### Schéma
|
||||
## Schéma
|
||||
|
||||
Voir le [schéma JSON](../../../../internal/proxy/director/layer/circuitbreaker/layer-options.json).
|
||||
Voir le [schéma JSON](../../../../internal/proxy/director/layer/circuitbreaker/layer-options.json).
|
||||
|
||||
## Métriques
|
||||
|
||||
_Aucune [métrique Prometheus](../metrics.md) n'est exportée par ce layer._
|
@ -30,6 +30,34 @@ Ce layer permet d'ajouter un mécanisme de file d'attente dynamique au proxy ass
|
||||
|
||||
Par exemple, si vous souhaitez limiter votre file à l'ensemble d'une section "`/blog`" d'un site, vous pouvez déclarer la valeur `["*/blog*"]`. Les autres URLs du site ne seront pas affectées par cette file d'attente.
|
||||
|
||||
### Schéma
|
||||
## Schéma
|
||||
|
||||
Voir le [schéma JSON](../../../../internal/proxy/director/layer/queue/schema/layer-options.json).
|
||||
Voir le [schéma JSON](../../../../internal/proxy/director/layer/queue/schema/layer-options.json).
|
||||
|
||||
## Métriques
|
||||
|
||||
Les [métriques Prometheus](../metrics.md) suivantes sont exposées par ce layer.
|
||||
|
||||
### `bouncer_layer_queue_capacity{layer=<layerName>,proxy=<proxyName>}`
|
||||
|
||||
- **Type:** `gauge`
|
||||
- **Description**: Capacité maximale de la queue
|
||||
- **Exemple**
|
||||
|
||||
```
|
||||
# HELP bouncer_layer_queue_capacity Bouncer's queue layer capacity
|
||||
# TYPE bouncer_layer_queue_capacity gauge
|
||||
bouncer_layer_queue_capacity{layer="queue",proxy="cadoles"} 2
|
||||
```
|
||||
|
||||
### `bouncer_layer_queue_sessions{layer=<layerName>,proxy=<proxyName>}`
|
||||
|
||||
- **Type:** `gauge`
|
||||
- **Description**: Nombre courant de sessions ouvertes
|
||||
- **Exemple**
|
||||
|
||||
```
|
||||
# HELP bouncer_layer_queue_sessions Bouncer's queue layer current sessions
|
||||
# TYPE bouncer_layer_queue_sessions gauge
|
||||
bouncer_layer_queue_sessions{layer="queue",proxy="cadoles"} 3
|
||||
```
|
29
doc/fr/references/metrics.md
Normal file
29
doc/fr/references/metrics.md
Normal file
@ -0,0 +1,29 @@
|
||||
# Métriques
|
||||
|
||||
Bouncer expose un certain nombre de métriques Prometheus sur le serveur proxy ainsi que sur le serveur d'administration. Ces métriques sont par défaut accessibles sur `/.bouncer/metrics`.
|
||||
|
||||
Il est possible de configurer le point d'entrée de ces métriques ainsi que d'ajouter une authentification de type `Basic Auth` [via la configuration](../../../misc/packaging/common/config.yml) (voir les clés `admin.metrics` et `proxy.metrics`).
|
||||
|
||||
Outre les métriques par défaut fournies par la librairie [Prometheus](https://prometheus.io/docs/guides/go-application/#instrumenting-a-go-application-for-prometheus), les serveurs Bouncer exposent également des métriques propres.
|
||||
|
||||
Chaque layer associé à un proxy peut également ses propres métriques spécifiques. [Voir la page de documentation](./layers/README.md) de chaque layer pour plus d'informations.
|
||||
|
||||
## Métriques spécifiques
|
||||
|
||||
### Serveur proxy
|
||||
|
||||
#### `bouncer_proxy_director_proxy_requests_total{proxy=<proxyName>}`
|
||||
|
||||
- **Type:** `counter`
|
||||
- **Description**: Nombre total de requêtes ayant transité par le proxy
|
||||
- **Exemple**
|
||||
|
||||
```
|
||||
# HELP bouncer_proxy_director_proxy_requests_total Bouncer proxy total requests
|
||||
# TYPE bouncer_proxy_director_proxy_requests_total counter
|
||||
bouncer_proxy_director_proxy_requests_total{proxy="cadoles"} 64
|
||||
```
|
||||
|
||||
### Serveur d'administration
|
||||
|
||||
_Pas de métrique supplémentaire._
|
@ -5,15 +5,28 @@ import (
|
||||
"strings"
|
||||
|
||||
"forge.cadoles.com/cadoles/bouncer/internal/admin"
|
||||
"forge.cadoles.com/cadoles/bouncer/internal/auth/jwt"
|
||||
"forge.cadoles.com/cadoles/bouncer/internal/command/common"
|
||||
"forge.cadoles.com/cadoles/bouncer/internal/jwk"
|
||||
"forge.cadoles.com/cadoles/bouncer/internal/setup"
|
||||
"github.com/pkg/errors"
|
||||
"github.com/urfave/cli/v2"
|
||||
"gitlab.com/wpetit/goweb/logger"
|
||||
)
|
||||
|
||||
const (
|
||||
flagPrintDefaultToken = "print-default-token"
|
||||
)
|
||||
|
||||
func RunCommand() *cli.Command {
|
||||
flags := common.Flags()
|
||||
flags := append(
|
||||
common.Flags(),
|
||||
&cli.BoolFlag{
|
||||
Name: flagPrintDefaultToken,
|
||||
Usage: "Generate and print a default writer token in console at startup",
|
||||
Value: true,
|
||||
},
|
||||
)
|
||||
|
||||
return &cli.Command{
|
||||
Name: "run",
|
||||
@ -36,6 +49,22 @@ func RunCommand() *cli.Command {
|
||||
|
||||
defer flushSentry()
|
||||
|
||||
if printDefaultToken := ctx.Bool(flagPrintDefaultToken); printDefaultToken {
|
||||
key, err := jwk.Generate(jwk.DefaultKeySize)
|
||||
if err != nil {
|
||||
return errors.Wrap(err, "could not generate default key")
|
||||
}
|
||||
|
||||
token, err := jwt.GenerateToken(ctx.Context, key, string(conf.Admin.Auth.Issuer), "default-admin", jwt.Role(jwt.RoleWriter))
|
||||
if err != nil {
|
||||
return errors.WithStack(err)
|
||||
}
|
||||
|
||||
logger.SetLevel(logger.LevelInfo)
|
||||
logger.Info(ctx.Context, "default writer token", logger.F("token", token))
|
||||
logger.SetLevel(logger.Level(conf.Logger.Level))
|
||||
}
|
||||
|
||||
srv := admin.NewServer(
|
||||
admin.WithServerConfig(conf.Admin),
|
||||
admin.WithRedisConfig(conf.Redis),
|
||||
|
9
misc/k6/README.md
Normal file
9
misc/k6/README.md
Normal file
@ -0,0 +1,9 @@
|
||||
# K6 - Load Test
|
||||
|
||||
Very basic load testing script for [k6](https://k6.io/).
|
||||
|
||||
## How to run
|
||||
|
||||
```shell
|
||||
k6 run cadoles-loadtest.js
|
||||
```
|
29
misc/k6/cadoles-loadtest.js
Normal file
29
misc/k6/cadoles-loadtest.js
Normal file
@ -0,0 +1,29 @@
|
||||
import { check } from 'k6';
|
||||
import { browser } from 'k6/experimental/browser';
|
||||
|
||||
export const options = {
|
||||
scenarios: {
|
||||
browser: {
|
||||
vus: 10,
|
||||
iterations: 100,
|
||||
executor: 'shared-iterations',
|
||||
options: {
|
||||
browser: {
|
||||
type: 'chromium',
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
};
|
||||
|
||||
export default async function () {
|
||||
const page = browser.newPage();
|
||||
try {
|
||||
await page.goto('https://www.cadoles.com');
|
||||
check(page, {
|
||||
'Homepage loaded': p => p.locator('h1').textContent().trim() == 'La liberté est un choix',
|
||||
});
|
||||
} finally {
|
||||
page.close();
|
||||
}
|
||||
}
|
@ -47,6 +47,10 @@ admin:
|
||||
# Authentification "basic auth" sur la page
|
||||
# de publication
|
||||
# Mettre à null pour désactiver l'authentification
|
||||
# Les couples d'identifiants doivent être spécifiés sous la forme:
|
||||
# basicAuth:
|
||||
# credentials:
|
||||
# <username>: <password>
|
||||
basicAuth: null
|
||||
|
||||
# Configuration de l'intégration Sentry
|
||||
@ -90,8 +94,10 @@ proxy:
|
||||
# de publication
|
||||
# Mettre à null pour désactiver l'authentification
|
||||
basicAuth:
|
||||
# Les couples d'identifiants doivent être spécifiés
|
||||
# sous la forme "<username>: <password>"
|
||||
credentials:
|
||||
prom: etheus
|
||||
prometheus: changeme
|
||||
|
||||
# Configuration du transport HTTP(S)
|
||||
# Voir https://pkg.go.dev/net/http#Transport
|
||||
|
Reference in New Issue
Block a user