# 메트릭

## 개요

Panther API는 다음과 같은 사용자 메트릭 작업을 제공합니다:

* 특정 기간 동안 Panther가 수집 및/또는 처리한 총 바이트 및 이벤트 수
* 특정 기간 동안 각 심각도(Severity) 유형에 대해 생성된 알러트의 분류\\

콘솔의 API 플레이그라운드 또는 GraphQL-over-HTTP API를 사용하여 Panther의 API를 호출할 수 있습니다. 이러한 방법에 대한 자세한 내용은 [Panther API](https://docs.panther.com/ko/panther/api/..#step-1-choose-a-method-for-invoking-the-api).

아래 섹션에서 핵심 메트릭 작업에 대한 GraphQL 쿼리, 뮤테이션 및 종단 간 워크플로 예제를 참조하세요.

### `totalBytesIngested` 대 `totalBytesProcessed`

사용자를 사용할 것이며, `totalBytesIngested` 와 `totalBytesProcessed` 메트릭은 비슷하게 들리지만 다음과 같이 다릅니다:

* `totalBytesIngested`: Panther가 지난 1년간(현재 날짜로부터 지난 365일)에 수집한 총 바이트 수입니다.
* `totalBytesProcessed`: 쿼리로 정의한 특정 기간 내에 Panther가 수집한 총 바이트 수입니다.

## 일반적인 메트릭 작업

아래는 Panther의 가장 일반적인 GraphQL 메트릭 작업들 중 일부입니다. 이 예제들은 GraphQL 클라이언트(또는 `curl`)을 사용하여 Panther의 GraphQL API를 호출하기 위해 전송해야 하는 문서를 보여줍니다.

**메트릭 쿼리**

```graphql
# `GetMetrics`는 작업의 별칭입니다. 관심이 없는 
# 필드/정보는 생략하고 원하는 항목만 쿼리할 수 있습니다
query GetMetrics {
  metrics(input: { 
    fromDate: "2021-01-01T00:00:00Z"
    toDate: "2021-12-31T23:59:59Z"
  }) {
    alertsPerSeverity {
      label
      값
      breakdown
    }
    alertsPerRule {
      label
      값
      entityId
    }
    eventsProcessedPerLogType {
      label
      값
      breakdown
    }
    bytesProcessedPerSource {
      label
      값
      breakdown
    }
    latencyPerLogType {
      label
      값
    }
    bytesIngestedPerSource {
      label
      값
    }
    bytesQueriedPerSource {
      label
      값
      breakdown
    }
    totalAlerts
    totalBytesIngested
    totalBytesProcessed
    totalBytesQueried
    totalEventsProcessed
  }
}
```

{% hint style="info" %}
사용자를 사용할 것이며, `breakdown` 이 필드는 X축으로 시간을 사용하는 차트에만 유용합니다. 타임스탬프 -> 값의 맵을 생성하여 필드의 "분류(breakdown)"로 구성 요소를 제공합니다. `값` 필드를 그 구성 요소로 분해합니다.
{% endhint %}

### 종단 간 예제

아래에서는 [일반 작업](#common-metrics-operations) 예제를 확장하여 종단 간 사용 사례 흐름을 보여줍니다.

#### **Panther의 로그 메트릭 가져오기**

{% tabs %}
{% tab title="Python" %}

```python
# pip install gql aiohttp

from gql import gql, Client
from gql.transport.aiohttp import AIOHTTPTransport

transport = AIOHTTPTransport(
  url="YOUR_PANTHER_API_URL",
  headers={"X-API-Key": "YOUR_API_KEY"},
)

client = Client(transport=transport, fetch_schema_from_transport=True)

get_metrics = gql(
  """
  query GetMetrics($input: MetricsInput!)  {
    metrics(input: $input) {
      totalAlerts
      totalEventsProcessed
    }
  }
  """
)

data = client.execute(
  get_metrics,
  variable_values= {
    "input": {
      "fromDate": "2022-07-01T00:00:00Z",
      "toDate": "2022-07-31T23:59:59Z",
    }
  }
)

print(f'In July, Panther processed {data["metrics"]["totalEventsProcessed"]} events and generated {data["metrics"]["totalAlerts"]} alerts')
```

{% endtab %}

{% tab title="NodeJS" %}

```javascript
import { GraphQLClient, gql } from "graphql-request";

const client = new GraphQLClient(
  "YOUR_PANTHER_API_URL",
  { headers: { "X-API-Key": "YOUR_API_KEY" } }
);



const getMetrics = gql`
  query GetMetrics($input: MetricsInput!)  {
    metrics(input: $input) {
      totalAlerts
      totalEventsProcessed
    }
  }
`;

(async () => {
  try {
    const data = await client.request(getMetrics, {
      input: {
        fromDate: "2022-07-01T00:00:00Z",
        toDate: "2022-07-31T23:59:59Z"
      }
    });

    console.log(
      `In July, Panther processed ${data.metrics.totalEventsProcessed} events and generated ${data.metrics.totalAlerts} alerts.`
    );
  } catch (err) {
    console.error(err);
  }
})();

```

{% endtab %}
{% endtabs %}
