Compteurs de performances
Le gestionnaire de compteur ONTAP tient à jour des informations complètes sur les performances de chaque système ONTAP. Il exporte ces données sous forme d'un ensemble de compteurs de performances_ vous pouvez utiliser pour évaluer les performances de votre système ONTAP et vous aider à atteindre vos objectifs de performance.
Accès aux compteurs de performances ONTAP
Vous pouvez accéder aux compteurs de performances ONTAP à l'aide de deux API différentes ainsi que via l'interface de ligne de commandes ONTAP.
L'API REST de ONTAP est l'option stratégique et privilégiée lorsque vous automatisez l'administration de vos déploiements ONTAP. |
API ONTAPI
L'API ONTAPI est disponible avec le SDK de gestion réseau NetApp. Lors de l'utilisation de ONTAPI, les compteurs de performances sont définis au sein d'un ensemble d'objets. Chaque objet correspond à un composant physique ou virtuel du système. Il peut y avoir une ou plusieurs instances de chaque objet en fonction de la configuration du système.
Par exemple, si votre système ONTAP possède quatre disques physiques, il y aura quatre instances de disk
objet, chacun doté d'un propre ensemble de compteurs de performances. Vous pouvez utiliser ONTAPI pour accéder aux compteurs individuels pour chaque instance de disque.
L'API REST DE ONTAP
Depuis la version ONTAP 9.11.1, vous pouvez également accéder aux données de performance via l'API REST. Dans ce cas, les compteurs de performances sont organisés sous forme de tableaux équivalents aux objets ONTAPI. Chaque ligne de table est équivalente à une instance d'un objet ONTAPI.
Par exemple, si votre système ONTAP possède quatre disques physiques, le disk
le tableau contiendra quatre lignes. Chacune des lignes peut être accédée individuellement et comprend son propre ensemble de compteurs de performances disponibles sous forme de champs ou de colonnes dans la ligne.
Préparez-vous à utiliser l'API REST
Vous devez préparer avant d'utiliser l'API REST de ONTAP pour accéder aux compteurs de performances.
Compteurs de performances organisés en tableaux
Un sous-ensemble des objets ONTAPI est disponible via l'API REST de ONTAP et présenté sous forme de tableaux. Par exemple, l'objet ONTAPI hostadaptor est présenté via l'API REST comme table host_adpater. Chaque adaptateur hôte du système est une ligne avec son propre ensemble de compteurs de performances.
Nom de l'instance | Compteurs de performances | |||||
---|---|---|---|---|---|---|
host_adapter_1 |
total_lecture_ops_1 |
total_write_ops_1 |
octets_read_1 |
octets_écrit_1 |
max_link_data_rate_1 |
rscn_count_1 |
adaptateur_hôte_2 |
total_lecture_ops_2 |
total_write_ops_2 |
octets_read_2 |
octets_écrit_2 |
max_link_data_rate_2 |
rscn_count_2 |
host_adapter_3 |
total_lecture_ops_3 |
total_write_ops_3 |
octets_read_3 |
octets_écrit_3 |
max_link_data_rate_3 |
rscn_count_3 |
Récapitulatif des terminaux REST
Quatre terminaux principaux sont disponibles pour accéder aux compteurs de performances ONTAP et aux tables associées.
Chacun des noeuds finaux REST fournit un accès en lecture seule et ne prend en charge que la méthode GET HTTP. Voir la "Référence API" pour en savoir plus. |
-
/cluster/compteur/tableaux
Renvoie une collection de tables de compteur et leurs définitions de schéma.
-
/cluster/compteur/tables/{name}
Renvoie des informations sur une seule table de compteur nommée.
-
/cluster/compteur/tables/{nom_compteur}/lignes
Renvoie une collection de lignes d'une table de compteur nommée.
-
/cluster/compteur/tables/{nom_compteur}/lignes/{id}
Renvoie une ligne spécifique d'une table de compteur nommée.
Migration à partir de ONTAPI vers l'API REST
NetApp prend en charge la migration de votre code d'automatisation depuis ONTAPI vers l'API REST ONTAP. Cela inclut la documentation de mappage pour identifier la table de compteur de performances équivalente disponible dans l'API REST pour un objet ONTAPI donné.
Vous pouvez accéder à la "Mappage du compteur de performances ONTAP" documentation en ligne. Un sélecteur de version permet également d'accéder aux versions précédentes de la documentation basée sur la version ONTAP.
Commencez avec l'API REST de ONTAP
Les exemples suivants montrent comment utiliser l'API REST pour accéder aux compteurs de performances de ONTAP. Cela inclut la récupération d'une liste des tables disponibles et l'exploration de la structure de la table.
Avant de commencer
Consultez les informations suivantes avant d'utiliser les exemples.
Vous aurez besoin d'un compte administrateur ONTAP incluant le mot de passe.
Vous devez avoir configuré l'adresse IP de gestion de cluster pour votre système ONTAP.
Tous les exemples inclus ci-dessous ne peuvent être utilisés que pour récupérer des informations avec la méthode HTTP GET.
Chaque exemple de curl inclut une ou plusieurs variables comme indiqué avec des majuscules et du texte entre crochets. Veillez à remplacer ces variables par des valeurs réelles appropriées à votre environnement.
La séquence des exemples ci-dessous montre comment utiliser les terminaux REST disponibles pour récupérer les compteurs de performances. Voir Récapitulatif des terminaux REST pour en savoir plus.
Exemple 1 : tous les tableaux de compteurs de performances
Vous pouvez utiliser cet appel de l'API REST pour découvrir toutes les tables de Counter Manager disponibles.
Exemple de boucle
curl --request GET --user admin:<PASSWORD> 'https://<ONTAP_IP_ADDRESS>/api/cluster/counter/tables'
Exemple de sortie JSON
{
"records": [
{
"name": "copy_manager",
"_links": {
"self": {
"href": "/api/cluster/counter/tables/copy_manager"
}
}
},
{
"name": "copy_manager:constituent",
"_links": {
"self": {
"href": "/api/cluster/counter/tables/copy_manager%3Aconstituent"
}
}
},
{
"name": "disk",
"_links": {
"self": {
"href": "/api/cluster/counter/tables/disk"
}
}
},
{
"name": "disk:constituent",
"_links": {
"self": {
"href": "/api/cluster/counter/tables/disk%3Aconstituent"
}
}
},
{
"name": "disk:raid_group",
"_links": {
"self": {
"href": "/api/cluster/counter/tables/disk%3Araid_group"
}
}
},
{
"name": "external_cache",
"_links": {
"self": {
"href": "/api/cluster/counter/tables/external_cache"
}
}
},
{
"name": "fcp",
"_links": {
"self": {
"href": "/api/cluster/counter/tables/fcp"
}
}
},
{
"name": "fcp:node",
"_links": {
"self": {
"href": "/api/cluster/counter/tables/fcp%3Anode"
}
}
},
{
"name": "fcp_lif",
"_links": {
"self": {
"href": "/api/cluster/counter/tables/fcp_lif"
}
}
},
{
"name": "fcp_lif:node",
"_links": {
"self": {
"href": "/api/cluster/counter/tables/fcp_lif%3Anode"
}
}
},
{
"name": "fcp_lif:port",
"_links": {
"self": {
"href": "/api/cluster/counter/tables/fcp_lif%3Aport"
}
}
},
{
"name": "fcp_lif:svm",
"_links": {
"self": {
"href": "/api/cluster/counter/tables/fcp_lif%3Asvm"
}
}
},
{
"name": "fcvi",
"_links": {
"self": {
"href": "/api/cluster/counter/tables/fcvi"
}
}
},
{
"name": "headroom_aggregate",
"_links": {
"self": {
"href": "/api/cluster/counter/tables/headroom_aggregate"
}
}
},
{
"name": "headroom_cpu",
"_links": {
"self": {
"href": "/api/cluster/counter/tables/headroom_cpu"
}
}
},
{
"name": "host_adapter",
"_links": {
"self": {
"href": "/api/cluster/counter/tables/host_adapter"
}
}
},
{
"name": "iscsi_lif",
"_links": {
"self": {
"href": "/api/cluster/counter/tables/iscsi_lif"
}
}
},
{
"name": "iscsi_lif:node",
"_links": {
"self": {
"href": "/api/cluster/counter/tables/iscsi_lif%3Anode"
}
}
},
{
"name": "iscsi_lif:svm",
"_links": {
"self": {
"href": "/api/cluster/counter/tables/iscsi_lif%3Asvm"
}
}
},
{
"name": "lif",
"_links": {
"self": {
"href": "/api/cluster/counter/tables/lif"
}
}
},
{
"name": "lif:svm",
"_links": {
"self": {
"href": "/api/cluster/counter/tables/lif%3Asvm"
}
}
},
{
"name": "lun",
"_links": {
"self": {
"href": "/api/cluster/counter/tables/lun"
}
}
},
{
"name": "lun:constituent",
"_links": {
"self": {
"href": "/api/cluster/counter/tables/lun%3Aconstituent"
}
}
},
{
"name": "lun:node",
"_links": {
"self": {
"href": "/api/cluster/counter/tables/lun%3Anode"
}
}
},
{
"name": "namespace",
"_links": {
"self": {
"href": "/api/cluster/counter/tables/namespace"
}
}
},
{
"name": "namespace:constituent",
"_links": {
"self": {
"href": "/api/cluster/counter/tables/namespace%3Aconstituent"
}
}
},
{
"name": "nfs_v4_diag",
"_links": {
"self": {
"href": "/api/cluster/counter/tables/nfs_v4_diag"
}
}
},
{
"name": "nic_common",
"_links": {
"self": {
"href": "/api/cluster/counter/tables/nic_common"
}
}
},
{
"name": "nvmf_lif",
"_links": {
"self": {
"href": "/api/cluster/counter/tables/nvmf_lif"
}
}
},
{
"name": "nvmf_lif:constituent",
"_links": {
"self": {
"href": "/api/cluster/counter/tables/nvmf_lif%3Aconstituent"
}
}
},
{
"name": "nvmf_lif:node",
"_links": {
"self": {
"href": "/api/cluster/counter/tables/nvmf_lif%3Anode"
}
}
},
{
"name": "nvmf_lif:port",
"_links": {
"self": {
"href": "/api/cluster/counter/tables/nvmf_lif%3Aport"
}
}
},
{
"name": "object_store_client_op",
"_links": {
"self": {
"href": "/api/cluster/counter/tables/object_store_client_op"
}
}
},
{
"name": "path",
"_links": {
"self": {
"href": "/api/cluster/counter/tables/path"
}
}
},
{
"name": "processor",
"_links": {
"self": {
"href": "/api/cluster/counter/tables/processor"
}
}
},
{
"name": "processor:node",
"_links": {
"self": {
"href": "/api/cluster/counter/tables/processor%3Anode"
}
}
},
{
"name": "qos",
"_links": {
"self": {
"href": "/api/cluster/counter/tables/qos"
}
}
},
{
"name": "qos:constituent",
"_links": {
"self": {
"href": "/api/cluster/counter/tables/qos%3Aconstituent"
}
}
},
{
"name": "qos:policy_group",
"_links": {
"self": {
"href": "/api/cluster/counter/tables/qos%3Apolicy_group"
}
}
},
{
"name": "qos_detail",
"_links": {
"self": {
"href": "/api/cluster/counter/tables/qos_detail"
}
}
},
{
"name": "qos_detail_volume",
"_links": {
"self": {
"href": "/api/cluster/counter/tables/qos_detail_volume"
}
}
},
{
"name": "qos_volume",
"_links": {
"self": {
"href": "/api/cluster/counter/tables/qos_volume"
}
}
},
{
"name": "qos_volume:constituent",
"_links": {
"self": {
"href": "/api/cluster/counter/tables/qos_volume%3Aconstituent"
}
}
},
{
"name": "qtree",
"_links": {
"self": {
"href": "/api/cluster/counter/tables/qtree"
}
}
},
{
"name": "qtree:constituent",
"_links": {
"self": {
"href": "/api/cluster/counter/tables/qtree%3Aconstituent"
}
}
},
{
"name": "svm_cifs",
"_links": {
"self": {
"href": "/api/cluster/counter/tables/svm_cifs"
}
}
},
{
"name": "svm_cifs:constituent",
"_links": {
"self": {
"href": "/api/cluster/counter/tables/svm_cifs%3Aconstituent"
}
}
},
{
"name": "svm_cifs:node",
"_links": {
"self": {
"href": "/api/cluster/counter/tables/svm_cifs%3Anode"
}
}
},
{
"name": "svm_nfs_v3",
"_links": {
"self": {
"href": "/api/cluster/counter/tables/svm_nfs_v3"
}
}
},
{
"name": "svm_nfs_v3:constituent",
"_links": {
"self": {
"href": "/api/cluster/counter/tables/svm_nfs_v3%3Aconstituent"
}
}
},
{
"name": "svm_nfs_v3:node",
"_links": {
"self": {
"href": "/api/cluster/counter/tables/svm_nfs_v3%3Anode"
}
}
},
{
"name": "svm_nfs_v4",
"_links": {
"self": {
"href": "/api/cluster/counter/tables/svm_nfs_v4"
}
}
},
{
"name": "svm_nfs_v41",
"_links": {
"self": {
"href": "/api/cluster/counter/tables/svm_nfs_v41"
}
}
},
{
"name": "svm_nfs_v41:constituent",
"_links": {
"self": {
"href": "/api/cluster/counter/tables/svm_nfs_v41%3Aconstituent"
}
}
},
{
"name": "svm_nfs_v41:node",
"_links": {
"self": {
"href": "/api/cluster/counter/tables/svm_nfs_v41%3Anode"
}
}
},
{
"name": "svm_nfs_v42",
"_links": {
"self": {
"href": "/api/cluster/counter/tables/svm_nfs_v42"
}
}
},
{
"name": "svm_nfs_v42:constituent",
"_links": {
"self": {
"href": "/api/cluster/counter/tables/svm_nfs_v42%3Aconstituent"
}
}
},
{
"name": "svm_nfs_v42:node",
"_links": {
"self": {
"href": "/api/cluster/counter/tables/svm_nfs_v42%3Anode"
}
}
},
{
"name": "svm_nfs_v4:constituent",
"_links": {
"self": {
"href": "/api/cluster/counter/tables/svm_nfs_v4%3Aconstituent"
}
}
},
{
"name": "svm_nfs_v4:node",
"_links": {
"self": {
"href": "/api/cluster/counter/tables/svm_nfs_v4%3Anode"
}
}
},
{
"name": "system",
"_links": {
"self": {
"href": "/api/cluster/counter/tables/system"
}
}
},
{
"name": "system:constituent",
"_links": {
"self": {
"href": "/api/cluster/counter/tables/system%3Aconstituent"
}
}
},
{
"name": "system:node",
"_links": {
"self": {
"href": "/api/cluster/counter/tables/system%3Anode"
}
}
},
{
"name": "token_manager",
"_links": {
"self": {
"href": "/api/cluster/counter/tables/token_manager"
}
}
},
{
"name": "volume",
"_links": {
"self": {
"href": "/api/cluster/counter/tables/volume"
}
}
},
{
"name": "volume:node",
"_links": {
"self": {
"href": "/api/cluster/counter/tables/volume%3Anode"
}
}
},
{
"name": "volume:svm",
"_links": {
"self": {
"href": "/api/cluster/counter/tables/volume%3Asvm"
}
}
},
{
"name": "wafl",
"_links": {
"self": {
"href": "/api/cluster/counter/tables/wafl"
}
}
},
{
"name": "wafl_comp_aggr_vol_bin",
"_links": {
"self": {
"href": "/api/cluster/counter/tables/wafl_comp_aggr_vol_bin"
}
}
},
{
"name": "wafl_hya_per_aggregate",
"_links": {
"self": {
"href": "/api/cluster/counter/tables/wafl_hya_per_aggregate"
}
}
},
{
"name": "wafl_hya_sizer",
"_links": {
"self": {
"href": "/api/cluster/counter/tables/wafl_hya_sizer"
}
}
}
],
"num_records": 71,
"_links": {
"self": {
"href": "/api/cluster/counter/tables"
}
}
}
Exemple 2 : informations générales sur une table spécifique
Vous pouvez utiliser cet appel d'API REST pour afficher la description et les métadonnées d'une table spécifique. Le résultat obtenu inclut l'objectif de la table et le type de données que contient chaque compteur de performances. La table host_adapt est utilisée dans cet exemple.
Exemple de boucle
curl --request GET --user admin:<PASSWORD> 'https://<ONTAP_IP_ADDRESS>/api/cluster/counter/tables/host_adapter'
Exemple de sortie JSON
{
"name": "host_adapter",
"description": "The host_adapter table reports activity on the Fibre Channel, Serial Attached SCSI, and parallel SCSI host adapters the storage system uses to connect to disks and tape drives.",
"counter_schemas": [
{
"name": "bytes_read",
"description": "Bytes read through a host adapter",
"type": "rate",
"unit": "per_sec"
},
{
"name": "bytes_written",
"description": "Bytes written through a host adapter",
"type": "rate",
"unit": "per_sec"
},
{
"name": "max_link_data_rate",
"description": "Max link data rate in Kilobytes per second for a host adapter",
"type": "raw",
"unit": "kb_per_sec"
},
{
"name": "node.name",
"description": "System node name",
"type": "string",
"unit": "none"
},
{
"name": "rscn_count",
"description": "Number of RSCN(s) received by the FC HBA",
"type": "raw",
"unit": "none"
},
{
"name": "total_read_ops",
"description": "Total number of reads on a host adapter",
"type": "rate",
"unit": "per_sec"
},
{
"name": "total_write_ops",
"description": "Total number of writes on a host adapter",
"type": "rate",
"unit": "per_sec"
}
],
"_links": {
"self": {
"href": "/api/cluster/counter/tables/host_adapter"
}
}
}
Exemple 3 : toutes les lignes d'une table spécifique
Vous pouvez utiliser cet appel d'API REST pour afficher toutes les lignes d'une table. Indique les instances des objets Counter Manager existantes.
Exemple de boucle
curl --request GET --user admin:<PASSWORD> 'https://<ONTAP_IP_ADDRESS>/api/cluster/counter/tables/host_adapter/rows'
Exemple de sortie JSON
{
"records": [
{
"id": "dmp-adapter-01",
"_links": {
"self": {
"href": "/api/cluster/counter/tables/host_adapter/rows/dmp-adapter-01"
}
}
},
{
"id": "dmp-adapter-02",
"_links": {
"self": {
"href": "/api/cluster/counter/tables/host_adapter/rows/dmp-adapter-02"
}
}
}
],
"num_records": 2,
"_links": {
"self": {
"href": "/api/cluster/counter/tables/host_adapter/rows"
}
}
}
Exemple 4 : une seule ligne dans une table spécifique
Vous pouvez utiliser cet appel d'API REST pour afficher les valeurs de compteur de performances d'une instance de gestionnaire de compteurs spécifique dans le tableau. Dans cet exemple, les données de performances de l'un des adaptateurs hôtes sont demandées.
Exemple de boucle
curl --request GET --user admin:<PASSWORD> 'https://<ONTAP_IP_ADDRESS>/api/cluster/counter/tables/host_adapter/rows/dmp-adapter-01'
Exemple de sortie JSON
{
"counter_table": {
"name": "host_adapter"
},
"id": "dmp-adapter-01",
"properties": [
{
"name": "node.name",
"value": "dmp-node-01"
}
],
"counters": [
{
"name": "total_read_ops",
"value": 25098
},
{
"name": "total_write_ops",
"value": 48925
},
{
"name": "bytes_read",
"value": 1003799680
},
{
"name": "bytes_written",
"value": 6900961600
},
{
"name": "max_link_data_rate",
"value": 0
},
{
"name": "rscn_count",
"value": 0
}
],
"_links": {
"self": {
"href": "/api/cluster/counter/tables/host_adapter/rows/dmp-adapter-01"
}
}
}