使用診斷設定監視 Azure Cache for Redis 資料 (機器翻譯)
本文內容
Azure 中的診斷設定可用來收集資源記錄。 Azure 資源會發出資源記錄,並提供有關該資源作業的豐富、頻繁資料。 這些記錄會根據要求擷取,也稱為「資料平面記錄」。 如需 Azure 中功能的建議概觀,請參閱 Azure 監視器 中的診斷設定。 這些記錄的內容會依資源類型而有所不同。 在 Azure Cache for Redis 中,有兩個選項可供記錄:
可用性範圍
層
基本、標準與進階
企業和企業 Flash
快取計量
Yes
Yes
連線ion 記錄
Yes
Yes
快取計量
Azure Cache for Redis 會 發出許多計量,例如 每秒的伺服器負載 和 連線, 這些計量 對記錄很有用。 選取 [AllMetrics ] 選項可記錄這些和其他快取計量。 您可以設定保留計量的時間長度。 如需將快取計量匯出至儲存體帳戶 的範例,請參閱 這裡。
連線ion 記錄
Azure Cache for Redis 會使用 Azure 診斷設定來記錄用戶端連線到快取的資訊。 記錄和分析此診斷設定可協助您瞭解誰正在連線到快取和這些連線的時間戳記。 記錄資料可用來識別安全性缺口的範圍,以及用於安全性稽核目的。
Azure Cache for Redis 層之間的差異
連線記錄的實作在層之間稍有不同:
基本、標準和進階版層快取會 依 IP 位址輪詢用戶端連線,包括源自每個唯一 IP 位址的連線數目。 這些記錄不會累積。 它們代表以 10 秒間隔拍攝的時間點快照集。 驗證事件(成功和失敗)和中斷線上活動不會記錄在這些層中。
企業和企業 Flash 層快 取會使用 Redis Enterprise 內建的 稽核線上活動 功能。 稽核線上活動允許記錄每個連線、中斷連線和驗證事件,包括失敗的驗證事件。
產生的連線記錄在層之間看起來很類似,但有一些差異。 本文稍後會更詳細地顯示這兩種格式。
重要
基本、標準和進階版層 中的連線記錄會 輪詢快取中的目前用戶端連線。 相同的用戶端 IP 位址會一遍又一次地出現。 企業和企業 Flash 層中的記錄著重于每個連線 事件 。 只有在第一次發生實際事件時,才會發生記錄。
連線ion 記錄的必要條件/限制
基本、標準和進階層級
由於這些層中的連線記錄包含每隔 10 秒所擷取的時間點快照集,因此不會記錄在 10 秒間隔內建立和移除的連接。
不會記錄驗證事件。
所有診斷設定最多 可能需要 90 分鐘 的時間,才能開始流向您選取的目的地。
啟用連線記錄可能會導致快取實例效能降低。
將記錄串流至 Azure Log Analytics 時,僅支援 Analytics 記錄定價方案。 如需詳細資訊,請參閱 Azure 監視器計量價格 。
企業和企業 Flash 層
當您使用 OSS 叢集原則 時,會從每個資料節點發出記錄。 當您使用 企業叢集原則 時,只有做為 Proxy 的節點會發出記錄。 這兩個版本仍然涵蓋快取的所有連線。 這只是一個架構差異。
資料遺失(也就是遺失線上活動)很少見,但可能。 資料遺失通常是由網路問題所造成。
中斷連線記錄尚未完全穩定,而且可能會遺漏事件。
因為企業層上的連線記錄是以事件為基礎,請小心保留原則。 例如,如果保留設定為 10 天,且線上活動發生在 15 天前,該連線可能仍然存在,但該連線的記錄不會保留。
如果使用主動式異地複 寫,則必須個別針對異地複寫群組中的每個快取實例設定記錄。
所有診斷設定最多 可能需要 90 分鐘 的時間,才能開始流向您選取的目的地。
啟用連線記錄可能會導致快取實例效能降低。
重要
選取記錄時,您可以選擇特定的 類別或 類別 群組 ,這是跨 Azure 服務預先定義的記錄群組。 當您使用 類別群組 時, 就無法再設定保留設定 。 如果您需要判斷連線記錄的保留期間,請改為選取 [類別 ] 區段中的專案 。
記錄目的地
您可以開啟 Azure Cache for Redis 實例的診斷設定,並將資源記錄傳送至下列目的地:
Log Analytics 工作區 - 不需要位於與所監視資源相同的區域中。
儲存體帳戶 - 必須位於與快取相同的區域中。 不過,進階版儲存體帳戶不支援 作為目的地。
事件中樞 - 啟用虛擬網路時,診斷設定無法存取事件中樞資源。 啟用 [ 允許信任Microsoft 服務略過此防火牆? 事件中樞中的設定,以授與事件中樞資源的存取權。 事件中樞必須位於與快取相同的區域中。
合作夥伴解決方案 - 您可以在這裡找到 潛在的合作夥伴記錄解決方案清單
如需診斷需求的詳細資訊,請參閱 診斷設定 。
當您將診斷記錄傳送至任一目的地時,系統會向您收取儲存體帳戶和事件中樞使用量的一般資料費率。 您會在 Azure 監視器下計費,而不是 Azure Cache for Redis。 將記錄傳送至 Log Analytics 時,您只需支付 Log Analytics 資料擷取的費用。
如需詳細資訊, 請參閱 Azure 監視器定價 。
使用Azure 入口網站啟用連線記錄
登入 Azure 入口網站 。
流覽至 Azure Cache for Redis 帳戶。 開啟左側 [ 監視] 區段 底下的 [ 診斷設定 ] 窗格。 然後,選取 [ 新增診斷設定 ]。
在 [ 診斷設定] 窗格中,從 [類別 ] 選取 [連線edClientList ]。
如需所記錄資料的詳細資訊,請參閱下列 連線記錄 的內容。
選取 連線edClientList 之後,請將記錄傳送至您慣用的目的地。 選取工作窗格中的資訊。
登入 Azure 入口網站 。
流覽至 Azure Cache for Redis 帳戶。 開啟左側 [監視 ] 區段底下的 [ 診斷設定 - 稽核 ] 窗格。 然後,選取 [ 新增診斷設定 ]。
在 [ 診斷設定 - 稽核 ] 窗格中,選取 [類別 ] 中的 [連線ion 事件 ]。
如需所記錄資料的詳細資訊,請參閱下列 連線記錄 的內容。
選取 連線事件 之後,請將記錄傳送至您慣用的目的地。 選取工作窗格中的資訊。
使用 REST API 啟用連線記錄
使用 Azure 監視器 REST API 透過互動式主控台建立診斷設定。 如需詳細資訊,請參閱 建立或更新 。
要求
PUT https://management.azure.com/{resourceUri}/providers/Microsoft.Insights/diagnosticSettings/{name}?api-version=2017-05-01-preview
參數/標頭
值/描述
name
診斷設定的名稱。
resourceUri
subscriptions/{SUBSCRIPTION_ID}/resourceGroups/{RESOURCE_GROUP}/providers/Microsoft.Cache/Redis/{CACHE_NAME}
api-version
2017-05-01-preview
Content-Type
application/json
本文
{
"properties": {
"storageAccountId": "/subscriptions/df602c9c-7aa0-407d-a6fb-eb20c8bd1192/resourceGroups/apptest/providers/Microsoft.Storage/storageAccounts/appteststorage1",
"eventHubAuthorizationRuleId": "/subscriptions/1a66ce04-b633-4a0b-b2bc-a912ec8986a6/resourceGroups/montest/providers/microsoft.eventhub/namespaces/mynamespace/eventhubs/myeventhub/authorizationrules/myrule",
"eventHubName": "myeventhub",
"workspaceId": "/subscriptions/4b9e8510-67ab-4e9a-95a9-e2f1e570ea9c/resourceGroups/insights-integration/providers/Microsoft.OperationalInsights/workspaces/myworkspace",
"logs": [
{
"category": "ConnectedClientList",
"enabled": true,
"retentionPolicy": {
"enabled": false,
"days": 0
}
}
]
}
}
使用 Azure 監視器 REST API 透過互動式主控台建立診斷設定。 如需詳細資訊,請參閱 建立或更新 。
要求
PUT https://management.azure.com/{resourceUri}/providers/Microsoft.Insights/diagnosticSettings/{name}?api-version=2017-05-01-preview
參數/標頭
值/描述
name
診斷設定的名稱。
resourceUri
subscriptions/{SUBSCRIPTION_ID}/resourceGroups/{RESOURCE_GROUP}/providers/Microsoft.Cache/RedisEnterprise/{CACHE_NAME}/databases/default
api-version
2017-05-01-preview
Content-Type
application/json
本文
{
"properties": {
"storageAccountId": "/subscriptions/df602c9c-7aa0-407d-a6fb-eb20c8bd1192/resourceGroups/apptest/providers/Microsoft.Storage/storageAccounts/myteststorage",
"eventHubAuthorizationRuleID": "/subscriptions/1a66ce04-b633-4a0b-b2bc-a912ec8986a6/resourceGroups/montest/providers/microsoft.eventhub/namespaces/mynamespace/authorizationrules/myrule",
"eventHubName": "myeventhub",
"marketplacePartnerId": "/subscriptions/abcdeabc-1234-1234-ab12-123a1234567a/resourceGroups/test-rg/providers/Microsoft.Datadog/monitors/mydatadog",
"workspaceId": "/subscriptions/4b9e8510-67ab-4e9a-95a9-e2f1e570ea9c/resourceGroups/insights integration/providers/Microsoft.OperationalInsights/workspaces/myworkspace",
"logs": [
{
"category": "ConnectionEvents",
"enabled": true,
"retentionPolicy": {
"enabled": false,
"days": 0
}
}
]
}
}
使用 Azure CLI 啟用連線記錄
az monitor diagnostic-settings create
使用 命令來使用 Azure CLI 建立診斷設定。 如需命令和參數描述的詳細資訊,請參閱 建立診斷設定,以將平臺記錄和計量傳送至不同的目的地 。 此範例示範如何使用 Azure CLI 將資料串流至四個不同的端點:
az monitor diagnostic-settings create
--resource /subscriptions/{subscriptionID}/resourceGroups/{resourceGroupname}/providers/Microsoft.Cache/Redis/{cacheName}
--name {logName}
--logs '[{"category": "ConnectedClientList","enabled": true,"retentionPolicy": {"enabled": false,"days": 0}}]'
--event-hub {eventHubName}
--event-hub-rule /subscriptions/{subscriptionID}/resourceGroups/{resourceGroupName}/providers/microsoft.eventhub/namespaces/{eventHubNamespace}/authorizationrule/{ruleName}
--storage-account /subscriptions/{subscriptionID}/resourceGroups/{resourceGroupName}/providers/Microsoft.Storage/storageAccounts/{storageAccountName}
--workspace /subscriptions/{subscriptionID}/resourceGroups/{resourceGroupName}/providers/Microsoft.OperationalInsights/workspaces/{logAnalyticsWorkspaceName}
--marketplace-partner-id/subscriptions/{subscriptionID}/resourceGroups{resourceGroupname}/proviers/Microsoft.Datadog/monitors/mydatadog
az monitor diagnostic-settings create
使用 命令來使用 Azure CLI 建立診斷設定。 如需命令和參數描述的詳細資訊,請參閱 建立診斷設定,以將平臺記錄和計量傳送至不同的目的地 。 此範例示範如何使用 Azure CLI 將資料串流至四個不同的端點:
az monitor diagnostic-settings create
--resource /subscriptions/{subscriptionID}/resourceGroups/{resourceGroupName}/providers/Microsoft.Cache/redisenterprise/{cacheName}/databases/default
--name {logName}
--logs '[{"category": "ConnectionEvents","enabled": true,"retentionPolicy": {"enabled": false,"days": 0}}]'
--event-hub {eventHubName}
--event-hub-rule /subscriptions/{subscriptionID}/resourceGroups/{resourceGroupName}/providers/microsoft.eventhub/namespaces/{eventHubNamespace}/authorizationrule/{ruleName}
--storage-account /subscriptions/{subscriptionID}/resourceGroups/{resourceGroupName}/providers/Microsoft.Storage/storageAccounts/{storageAccountName}
--workspace /subscriptions/{subscriptionID}/resourceGroups/{resourceGroupName}/providers/Microsoft.OperationalInsights/workspaces/{logAnalyticsWorkspaceName}
--marketplace-partner-id/subscriptions/{subscriptionID}/resourceGroups{resourceGroupname}/proviers/Microsoft.Datadog/monitors/mydatadog
連線記錄的內容
這些欄位和屬性會出現在記錄類別中 ConnectedClientList
。 在 Azure 監視器 中 ACRConnectedClientList
,記錄會收集在 資源提供者名稱 MICROSOFT.CACHE
下的資料表中。
Azure 儲存體欄位或屬性
Azure 監視器記錄屬性
描述
time
TimeGenerated
以 UTC 產生記錄檔時的時間戳記。
location
Location
存取 Azure Cache for Redis 實例的位置(區域)。
category
n/a
可用的記錄類別: ConnectedClientList
。
resourceId
_ResourceId
已啟用記錄的 Azure Cache for Redis 資源。
operationName
OperationName
與記錄檔記錄相關聯的 Redis 作業。
properties
n/a
此欄位的內容會在後續的資料列中描述。
tenant
CacheName
Azure Cache for Redis 實例的名稱。
roleInstance
RoleInstance
記錄用戶端清單的角色實例。
connectedClients.ip
ClientIp
Redis 用戶端 IP 位址。
connectedClients.privateLinkIpv6
PrivateLinkIpv6
Redis 用戶端私人連結 IPv6 位址(如果適用)。
connectedClients.count
ClientCount
來自相關聯 IP 位址的 Redis 用戶端連線數目。
儲存體客戶紀錄範例
如果您將記錄傳送至儲存體帳戶,記錄的內容看起來會像這樣。
{
"time": "2021-08-05T21:04:58.0466086Z",
"location": "canadacentral",
"category": "ConnectedClientList",
"properties": {
"tenant": "mycache",
"connectedClients": [
{
"ip": "192.123.43.36",
"count": 86
},
{
"ip": "10.1.1.4",
"privateLinkIpv6": "fd40:8913:31:6810:6c31:200:a01:104",
"count": 1
}
],
"roleInstance": "1"
},
"resourceId": "/SUBSCRIPTIONS/E6761CE7-A7BC-442E-BBAE-950A121933B5/RESOURCEGROUPS/AZURE-CACHE/PROVIDERS/MICROSOFT.CACHE/REDIS/MYCACHE",
"Level": 4,
"operationName": "Microsoft.Cache/ClientList"
}
這些欄位和屬性會出現在記錄類別中 ConnectionEvents
。 在 Azure 監視器 中 REDConnectionEvents
,記錄會收集在 資源提供者名稱 MICROSOFT.CACHE
下的資料表中。
Azure 儲存體欄位或屬性
Azure 監視器記錄屬性
描述
time
TimeGenerated
擷取事件記錄檔時的時間戳記 (UTC)。
location
Location
存取 Azure Cache for Redis 實例的位置(區域)。
category
n/a
可用的記錄類別: ConnectionEvents
。
resourceId
_ResourceId
已啟用記錄的 Azure Cache for Redis 資源。
operationName
OperationName
與記錄檔記錄相關聯的 Redis 作業。
properties
n/a
此欄位的內容會在後續的資料列中描述。
eventEpochTime
EventEpochTime
UNIX 時間戳記(自 1970 年 1 月 1 日起的秒數),事件發生在 UTC 時。 時間戳記可以使用 log Analytics 工作區中的函式unixtime_seconds_todatetime轉換成 datetime 格式。
clientIP
ClientIP
Redis 用戶端 IP 位址。 如果使用 Azure 儲存體,IP 位址會根據快取類型,是 IPv4 或私人連結 IPv6 格式。 如果使用 Log Analytics,則結果一律會在 IPv4 中,提供個別的 IPv6 欄位。
n/a
PrivateLinkIPv6
Redis 用戶端私人連結 IPv6 位址(只有在同時使用 Private Link 和記錄分析時才會發出)。
id
ConnectionId
Redis 指派的唯一連線識別碼。
eventType
EventType
線上活動的類型(new_conn、驗證或close_conn)。
eventStatus
EventStatus
驗證要求的結果作為狀態碼(僅適用于驗證事件)。
注意
如果使用私人連結,則只會記錄 IPv6 位址(除非您將資料串流處理至記錄分析)。 您可以查看 IPv6 位址中的最後四個位元組資料,將 IPv6 位址轉換成對等的 IPv4 位址。 例如,在私人連結 IPv6 位址 「fd40:8913:31:6810:6c31:200:a01:104」中,十六進位的最後四個位元組是 「0a」、「01」、「01」 和 「04」。 (請注意,每個冒號之後都會省略前置零。這些對應到十進位中的 「10」、「1」、「1」 和 「4」,給我們 IPv4 位址 「10.1.1.4」。
儲存體客戶紀錄範例
如果您將記錄傳送至儲存體帳戶,線上活動的記錄如下所示:
{
"time": "2023-01-24T10:00:02.3680050Z",
"resourceId": "/SUBSCRIPTIONS/4A1C78C6-5CB1-422C-A34E-0DF7FCB9BD0B/RESOURCEGROUPS/TEST/PROVIDERS/MICROSOFT.CACHE/REDISENTERPRISE/AUDITING-SHOEBOX/DATABASES/DEFAULT",
"category": "ConnectionEvents",
"location": "westus",
"operationName": "Microsoft.Cache/redisEnterprise/databases/ConnectionEvents/Read",
"properties": {
"eventEpochTime": 1674554402,
"id": 6185063009002,
"clientIP": "20.228.16.39",
"eventType": "new_conn"
}
}
驗證事件的記錄如下所示:
{
"time": "2023-01-24T10:00:02.3680050Z",
"resourceId": "/SUBSCRIPTIONS/4A1C78C6-5CB1-422C-A34E-0DF7FCB9BD0B/RESOURCEGROUPS/TEST/PROVIDERS/MICROSOFT.CACHE/REDISENTERPRISE/AUDITING-SHOEBOX/DATABASES/DEFAULT",
"category": "ConnectionEvents",
"location": "westus",
"operationName": "Microsoft.Cache/redisEnterprise/databases/ConnectionEvents/Read",
"properties": {
"eventEpochTime": 1674554402,
"id": 6185063009002,
"clientIP": "20.228.16.39",
"eventType": "auth",
"eventStatus": 8
}
}
中斷線上活動的記錄看起來像這樣:
{
"time": "2023-01-24T10:00:03.3680050Z",
"resourceId": "/SUBSCRIPTIONS/4A1C78C6-5CB1-422C-A34E-0DF7FCB9BD0B/RESOURCEGROUPS/TEST/PROVIDERS/MICROSOFT.CACHE/REDISENTERPRISE/AUDITING-SHOEBOX/DATABASES/DEFAULT",
"category": "ConnectionEvents",
"location": "westus",
"operationName": "Microsoft.Cache/redisEnterprise/databases/ConnectionEvents/Read",
"properties": {
"eventEpochTime": 1674554402,
"id": 6185063009002,
"clientIP": "20.228.16.39",
"eventType": "close_conn"
}
}
Log Analytics 查詢
注意
如需如何使用 Azure Log Analytics 的教學課程,請參閱 Azure 監視器 中的 Log Analytics 概觀。 請記住,記錄最多可能需要 90 分鐘的時間,記錄才會顯示在記錄檔 Analtyics 中。
以下是一些做為模型的基本查詢。
Azure Cache for Redis 用戶端連線每小時在指定的 IP 位址範圍內:
let IpRange = "10.1.1.0/24";
ACRConnectedClientList
// For particular datetime filtering, add '| where TimeGenerated between (StartTime .. EndTime)'
| where ipv4_is_in_range(ClientIp, IpRange)
| summarize ConnectionCount = sum(ClientCount) by TimeRange = bin(TimeGenerated, 1h)
已連線至快取的唯一 Redis 用戶端 IP 位址:
ACRConnectedClientList
| summarize count() by ClientIp
Azure Cache for Redis 連線每小時在指定的 IP 位址範圍內:
REDConnectionEvents
// For particular datetime filtering, add '| where EventTime between (StartTime .. EndTime)'
// For particular IP range filtering, add '| where ipv4_is_in_range(ClientIp, IpRange)'
// IP range can be defined like this 'let IpRange = "10.1.1.0/24";' at the top of query.
| extend EventTime = unixtime_seconds_todatetime(EventEpochTime)
| where EventType == "new_conn"
| summarize ConnectionCount = count() by TimeRange = bin(EventTime, 1h)
Azure Cache for Redis 驗證要求每小時在指定的 IP 位址範圍內:
REDConnectionEvents
| extend EventTime = unixtime_seconds_todatetime(EventEpochTime)
// For particular datetime filtering, add '| where EventTime between (StartTime .. EndTime)'
// For particular IP range filtering, add '| where ipv4_is_in_range(ClientIp, IpRange)'
// IP range can be defined like this 'let IpRange = "10.1.1.0/24";' at the top of query.
| where EventType == "auth"
| summarize AuthencationRequestsCount = count() by TimeRange = bin(EventTime, 1h)
已連線至快取的唯一 Redis 用戶端 IP 位址:
REDConnectionEvents
// https://docs.redis.com/latest/rs/security/audit-events/#status-result-codes
// EventStatus :
// 0 AUTHENTICATION_FAILED - Invalid username and/or password.
// 1 AUTHENTICATION_FAILED_TOO_LONG - Username or password are too long.
// 2 AUTHENTICATION_NOT_REQUIRED - Client tried to authenticate, but authentication isn’t necessary.
// 3 AUTHENTICATION_DIRECTORY_PENDING - Attempting to receive authentication info from the directory in async mode.
// 4 AUTHENTICATION_DIRECTORY_ERROR - Authentication attempt failed because there was a directory connection error.
// 5 AUTHENTICATION_SYNCER_IN_PROGRESS - Syncer SASL handshake. Return SASL response and wait for the next request.
// 6 AUTHENTICATION_SYNCER_FAILED - Syncer SASL handshake. Returned SASL response and closed the connection.
// 7 AUTHENTICATION_SYNCER_OK - Syncer authenticated. Returned SASL response.
// 8 AUTHENTICATION_OK - Client successfully authenticated.
| where EventType == "auth" and EventStatus == 2 or EventStatus == 8 or EventStatus == 7
| summarize count() by ClientIp
REDConnectionEvents
// https://docs.redis.com/latest/rs/security/audit-events/#status-result-codes
// EventStatus :
// 0 AUTHENTICATION_FAILED - Invalid username and/or password.
// 1 AUTHENTICATION_FAILED_TOO_LONG - Username or password are too long.
// 2 AUTHENTICATION_NOT_REQUIRED - Client tried to authenticate, but authentication isn’t necessary.
// 3 AUTHENTICATION_DIRECTORY_PENDING - Attempting to receive authentication info from the directory in async mode.
// 4 AUTHENTICATION_DIRECTORY_ERROR - Authentication attempt failed because there was a directory connection error.
// 5 AUTHENTICATION_SYNCER_IN_PROGRESS - Syncer SASL handshake. Return SASL response and wait for the next request.
// 6 AUTHENTICATION_SYNCER_FAILED - Syncer SASL handshake. Returned SASL response and closed the connection.
// 7 AUTHENTICATION_SYNCER_OK - Syncer authenticated. Returned SASL response.
// 8 AUTHENTICATION_OK - Client successfully authenticated.
| where EventType == "auth" and EventStatus != 2 and EventStatus != 8 and EventStatus != 7
| project ClientIp, EventStatus, ConnectionId
下一步
如需如何使用 Azure 入口網站、CLI 或 PowerShell 建立診斷設定的詳細資訊,請參閱 在 Azure 中建立診斷設定以收集平臺記錄和計量一文。