2

Meine Anforderung ist es, alle VMs in einem Abonnement mit Start (erstellt) Zeit zu erhalten. Ich habe die VM im Dashboard nicht gefunden, wo wie in der Activity log ein Zeitstempel gefunden wurde. Ich möchte alle VMs, die von einer Abonnement-ID erstellt wurden, zusammen mit der erstellten Zeit abrufen.Erhalten Sie virtuelle Maschine erstellt Zeit auf Azure mit Python-API

(für dieses Konto Details wird 2FA so aktiviert - UserPassCredentials wird nicht funktionieren) ein Abonnement-ID

Liste aller VMs in:

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)) 

erstellt Zeit von Activity log Fetch:

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__) 

Ich bin in der Lage, alle VMs (1s t Beispielprogramm), aber beim Versuch, die Activity log zu holen erhalten Sie einen Fehler (2. Beispielprogramm).

Fehler:

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' 

Kann mir jemand helfen, das Problem zu finden, wenden Sie sich bitte? jede Hilfe wirklich geschätzt.

+0

Bitte beziehen Sie sich auf meine Antwort, danke.Es funktioniert für mich. –

Antwort

1

Ich habe versucht, meine aktive Protokoll der Ressourcengruppe, indem Sie den Code heute holen Sie zur Verfügung gestellt und ich reproduzieren Ihr Problem.

Mein Code:

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 
    ])) 

Lauf Ergebnis:

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' 

Nach dem Azure Monitor Python SDK rearching, fand ich den Unterschied.

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

ist hier ge, nicht le.

Ich ändere das Schlüsselwort dann funktioniert der Code gut für mich.

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 

Ich hoffe, es hilft Ihnen.

0

Basierend auf dem Dokument scheint Ihr Datum zu maskieren. Außerdem scheint sie ein Datetime-nehmen (und kein Datum): 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

Ich habe nur den Code aktualisiert, was Sie vorgeschlagen haben, scheint wie Problem weiterhin besteht. Ich habe versucht, alle Attribute im activity_log aufzulisten. kein Glück. – user6136315

Verwandte Themen