

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 建立指標篩選條件
<a name="MonitoringPolicyExamples"></a>

下列程序和範例示範如何建立指標篩選條件。

**Topics**
+ [建立日誌群組的指標篩選條件](CreateMetricFilterProcedure.md)
+ [範例：計算日誌事件數量](CountingLogEventsExample.md)
+ [範例：計算詞彙的出現次數](CountOccurrencesExample.md)
+ [範例：Count HTTP 404 代碼](Counting404Responses.md)
+ [範例：Count HTTP 4xx 代碼](FindCountMetric.md)
+ [範例：從 Apache 日誌擷取欄位並指派維度](ExtractBytesExample.md)

# 建立日誌群組的指標篩選條件
<a name="CreateMetricFilterProcedure"></a>

若要建立日誌群組的指標篩選條件，請遵循下列步驟。在有一些資料點之前，是看不到該指標的。

**使用 CloudWatch 主控台建立指標篩選條件**

1. 透過 [https://console.aws.amazon.com/cloudwatch/](https://console.aws.amazon.com/cloudwatch/) 開啟 CloudWatch 主控台。

1.  在導覽窗格中，選擇 **Logs** (日誌)，然後選擇 **Log groups** (日誌群組)。

1.  選擇日誌群組的名稱。

1.  選擇 `Actions`，然後選擇 **Create metric filter** (建立指標篩選條件)。

1.  針對 **Filter pattern** (篩選條件模式)，輸入篩選條件模式。如需詳細資訊，請參閱[用於指標篩選條件、訂閱篩選條件、篩選條件日誌事件和 Live Tail 的篩選條件模式語法](FilterAndPatternSyntax.md)。

1.  （選用） 如果您使用集中式日誌群組，您可以在**篩選條件選擇條件**下，根據來源帳戶 (`@aws.account`)、來源區域 (`@aws.region`) 或兩者條件來指定篩選條件。

1.  (選用) 若要測試篩選條件模式，請在 **Test Pattern** (測試模式) 下方，輸入一個或多個日誌事件來測試模式。每個日誌事件必須在一行中格式化。分行符號用於分隔 **Log event messages** (日誌事件訊息) 方塊中的日誌事件。

1.  選擇 **Next** (下一步)，然後輸入指標篩選條件的名稱。

1.  在 **Metric details** (指標詳細資訊) 下的 **Metric namespace** (指標命名空間) 中，輸入將發佈指標的 CloudWatch 命名空間名稱。如果命名空間不存在，請務必選取 **Create new** (新建)。

1.  針對 **Metric name** (指標名稱)，輸入新指標的名稱。

1.  針對 **Metric value** (指標值)，如果指標篩選條件計算篩選條件中的關鍵字出現次數，請輸入 1。如此會針對包含其中一個關鍵字的每個日誌事件，將指標遞增 1。

    或者輸入字符，例如 **\$1size**。如此會針對包含 `size` 欄位的每個日誌事件，以 `size` 欄位中的數值遞增指標。

1.  (選用) 針對 **Unit** (單位)，選取要指派給指標的單位。如果您未指定單位，單位會設為 `None`。

1.  (選用) 最多為指標的三個維度輸入名稱和字符。如果將維度分配給指標篩選條件建立的指標，則無法為這些指標指派預設值。
**注意**  
 僅在 JSON 或空格分隔指標篩選條件中支援維度。

1.  選擇 **Create metric filter (建立指標篩選條件)**。可以從導覽窗格中找到您建立的指標篩選條件。選擇 **Logs** (日誌)，然後選擇 **Log groups** (日誌群組)。選擇您為其建立指標篩選條件的日誌群組名稱，然後選取 **Metric filters** (指標篩選條件) 標籤。

# 範例：計算日誌事件數量
<a name="CountingLogEventsExample"></a>

日誌事件監控的最簡單類型就是計數發生的日誌事件數。您可以這樣做以保留所有事件的計數，以建立「活動訊號」樣式監控或僅練習建立指標篩選條件。

在以下 CLI 範例中，系統會將名為 MyAppAccessCount 的指標篩選條件套用到日誌群組 MyApp/access.log，以在 CloudWatch 命名空間 MyNamespace 中建立指標 EventCount。系統會將篩選條件設定為符合任何日誌事件的內容，並以「1」遞增指標。

**使用 CloudWatch 主控台建立指標篩選條件**

1. 透過 [https://console.aws.amazon.com/cloudwatch/](https://console.aws.amazon.com/cloudwatch/) 開啟 CloudWatch 主控台。

1. 在導覽窗格中，選擇 **Log groups** (日誌群組)。

1. 選擇日誌群組的名稱。

1. 選擇 `Actions` > **Create metric filter (建立指標篩選條件)**。

1. 將 **Filter Pattern (篩選條件模式)** 和 **Select Log Data to Test (選取要測試的日誌資料)** 保留空白。

1. 選擇 **Next (下一步)**，然後針對 **Filter Name (篩選條件名稱)**，輸入 **EventCount**。

1. 在 **Metric Details (指標詳細資訊)** 下的 **Metric Namespace (指標命名空間)** 中，輸入 **MyNameSpace**。

1. 針對 **Metric Name (指標名稱)**，輸入 **MyAppEventCount**。

1. 確認 **Metric Value (指標值)** 為 1。這會指定針對每個日誌事件的計數以 1 遞增。

1. 針對 **Default Value (預設值)**，輸入 0，然後選擇 **Next (下一步)**。指定預設值可確保即使沒有任何日誌事件發生時仍會報告資料，以避免發生 spotty 指標 (資料有時不存在)。

1. 選擇 **Create metric filter (建立指標篩選條件)**。

**使用 建立指標篩選條件 AWS CLI**  
在命令提示中，執行下列命令：

```
aws logs put-metric-filter \
  --log-group-name MyApp/access.log \
  --filter-name EventCount \
  --filter-pattern " " \
  --metric-transformations \
  metricName=MyAppEventCount,metricNamespace=MyNamespace,metricValue=1,defaultValue=0
```

您可以透過張貼任何事件資料來測試這個新政策。您應該會看到發佈到指標 MyAppAccessEventCount 的資料點。

**使用 發佈事件資料 AWS CLI**  
在命令提示中，執行下列命令：

```
aws logs put-log-events \
  --log-group-name MyApp/access.log --log-stream-name TestStream1 \
  --log-events \
    timestamp=1394793518000,message="Test event 1" \
    timestamp=1394793518000,message="Test event 2" \
    timestamp=1394793528000,message="This message also contains an Error"
```

# 範例：計算詞彙的出現次數
<a name="CountOccurrencesExample"></a>

日誌事件經常包含您想要計數，或是有關操作成功或失敗操作的重要訊息。例如，若指定的操作失敗，錯誤可能會發生且系統會將該錯誤記錄到日誌檔。您可能想要監控這些項目，以了解錯誤的趨勢。

在下例中，建立指標篩選條件來監控「Error」詞彙。政策已建立並新增到日誌群組 **MyApp/message.log**。CloudWatch Logs 會將資料點發佈至 **MyApp/message.log** 命名空間中的 CloudWatch 自訂指標 ErrorCount，針對每個包含 Error 的事件，值為 "1"。如果事件不包含單字「Error」，則會發佈值 0。在 CloudWatch 主控台中製作此資料的圖表時，請務必使用總和統計。

建立指標篩選條件後，您可以在 CloudWatch 主控台中檢視指標。選取要檢視的指標時，請選取符合日誌群組名稱的指標命名空間。如需詳細資訊，請參閱[檢視可用的指標](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/viewing_metrics_with_cloudwatch.html)。

**使用 CloudWatch 主控台建立指標篩選條件**

1. 透過 [https://console.aws.amazon.com/cloudwatch/](https://console.aws.amazon.com/cloudwatch/) 開啟 CloudWatch 主控台。

1. 在導覽窗格中，選擇 **Log groups** (日誌群組)。

1. 選擇日誌群組的名稱。

1. 選擇 **Actions (動作)** > **Create metric filter (建立指標篩選條件)**。

1. 針對 **Filter Pattern (篩選條件模式)**，輸入 **Error**。
**注意**  
在 **Filter Pattern** (篩選條件模式) 中的所有項目都會區分大小寫。

1. (選用) 若要測試篩選條件模式，請在 **Test Pattern** (測試模式) 下方，輸入一個或多個日誌事件，用以測試模式。每個日誌事件都必須在一行內，因為 **Log event messages** (日誌事件訊息) 方塊中使用換行來分隔日誌事件。

1. 選擇 **Next (下一步)**，然後在 **Assign metric (指派指標)** 頁面上，針對 **Filter Name (篩選條件名稱)** 輸入 **MyAppErrorCount**。

1. 在 **Metric Details** (指標詳細資訊) 下的 **Metric Namespace** (指標命名空間) 方塊中，輸入 **MyNameSpace**。

1. 針對 **Metric Name** (指標名稱)，輸入 **ErrorCount**。

1. 確認 **Metric Value (指標值)** 為 1。這會指定針對每個包含「Error」的日誌事件計數以 1 的方式遞增。

1. 針對 **Default Value (預設值)**，輸入 0，然後選擇 **Next (下一步)**。

1. 選擇 **Create metric filter (建立指標篩選條件)**。

**使用 建立指標篩選條件 AWS CLI**  
在命令提示中，執行下列命令：

```
aws logs put-metric-filter \
  --log-group-name MyApp/message.log \
  --filter-name MyAppErrorCount \
  --filter-pattern 'Error' \
  --metric-transformations \
      metricName=ErrorCount,metricNamespace=MyNamespace,metricValue=1,defaultValue=0
```

您可以透過張貼在訊息中包含「錯誤」單字的事件來測試這個新政策。

**使用 發佈事件 AWS CLI**  
畫面出現命令提示時，執行下列 命令。請注意，模式會區分大小寫。

```
aws logs put-log-events \
  --log-group-name MyApp/access.log --log-stream-name TestStream1 \
  --log-events \
    timestamp=1394793518000,message="This message contains an Error" \
    timestamp=1394793528000,message="This message also contains an Error"
```

# 範例：Count HTTP 404 代碼
<a name="Counting404Responses"></a>

您可以使用 CloudWatch Logs 監控 Apache 伺服器傳回 HTTP 404 回應的次數，HTTP 404 回應是找不到頁面的回應碼。您可能想要監控此次數以了解您的網站訪客找不到所需資源的頻率。假設您的日誌記錄的建置是包含每個日誌事件 (網站瀏覽) 的以下資訊：
+ 請求者 IP 地址
+ RFC 1413 身分
+ 使用者名稱
+ 時間戳記
+ 含請求資源和通訊協定的請求方法
+ 要請求的 HTTP 回應碼
+ 請求中傳入的位元組數

此範例看起來與以下類似：

```
127.0.0.1 - frank [10/Oct/2000:13:55:36 -0700] "GET /apache_pb.gif HTTP/1.0" 404 2326
```

您可以指定規則，該規則會嘗試比對該結構的事件是否含 HTTP 404 錯誤，如下範例所示：

**使用 CloudWatch 主控台建立指標篩選條件**

1. 透過 [https://console.aws.amazon.com/cloudwatch/](https://console.aws.amazon.com/cloudwatch/) 開啟 CloudWatch 主控台。

1. 在導覽窗格中，選擇 **Log groups** (日誌群組)。

1. 選擇 `Actions` > **Create metric filter (建立指標篩選條件)**。

1. 針對 **Filter Pattern (篩選條件模式)**，輸入 **[IP, UserInfo, User, Timestamp, RequestInfo, StatusCode=404, Bytes]**。

1. (選用) 若要測試篩選條件模式，請在 **Test Pattern** (測試模式) 下方，輸入一個或多個日誌事件，用以測試模式。每個日誌事件都必須在一行內，因為 **Log event messages** (日誌事件訊息) 方塊中使用換行來分隔日誌事件。

1. 選擇 **Next (下一步)**，然後針對 **Filter Name (篩選條件名稱)**，輸入 **HTTP404Errors**。

1. 在 **Metric Details (指標詳細資料)** 下的 **Metric Namespace (指標命名空間)** 中，輸入 **MyNameSpace**。

1. 針對 **Metric Name (指標名稱)**，輸入 **ApacheNotFoundErrorCount**。

1. 確認 **Metric Value (指標值)** 為 1。這會指定針對每個 404 錯誤事件的計數增加 1。

1. 針對 **Default Value (預設值)**，輸入 0，然後選擇 **Next (下一步)**。

1. 選擇 **Create metric filter (建立指標篩選條件)**。

**使用 建立指標篩選條件 AWS CLI**  
在命令提示中，執行下列命令：

```
aws logs put-metric-filter \
  --log-group-name MyApp/access.log \
  --filter-name HTTP404Errors \
  --filter-pattern '[ip, id, user, timestamp, request, status_code=404, size]' \
  --metric-transformations \
      metricName=ApacheNotFoundErrorCount,metricNamespace=MyNamespace,metricValue=1
```

在這個範例中，會使用到左右方括號、雙引號和字元字串 404 等常值字元。此模式需與被視為監控之日誌事件的整個日誌事件訊息相比對。

您可以使用 **describe-metric-filters** 命令來驗證指標篩選條件的建立。您應該會看到類似下面的輸出：

```
aws logs describe-metric-filters --log-group-name MyApp/access.log

{
    "metricFilters": [
        {
            "filterName": "HTTP404Errors", 
            "metricTransformations": [
                {
                    "metricValue": "1", 
                    "metricNamespace": "MyNamespace", 
                    "metricName": "ApacheNotFoundErrorCount"
                }
            ], 
            "creationTime": 1399277571078, 
            "filterPattern": "[ip, id, user, timestamp, request, status_code=404, size]"
        }
    ]
}
```

現在您可以手動張貼幾個事件：

```
aws logs put-log-events \
--log-group-name MyApp/access.log --log-stream-name hostname \
--log-events \
timestamp=1394793518000,message="127.0.0.1 - bob [10/Oct/2000:13:55:36 -0700] \"GET /apache_pb.gif HTTP/1.0\" 404 2326" \
timestamp=1394793528000,message="127.0.0.1 - bob [10/Oct/2000:13:55:36 -0700] \"GET /apache_pb2.gif HTTP/1.0\" 200 2326"
```

放置這些範例日誌事件後，您可以擷取在 CloudWatch 主控台中名為 ApacheNotFoundErrorCount 的指標。

# 範例：Count HTTP 4xx 代碼
<a name="FindCountMetric"></a>

在上述範例中，您可能想要監控 web 服務存取日誌和監控 HTTP 回應碼層級。例如，您可能想要監控所有 HTTP 400 層級錯誤。不過，您可能不會想要為每個傳回程式碼指定新指標篩選條件。

以下範例示範如何建立指標，其中包含使用從 [範例：Count HTTP 404 代碼](Counting404Responses.md) 範例之 Apache 存取日誌格式來自存取日誌的所有 400 層級 HTTP 程式碼回應。

**使用 CloudWatch 主控台建立指標篩選條件**

1. 透過 [https://console.aws.amazon.com/cloudwatch/](https://console.aws.amazon.com/cloudwatch/) 開啟 CloudWatch 主控台。

1. 在導覽窗格中，選擇 **Log groups** (日誌群組)。

1. 選擇 Apache 伺服器的日誌群組名稱。

1. 選擇 `Actions` > **Create metric filter (建立指標篩選條件)**。

1. 針對 **Filter Pattern** (篩選條件模式)，輸入 **[ip, id, user, timestamp, request, status\$1code=4\$1, size]**。

1. (選用) 若要測試篩選條件模式，請在 **Test Pattern** (測試模式) 下方，輸入一個或多個日誌事件，用以測試模式。每個日誌事件都必須在一行內，因為 **Log event messages** (日誌事件訊息) 方塊中使用換行來分隔日誌事件。

1. 選擇 **Next** (下一步)，然後針對 **Filter Name** (篩選條件名稱)，輸入 **HTTP4xxErrors**。

1. 在 **Metric** (指標詳細資訊) 下的 **Metric Namespace** (指標命名空間) 中，輸入 **MyNameSpace**。

1. 針對 **Metric name** (指標名稱)，輸入 **HTTP4xxErrors**。

1. 針對 **Metric value** (指標值)，輸入 1。這會指定針對每個包含「4xx 錯誤」的日誌事件以 1 的方式遞增計數。

1. 針對 **Default value** (預設值)，輸入 0，然後選擇 **Next** (下一步)。

1. 選擇 **Create metric filter (建立指標篩選條件)**。

**使用 建立指標篩選條件 AWS CLI**  
在命令提示中，執行下列命令：

```
aws logs put-metric-filter \
  --log-group-name MyApp/access.log \
  --filter-name HTTP4xxErrors \
  --filter-pattern '[ip, id, user, timestamp, request, status_code=4*, size]' \
  --metric-transformations \
  metricName=HTTP4xxErrors,metricNamespace=MyNamespace,metricValue=1,defaultValue=0
```

您可以使用 put-event 呼叫中的以下資料來測試這個規則。如果您沒有在之前的範例中移除監控規則，您將會產生兩種不同的指標。

```
127.0.0.1 - - [24/Sep/2013:11:49:52 -0700] "GET /index.html HTTP/1.1" 404 287
127.0.0.1 - - [24/Sep/2013:11:49:52 -0700] "GET /index.html HTTP/1.1" 404 287
127.0.0.1 - - [24/Sep/2013:11:50:51 -0700] "GET /~test/ HTTP/1.1" 200 3
127.0.0.1 - - [24/Sep/2013:11:50:51 -0700] "GET /favicon.ico HTTP/1.1" 404 308
127.0.0.1 - - [24/Sep/2013:11:50:51 -0700] "GET /favicon.ico HTTP/1.1" 404 308
127.0.0.1 - - [24/Sep/2013:11:51:34 -0700] "GET /~test/index.html HTTP/1.1" 200 3
```

# 範例：從 Apache 日誌擷取欄位並指派維度
<a name="ExtractBytesExample"></a>

有時，不使用計數，而是在指標值的個別日誌事件中使用值很有用。此範例顯示如何建立擷取規則來建立指標，該指標會量測 Apache Web 伺服器傳出的位元組數。

此範例也會說明如何將維度指派給您要建立的指標。

**使用 CloudWatch 主控台建立指標篩選條件**

1. 透過 [https://console.aws.amazon.com/cloudwatch/](https://console.aws.amazon.com/cloudwatch/) 開啟 CloudWatch 主控台。

1. 在導覽窗格中，選擇 **Log groups** (日誌群組)。

1. 選擇 Apache 伺服器的日誌群組名稱。

1. 選擇 `Actions` > **Create metric filter (建立指標篩選條件)**。

1. 針對 **Filter Pattern** (篩選條件模式)，輸入 **[ip, id, user, timestamp, request, status\$1code, size]**。

1. (選用) 若要測試篩選條件模式，請在 **Test Pattern** (測試模式) 下方，輸入一個或多個日誌事件，用以測試模式。每個日誌事件都必須在一行內，因為 **Log event messages** (日誌事件訊息) 方塊中使用換行來分隔日誌事件。

1. 選擇 **Next** (下一步)，然後針對 **Filter Name** (篩選條件名稱)，輸入 **size**。

1. 在 **Metric** (指標詳細資訊) 下的 **Metric Namespace** (指標命名空間) 中，輸入 **MyNameSpace**。因為這是新的命名空間，請務必選取 **Create new** (新建)。

1. 針對 **Metric name** (指標名稱)，輸入 **BytesTransferred**

1. 針對 **Metric value** (指標值)，輸入 **\$1size**。

1. 針對 **Unit** (單位)，選取**Bytes** (位元組)。

1. 針對 **Dimension Name (維度名稱)**，輸入 **IP**。

1. 針對 **Dimension Value** (維度值)，輸入 **\$1ip**，然後選擇 **Next** (下一步)。

1. 選擇 **Create metric filter (建立指標篩選條件)**。

**使用 建立此指標篩選條件 AWS CLI**  
在命令提示中，執行下列命令

```
aws logs put-metric-filter \
--log-group-name MyApp/access.log \
 --filter-name BytesTransferred \
 --filter-pattern '[ip, id, user, timestamp, request, status_code, size]' \
 --metric-transformations  \
 metricName=BytesTransferred,metricNamespace=MyNamespace,metricValue='$size'
```

```
aws logs put-metric-filter \
--log-group-name MyApp/access.log \
--filter-name BytesTransferred \
--filter-pattern '[ip, id, user, timestamp, request, status_code, size]' \
--metric-transformations  \
metricName=BytesTransferred,metricNamespace=MyNamespace,metricValue='$size',unit=Bytes,dimensions='{{IP=$ip}}'
```

**注意**  
在此命令中，使用此格式指定多個維度。  

```
aws logs put-metric-filter \
--log-group-name my-log-group-name \
--filter-name my-filter-name \
--filter-pattern 'my-filter-pattern' \
--metric-transformations  \
metricName=my-metric-name,metricNamespace=my-metric-namespace,metricValue=my-token,unit=unit,dimensions='{dimension1=$dim,dimension2=$dim2,dim3=$dim3}'
```

您可以使用 put-log-event 呼叫中的以下資料來測試這個規則。如果您沒有在之前的範例中移除監控規則，此將會產生兩種不同的指標。

```
127.0.0.1 - - [24/Sep/2013:11:49:52 -0700] "GET /index.html HTTP/1.1" 404 287
127.0.0.1 - - [24/Sep/2013:11:49:52 -0700] "GET /index.html HTTP/1.1" 404 287
127.0.0.1 - - [24/Sep/2013:11:50:51 -0700] "GET /~test/ HTTP/1.1" 200 3
127.0.0.1 - - [24/Sep/2013:11:50:51 -0700] "GET /favicon.ico HTTP/1.1" 404 308
127.0.0.1 - - [24/Sep/2013:11:50:51 -0700] "GET /favicon.ico HTTP/1.1" 404 308
127.0.0.1 - - [24/Sep/2013:11:51:34 -0700] "GET /~test/index.html HTTP/1.1" 200 3
```