2

내 요구 사항은 시작 (생성) 시간이 포함 된 구독에서 모든 VM을 가져 오는 것입니다. VM이 대시 보드에서 시간을 생성 한 것을 찾지 못했습니다. Activity log에서 타임 스탬프가 발견되었습니다. 내가 만든 시간과 함께 하나의 구독 ID에 의해 만들어진 모든 VM을 가져오고 싶습니다. Python API를 사용하여 Azure에서 가상 머신 생성 시간 가져 오기

(이 계정에 대한 자세한 내용은 2FA 그렇게 활성화 - UserPassCredentials가 작동하지 않습니다) 가입 아이디의 모든 VM의

목록 :

import os 
from azure.common.credentials import ServicePrincipalCredentials 
from azure.mgmt.compute import ComputeManagementClient 
subscription_id = os.environ['AZURE_SUBSCRIPTION_ID'] 
credentials = ServicePrincipalCredentials(client_id=os.environ['AZURE_CLIENT_ID'], secret=os.environ['AZURE_CLIENT_SECRET'], tenant=os.environ['AZURE_TENANT_ID']) 
compute_client = ComputeManagementClient(credentials, subscription_id) 
for vm in compute_client.virtual_machines.list_all(): 
    print("\tVM: {}".format(vm.name)) 

Activity log에서 생성 된 시간을 가져 오기 :

import os 
import datetime 
from pprint import pprint 
from azure.monitor import MonitorClient 
from azure.common.credentials import ServicePrincipalCredentials 

today = datetime.datetime.now().date() 
filter = " and ".join([ "eventTimestamp le '{}T00:00:00Z'".format(today), "resourceGroupName eq 'test-group'" ]) 
subscription_id = 'xxxxx' 
credentials = ServicePrincipalCredentials(client_id=os.environ['AZURE_CLIENT_ID'], secret=os.environ['AZURE_CLIENT_SECRET'], tenant=os.environ['AZURE_TENANT_ID']) 
client = MonitorClient(credentials, subscription_id) 
select = ",".join([ "Administrative", "Write VirtualMachines" ]) 
activity_logs = client.activity_logs.list(filter=filter, select=select) 

for i in activity_logs: 
    pprint(i.__dict__) 

나는 모든 VM (1s t 샘플 프로그램), 그러나 Activity log을 가져 오는 동안 오류가 발생합니다 (두 번째 샘플 프로그램).

오류 :

Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "/Library/Python/2.7/site-packages/msrest/paging.py", line 109, in __next__ 
    self.advance_page() 
    File "/Library/Python/2.7/site-packages/msrest/paging.py", line 95, in advance_page 
    self._response = self._get_next(self.next_link) 
    File "/Library/Python/2.7/site-packages/azure/monitor/operations/activity_logs_operations.py", line 117, in internal_paging 
    raise models.ErrorResponseException(self._deserialize, response) 
azure.monitor.models.error_response.ErrorResponseException: Operation returned an invalid status code 'Bad Request' 

누군가가 문제를하시기 바랍니다 발견하는 데 도움이 수 있습니까? 어떤 도움 정말 감사.

+0

내 대답을 참조하십시오, 고마워. 그것은 나를 위해 작동합니다. –

답변

1

난 당신이 제공 한 코드를 사용하여 현재 자원 그룹의 내 활성 로그를 가져 오기 위해 노력하고 내가 당신의 문제를 재현 : 또한, 그들은 날짜 시간 (그리고 날짜) 걸릴 것 같다.

내 코드 :

import os 
import datetime 
from pprint import pprint 
from azure.monitor import MonitorClient 
from azure.common.credentials import ServicePrincipalCredentials 

subscription_id = '***' 
client_id='***' 
secret='***' 
tenant='***' 

today = datetime.datetime.now().date() 
filter = " and ".join([ "eventTimestamp le '{}T00:00:00Z'".format(today), "resourceGroupName eq 'jay'" ]) 

credentials = ServicePrincipalCredentials(client_id=client_id, secret=secret, tenant=tenant) 

client = MonitorClient(credentials, subscription_id) 
select = ",".join([ "eventName", "operationName" ]) 

print select 
print filter 
activity_logs = client.activity_logs.list(filter=filter, select=select) 

for log in activity_logs: 
    # assert isinstance(log, azure.monitor.models.EventData) 
    print(" ".join([ 
     log.event_name.localized_value, 
     log.operation_name.localized_value 
    ])) 

실행 결과 :

eventName,operationName 
eventTimestamp le '2017-10-17T00:00:00Z' and resourceGroupName eq 'jay' 
Traceback (most recent call last): 
    File "E:/PythonWorkSpace/ActiveLog/FetchActiveLog.py", line 24, in <module> 
    for log in activity_logs: 
    File "E:\Python27\lib\site-packages\msrest\paging.py", line 109, in __next__ 
    self.advance_page() 
    File "E:\Python27\lib\site-packages\msrest\paging.py", line 95, in advance_page 
    self._response = self._get_next(self.next_link) 
    File "E:\Python27\lib\site-packages\azure\monitor\operations\activity_logs_operations.py", line 117, in internal_paging 
    raise models.ErrorResponseException(self._deserialize, response) 
azure.monitor.models.error_response.ErrorResponseException: Operation returned an invalid status code 'Bad Request' 

Azure Monitor Python SDK을 rearching 후, 나는 그 차이를 발견했다. 여기

filter = " and ".join([ "eventTimestamp ge '{}T00:00:00Z'".format(today), "resourceGroupName eq 'jay'" ]) 

ge하지 le입니다.

키워드를 수정하면이 코드가 제대로 작동합니다.

eventName,operationName 
eventTimestamp ge '2017-10-17T00:00:00Z' and resourceGroupName eq 'jay' 
End request Microsoft.Compute/virtualMachines/delete 
End request Microsoft.Compute/virtualMachines/delete 
End request Microsoft.Compute/virtualMachines/delete 
Begin request Microsoft.Compute/virtualMachines/delete 
End request Microsoft.Compute/virtualMachines/deallocate/action 
End request Microsoft.Compute/virtualMachines/deallocate/action 
Begin request Microsoft.Compute/virtualMachines/deallocate/action 
End request Microsoft.Compute/virtualMachines/write 
End request Microsoft.Compute/disks/write 
End request Microsoft.Compute/virtualMachines/write 
End request Microsoft.Network/networkSecurityGroups/write 
End request Microsoft.Network/networkInterfaces/write 
End request Microsoft.Network/publicIPAddresses/write 

희망이 있습니다.

0

문서를 기반으로하면 날짜를 이스케이프해야합니다. https://docs.microsoft.com/en-us/rest/api/monitor/activitylogs

filter = " and ".join([ 
     "eventTimestamp le '{}T00:00:00Z'".format(today), 
     "resourceGroupName eq 'test-group'" 
]) 
+0

제안한 코드를 방금 업데이트했는데 문제가 계속되는 것처럼 보입니다. activity_log에 모든 속성을 나열하려고했습니다. 불운. – user6136315