2

Mon exigence est d'obtenir toutes les machines virtuelles dans un abonnement avec le temps de lancement (créé). Je n'ai pas trouvé le temps créé VM dans le tableau de bord où, comme dans le Activity log trouvé un horodatage. Je voudrais récupérer toutes les machines virtuelles qui ont été créées par un ID d'abonnement avec le temps créé.Obtenir l'heure de création de la machine virtuelle sur Azure à l'aide de l'API Python

(Pour détails de ce compte 2FA est activée si - UserPassCredentials ne fonctionnera pas)

Liste de toutes les machines virtuelles dans un identifiant d'abonnement:

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

Fetch temps créé à partir 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__) 

Je suis en mesure d'obtenir toutes les machines virtuelles (1s t exemple de programme), Cependant, tout en essayant de récupérer le Activity log obtenir une erreur (2e programme exemple).

Erreur:

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' 

Quelqu'un peut me aider à trouver la question s'il vous plaît? toute aide vraiment appréciée.

+0

S'il vous plaît se référer à ma réponse, merci.Il travaille pour moi. –

Répondre

1

J'ai essayé de chercher mon journal actif du groupe de ressources aujourd'hui en utilisant le code que vous avez fourni et je reproduis votre question.

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

résultat Exécution:

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' 

Après la rearching Azure Monitor Python SDK, je l'ai trouvé la différence.

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

est ici ge, pas le.

Je modifie le mot-clé alors le code fonctionne bien pour moi.

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 

Espérons que cela vous aide.

0

Basé sur le document, il semble que votre date devrait être échappée. De plus, semble qu'ils prennent un datetime (et non une date): 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

Je viens de mettre à jour le code que vous avez proposé, semble que le problème persiste. J'ai essayé de lister tous les attributs dans le journal d'activité. pas de chance. – user6136315