Collection Pattern
Collection Pattern
は、データ収集のパターンをテンプレート定義する機能です。
Collection Patternが保有する属性
-
name
: パターン名を指定します。ユニークである必要があります。 -
collections
: 収集アイテムを定義します。 -
collections.interval
: 収集間隔を指定します。分単位で指定可能で1
2
3
4
5
6
10
15
20
30
60
が選択できます。デフォルトは1
分です。 -
collections.description
: 任意の説明を記述できます。 -
collections.correlation_info
: 任意の関連情報を辞書型で指定します。指定した辞書は、後述するcollections.method情報へのレンダリングやカスタムスクリプト内で参照することができます。correlation_infoは、収集されたデータとセットでデータフローパイプライン横断で伝搬されます。 -
collections.method
: 収集アイテムの収集方法を定義します。収集プロトコルは、SNMP-GET
SNMP-BULK
HTTP
SCRIPT
のいづれかが選択できます。
collections.methodではレンダリング変数を定義できます。レンダリング変数は、{
変数名
}
形式で記述します。レンダリングパラメータは、collections.correlation_info
です。また、Collection
側でもcorrelation_infoが定義されている場合はマージされます。
SNMP-GET
SNMPプロトコルのGETオペレーションで指定したOIDのMIBオブジェクトを収集します。
collections.method.protocol
:SNMP
固定collections.method.port
: SNMPエージェントのリスニングポートを指定します。デフォルトは、161
です。collections.method.credential
: SNMPエージェントのクレデンシャルを指定します。SNMPバージョンによって設定パラメータが異なります。collections.method.version
:v1
v2c
v3
が選択できます。collections.method.community
: SNMPコミュニティを指定します。v1
v2c
の場合に指定します。collections.method.userName
: SNMPユーザ名を指定します。v3
の場合に指定します。collections.method.authKey
: SNMP認証鍵を指定します。v3
の場合に指定します。collections.method.privKey
: SNMPプライバシー鍵を指定します。v3
の場合に指定します。collections.method.authProtocol
: SNMP認証プロトコルを指定します。usmNoAuthProtocol
usmHMACMD5AuthProtocol
usmHMACSHAAuthProtocol
のいづれかを選択します。デフォルトは、usmNoAuthProtocol
です。v3
の場合に指定します。collections.method.privProtocol
: SNMPプライバシープロトコルを指定します。usmNoPrivProtocol
usmDESPrivProtocol
usm3DESEDEPrivProtocol
usmAesCfb128Protocol
usmAesCfb192Protocol
usmAesCfb256Protocol
usmAesBlumenthalCfb192Protocol
usmAesBlumenthalCfb256Protocol
のいづれかを選択します。デフォルトは、usmNoPrivProtocol
です。v3
の場合に指定します。collections.oid
: GETするMIBオブジェクト識別子を指定します。MIBインスタンス識別子まで指定する必要があります。
SNMP-BULK
collections.method.protocol
:SNMP
固定collections.method.port
: SNMPエージェントのリスニングポートを指定します。デフォルトは、161
です。collections.method.credential
: SNMPエージェントのクレデンシャルを指定します。SNMPバージョンによって設定パラメータが異なります。collections.method.version
:v1
v2c
v3
が選択できます。collections.method.community
: SNMPコミュニティを指定します。v1
v2c
の場合に指定します。collections.method.userName
: SNMPユーザ名を指定します。v3
の場合に指定します。collections.method.authKey
: SNMP認証鍵を指定します。v3
の場合に指定します。collections.method.privKey
: SNMPプライバシー鍵を指定します。v3
の場合に指定します。collections.method.authProtocol
: SNMP認証プロトコルを指定します。usmNoAuthProtocol
usmHMACMD5AuthProtocol
usmHMACSHAAuthProtocol
のいづれかを選択します。デフォルトは、usmNoAuthProtocol
です。v3
の場合に指定します。collections.method.privProtocol
: SNMPプライバシープロトコルを指定します。usmNoPrivProtocol
usmDESPrivProtocol
usm3DESEDEPrivProtocol
usmAesCfb128Protocol
usmAesCfb192Protocol
usmAesCfb256Protocol
usmAesBlumenthalCfb192Protocol
usmAesBlumenthalCfb256Protocol
のいづれかを選択します。デフォルトは、usmNoPrivProtocol
です。v3
の場合に指定します。collections.method.oids
: BULK GETするMIBオブジェクト識別子を列挙指定します。collections.method.nonRepeaters
:collections.oids
に指定したOIDリストの先頭から繰り返し取得を行わないものの個数を指定します。例えばOID1, OID2, OID3配下のMIBをBULKで取得するとして、nonRepeatersを2 とすると、OID1とOID2 については繰り返し取得を実施せず、OID3 についてだけは繰り返し取得を実施する動作となります。デフォルトは0
です。collections.method.maxRepetitions
: 一括繰り返し取得回数を指定します。MaxRepetitionsで指定できる数字に上限はありませんが、実際には、エージェント側の最大PDUサイズに依存し、それを超える場合には反映されません。デフォルトは50
です。
HTTP
collections.method.protocol
:HTTP
固定collections.method.endpoint
: HTTP通信エンドポイントを指定します。collections.method.path
: HTTPリクエストパスを指定します。endpoint
を省略した場合は、APIGWにリクエストを送信します。collections.method.method
: HTTPリクエストメソッドを指定します。デフォルトはGET
です。collections.method.headers
: HTTPリクエストヘッダーを指定します。collections.method.body
: HTTPリクエストボディーを指定します。collections.method.retry_interval
: リトライ間隔を指定します。デフォルトは0
です。collections.method.retry_count
: リトライ回数を指定します。デフォルトは0
です。collections.method.retry_codes
: リトライ判定するHTTP応答コードを列挙指定します。collections.method.validate_cert
: HTTPS通信においてサーバ証明書の検証要否を指定するモードを指定します。collections.method.ca_certs
: HTTPS通信においてPEM形式のCA証明書のファイル名を指定します。collections.method.client_key
: HTTPS通信においてクライアントSSL鍵のファイル名を指定します。collections.method.client_cert
: HTTPS通信においてクライアントSSL証明書のファイル名を指定します。collections.method.authentication
: 認証オプションを指定します。
SCRIPT
collections.method.name
: スクリプト名を指定します。指定したname
は、スクリプトが生成したcollectionをreflectionにマッチングするキーワードとなるため、ユニークに名前付けする必要があります。collections.method.script
: カスタムスクリプトを記述します。カスタムスクリプトの名前空間には、address
hostname
collection_id
correlation_info
collection
変数が事前定義されています。カスタムスクリプト内でcollection
変数に辞書型でデータを代入することでreflectionに作成したデータを伝搬することができます。SCRIPTは、SNMPやHTTPで収集できないNETCONF/CLIなどでのデータ収集に使用します。
Note
collections.methodでcorrelation_infoによってレンダリングできるパラメータは、oid
oids
endpoint
path
body
headers
authentication
です。
Note
{インタフェース名}
をSNMPのoid
あるいは、oids
の変数として指定した場合、収集実行時に自動的にifindexに書き換えられます。
例として、1.3.6.1.2.1.31.1.1.1.6.{ge-0/0/0}
のように設定した場合、{ge-0/0/0}
部は実行時にifIndexに置換されます。該当するifNameが存在しない場合、データは破棄されます。BULK-GETのoidsリストに指定された場合で該当ifNameが存在しない場合は、該当oidを破棄し、nonRepeatersの数を必要に応じて自動補正します。また、インタフェース名を固定的に指定できない場合、{ge-0/0/0}
を{.*}
や{ge-.*}
のように正規表現で指定することもできます。この場合も該当OIDにnonRepeatersが含まれている場合は自動補正されます。
サンプル
以下は、Collectionパターンのサンプル定義です。CSR1000vに対して1分間隔でsysUpTIme
をGETで取得、5分単位でtcpActiveOpens
、tcpPassiveOpens
、ifHCInOctets
、ifHCOutOctets
を収集します。また1分間隔でCSR1000vが稼働しているVMのパワー状態の収集とVMに対してpingを1回送信し、遅延を取得します。
- name: csr1000v
collections:
- interval: 1
method:
credential:
community: '{snmp_community}'
version: v2c
oid: 1.3.6.1.2.1.1.3.0
port: 161
protocol: SNMP
- interval: 5
method:
credential:
community: '{snmp_community}'
version: v2c
nonRepeaters: 2
oids:
- 1.3.6.1.2.1.6.5
- 1.3.6.1.2.1.6.6
- '1.3.6.1.2.1.31.1.1.1.6.{Gi1}'
- '1.3.6.1.2.1.31.1.1.1.6.{Gi2}'
- '1.3.6.1.2.1.31.1.1.1.6.{Gi3}'
- '1.3.6.1.2.1.31.1.1.1.10.{Gi1}'
- '1.3.6.1.2.1.31.1.1.1.10.{Gi2}'
- '1.3.6.1.2.1.31.1.1.1.10.{Gi3}'
port: 161
protocol: SNMP
- interval: 1
method:
authentication:
auth_mode: basic
password: '{vmware_password}'
username: '{vmware_username}'
endpoint: '{vmware_endpoint}'
path: '/api/vms/{vmid}/power'
protocol: HTTP
- interval: 1
method:
name: ping
script: |-
p = await asyncio.create_subprocess_shell("ping -c 1 {}".format(address), stdout=asyncio.subprocess.PIPE)
r = await p.communicate()
collection = r[0].decode("utf-8").splitlines()[-1]
インタフェース名に正規表現で指定する場合は、以下のように記述できます。
- name: csr1000v
collections:
- interval: 1
method:
protocol: SNMP
port: 161
oid: 1.3.6.1.2.1.1.3.0
credential:
version: v2c
community: '{snmp_community}'
- interval: 1
method:
protocol: SNMP
port: 161
oids:
- 1.3.6.1.2.1.6.5
- 1.3.6.1.2.1.6.6
- '1.3.6.1.2.1.31.1.1.1.6.{Gi.$}'
- '1.3.6.1.2.1.31.1.1.1.10.{Gi.$}'
credential:
version: v2c
community: '{snmp_community}'
nonRepeaters: 2
- interval: 1
method:
protocol: HTTP
endpoint: '{vmware_endpoint}'
path: '/api/vms/{vmid}/power'
authentication:
auth_mode: basic
username: '{vmware_username}'
password: '{vmware_password}'
- interval: 1
method:
name: ping
script: |-
p = await asyncio.create_subprocess_shell("ping -c 1 {}".format(address), stdout=asyncio.subprocess.PIPE)
r = await p.communicate()
collection = r[0].decode("utf-8").splitlines()[-1]