Skip to content

Commit

Permalink
Merge branch 'release-24.10' into 'rn/24.10.0'
Browse files Browse the repository at this point in the history
Release 24.10

See merge request canopsis/canopsis-pro!4246
  • Loading branch information
mmourcia committed Oct 17, 2024
2 parents 627b871 + 1e53a80 commit 69d3e0f
Show file tree
Hide file tree
Showing 19 changed files with 466 additions and 144 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,8 @@ import (
)

const (
DefaultCfgFile = "/opt/canopsis/etc/canopsis.toml"
DefaultCfgFile = "/opt/canopsis/etc/canopsis.toml"
DefaultOverrideCfgFile = "/opt/canopsis/etc/conf.d/canopsis-override.toml"

DefaultMongoMigrationsPath = "/opt/canopsis/share/database/migrations"
DefaultMongoFixturesPath = "/opt/canopsis/share/database/fixtures"
Expand Down Expand Up @@ -52,10 +53,10 @@ type flags struct {

func (f *flags) Parse() {
flag.StringVar(&f.confFile, "conf", DefaultCfgFile, "The configuration file used to initialize Canopsis")
flag.StringVar(&f.overrideConfFile, "override", "", "The configuration file used to override default Canopsis configurations, for example /opt/canopsis/etc/conf.d/canopsis-override.toml")
flag.StringVar(&f.overrideConfFile, "override", DefaultOverrideCfgFile, "The configuration file used to override default Canopsis configurations, for example /opt/canopsis/etc/conf.d/canopsis-override.toml")

flag.BoolVar(&f.version, "version", false, "Show the version information")
flag.StringVar(&f.edition, "edition", EditionCommunity, fmt.Sprintf("Canopsis edition: %s or %s", EditionCommunity, EditionPro))
flag.StringVar(&f.edition, "edition", "", fmt.Sprintf("Canopsis edition: %s or %s", EditionCommunity, EditionPro))

flag.BoolVar(&f.modeDebug, "d", false, "debug mode")

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -254,9 +254,11 @@ func updateVersionConfig(ctx context.Context, f flags, dbClient mongo.DbClient)
buildInfo := canopsis.GetBuildInfo()
conf := config.VersionConf{
Version: buildInfo.Version,
Edition: f.edition,
Stack: "go",
}
if f.edition != "" {
conf.Edition = f.edition
}

if prevConf.Version != conf.Version {
versionUpdated := datetime.NewCpsTime()
Expand Down
13 changes: 9 additions & 4 deletions community/go-engines-community/lib/canopsis/config/adapter.go
Original file line number Diff line number Diff line change
Expand Up @@ -156,10 +156,15 @@ func (a *versionAdapter) GetConfig(ctx context.Context) (VersionConf, error) {
}

func (a *versionAdapter) UpsertConfig(ctx context.Context, conf VersionConf) error {
_, err := a.collection.UpdateOne(ctx, bson.M{"_id": VersionKeyName},
bson.M{"$set": conf}, options.Update().SetUpsert(true))

return err
err := a.collection.FindOneAndUpdate(ctx, bson.M{"_id": VersionKeyName}, bson.M{"$set": conf},
options.FindOneAndUpdate().SetUpsert(true).SetReturnDocument(options.After)).Decode(&conf)
if err != nil {
return err
}
if conf.Edition == "" {
return errors.New("edition is undefined")
}
return nil
}

type MaintenanceAdapter interface {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -152,7 +152,7 @@ type UserInterfaceConf struct {
}

type VersionConf struct {
Edition string `bson:"edition"`
Edition string `bson:"edition,omitempty"`
Stack string `bson:"stack"`

Version string `bson:"version"`
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,10 +13,10 @@ Le fichier `canopsis.toml` regroupe la plupart des réglages fondamentaux des di

L'emplacement du fichier de configuration diffère entre les différents types d'environnement d'installation proposés par Canopsis.

| Type d'environnement | Emplacement du fichier |
|----------------------|-----------------------------------|
| Paquets RPM | `/opt/canopsis/etc/canopsis.toml` |
| Docker Compose ( Canopsis Pro ) | `/canopsis-pro.toml` dans le service `reconfigure` |
| Type d'environnement | Emplacement du fichier |
|--------------------------------------------|----------------------------------------------------------|
| Paquets RPM | `/opt/canopsis/etc/canopsis.toml` |
| Docker Compose ( Canopsis Pro ) | `/canopsis-pro.toml` dans le service `reconfigure` |
| Docker Compose ( Canopsis Community ) | `/canopsis-community.toml` dans le service `reconfigure` |

!!! tip "Astuce"
Expand All @@ -31,7 +31,7 @@ Il est recommandé de ne pas modifier cette valeur.
## Modification et maintenance du fichier

Le fichier `canopsis-override.toml` permet de surcharger la configuration par défaut.
Ce fichier ne contient donc que les configurations qui diffèrent d'avec la configuration par défaut
Ce fichier ne contiens donc que les configuration qui diffèrent avec la configuration par défaut.

=== "En environnement paquets RPM"

Expand All @@ -41,17 +41,20 @@ Ce fichier ne contient donc que les configurations qui diffèrent d'avec la conf

=== "En environnement Docker Compose"

Le fichier est situé dans le conteneur `reconfigure` dans le chemin suivant : `/opt/canopsis/etc/conf.d/canopsis-override.toml`.
Le fichier est situé dans le conteneur `reconfigure` au chemin suivant : `/opt/canopsis/etc/conf.d/canopsis-override.toml`.
Montez y votre fichier personnalisé a l'aide d'un volume.

Vous pouvez par exemple utiliser cette configuration à la fin du fichier `docker-compose.override.yml` :
Par exemple en mettant ce morceau de configuration à la fin du fichier `docker-compose.override.yml`
```yaml
reconfigure:
command: /canopsis-reconfigure -migrate-postgres=true -migrate-mongo=true -edition ${CPS_EDITION} -conf /canopsis-${CPS_EDITION}.toml -override /opt/canopsis/etc/conf.d/canopsis-override.toml
volumes:
- ./files-pro/reconfigure/reconfigure.override.toml:/opt/canopsis/etc/conf.d/canopsis-override.toml
```

Lors de la mise à jour de Canopsis, vos modifications seront préservées.


## Étape obligatoire pour la prise en compte des modifications

Après toute modification d'une valeur présente dans `canopsis.toml`, `canopsis-reconfigure` doit être relancé et les services et moteurs de Canopsis doivent être redémarrés.
Expand Down Expand Up @@ -84,6 +87,12 @@ Après toute modification d'une valeur présente dans `canopsis.toml`, `canopsis
| PrefetchSize | 0 |
| ReconnectTimeoutMilliseconds | 8 | Délai de reconnexion auprès des services tiers (redis, mongodb, rabbitmq, ...) |
| ReconnectRetries | 3 | Nombre de tentative de reconnexion aux services tiers |
| MaxExternalResponseSize | 10485760 # 10Mb | Taille maximale d'une réponse d'API tierce |
| BuildEntityInfosDictionary | true, false | Activation de la génération des infos d'entités dans un dictionnaire servant à l'auto complétation coté WebUI |
| BuildDynamicInfosDictionary | true, false | Activation de la génération des infos d'alarmes dans un dictionnaire servant à l'auto complétation coté WebUI |
| InfosDictionaryLimit | 1100 | Nombre maximum de paires clé/valeur à stocker dans les dictionnaires mentionnés ci-dessus |
| EventsCountTriggerDefaultThreshold | 10 | Valeur par défaut du nombre d'événements utilisé par le trigger |


### Section [Canopsis.file]

Expand Down Expand Up @@ -113,6 +122,7 @@ Après toute modification d'une valeur présente dans `canopsis.toml`, `canopsis
| AllowDoubleAck | true,false | Permet d'acquitter plusieurs fois une alarme |
| ActivateAlarmAfterAutoRemediation | true,false | Permet de décaler l'activation d'une alarme après l'exécution de la remédiation automatique |
| EnableArraySortingInEntityInfos | true,false | Active ou désactive le tri dans les listes utilisées dans les attributs d'événements. Par exemple, si un événement contient `info1=["item2", "item1"]` et que l'option est activée alors info1 vaudra en sortie `info1=["item1", "item2"]` |
| CropStepsNumber | 0 | Nombre de steps `stateinc` ou `statedec` continus avant de les "compresser" en un step "statecounter".<br>Cerla permet de diminuer drastiquement le nombre de steps d'un alarme |

### Section [Canopsis.timezone]

Expand Down Expand Up @@ -169,8 +179,7 @@ Toute modification dans cette section nécessite un redémarrage de Canopsis
| Enabled | false|true | Activation / Désactivation des métriques |
| FlushInterval | "10s" | Délai d'écriture des métriques dans la base de données |
| SliInterval | "1h" | Les longs intervalles de SLI sont découpés en plus petits intervalles définis par cet attribut. <br />Une valeur faible augmente la précision des métriques mais nécessite plus d'espace disque. <br />Une valeur élevée diminue la précision des métriques mais nécessaite moins d'espace disque. <br /> "1h" est la valeur recommandée dans la mesure où l'intervalle le plus petit gérée par l'interface graphique correspond à 1 heure (Ne peut pas être > "1h" |
| UserSessionGapInterval | "1h" | Intervalle minimum d'un session utilisateur |

| UserSessionGapInterval | "1h" | Précision des temps de session utilisateur. Prenons un utilisateur, actif sur la l'interface graphique de 9:00 à 18:00, avec UserSessionGapInterval=1h. <br />La table des métriques user ressemblera à :<br />- 9:00 3600 <br />- 10:00 3600<br />- 11:00 3600<br />- ...<br />- 17:00 3600<br /> |

### Section [Canopsis.tech_metrics]

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,26 @@ dnf update

### Configuration système

Vous pouvez vérifier les limites de ressources systèmes avec la commande suivante :

```sh
ulimit -a
```

Pour appliquer la [configuration recommandée par le projet MongoDB](https://www.mongodb.com/docs/v7.0/reference/ulimit/), créez le fichier `/etc/security/limits.d/mongo.conf` :

```sh
cat << EOF > /etc/security/limits.d/mongo.conf
#<domain> <type> <item> <value>
mongo soft fsize unlimited
mongo soft cpu unlimited
mongo soft as unlimited
mongo soft memlock unlimited
mongo hard nofile 64000
mongo hald nproc 64000
EOF
```

Désactivez la gestion des `Transparent Huge Pages (THP)` selon la [préconisation MongoDB](https://www.mongodb.com/docs/manual/tutorial/transparent-huge-pages/)

```sh
Expand Down Expand Up @@ -99,13 +119,6 @@ EOF
Ajout du dépôt pour RabbitMQ :

```sh
## primary RabbitMQ signing key
rpm --import 'https://github.com/rabbitmq/signing-keys/releases/download/3.0/rabbitmq-release-signing-key.asc'
## modern Erlang repository
rpm --import 'https://github.com/rabbitmq/signing-keys/releases/download/3.0/cloudsmith.rabbitmq-erlang.E495BB49CC4BBE5B.key'
## RabbitMQ server repository
rpm --import 'https://github.com/rabbitmq/signing-keys/releases/download/3.0/cloudsmith.rabbitmq-server.9F4587F226208342.key'

cat << EOF > /etc/yum.repos.d/rabbitmq.repo
##
## Zero dependency Erlang RPM
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,13 +18,13 @@ Pour rappel, SELinux n'est pas supporté.

## Prérequis composants Canopsis

Composant | Version (Pour Canopsis 24.04) |
Composant | Version (Pour Canopsis 24.04) |
------------|------------------|
MongoDB | 7.0 |
Nginx | 1.20 (uniquement pour l'installation via paquets RPM) |
PostgreSQL | >= 13 |
TimescaleDB | 2.14.2 |
RabbitMQ | 3.12.13 |
RabbitMQ | >= 3.12 |
Redis | ≥ 5.0, < 7.0 |

## Prérequis composants externes
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -509,63 +509,7 @@ Donnera la chaine finale : `'Linux Debian Ubuntu Fedora'`
{{tags}}
```

Ce helper permet d'afficher les `tags` d'une alarme sous forme de badge.

#### Exemple d'utilisation du helper `tags`

Afficher tous les tags d'une alarme :

```handlebars
{{ tags }}
```

Afficher les tags d'une alarme à partir de leur nom :

```handlebars
{{ tags 'Tag1' 'Tag2' }}
```

Afficher les tags d'une alarme à partir d'une expression régulière :

```handlebars
{{ tags regex='Tag\d+' }}
```

Afficher les tags d'une alarme à partir d'une expression régulière et de flags supplémentaires :

```handlebars
{{ tags regex='Tag\d+' flags='i' }}
```

Afficher les tags d'une alarme en combinant les options :

```handlebars
{{ tags 'Tag1' 'Tag2' regex='Tag\d+' flags='i' }}
```

### Helper `map`

```handlebars
{{map}}
```

Ce helper permet d'afficher un champ "map" sous forme de badges.

Le champ "map" doit être de la forme suivante : `map[item1:valeur1 item2:valeur2 ... ]`

#### Exemple d'utilisation du helper `map`

Afficher tous les items d'un champ map :

```handlebars
{{ map alarm.entity.infos.prom_labels_all.value }}
```

Afficher tous les items d'un champ map sous forme de badges bleus, écrits en blanc :

```handlebars
{{ map alarm.entity.infos.prom_labels_all.value color='blue' textColor='white' }}
```
Ce helper permet d'afficher les `tags` d'une alarme sous forme de badge. Il n'attend pas de paramètre.

### Helper `links`

Expand Down Expand Up @@ -619,3 +563,4 @@ Renvoyer au format json une alarme complète :
```handlebars
{{json alarm.v }}
```

Original file line number Diff line number Diff line change
Expand Up @@ -292,3 +292,19 @@ exécutés.

Cette vue simple, permet d'afficher les statistiques de traitement de vos consignes.
![Statistiques vue graphique](./img/consignes_statistiques_liste.png)


Il existe une possibilité de supprimer l'ensemble des statistiques de remédiation.
Le moteur `engine-remediation` peut être exécuté avec l'option `-cleanUp`.

```
./engine-remediation -cleanUp
```

Les logs associés avertissent de la fin de l'opération :

```
canopsis-pro-remediation-1 | 2024-06-12T12:40:10Z INF git.canopsis.net/canopsis/canopsis-pro/pro/go-engines-pro/cmd/engine-remediation/dependencies.go:409 > instruction execution data cleaned up
```

Vous pouvez alors redémarrer le moteur sans l'option pour un fonctionnement normal.
Original file line number Diff line number Diff line change
Expand Up @@ -212,11 +212,9 @@ Voici la description des actions disponibles pour les enrichissements.
##### Définir un tag par la correspondance regex.
![FR_copy_to_entity_info.png](./img/FR_set_tags.png)

##### Définir un tag à partir d'un champs d'information supplémentaire.
##### Définir un tag à partir d'un champ d'information supplémentaire.
![FR_copy_to_entity_info.png](./img/FR_set_tags_from_template.png)

##### Définir une chaîne d'informations sur une entité à partir d'un dictionaire
![FR_set_entity_info_from_dictionary.png](./img/FR_set_entity_info_from_dictionary.png)

#### Variables utilisables dans les templates

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -175,7 +175,6 @@ On peut aussi enchaîner différentes fonctions à la suite si on veut transform
| **substr** | Format: `{{ substr .Var M N }}` <br> Renvoie N caractères depuis la position M. | Si `.Alarm.Value.Output = "test-string"` <br><ul><li>`{{ substr .Alarm.Value.Output 2 5 }}` -> `st-st`</li><li>`{{ substr .Alarm.Value.Output 2 100 }}` -> `"st-string"`</li><li>`{{ substrRight .Alarm.Value.Output 2 -1 }}` -> `""`</li></ul> |
| **strlen** | Format: `{{ strlen .Var }}` <br> Renvoie la longueur de la chaine. | Si `.Alarm.Value.Output = "test-string"` <br><ul><li>`{{ strlen .Alarm.Value.Output }}` -> `11`</li></ul> |
| **strpos** | Format: `{{ strpos .Str .Substr }}` <br> Renvoie l'index de la première occurrence de Substr dans Str. Renvoie -1 sinon. | Si `.Alarm.Value.Output = "test-string"` <br><ul><li>`{{ strpos .Alarm.Value.Output "-" }}` -> `4`</li><li>`{{ strpos .Alarm.Value.Output "+" }}` -> `-1`</li></ul> |
| **strjoin** | Format: `{{ strjoin .StrArray .Sep }}` <br> Renvoie une chaine concaténée des éléments du tableau .StrArray avec comme séparateur .Sep. | Si `.Event.ExtraInfos.strArr = ["a", "b", "c"]` <br><ul><li>`{{ strjoin .Event.ExtraInfos.strArr "," }}` -> `"a,b,c"`</li></ul> |
| **add** | Format: `{{ add .X .Y }}` <br> Renvoie la somme de X et Y. | <ul><li>`{{ add 2 2 }}` -> `4`</li></ul> |
| **sub** | Format: `{{ sub .X .Y }}` <br> Renvoie la différence entre X et Y. | <ul><li>`{{ sub 4 2 }}` -> `2`</li></ul> |
| **mult** | Format: `{{ mult .X .Y }}` <br> Renvoie le produit de X et Y. | <ul><li>`{{ mult 2 2 }}` -> `4`</li></ul> |
Expand Down
Loading

0 comments on commit 69d3e0f

Please sign in to comment.