성능 카운터
ONTAP 카운터 관리자는 각 ONTAP 시스템의 성능에 대한 광범위한 정보를 유지합니다. 이 데이터는 performance 카운터 세트로 내보내기되므로 ONTAP 시스템의 성능을 평가하고 성능 목표를 달성하는 데 사용할 수 있습니다.
ONTAP 성능 카운터에 액세스합니다
ONTAP 명령줄 인터페이스를 통해뿐만 아니라 두 개의 서로 다른 API를 사용하여 ONTAP 성능 카운터에 액세스할 수 있습니다.
ONTAP REST API는 ONTAP 구축 관리를 자동화할 때 선호되는 전략적 옵션입니다. |
ONTAPI API를 참조하십시오
ONTAPI API API는 NetApp Network Manageability SDK에서 사용할 수 있습니다. ONTAPI를 사용할 때 성능 카운터는 개체 컬렉션 내에서 정의됩니다. 각 객체는 시스템의 물리적 또는 가상 구성요소에 해당합니다. 시스템 구성에 따라 각 개체의 인스턴스가 하나 이상 있을 수 있습니다.
예를 들어, ONTAP 시스템에 4개의 물리적 디스크가 있는 경우 의 인스턴스가 4개 있습니다 disk
각각 고유한 성능 카운터 집합이 있는 개체입니다. ONTAPI를 사용하여 각 디스크 인스턴스의 개별 카운터에 액세스할 수 있습니다.
ONTAP REST API를 참조하십시오
ONTAP 9.11.1부터 REST API를 통해 성능 데이터에 액세스할 수도 있습니다. 이 경우 성능 카운터는 ONTAPI 개체와 동일한 표로 구성됩니다. 각 테이블 행은 ONTAPI 개체의 인스턴스와 같습니다.
예를 들어, ONTAP 시스템에 4개의 물리 디스크가 있는 경우, 를 참조하십시오 disk
테이블에는 4개의 행이 포함됩니다. 각 행에 개별적으로 액세스할 수 있으며 해당 행의 필드나 열로 사용할 수 있는 자체 성능 카운터 집합이 포함되어 있습니다.
REST API 사용 준비
ONTAP REST API를 사용하여 성능 카운터에 액세스하기 전에 준비해야 합니다.
성능 카운터는 표로 정리되어 있습니다
ONTAPI 개체의 하위 집합은 ONTAP REST API를 통해 사용할 수 있으며 테이블로 표시됩니다. 예를 들어, ONTAPI * hostadapter * 개체는 REST API를 통해 * host_adpater * 테이블로 표시됩니다. 시스템의 각 호스트 어댑터는 자체 성능 카운터 세트가 있는 행입니다.
인스턴스 이름 | 성능 카운터 | |||||
---|---|---|---|---|---|---|
host_adapter_1 |
TOTAL_READ_ops_1 |
TOTAL_WRITE_ops_1 |
바이트_읽기_1 |
바이트_쓰인 공간_1 |
MAX_LINK_DATA_RATE_1 |
RSCN_COUNT_1 |
Host_adapter_2 |
TOTAL_READ_ops_2 |
TOTAL_WRITE_ops_2 |
바이트_읽기_2 |
바이트_쓰인 공간_2 |
MAX_LINK_DATA_RATE_2 |
RSCN_COUNT_2 |
Host_adapter_3 |
TOTAL_READ_ops_3 |
TOTAL_WRITE_ops_3 |
바이트_읽기_3 |
바이트_쓰인 공간_3 |
MAX_LINK_DATA_RATE_3 |
RSCN_COUNT_3 |
나머지 끝점의 요약
ONTAP 성능 카운터 및 관련 테이블에 액세스할 수 있는 네 가지 주요 엔드포인트가 있습니다.
각 REST 끝점은 읽기 전용 액세스를 제공하며 * GET * HTTP 메서드만 지원합니다. 를 참조하십시오 "API 참조입니다" 를 참조하십시오. |
-
* /cluster/counter/tables *
카운터 테이블 및 해당 스키마 정의의 컬렉션을 반환합니다.
-
* /cluster/counter/tables/{name} *
명명된 단일 카운터 테이블에 대한 정보를 반환합니다.
-
* /cluster/counter/tables/{counter_name}/rows *
명명된 카운터 테이블의 행 컬렉션을 반환합니다.
-
* /cluster/counter/tables/{counter_name}/rows/{id} *
명명된 카운터 테이블에서 특정 행을 반환합니다.
ONTAPI에서 REST API로 마이그레이션
NetApp은 ONTAPI에서 ONTAP REST API로 자동화 코드를 마이그레이션하기 위한 광범위한 지원을 제공합니다. 여기에는 지정된 ONTAPI 개체에 대한 REST API에서 사용할 수 있는 동등한 성능 카운터 테이블을 식별하는 문서가 포함됩니다.
온라인에서 최신 설명서에 액세스할 수 "ONTAP 성능 카운터 매핑" 있습니다. 또한 ONTAP 릴리스에 따라 이전 버전의 문서에 액세스할 수 있는 버전 선택기를 사용할 수 있습니다.
ONTAP REST API를 시작합니다
다음 예제에서는 REST API를 사용하여 ONTAP 성능 카운터에 액세스하는 방법을 보여 줍니다. 여기에는 사용 가능한 테이블 목록을 검색하고 테이블 구조를 탐색하는 작업이 포함됩니다.
시작하기 전에
예제를 사용하기 전에 다음 정보를 검토하십시오.
암호를 포함한 ONTAP 관리자 계정이 필요합니다.
ONTAP 시스템에 대해 구성된 클러스터 관리 IP 주소가 필요합니다.
아래에 포함된 모든 예제는 HTTP GET 메서드를 사용하여 정보를 검색하는 데만 사용할 수 있습니다.
각 curl 예제에는 대문자 및 괄호 텍스트로 표시된 하나 이상의 변수가 포함됩니다. 이러한 변수를 사용자 환경에 적합한 실제 값으로 바꿉니다.
아래 예제 순서는 성능 카운터를 검색하는 데 사용할 수 있는 REST 끝점을 사용하는 방법을 보여 줍니다. 을 참조하십시오 나머지 끝점의 요약 를 참조하십시오.
예 1: 모든 성능 카운터 테이블
이 REST API 호출을 사용하여 사용 가능한 모든 카운터 관리자 테이블을 검색할 수 있습니다.
컬의 예
curl --request GET --user admin:<PASSWORD> 'https://<ONTAP_IP_ADDRESS>/api/cluster/counter/tables'
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"
}
}
}
예 2: 특정 테이블에 대한 고급 정보
이 REST API 호출을 사용하여 특정 테이블에 대한 설명과 메타데이터를 표시할 수 있습니다. 이 출력에는 테이블의 목적과 각 성능 카운터에 포함된 데이터 유형이 포함됩니다. 이 예에서는 * host_adapter * 테이블을 사용합니다.
컬의 예
curl --request GET --user admin:<PASSWORD> 'https://<ONTAP_IP_ADDRESS>/api/cluster/counter/tables/host_adapter'
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"
}
}
}
예 3: 특정 테이블의 모든 행
이 REST API 호출을 사용하여 테이블의 모든 행을 볼 수 있습니다. Counter Manager 개체의 인스턴스를 나타냅니다.
컬의 예
curl --request GET --user admin:<PASSWORD> 'https://<ONTAP_IP_ADDRESS>/api/cluster/counter/tables/host_adapter/rows'
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"
}
}
}
예제 4: 특정 테이블의 단일 행
이 REST API 호출을 사용하여 테이블의 특정 Counter Manager 인스턴스에 대한 성능 카운터 값을 볼 수 있습니다. 이 예에서는 호스트 어댑터 중 하나에 대한 성능 데이터가 요청됩니다.
컬의 예
curl --request GET --user admin:<PASSWORD> 'https://<ONTAP_IP_ADDRESS>/api/cluster/counter/tables/host_adapter/rows/dmp-adapter-01'
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"
}
}
}