Ellas War produit beaucoup de métriques et se doit d’être aussi fiable que possible pour fournir bonne une expérience utilisateur aux joueurs. Jusqu’à il y a quelques mois, j’utilisais Zabbix pour monitorer du serveur. J’ai eu jusqu’à 9 machines à surveiller et tout fonctionnait pour le mieux. Malheureusement, après une mise à jour, mon serveur principal est devenu instable. J’ai donc dû prendre la décision d’enlever le système de monitoring et de dépendre de Better Uptime et Grafana pour détecter les problèmes.
Le temps est passé, et l’absence de métriques et s’est fait sentir, surtout pour mon serveur principal. New Relic est un logiciel en mode SaaS qui peut être utilisé pour collecter les logs et les métriques. Sa version gratuite est peut-être la meilleure du marché, avec un compte complet et 100Go de données par mois.
Démarrage
L’installation démarre par une commande curl, je n’aime pas trop cela mais c’est simple et efficace. Pour serveur utilise Ubuntu LTS.
curl -Ls https://download.newrelic.com/install/newrelic-cli/scripts/install.sh | bash && sudo NEW_RELIC_API_KEY=MY-KEY NEW_RELIC_ACCOUNT_ID=00000 /usr/local/bin/newrelic install
Principale problème avec cette installation, les mises à jour ne sont pas gérées par le système mais doivent être installées manuellement.
We need to update your New Relic CLI version to continue.
Installed version: 0.60.3
Latest version: 0.61.0
To update your CLI and continue this installation, run this command:
curl -Ls https://download.newrelic.com/install/newrelic-cli/scripts/install.sh | bash
Services
Voyons quels services tournent ou sont utilisés par Ellas War.
Pour le serveur :
- Linux
- Docker
- MariaDB
- Nginx
- NodeJS
- Redis
Ellas War a aussi une partie client, celle-ci est disponible sur find on GiHhub.
- Angular
- Android
- Cordova
Je ne veux pas traquer mes utilisateur, j’ai donc décidé de passer sur la partie client mais les métriques obtenues depuis le serveur me seront très utiles.
Configuration
Tous mes logiciels sont des contenurs Docker, je vais donc devoir ajuster les configurations par défaut. Depuis l’interface web de New Relic, cliquez sur Add data et choisissez vos sources. Les métriques de NodeJS seront récupérées en utilisant le plugin Docker.
Linux & Docker
Rien de spécial, la commande fournie par New Relic fonctionne très bien,
MariaDB
Installez le paquet dédié et suivez la documentation.
apt install -y nri-mysql
Mon serveur MariaDB est un conteneur, j’ai donc dû connecter le 3306 à mon host.
Mon fichier de configuration :
integrations:
- name: nri-mysql
env:
HOSTNAME: localhost
PORT: 3306
USERNAME: newrelic
PASSWORD: mariadb-password
REMOTE_MONITORING: true
interval: 30s
labels:
env: production
role: write-replica
inventory_source: config/mysql
Redis
La configuration est très similaire à celle utilisée par MariaDB, mais le port à utiliser est 6379.
apt install -y nri-redis
Mon fichier de configuration :
integrations:
- name: nri-redis
env:
METRICS: true
HOSTNAME: localhost
PORT: 6379
KEYS: '{"0":["<KEY_1>"],"1":["<KEY_2>"]}'
USERNAME: newrelic
PASSWORD: my-redis-password
REMOTE_MONITORING: true
USE_UNIX_SOCKET: true
interval: 15s
labels:
environment: production
- name: nri-redis
env:
INVENTORY: true
HOSTNAME: localhost
PORT: 6379
USERNAME: newrelic
PASSWORD: my-redis-password
REMOTE_MONITORING: true
USE_UNIX_SOCKET: true
inventory_source: config/redis
interval: 60s
labels:
environment: production
Nginx
Nous devon aussi installer le plugin en suivant la documentation.
apt install -y nri-nginx
J’ai modifié le bloque default_server dans mon fichier de configuration.
server {
listen 80 default_server;
root /var/www;
index index.html;
location = /status {
stub_status on;
allow 172.20.0.1;
deny all;
}
}
Maintenant nous pouvons configurer New Relic
integrations:
- name: nri-nginx
env:
METRICS: "true"
STATUS_URL: http://127.0.0.1/status
STATUS_MODULE: discover
REMOTE_MONITORING: true
interval: 30s
labels:
env: production
role: load_balancer
- name: nri-nginx
env:
INVENTORY: "true"
CONFIG_PATH: /etc/nginx/nginx.conf
REMOTE_MONITORING: true
STATUS_URL: http://127.0.0.1/status
interval: 60s
labels:
env: production
role: load_balancer
inventory_source: config/nginx
Conclusion
Toutes mes métriques sont maintenant stockées dans New Relic. Grâce à cela je peut revenir dans le passé et résoudre les problèmes de mon serveur. Avec mes quelques services je suis déjà à 40% d’utilisation de ma limite de données, j’ai donc encore de la marge.
Dans le futur je vais devoir investiguer pour créer des tableaux de bord et un système d’alertes. J’aimerais aussi trouver un logiciel pour renforcer la sécurité de mon serveur.