Installation de paquets Canopsis sur Red Hat Enterprise Linux 8¶
Information
Si vous souhaitez réaliser une mise à jour, la procédure est décrite dans le guide de mise à jour.
Cette procédure décrit l'installation de Canopsis en mono-instance à l'aide de paquets RHEL 8. Les binaires sont compilés pour l'architecture x86-64.
Warning
L'installation de tous les services sur un seul nœud, décrite ici, permet
de monter aisément un environnement de test.
Cependant, ce type d'installation ne saurait être conseillé pour de la
production.
Une plate-forme Canopsis de production repose généralement sur plusieurs nœuds, avec les mécanismes de haute disponibilité appropriés. Ce type de déploiement plus avancé est supporté uniquement dans le cadre d'une souscription à l'édition Pro de Canopsis.
Capensis peut vous accompagner dans la mise en place de l'architecture Canopsis distribuée et des solutions de haute disponibilité.
Toutes les commandes dans cette procédure doivent être invoquées avec
l'utilisateur root
.
Prérequis¶
Assurez-vous d'avoir suivi les prérequis réseau et de sécurité, notamment concernant la désactivation de SELinux.
Pour vérifier l'état de SELinux :
sestatus
L'installation nécessite l'ajout de dépôts RPM tiers, ainsi qu'un accès HTTP et HTTPS pour le téléchargement de diverses dépendances. Plus de détails dans la matrice des flux réseau.
Information
Notez que les versions de MongoDB, RabbitMQ, Redis et TimescaleDB dont l'installation est décrite ici sont les seules validées pour fonctionner avec Canopsis.
Plus de détails sur les prérequis des versions.
Dépendances¶
Mise à jour système¶
Assurez-vous que le système est à jour (l'installation sur RHEL 8 suppose que le système est relié à des dépôts à jour de la distribution, et en particulier pas figé dans une ancienne version mineure 8.x.) :
dnf update
Configuration système¶
Vous pouvez vérifier les limites de ressources systèmes avec la commande suivante :
ulimit -a
Pour appliquer la configuration recommandée par le projet MongoDB, créez le fichier /etc/security/limits.d/mongo.conf
:
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
cat << EOF > /etc/systemd/system/disable-transparent-huge-pages.service
[Unit]
Description=Disable Transparent Huge Pages (THP)
DefaultDependencies=no
After=sysinit.target local-fs.target
Before=mongod.service
[Service]
Type=oneshot
ExecStart=/bin/sh -c 'echo never | tee /sys/kernel/mm/transparent_hugepage/enabled > /dev/null'
[Install]
WantedBy=basic.target
EOF
systemctl daemon-reload
systemctl enable --now disable-transparent-huge-pages
Ajout des dépôts tiers¶
Ajout du dépôt pour PostgreSQL :
dnf install https://download.postgresql.org/pub/repos/yum/reporpms/EL-8-x86_64/pgdg-redhat-repo-latest.noarch.rpm
Ajout du dépôt pour MongoDB :
cat << EOF > /etc/yum.repos.d/mongodb-org-5.0.repo
[mongodb-org-5.0]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/redhat/\$releasever/mongodb-org/5.0/x86_64/
gpgcheck=1
enabled=1
gpgkey=https://www.mongodb.org/static/pgp/server-5.0.asc
EOF
Ajout du dépôt pour RabbitMQ :
cat << EOF > /etc/yum.repos.d/rabbitmq.repo
##
## Zero dependency Erlang
##
[rabbitmq_erlang]
name=rabbitmq_erlang
baseurl=https://packagecloud.io/rabbitmq/erlang/el/8/\$basearch
repo_gpgcheck=1
gpgcheck=0
enabled=1
# PackageCloud’s repository key and RabbitMQ package signing key
gpgkey=https://packagecloud.io/rabbitmq/erlang/gpgkey
https://github.com/rabbitmq/signing-keys/releases/download/2.0/rabbitmq-release-signing-key.asc
sslverify=1
sslcacert=/etc/pki/tls/certs/ca-bundle.crt
metadata_expire=300
##
## RabbitMQ server
##
[rabbitmq_server]
name=rabbitmq_server
baseurl=https://packagecloud.io/rabbitmq/rabbitmq-server/el/8/\$basearch
repo_gpgcheck=1
gpgcheck=0
enabled=1
# PackageCloud’s repository key and RabbitMQ package signing key
gpgkey=https://packagecloud.io/rabbitmq/rabbitmq-server/gpgkey
https://github.com/rabbitmq/signing-keys/releases/download/2.0/rabbitmq-release-signing-key.asc
sslverify=1
sslcacert=/etc/pki/tls/certs/ca-bundle.crt
metadata_expire=300
EOF
Ajout du dépôt pour TimescaleDB :
cat << EOF > /etc/yum.repos.d/timescale_timescaledb.repo
[timescale_timescaledb]
name=timescale_timescaledb
baseurl=https://packagecloud.io/timescale/timescaledb/el/8/\$basearch
repo_gpgcheck=1
# TimescaleDB doesn’t sign all its packages
gpgcheck=0
enabled=1
gpgkey=https://packagecloud.io/timescale/timescaledb/gpgkey
sslverify=1
sslcacert=/etc/pki/tls/certs/ca-bundle.crt
metadata_expire=300
EOF
Configuration des dépôts¶
Exécuter la commande suivante et vérifier dans la sortie que les dépôts ajoutés sont bien contactés (accepter les cléfs des différents dépôts lorsque demandé) :
dnf makecache
Désactiver le module PostgreSQL (requis pour l'installation de TimescaleDB sur RHEL 8) :
dnf module disable postgresql
Activer le module Nginx 1.20.* :
dnf module disable php
dnf module enable nginx:1.20
Activer le module Redis 6.0.* :
dnf module enable redis:6
Installation¶
dnf install logrotate socat mongodb-org nginx redis timescaledb-2-postgresql-13-2.9.3 timescaledb-2-loader-postgresql-13-2.9.3
dnf install --repo rabbitmq_erlang --repo rabbitmq_server rabbitmq-server
Pour éviter un upgrade automatique des dépendances de Canopsis, vous pouvez épingler leurs paquets en ajoutant la directive suivante dans le fichier /etc/yum.conf
:
exclude=mongodb-org,mongodb-org-server,mongodb-org-shell,mongodb-org-mongos,mongodb-org-tools,nginx,nginx-filesystem,erlang,rabbitmq-server,redis,timescaledb-2-postgresql-13,timescaledb-2-loader-postgresql-13
Ouverture des ports¶
Pratiquer les ouvertures de ports nécessaires à l'accès au service.
Les commandes données couvrent le cas standard où le pare-feu système firewalld
est utilisé, et servent surtout à rappeler les ports ou services à ouvrir. (cf. matrice des flux réseau)
firewall-cmd --add-port=5672/tcp --add-port=15672/tcp --permanent
firewall-cmd --add-port=8080/tcp --permanent
firewall-cmd --add-port=27017/tcp --permanent
firewall-cmd --add-service=postgresql --permanent
firewall-cmd --add-service=redis --permanent
firewall-cmd --reload
Configuration de MongoDB¶
Une clef d'authentification doit être créée pour sécuriser le futur replicaset
MongoDB. Pour cela, exécuter les commandes suivantes qui vont générer le
fichier /etc/mongodb-keyfile
et lui attribuer les bonnes permissions et
appartenances :
openssl rand -base64 756 > /etc/mongodb-keyfile
chmod 400 /etc/mongodb-keyfile
chown mongod:root /etc/mongodb-keyfile
Ensuite, éditer le fichier /etc/mongod.conf
. Il faut mettre les contenus
suivants dans les sections security
et replication
pour :
- protéger l'instance (authentification obligatoire)
- activer le mode replicaset
security:
authorization: enabled
keyFile: /etc/mongodb-keyfile
replication:
oplogSizeMB: 1024
replSetName: rs0
Information
Le nom de replicaset rs0
est un exemple. Un autre nom peut être choisi,
du moment que ce nom est répercuté plus tard dans l'URL MongoDB au sein du
fichier /opt/canopsis/etc/go-engines-vars.conf
.
On peut à présent activer et démarrer le service :
systemctl enable --now mongod.service
L'instance MongoDB étant démarrée, il reste à la configurer.
On se connecte dans un shell mongo
et on initialise le replicaset :
mongo
> rs.initiate()
L'état du replicaset peut être vérifié avec la commande rs.status()
:
> rs.status()
Au bout de quelques secondes, le prompt du shell mongo
doit faire apparaître
que le nœud est PRIMARY :
rs0:PRIMARY>
Lorsque c'est le cas, le replicaset est prêt. On poursuit avec la création
des utilisateurs MongoDB root
puis canopsis
, toujours dans le shell
mongo
:
> use admin
> db.createUser({user: "root", pwd: "UNMOTDEPASSEFORT", roles: [ { role: "root", db: "admin" }]})
> exit
On se reconnecte avec le shell mongo
, cette fois-ci en s'authentifiant en tant
que root
MongoDB :
mongo -u root -p UNMOTDEPASSEFORT
> use canopsis
> db.createUser({user: "cpsmongo", pwd: "canopsis", roles: [ { role: "dbOwner", db: "canopsis" }, { role: "clusterMonitor", db: "admin"}]})
> exit
Les manipulations d'installation dans MongoDB sont terminées.
Configuration de TimescaleDB¶
Initialiser l'instance PostgreSQL puis initialiser TimescaleDB (cf. documentation de l'outil de règlage de TimescaleDB) :
postgresql-13-setup initdb
timescaledb-tune -yes --pg-config=/usr/pgsql-13/bin/pg_config
echo "timescaledb.telemetry_level=off" >> /var/lib/pgsql/13/data/postgresql.conf
Activer et démarrer le service :
systemctl enable --now postgresql-13.service
Se connecter à l'instance PostgreSQL avec l'identité du superuser postgres
:
sudo -u postgres psql
Créer la base de données canopsis
et l'utilisateur associé dans l'instance PostgreSQL :
postgres=# CREATE database canopsis;
postgres=# \c canopsis
canopsis=# CREATE EXTENSION IF NOT EXISTS timescaledb;
canopsis=# SET password_encryption = 'scram-sha-256';
canopsis=# CREATE USER cpspostgres WITH PASSWORD 'canopsis';
canopsis=# exit
Configuration de RabbitMQ¶
Activer et démarrer le service :
systemctl enable --now rabbitmq-server.service
Activer le plugin qui apporte l'interface de management RabbitMQ, puis redémarrer le service :
rabbitmq-plugins enable rabbitmq_management
systemctl restart rabbitmq-server.service
Créer les objets RabbitMQ (vhost, utilisateur avec les bons droits) utiles à l'application Canopsis :
rabbitmqctl add_vhost canopsis
rabbitmqctl add_user cpsrabbit canopsis
rabbitmqctl set_user_tags cpsrabbit administrator
rabbitmqctl set_permissions --vhost canopsis cpsrabbit '.*' '.*' '.*'
Démarrage de Redis¶
Ajouter un mot de passe ( ici canopsis
)
sed -i 's/^# requirepass.*/requirepass canopsis/' /etc/redis.conf
Activer et démarrer le service :
systemctl enable --now redis
Installation de Canopsis Community ou Pro¶
Canopsis est disponible dans une édition « Community », open-source et gratuitement accessible à tous, et une édition « Pro », souscription commerciale ajoutant des fonctionnalités supplémentaires. Voyez le site officiel de Canopsis pour en savoir plus.
Notez que l'édition Pro de Canopsis était auparavant connue sous le nom de « CAT » et que certains éléments peuvent encore la désigner sous ce nom.
Cliquez sur l'un des onglets « Community » ou « Pro » suivants, en fonction de l'édition choisie.
Ajout du dépôt de paquets Canopsis pour RHEL 8 :
cat << EOF > /etc/yum.repos.d/canopsis.repo
[canopsis]
name = canopsis
baseurl=https://nexus.canopsis.net/repository/canopsis/el8/community/
gpgcheck=0
enabled=1
EOF
Installation de l'édition open-source de Canopsis :
dnf makecache
dnf install canopsis
Attention
L'édition Pro nécessite une souscription commerciale ainsi qu'une authentification d'accès aux repos à renseigner dans baseurl
du fichier /etc/yum.repos.d/canopsis-pro.repo
.
Ajout des dépôts de paquets Canopsis pour RHEL 8 :
cat << EOF > /etc/yum.repos.d/canopsis.repo
[canopsis]
name = canopsis
baseurl=https://nexus.canopsis.net/repository/canopsis/el8/community/
gpgcheck=0
enabled=1
EOF
cat << EOF > /etc/yum.repos.d/canopsis-pro.repo
[canopsis-pro]
name = canopsis-pro
baseurl=https://user:password@nexus.canopsis.net/repository/canopsis-pro/el8/pro/
gpgcheck=0
enabled=1
EOF
Installation de Canopsis Pro :
dnf makecache
dnf install canopsis-pro
Initialisation de Canopsis¶
Le fichier de configuration est /opt/canopsis/etc/go-engines-vars.conf
, qui
est normalement dans l'état suivant :
CPS_MONGO_URL="mongodb://cpsmongo:canopsis@localhost:27017/canopsis?replicaSet=rs0"
CPS_AMQP_URL="amqp://cpsrabbit:canopsis@localhost:5672/canopsis"
CPS_POSTGRES_URL="postgresql://cpspostgres:canopsis@localhost:5432/canopsis"
CPS_REDIS_URL="redis://localhost:6379/0"
CPS_API_URL="http://localhost:8082"
#CPS_OLD_API_URL="http://localhost:8081"
CPS_POSTGRES_TECH_URL="postgresql://cpspostgres:canopsis@localhost:5432/canopsis_tech_metrics"
Note
On remarque dans CPS_MONGO_URL
le nom de replicaset, ici rs0
,
qui doit être cohérent avec ce qui a été mis lors de la
configuration de MongoDB.
Il est maintenant temps d'initialiser l'instance Canopsis ; cliquez sur l'un des onglets « Community » ou « Pro » suivants, en fonction de l'édition choisie.
Provisionner Canopsis :
set -o allexport; source /opt/canopsis/etc/go-engines-vars.conf; /opt/canopsis/bin/canopsis-reconfigure -migrate-postgres=true -edition community
Activer et démarrer les services :
systemctl enable --now canopsis-engine-go@engine-action.service \
canopsis-engine-go@engine-axe.service \
canopsis-engine-go@engine-che.service \
canopsis-engine-go@engine-fifo.service \
canopsis-engine-go@engine-pbehavior.service \
canopsis-service@canopsis-api.service \
canopsis.service
Provisionner Canopsis :
set -o allexport; source /opt/canopsis/etc/go-engines-vars.conf; /opt/canopsis/bin/canopsis-reconfigure -migrate-postgres=true -edition pro
Activer et démarrer les services :
systemctl enable --now canopsis-engine-go@engine-action.service \
canopsis-engine-go@engine-axe.service \
canopsis-engine-go@engine-che.service \
canopsis-engine-go@engine-correlation.service \
canopsis-engine-go@engine-dynamic-infos.service \
canopsis-engine-go@engine-fifo.service \
canopsis-engine-go@engine-pbehavior.service \
canopsis-engine-go@engine-remediation.service \
canopsis-engine-go@engine-webhook.service \
canopsis-service@canopsis-api.service \
canopsis.service
Tester un envoi d'évènement :
curl -X POST -u root:root -H "Content-Type: application/json" -d '{
"event_type": "check",
"connector": "connector_test_creation_alarmes",
"connector_name": "test",
"component": "component_test_creation_alarmes",
"resource": "resource_test_creation_alarmes",
"source_type": "resource",
"author": "QA_canopsis",
"state": 2,
"debug": true,
"output": "Test création alarmes Canopsis"
}' 'http://localhost:8082/api/v4/event'
Lancement de la Web UI de Canopsis¶
Installer le paquet :
dnf install canopsis-webui
Activer et démarrer Nginx :
systemctl enable --now nginx.service
Une fois cette commande terminée, vous pouvez alors réaliser votre première connexion à l'interface Canopsis.
Si vous souhaitez réaliser une mise à jour, la procédure est décrite dans le Guide de mise à jour.