Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Область применения: ✔️ файловые хранилища SMB Azure
В этой статье перечислены клиенты ClientOtherErrors, которые могут возникнуть при использовании общих папок SMB Azure. Как правило, ClientOtherErrors в основном являются безвредными и ожидаемыми ошибками. Запросы завершаются сбоем, но система продолжает вести себя должным образом. Это нормально, чтобы увидеть значительное количество этих ошибок, зарегистрированных.
Что такое ClientOtherErrors?
ClientOtherError обычно означает ожидаемые ошибки на стороне клиента, такие как "не найдено" и "ресурс уже существует". В файлах журнала хранилища на стороне сервера эти операции записываются с состоянием транзакции ClientOtherErrors.
Например, клиент Windows SMB, взаимодействующий с удаленными файловыми системами, не всегда знает возможности удаленной файловой системы. Это может быть Windows Server, Файлы Azure или другая реализация сервера SMB. Поэтому клиент SMB будет вызывать удаленный файловый сервер с определенными API. Если эти API не удается, он будет возвращаться к использованию другого API или даже просто игнорировать эти ошибки. В зависимости от протокола SMB запроса и ответа ожидается сбой большого количества запросов, даже если система работает правильно. Это может быть связано с ошибками авторизации, попытками создать файл с именем, который уже существует, или пытается открыть файл, который не существует.
Ведение журналов и создание отчетов
Чтобы устранить неполадки ClientOtherErrors, можно создать параметр диагностики и использовать Azure Monitor для создания отчетов. Вы также можете анализировать журналы для просмотра неудачных запросов, включая ClientOtherErrors, или использовать запросы Kusto.
Вы также можете собирать трассировку ProcMon из клиента, который соответствует IP-адресу, показанным в журналах. Добавьте фильтр, чтобы просмотреть только трафик к Файлы Azure.
Запрос ClientOtherErrors в Log Analytics
После того как вы включите ведение журнала диагностики для учетной записи хранилища, с помощью Log Analytics можно будет создать запрос на поиск определённых ошибок клиентских приложений (clientOtherErrors). ClientOtherErrors регистрируются в журнале с StatusText кодом, который начинается с ClientOtherError и содержит конкретный код ошибки.
Запрос для просмотра ClientOtherErrors
StorageFileLogs
| where StatusText startswith "ClientOtherError"
| project TimeGenerated, StatusText, StatusCode, OperationName, Uri, CallerIpAddress
| order by TimeGenerated desc
Запрос для подсчета ошибок по типу
StorageFileLogs
| where StatusText startswith "ClientOtherError"
| summarize Count = count() by StatusText, OperationName
| order by Count desc
Общие коды и объяснения ClientOtherError
В следующей таблице приведены конкретные коды ошибок с их объяснениями. Эти ошибки отображаются в StatusText поле "ClientOtherError;[ ErrorCode]; [ErrorName]" (например, ClientOtherError; 492; STATUS_ACCESS_DENIED").
| Операция | Код состояния | Имя состояния | Объяснение ошибки |
|---|---|---|---|
| QueryFullEaInformation | 0xC00000BB | STATUS_NOT_IMPLEMENTED | Этот сбой возвращается, так как Файлы Azure не реализует этот API. Файлы Azure сейчас не поддерживает расширенные атрибуты. |
| UnknownFileClass=48 | 0xC00000BB | STATUS_NOT_SUPPORTED | Это FileNormalizedNameInformation вызов API. Это новая поддержка Windows Server, и в настоящее время Файлы Azure не поддерживает этот API. |
| FileOpen | 0xC0000022 (492) | STATUS_ACCESS_DENIED | Вызывающий объект не имеет необходимых разрешений для открытия файла. В случае доступа Kerberos ACL запрещает вызывающий доступ. |
| FileOpen | 0xC0000033 (257) | STATUS_OBJECT_NAME_INVALID | Путь для открытого запроса недопустим (например, путь слишком длинный или слишком глубокий). |
| FileOpen | 0xC00000BA (12) | ФАЙЛ_ЯВЛЯЕТСЯ_ДИРЕКТОРИЕЙ | Вызывающий объект открывает каталог без использования правильных CreateFile параметров (например, намерение резервного копирования). |
| FileOpen | 0xC0000043 (8) | НАРУШЕНИЕ_ДОСТУПА_К_СОВМЕСТНОМУ_ИСПОЛЬЗОВАНИЮ | Вызывающий объект открывает файл, который уже открыт с ограничениями (например, эксклюзивные или другие могут читать только). |
| FileOpen | 0xC0000034 (6) | STATUS_OBJECT_NAME_NOT_FOUND | Вызывающий объект открывает файл, который не существует. |
| Запрос информации о сетевом интерфейсе FSCTL (IOCTL) | 0xC0000010 | STATUS_INVALID_DEVICE_REQUEST | Это используется только для Файлы Azure, если клиенты включили функцию многоканального канала. В других случаях это не требуется, и мы возвращаем недопустимый запрос устройства при запросе от клиента. |
| QueryStreamInformation | 0xC00000BB | STATUS_NOT_IMPLEMENTED | Некоторые файловые системы имеют концепцию альтернативных потоков данных или других потоков , таких как поток точки повторного анализа. Файлы Azure не имеет этой концепции, поэтому мы не поддерживаем API. |
| Непредвиденное (IOCTL) | 0xC0000010 | STATUS_INVALID_DEVICE_REQUEST |
FSCTL_QUERY_FILE_REGIONSЭто понятие региона, относящееся к NTFS/refs и не имеет смысла в отношении Файлы Azure. По этой причине мы не реализуем этот код FSCTL. |
| ChangeNotify | 0xC0000120 | STATUS_CANCELLED | Приложения, такие как обозреватель оболочки Windows, подписываются на уведомления об изменениях файлов. Таким образом, когда свойства изменяются в файле, обозреватель оболочки Windows автоматически обновляется в представлении. Клиент может отменить эту подписку (например, если пользователь изменил представления в обозревателе и больше не нуждается в ней). В этом случае мы отправим STATUS_CANCELLED клиенту обратно, чтобы подтвердить, что подписка отменена. |
| FSCTL_DFS_GET_REFERRALS (IOCTL) | 0xC000019C | STATUS_FS_DRIVER_REQUIRED | Это запрос на рефералов DFS. Файлы Azure не поддерживает DFS, и это правильное состояние для возврата, когда система не поддерживает DFS. |
| FileSupersede | 0xC0000022 | STATUS_ACCESS_DENIED | Замена файла — это операция удаления существующего файла, а новый файл помещается в его место. Если вызывающий объект не имеет разрешения на удаление существующего файла, вызов завершится ошибкой. |
| FileCreate | 0xC0000033 (7) | STATUS_OBJECT_NAME_INVALID | Это происходит, когда запрос на создание нового файла имеет недопустимое запрошенное имя (например, при использовании неподдерживаемых символов). |
| FileCreate | 0xC0000035 (3) | СТАТУС_КОЛЛИЗИЯ_ИМЕНИ_ОБЪЕКТА | Это происходит, когда запрос на создание нового файла имеет запрошенное имя, соответствующее существующему файлу. |
| Читать | 0xC0000022 | STATUS_ACCESS_DENIED | Это происходит, когда запрос на чтение выполняется в файле с дескриптором, который не имеет предоставленного доступа на чтение (например, файл был открыт с требуемым доступом на запись). |
| TreeConnect | 0xC0000022 | STATUS_ACCESS_DENIED | В контексте проверки подлинности Kerberos вызывающий объект не имеет разрешений на уровне общего доступа, назначенных через RBAC или разрешение уровня общего доступа по умолчанию. Идентификаторы компьютеров постоянно будут сталкиваться с этим сбоем доступа к общему ресурсу, если не установлено разрешение на уровне доступа к ресурсу. |
Примеры запросов для распространенных сценариев
Ниже приведены некоторые примеры распространенных запросов Kusto, которые могут быть полезны.
Сбои проверки подлинности и разрешений
StorageFileLogs
| where StatusText has "STATUS_ACCESS_DENIED"
| where OperationName in ("FileOpen", "TreeConnect", "Read", "FileSupersede")
| project TimeGenerated, OperationName, Uri, CallerIpAddress, AuthenticationType, RequesterUpn
| order by TimeGenerated desc
Ошибки «файл не найден»
StorageFileLogs
| where StatusText has "STATUS_OBJECT_NAME_NOT_FOUND"
| project TimeGenerated, Uri, CallerIpAddress, OperationName
| order by TimeGenerated desc
Недопустимые операции с файлами, такие как именование, пути и нарушения общего доступа
StorageFileLogs
| where StatusText has_any ("STATUS_OBJECT_NAME_INVALID", "STATUS_SHARING_VIOLATION", "STATUS_OBJECT_NAME_COLLISION")
| project TimeGenerated, StatusText, OperationName, Uri, CallerIpAddress
| order by TimeGenerated desc
Лучшие клиенты, создающие ClientOtherErrors
StorageFileLogs
| where StatusText startswith "ClientOtherError"
| summarize ErrorCount = count() by CallerIpAddress, bin(TimeGenerated, 1h)
| order by ErrorCount desc