Configuration de New Relic sur Ellas War

Posted by

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.

Leave a Reply

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *