Comment conserver des historiques historiques efficaces avec du graphite, du carbone et collectés sur CentOS 7

introduction

Les systèmes de surveillance reçoivent et accumulent de grandes quantités de données au cours de leur exécution. Plus un système de surveillance est long, plus il collecte de données.

La plupart des systèmes de surveillance ne disposent pas des outils nécessaires à l’analyse et au stockage de données à long terme. Ils conserveront toutes les lectures, ce qui posera des problèmes de stockage, ou supprimeront les anciennes données dès qu’un certain seuil est atteint, ce qui nous empêche d’analyser les performances de notre système sur une longue période.

Certains systèmes de surveillance, tels que Zabbix, permettent de stocker des valeurs de données exactes et moyennées, mais leurs capacités de personnalisation sont très limitées.

Time bases de données nous aident à résoudre le problème du stockage de grandes quantités de données historiques. Une série chronologique est simplement une séquence de points de données dans le temps et une base de données de séries chronologiques est optimisée pour stocker ce type de données.

Dans ce didacticiel, nous allons vous montrer comment installer et configurer Graphite, un outil permettant de stocker des données de séries chronologiques numériques et de restituer des graphiques de ces données. Il est composé de trois composants logiciels:

  • * Carbon * - un démon qui écoute les données de séries chronologiques et écrit sur le disque en utilisant un système de stockage.

  • * Whisper * - une base de données simple similaire à RRDTool pour stocker des données de séries chronologiques

  • * Graphite-Web * - une application Web Django qui affiche des graphiques et fournit une visualisation et une analyse riches en fonctionnalités des données obtenues.

Dans notre configuration finale, notre agent de surveillance envoie des points de données à Carbon, qui comprend les composants relais de carbone, agrégateur de carbone et cache de carbone. Carbon écrit les données dans une base de données Whisper. Graphite-Web affiche les données sur une page Web, que les utilisateurs peuvent visualiser.

Conditions préalables

Avant de commencer, assurez-vous d’avoir suivi les étapes suivantes:

  • Déployer un droplet CentOS 7

  • Ajoutez un utilisateur sudo en suivant les Initial Initial Server.

  • Add espace d’échange sur votre serveur; l’exemple 4 Go montant est bien

  • Activez le référentiel EPEL (Extra Packages for Enterprise Linux):

sudo yum -y install epel-release

Mettez à jour votre système:

sudo yum -y update

De plus amples informations sur le référentiel EPEL sont disponibles sur fedoraproject.org.

Étape 1 - Installation de graphite et de carbone

Installez les applications requises, y compris les outils liés à Python et le serveur Web Apache:

sudo yum install httpd mod_wsgi python-pip python-devel git pycairo libffi-devel

Obtenez les derniers fichiers source pour Graphite et Carbone à partir de GitHub:

cd /usr/local/src
sudo git clone https://github.com/graphite-project/graphite-web.git
sudo git clone https://github.com/graphite-project/carbon.git

Vérifiez les exigences:

python /usr/local/src/graphite-web/check-dependencies.py

Vous verrez les messages suivants:

[REQUIRED] Unable to import the 'whisper' or 'ceres' modules, please download this package from the Graphite project page and install it.

   . . .

   6 optional dependencies not met. Please consider the optional items before proceeding.
   5 necessary dependencies not met. Graphite will not function until these dependencies are fulfilled.

Vous devez donc installer les modules manquants. Commencez par installer + gcc:

sudo yum install gcc

Puis installez les modules:

sudo pip install -r /usr/local/src/graphite-web/requirements.txt

Puis vérifiez la version du paquet + django-tagging +:

pip show django-tagging

Si la version du package est inférieure à 0.3.4, vous devez le mettre à jour:

sudo pip install -U django-tagging

Vérifiez à nouveau les exigences:

python /usr/local/src/graphite-web/check-dependencies.py

Vous devriez maintenant voir le résultat suivant:

[OPTIONAL] Unable to import the 'ldap' module, do you have python-ldap installed for python 2.7.5? Without python-ldap, you will not be able to use LDAP authentication in the graphite webapp.
[OPTIONAL] Unable to import the 'python-rrdtool' module, this is required for reading RRD.
2 optional dependencies not met. Please consider the optional items before proceeding.
All necessary dependencies are met.

Nous n’avons pas besoin de l’authentification LDAP ni de la base de données RRD dans ce tutoriel.

Installer du carbone:

cd /usr/local/src/carbon/
sudo python setup.py install

Installez l’application Web:

cd /usr/local/src/graphite-web/
sudo python setup.py install

Maintenant, tous les composants sont installés et vous êtes prêt à configurer Graphite.

Graphite comprend plusieurs exemples de fichiers de configuration. Tout ce dont vous avez besoin est de les copier et de les modifier comme indiqué à l’étape suivante.

Étape 2 - Configuration de Carbon

Carbon comprend plusieurs services:

  • + carbon-cache + - accepte les métriques et les écrit sur le disque

  • + carbon-relay + - réplique les données

  • + carbon-aggregator + - s’exécute en face de + carbon-cache + pour mettre en mémoire tampon les mesures au fil du temps avant de les transférer dans Whisper

Les deux derniers sont optionnels.

Fichier de configuration carbone

Le fichier de configuration principal est + carbon.conf +. Il définit les paramètres de chaque démon Carbon.

Faisons une copie du fichier exemple:

sudo cp /opt/graphite/conf/carbon.conf.example /opt/graphite/conf/carbon.conf

Chaque paramètre de ce fichier est documenté via des commentaires informatifs dans le fichier lui-même. Vous pouvez les examiner, mais pour notre tutoriel, les paramètres par défaut conviennent.

Schémas de stockage

Ensuite, vous devrez éditer le fichier + storage-schemas.conf + qui décrit les taux de conservation pour le stockage des métriques. Il fait correspondre les chemins métriques aux modèles et indique à Whisper la fréquence et l’historique des points de données à stocker.

La taille de l’espace disque occupé par les données dépend des paramètres de ce fichier.

Tout d’abord, faites une copie du fichier exemple:

sudo cp /opt/graphite/conf/storage-schemas.conf.example /opt/graphite/conf/storage-schemas.conf

Ouvrons le fichier pour l’éditer:

sudo vi /opt/graphite/conf/storage-schemas.conf

Par défaut, il contient deux sections:

[carbon]
pattern = ^carbon\.
retentions = 60:90d

[default_1min_for_1day]
pattern = .*
retentions = 60s:1d

Chaque section a:

  • un nom, spécifié entre crochets

  • une expression régulière, spécifiée après + pattern = +

  • une ligne de taux de rétention, spécifiée après + retentions = +

Par exemple, ajoutons une nouvelle section:

[zabbix_server]
pattern = ^Zabbix_server\.
retentions = 30s:7d,5m:30d,10m:1y

Le modèle d’expression régulière correspond à toute métrique commençant par + Zabbix_server +. De plus, cet exemple utilise plusieurs rétentions:

  • chaque point de données représente 30 secondes et nous voulons conserver jusqu’à 7 jours de données avec une telle fréquence

  • toutes les données historiques des 30 derniers jours sont stockées toutes les 5 minutes

  • toutes les données historiques de la dernière année sont stockées toutes les 10 minutes

Whisper sous-échantillonnera les mesures lorsque les seuils de rétention sont dépassés.

Agrégation de stockage (facultatif)

Ensuite, vous aurez peut-être besoin du fichier + storage-aggregation.conf + qui définit comment agréger les données avec des rétentions moins précises. Ce fichier est optionnel. S’il n’est pas présent, les valeurs par défaut seront utilisées.

Faites une copie du fichier d’exemple:

sudo cp /opt/graphite/conf/storage-aggregation.conf.example /opt/graphite/conf/storage-aggregation.conf

Jetons un coup d’œil au fichier:

sudo vi /opt/graphite/conf/storage-aggregation.conf

Par défaut, il contient 4 sections:

[min]
pattern = \.min$
xFilesFactor = 0.1
aggregationMethod = min

[max]
pattern = \.max$
xFilesFactor = 0.1
aggregationMethod = max

[sum]
pattern = \.count$
xFilesFactor = 0
aggregationMethod = sum

[default_average]
pattern = .*
xFilesFactor = 0.5
aggregationMethod = average

Similaire au fichier + storage-schemas.conf +, chaque section a un nom spécifié entre crochets et une expression régulière spécifiée après + pattern = +. Chaque section a également deux paramètres supplémentaires:

  • + xFilesFactor + spécifie quelle fraction des emplacements du niveau de rétention précédent doit comporter des valeurs non NULL afin de pouvoir s’agréger à une valeur non NULL. La valeur par défaut est + 0.5 +

  • + aggregationMethod + spécifie la fonction (+ moyenne +, + somme +, '+ min + , + max + , + + dernier +) utilisée pour agréger des valeurs pour le prochain niveau de rétention. La valeur par défaut est + moyenne +

Par défaut, lorsque les données atteignent le prochain intervalle de rétention, Graphite additionne toutes les métriques se terminant par + .count +, obtient le minimum / maximum de toutes les métriques se terminant par + .min / .max + et fait la moyenne de tout le reste.

Relais (optionnel)

+ carbon-relay + est utilisé pour la réplication et le sharding. + carbon-relay + peut fonctionner avec (ou à la place de) + carbon-cache et relayer les métriques entrantes vers plusieurs systèmes dorsaux` + carbon-cache is` s’exécutant sur différents ports ou hôtes.

Pour configurer le transfert de données vers d’autres hôtes, vous devez éditer le fichier de configuration correspondant. Tout d’abord, faites une copie du fichier exemple:

sudo cp /opt/graphite/conf/relay-rules.conf.example /opt/graphite/conf/relay-rules.conf

Ouvrez le fichier pour le modifier:

sudo vi /opt/graphite/conf/relay-rules.conf

Par défaut, il contient une seule section, qui envoie les données à localhost:

[default]
default = true
destinations = 127.0.0.1:2004:a, 127.0.0.1:2104:b

(+: a + et +: b + signifie que sur le même hôte, vous pouvez exécuter plusieurs instances de carbone-cache)

L’exemple ci-dessous montre les paramètres + carbon-relay + permettant d’envoyer des données de + Zabbix_server + à un hôte et toutes les autres données à trois autres hôtes:

[zabbix]
pattern = ^Zabbix_server\.
destinations = 10.0.0.4:2004

[default]
default = true
destinations = 127.0.0.1:2004, 10.0.0.2:2024, 10.0.0.3:2004

Le modèle d’expression régulière dans la première section correspondra à toute métrique commençant par + Zabbix_server + et toutes les données seront transmises à l’hôte avec l’adresse IP + 10.0.0.4 +. Toutes les autres données seront transmises à localhost et à deux autres hôtes.

Toutes les destinations répertoriées dans + relay-rules.conf + doivent également figurer dans le fichier + / opt / graphite / conf / carbon.conf +, dans le paramètre + DESTINATIONS + de la section + [relay] + :

sudo vi /opt/graphite/conf/carbon.conf

Nous avons ajouté trois nouvelles adresses IP:

[relay]
...
DESTINATIONS = 127.0.0.1:2004, , ,
...

Agrégation (facultatif)

+ carbon-aggregator + est utilisé pour mettre en mémoire tampon les mesures au fil du temps avant de les signaler à la base de données Whisper. Il peut être exécuté devant carbone + cache. Les règles d’agrégation vous permettent d’ajouter plusieurs métriques ensemble, ce qui réduit le besoin de résumer de nombreuses métriques dans chaque URL.

Pour configurer l’agrégation de données, copiez d’abord le fichier exemple:

sudo cp /opt/graphite/conf/aggregation-rules.conf.example /opt/graphite/conf/aggregation-rules.conf

La forme de chaque ligne de ce fichier doit être la suivante:

() =

Cela capturera toutes les métriques reçues qui correspondent à + ​​input_pattern + pour le calcul d’une métrique agrégée. Le calcul aura lieu toutes les + fréquences + secondes. Les méthodes d’agrégation disponibles sont les suivantes: + sum + ou + avg +. Le nom de la mesure agrégée sera dérivé de + output_template + en remplissant les champs capturés à partir de + input_pattern +.

Imaginons, par exemple, que votre organisation compte 25 succursales et que vous souhaitiez créer le graphique de leur trafic Internet total.

  • collectd.monitoring-host.branch-01.if_octets.rx

  • collectd.monitoring-host.branch-02.if_octets.rx

  • collectd.monitoring-host.branch-03.if_octets.rx

  • collectd.monitoring-host.branch-25.if_octets.rx

Vous pouvez stocker les données de chaque succursale, créer le graphique pour chacune d’elles, puis les additionner.

Toutefois, ce type d’opération est coûteux: pour rendre le graphique de synthèse, vous devez d’abord lire les 25 métriques différentes, puis combiner les résultats en appliquant la fonction de somme, puis créer le graphique.

Si vous êtes uniquement intéressé par le trafic total, vous pouvez précalculer les valeurs. Pour ce faire, vous pouvez définir une règle qui correspond aux métriques d’une expression régulière, les met en mémoire tampon pendant un laps de temps spécifié, applique une fonction aux données mises en mémoire tampon et stocke le résultat dans une métrique distincte. La configuration sera donc la suivante:

collectd.monitoring-host.branches.if_octets.rx (60) = sum collectd.monitoring-host.*.if_octets.rx

Avec cette configuration, les métriques seront mises en mémoire tampon pendant 60 secondes, combinées à l’aide de la fonction sum et stockées dans le nouveau fichier de métriques.

Étape 3 - Démarrer Carbon as a Service

Configurez les scripts init de Carbon.

Commencez par les copier dans le répertoire + / etc / init.d / + et rendez-les exécutables:

sudo cp /usr/local/src/carbon/distro/redhat/init.d/carbon-* /etc/init.d/
sudo chmod +x /etc/init.d/carbon-*

Démarrer + carbon-cache:

sudo systemctl start carbon-cache

Si vous choisissez de les utiliser, lancez + carbon-relay et` + carbon-aggregator`:

sudo systemctl start carbon-relay
sudo systemctl start carbon-aggregator

La configuration de Carbon est terminée: Carbon est en cours d’exécution et prêt à recevoir les données. Vous pouvez maintenant configurer l’interface Web.

Étape 4 - Configuration de l’application Graphite-Web

Graphite-Web est l’application Web Django qui s’exécute sous Apache / mod_wsgi.

Copiez l’exemple de fichier de paramètres:

sudo cp /opt/graphite/webapp/graphite/local_settings.py.example /opt/graphite/webapp/graphite/local_settings.py

Ouvrez le fichier pour le modifier:

sudo vi /opt/graphite/webapp/graphite/local_settings.py

Localisez le + SECRET_KEY + et entrez une valeur unique. Ceci est utilisé pour fournir une signature cryptographique; vous pouvez mettre n’importe quoi ici tant que c’est unique. Localisez le fichier + TIME_ZONE + pour le mettre à jour dans le fuseau horaire de l’installation. Voir la liste https://en.wikipedia.org/wiki/List_of_tz_database_time_zones de tous les fuseaux horaires] si nécessaire.

. . .

SECRET_KEY = ''

. . .

TIME_ZONE = ''

. . .

Initialiser une nouvelle base de données:

cd /opt/graphite
sudo PYTHONPATH=/opt/graphite/webapp/ django-admin.py syncdb --settings=graphite.settings

Vous verrez la sortie suivante. L’invite vous posera quelques questions pour créer un compte superutilisateur pour la base de données:

   Operations to perform:
     Synchronize unmigrated apps: url_shortener, account, dashboard, tagging, events
     Apply all migrations: admin, contenttypes, auth, sessions
   Synchronizing apps without migrations:
     Creating tables...
       Creating table account_profile

     . . .

     Applying sessions.0001_initial... OK

   You have installed Django's auth system, and don't have any superusers defined.
   Would you like to create one now? (yes/no):
   Username (leave blank to use 'root'):
   Email address:
   Password:
   Password (again):
   Superuser created successfully.

Exécutez la commande suivante pour collecter tous les fichiers statiques dans un seul répertoire:

sudo PYTHONPATH=/opt/graphite/webapp/ django-admin.py collectstatic --settings=graphite.settings

Vous verrez la sortie suivante. Répondez + oui + à l’invite:

You have requested to collect static files at the destination
location as specified in your settings:

/opt/graphite/static

This will overwrite existing files!
Are you sure you want to do this?

Type 'yes' to continue, or 'no' to cancel:
Copying '/opt/graphite/webapp/content/js/browser.js'
Copying '/opt/graphite/webapp/content/js/completer.js'
...
407 static files copied to '/opt/graphite/static'.

Faites en sorte que le graphite approprié appartenant à l’utilisateur + apache +:

sudo chown -R apache:apache /opt/graphite/storage/
sudo chown -R apache:apache /opt/graphite/static/
sudo chown -R apache:apache /opt/graphite/webapp/

Pour exécuter l’application Web, vous avez besoin du fichier + graphite.wsgi +. Ce fichier contient le code + mod_wsgi + est en cours d’exécution au démarrage pour obtenir l’objet d’application. Copiez le fichier d’exemple:

sudo cp /opt/graphite/conf/graphite.wsgi.example /opt/graphite/conf/graphite.wsgi

Configurez Apache. Pour en savoir plus sur les hôtes virtuels Apache en général, voir this tutorial. Copiez l’exemple de fichier d’hôte virtuel à partir de Graphite:

sudo cp /opt/graphite/examples/example-graphite-vhost.conf /etc/httpd/conf.d/graphite.conf

Ouvrez le fichier pour le modifier:

   sudo vi /etc/httpd/conf.d/graphite.conf

Assurez-vous que votre + NomServeur + est défini sur votre domaine ou votre adresse IP. La ligne + alias + devrait déjà être définie correctement. Ajoutez le bloc + <Directory> + en dessous.

. . .

ServerName

. . .

Alias /static/ /opt/graphite/static/

<Directory /opt/graphite/static/>
  Require all granted
</Directory>

Enregistrez et fermez le fichier.

Étape 5 - Graphite protégeant le mot de passe (recommandé)

Par défaut, toute personne connaissant l’adresse du serveur exécutant l’application Web peut visualiser toutes les données. Pour empêcher cela, vous pouvez définir un accès par mot de passe.

Créez un nouveau dossier et définissez les autorisations:

sudo mkdir /opt/graphite/secure
sudo chown -R apache:apache /opt/graphite/secure

Utilisez + htpasswd + pour créer un nouveau nom d’utilisateur et un nouveau mot de passe qui limiteront l’accès à l’application Graphite-Web. Dans l’exemple ci-dessous, vous pouvez voir comment créer l’utilisateur ++ et ajouter un nouveau mot de passe:

sudo htpasswd -c /opt/graphite/secure/.passwd
New password:
Re-type new password:
Adding password for user

Configurez Apache. Dans la ligne + Require user +, vous devez spécifier le même nom qu’à l’étape précédente:

sudo vi /etc/httpd/conf.d/graphite.conf

Ajoutez ce nouveau bloc + <Emplacement> + n’importe où dans le bloc principal de l’hôte virtuel:

<Location "/">
    AuthType Basic
    AuthName "Private Area"
    AuthUserFile /opt/graphite/secure/.passwd
    Require user
</Location>

Enregistrez et fermez le fichier.

Étape 6 - Exécution de Graphite-Web

Démarrez le service Apache et incluez-le pour démarrer au démarrage:

sudo systemctl start httpd
sudo systemctl enable httpd

L’installation est terminée! Lancez votre navigateur et allez à l’adresse + http: /// +.

Entrez le nom d’utilisateur et le mot de passe que vous avez définis à l’étape 5.

Vous verrez ce qui suit:

image: https: //assets.digitalocean.com/articles/historicallogs_graphite_carbon/1.png [Page d’accueil de Graphite-Web]

Étape 7 - Publication de métriques à partir de collectd

Le graphite peut utiliser les données de nombreux services de surveillance différents. Dans cet exemple, nous utiliserons collectd. C’est un démon qui collecte périodiquement des statistiques sur les performances du système et fournit des mécanismes pour stocker ou envoyer les valeurs de différentes manières.

Plus d’informations sur collectd sont disponibles sur site officiel.

Installer collectd:

sudo yum install collectd

Le fichier de configuration contient de nombreux paramètres. Ouvrez le fichier pour le modifier:

sudo vi /etc/collectd.conf

Remplir le formulaire suivant:

  • Définissez le + Hostname + dans les paramètres globaux. Ce nom peut être n’importe quel nom et sera utilisé dans l’interface Web pour désigner cet hôte.

Hostname
  • Décommentez les paramètres du plugin + write_graphite +

LoadPlugin write_graphite
  • Modifiez les paramètres du bloc + <Plugin write_graphite> + comme suit:

<Plugin write_graphite>
 <Node "">
   Host "localhost"
   Port ""
 Protocol "tcp"
LogSendErrors true
 Prefix ""

 StoreRates true
  AlwaysAppendDS false
 EscapeCharacter "_"
 </Node>
</Plugin>

Les principaux paramètres du plugin + write_graphite +:

  • + Host + (required) - le nom d’hôte de l’agent de collecte Carbon. Dans notre cas, cela fonctionne sur le localhost

  • + Port + (required) - le port utilisé par l’agent de collecte Carbon. Dans notre exemple, + carbon-relay + 'écoute sur le port + 2003 + `

  • + Prefix + - chaîne de préfixe ajoutée au nom d’hôte envoyé à Carbon. Nous avons ajouté le point afin que Graphite puisse automatiquement regrouper les hôtes

  • + Postfix + - la chaîne postfixée ajoutée au nom d’hôte envoyé à Carbon. Nous n’avons pas besoin de cette option car nous avons défini le préfixe, vous pouvez donc le désactiver.

Commencez à collecter pour commencer à envoyer des métriques à Graphite:

sudo systemctl start collectd.service

Collectd commence immédiatement à envoyer des données au Graphite. Actualisez la page Web. Si vous développez le dossier * Metrics *, vous devriez voir * collectd * répertorié. Après un certain temps, vous pourrez voir les jolis graphiques de vos données, comme indiqué ci-dessous.

image: https: //assets.digitalocean.com/articles/historicallogs_graphite_carbon/2.png [Graphiques pour métriques> collectd> Moniteur> Charge> Charge> Moyenne session]

Étape 8 - Manipulation des données

Le graphite offre des options sophistiquées d’affichage des données. Par exemple, pour obtenir une image similaire à celle présentée dans l’image ci-dessus, vous devez effectuer plusieurs actions.

  1. Dans le panneau de gauche, cliquez sur * Métriques *> * collectd *> * Moniteur * (ou le + nom d’hôte + configuré à l’étape 7)> * load *> * load *> * midterm *. Vous verrez le graphique de la charge moyenne.

image: https: //assets.digitalocean.com/articles/historicallogs_graphite_carbon/3.png [Cliquez sur le bouton Graphique de données]

  1. Cliquez sur le bouton * Graph Data * sous le graphique.

  2. Cliquez sur le bouton * Ajouter * à droite de la fenêtre.

  3. Collez la ligne suivante: + collectd..memory. * +. Cela sélectionnera tous les graphiques liés à la mémoire. Si vous avez utilisé un nom différent pour votre hôte, utilisez ce nom au lieu de + Monitor Of.

  4. Appuyer sur OK*. Vous verrez plusieurs graphiques sur un seul écran. En raison des différences d’échelle, la courbe de charge s’est transformée en une ligne. Pour résoudre ce problème, vous devez effectuer les manipulations suivantes avec les graphiques.

  5. Cliquez à nouveau sur le bouton * Graph Data *.

  6. Sélectionnez la ligne + collectd..load.load.midterm +.

  7. Cliquez sur le bouton * Appliquer une fonction *.

  8. Sélectionnez * Spécial *> * Dessiner dans le deuxième axe Y *

  9. Cliquez à nouveau sur * Apply Function *.

  10. Sélectionnez * Spécial *> * Couleur *.

  11. Entrez + black + et appuyez sur * OK *.

  12. Sélectionnez la ligne + collectd.Monitor.memory. * +.

  13. Cliquez sur * Appliquer la fonction *.

  14. Sélectionnez * Spécial *> * Dessiner empilé *.

  15. Vous verrez l’image similaire à celle montrée à la fin de l’étape 7.

Ce n’est qu’un moyen d’afficher les données de votre serveur. Vous pouvez combiner et combiner différentes données sur le même graphique, appliquer différentes fonctions, redimensionner des données, calculer des moyennes mobiles, des données de prévision, etc.

Conclusion

Le graphite est un outil puissant pour stocker et analyser des données de séries chronologiques. Après avoir terminé ce didacticiel, vous devez avoir une idée générale de son installation, de sa configuration de base, de la saisie de vos données et de la manipulation des données accumulées.

Le graphite peut être utilisé comme tableau de bord. Vous pouvez surveiller les indicateurs clés: utilisation de l’UC, de la mémoire, des interfaces réseau, etc.

Le graphite a de nombreuses fonctions pour l’analyse des données. Vous pouvez utiliser ces fonctions pour transformer, combiner et effectuer des calculs sur des données en série. La plupart des fonctions peuvent être appliquées de manière séquentielle. Par exemple, vous pouvez résumer le trafic entrant de toutes les succursales et le comparer à la somme du trafic sortant. Vous pouvez également résumer tout le trafic entrant et sortant de toutes les succursales, créer un graphique de synthèse sur une longue période et voir la tendance de la planification future de la capacité.