Infrastructure Agentを導入すると、CPU利用率やMemory利用量、ストレージ利用量などがSystemSampleというイベントに記録され可視化していただくことができます。

SystemSampleは、デフォルトで5秒毎に記録されますが、同時に平均値にてダウンサンプリングされたデータも作成されます。これらは、クエリー時に指定する期間によって、参照されるバケツサイズが変わるため、指定する期間によっては最大CPU使用率が期待と異なる場合があります。また、5秒ごとの生データの保持期間は8日となるため、それより古い過去のデータを参照される場合、集計期間を59分以下にしても、ダウンサンプリングされたデータが参照され、期待する結果が得られない場合があります。

こちらに関して、こちら記載の方法を使い、お客様自身でMetrics化するルールを作っていただくことで、生データと同じ最大値・最小値を長期間集計できるようにすることができるので、その方法を具体的に紹介します。

まず、SystemSampleのデータに付与される属性に関しては、Data Dictionaryにて確認していただけます。今回は、CPU使用率(cpuPercent)の属性に保存されている値をMetric化します。

Metric化する上で、重要な要素は以下の3つです。

  • どのタイプでMetric化するか
  • どの属性をMetricデータに追加で保存するか
  • Metricの名前を何にするか

どのタイプでMetric化するか?

タイプに関しては、対象のMetricに対してどの集計を行うかに依存します。今回は最大値・最小値を取得することが目的のため、summaryタイプを利用します。

どの属性をMetricデータに追加で保存するか?

こちらは非常に重要な要素なので、注意深く検討してください。こちらをまったく、指定しない場合、全ホストのCPUの値が1つのメトリクスになり、どのホストでCPUが高かったかなどがわからなくなります。SystemSampleに付随する基本的な属性に関しては、前述のData Dictionaryにてご確認いただけますが、AWSなど環境によって追加の情報などもあります。そのため、keyset()関数をつかって、実際に存在する属性の一覧を取得して確認することをおすすめいたします。

FROM SystemSample SELECT keyset()

今回は、以下の属性をMetircに付随するデータとして保存します。

  • entityGuid
  • entityKey
  • entityName
  • fullHostname

Metricの名前を何にするか?

こちらは、お客様がクエリー時に利用されたい任意の名前になります。今回はシンプルにcpu.percentとします。

これで3つの要素が決まったので、対応するNRQLクエリーが以下のように決まります。

FROM SystemSample SELECT summary(cpuPercent) as 'cpu.percent' FACET entityGuid, entityKey, entityName, fullHostname

そして、以下のようなコマンドでNerdGraphAPIを実行することで、ルールを作成していただけます。なお、<my-accountId>の箇所は対象のアカウントのIDに変更してください。

mutation {
  eventsToMetricsCreateRule(
    rules: {accountId: <my-accountId>, name: "cpu percent", nrql: "FROM SystemSample SELECT summary(cpuPercent) as 'cpu.percent' FACET entityGuid, entityKey, entityName, fullHostname"}
  ) {
    successes {
      id
    }
    failures {
      errors {
        description
        reason
      }
    }
  }
}

NerdGraph API explorer等で実行し、作成が成功すると、以下のようにidが得られるはずです。

{
  "data": {
    "eventsToMetricsCreateRule": {
      "failures": [],
      "successes": [
        {
          "id": "2942388"
        }
      ]
    }
  }
}

すでにInfrastructure agentを導入されており、SystemSampleがインジェストされ続けている状態であれば、程なくして対象のMetricが生成されているかと思われます。画面左側メニューのAll Capabilitiesから「Metrics & Events」のタイルを選択していただき、Metricから指定したMetric名で検索するとデータが作成されていていることが確認できます。例えば、CPUの最大値をfullHostnameごとに時間軸で表示したい場合、以下のようなクエリーにて確認していただけます。

SELECT max(cpu.percent) FROM Metric FACET fullHostname TIMESERIES

なお、こちらのFACET句で指定できる属性に関しては、前述の「どの属性をMetricデータに追加で保存するか」で指定した属性に一致します。そのため、どのようなクエリーで集計するか?を検討されたうえで、ルールにてFACET句に指定する属性も指定することをおすすめいたします。