Ansible : Comment surveiller automatiquement les instances Amazon EC2 nouvellement créées à l'aide de Prometheus ?
Publié: 2021-12-19
Avez-vous l'une des questions ci-dessous ?
- Utilisez la découverte de services basée sur les fichiers pour découvrir les cibles de scrape
- Comment découvrir automatiquement l'utilisation de plusieurs IP ?
- Surveillance automatique des instances EC2
- Surveillance avec Prometheus
- Utiliser Prometheus pour surveiller les instances Amazon EC2 nouvellement créées ?
- Comment mettre à jour dynamiquement le fichier de liste d'adresses IP des cibles Prometheus après avoir créé des machines virtuelles Amazon EC2 ?
Ansible est sans aucun doute le meilleur outil d'automatisation des opérations dans l'industrie. Sur Crunchify, nous avons publié plus d'une douzaine d'articles Ansible sur de nombreux sujets.
Dans ce didacticiel, nous verrons comment mettre à jour le fichier de liste d'adresses IP des cibles Prometheus après avoir créé dynamiquement des machines virtuelles Amazon EC2.
Considérez ce scénario :
- Vous utilisez Prometheus pour surveiller votre infrastructure de production.
- Suivez le didacticiel de configuration de Prometheus en détail.
- Utilisation d'ansible spawn 5 nouvelles machines virtuelles Amazon EC2
- Suivez complètement le didacticiel sur la création d'une nouvelle instance Amazon EC2.
- Obtenez 5 adresses IP et mettez à jour le groupe [crunchify] lors de l'exécution
- Suivez complètement le didacticiel du groupe de mise à jour des fichiers hôtes ansible.
- Mettre à jour le fichier
crunchify_prometheus.txt
avec l'IP mise à jour - Pousser le fichier vers un nouvel hôte sur lequel prometheus est en cours d'exécution
- Prometheus lira dynamiquement ce nouveau
updated IP file
- Vous aurez tous les nouveaux
hosts
surveillés automatiquement
Pour les étapes 4 à 7, nous passerons en revue toutes les étapes ici.

Étapes détaillées :
- Obtenez la liste de toutes les adresses IP à partir du fichier d'hôtes ansible sous le groupe
[Crunchify]
. - Ajoutez toutes les adresses IP au fichier
crunchify.txt
uniquement à des fins de test. Nous n'utiliserons pas ce fichier dans les prochaines étapes. - Supprimez le fichier crunchify_prometheus.json existant.
- Créez un nouveau fichier
crunchify_prometheus.json
avec un exemple de nouveau fichier de liste IP prometheus. - Remplacez
iplist
du fichiercrunchify_prometheus.json
par la liste des IP. - Remplacez
u'
par'
. - Remplacez
'
par"
. - Supprimez le fichier crunchify_prometheus.json existant de l'hôte distant sur lequel le processus Prometheus est en cours d'exécution.
- Copiez le fichier crunchify_prometheus.json de l'hôte local vers l'hôte distant afin que prometheus puisse le consommer.
fichier crunchify_prometheus_file_update.yml.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 |
--- - name : Update Prometheus Targets IP List file after creating Amazon EC2 VMs Dynamically hosts : local connection : local gather_facts : True tasks : - name : Get list of all IPs from group Crunchify set_fact : nodelist = "{{ groups['Crunchify'] }}" - name : Add all IPs to file crunchify . txt just for testing purpose . We are not going to use this file in next steps . lineinfile : path : "crunchify.txt" line : "{{ nodelist }}" - name : Delete existing crunchify_prometheus . json file ignore_errors : yes shell : rm crunchify_prometheus . json - name : Create new crunchify_prometheus . json file with sample new prometheus IP list file . copy : dest : "crunchify_prometheus.json" content : [ { "targets" : iplist , "labels" : { "job" : "crunchify_prometheus_job" } } ] - name : Replace iplist from file crunchify_prometheus . json with list of IPs replace : path : "crunchify_prometheus.json" regexp : '"iplist"' replace : "{{ nodelist }}" - name : Replace u ' with ' replace : path : "crunchify_prometheus.json" regexp : 'u' ' replace: ' '' - name : Replace ' with " replace: path: "crunchify_prometheus.json" regexp: "' " replace: " \ "" - hosts : linode become : yes tasks : - name : Delete existing crunchify_prometheus . json file from remote host where Prometheus process is running . ignore_errors : yes command : rm / root / crunchify / crunchify_prometheus . json - name : Copy file crunchify_prometheus . json from local host to remote host so prometheus can consume it . copy : src = { { item . src } } dest = { { item . dest } } with_items : - { src : '//cdn.crunchify.com/Users/crunchify/Documents/ansible/crunchify_prometheus.json' , dest : '/root/crunchify/' } |
Exécutez Ansible Playbook :
1 |
ansible - playbook - v - i . / hosts crunchify_prometheus_file_update . yml |
Résultat du Playbook Ansible :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 |
bash Crunchify $ ansible - playbook - v - i . / hosts crunchify_prometheus_file_update . yml WARNING : Executing a script that is loading libcrypto in an unsafe way . This will fail in a future version of macOS . Set the LIBRESSL_REDIRECT_STUB_ABORT = 1 in the environment to force this into an error . No config file found ; using defaults / Users / crunchify / Documents / ansible / hosts did not meet host_list requirements , check plugin documentation if this is unexpected / Users / crunchify / Documents / ansible / hosts did not meet script requirements , check plugin documentation if this is unexpected PLAY [ Update Prometheus Targets IP List file after creating Amazon EC2 VMs Dynamically ] ************************************************************************ TASK [ Gathering Facts ] ***************************************************************************************************************************************** ok : [ localhost ] TASK [ Get list of all IPs from group Crunchify ] ******************************************************************************************************************* ok : [ localhost ] = > { "ansible_facts" : { "nodelist" : [ "5.17.14.87" , "8.17.24.26" , "96.17.67.11" , "62.17.64.87" ] } , "changed" : false } TASK [ Add all IPs to file crunchify . txt just for testing purpose . We are not going to use this file in next steps . ] ******************************************** ok : [ localhost ] = > { "backup" : "" , "changed" : false , "msg" : "" } TASK [ Delete existing crunchify_prometheus . json file ] ********************************************************************************************************** [ WARNING ] : Consider using the file module with state = absent rather than running 'rm' . If you need to use command because file is insufficient you can add 'warn: false' to this command task or set 'command_warnings=False' in ansible . cfg to get rid of this message . changed : [ localhost ] = > { "changed" : true , "cmd" : "rm crunchify_prometheus.json" , "delta" : "0:00:00.004614" , "end" : "2019-08-31 19:05:28.214368" , "rc" : 0 , "start" : "2019-08-31 19:05:28.209754" , "stderr" : "" , "stderr_lines" : [ ] , "stdout" : "" , "stdout_lines" : [ ] } TASK [ Create new crunchify_prometheus . json file with sample new prometheus IP list file . ] ********************************************************************** changed : [ localhost ] = > { "changed" : true , "checksum" : "0f561a2aedb23d9b6e76a93af377cf0128c9f4c6" , "dest" : "./crunchify_prometheus.json" , "gid" : 20 , "group" : "staff" , "md5sum" : "6a8d4a45c6b38bd6e664ce1cdc7f001a" , "mode" : "0644" , "owner" : "Crunchify" , "size" : 70 , "src" : "/Users/crunchify/.ansible/tmp/ansible-tmp-1567296328.29-229442409470865/source" , "state" : "file" , "uid" : 502 } TASK [ Replace iplist from file crunchify_prometheus . json with list of IPs ] ************************************************************************************* changed : [ localhost ] = > { "changed" : true , "msg" : "1 replacements made" } TASK [ Replace u ' with ' ] *************************************************************************************************************************************** ok : [ localhost ] = > { "changed" : false , "msg" : "" } TASK [ Replace ' with "] **************************************************************************************************************************************** changed: [localhost] => {"changed": true, "msg": "8 replacements made"} PLAY [linode] ************************************************************************************************************************************************** TASK [Gathering Facts] ***************************************************************************************************************************************** ok: [11.33.64.98] TASK [Delete existing crunchify_prometheus.json file from remote host where Prometheus process is running.] **************************************************** changed: [11.33.64.98] => {"changed": true, "cmd": ["rm", "//cdn.crunchify.com/root/crunchify/crunchify_prometheus.json"], "delta": "0:00:00.002704", "end": "2019-09-01 00:05:32.687400", "rc": 0, "start": "2019-09-01 00:05:32.684696", "stderr": "", "stderr_lines": [], "stdout": "", "stdout_lines": []} TASK [Copy file crunchify_prometheus.json from local host to remote host so prometheus can consume it.] ******************************************************** changed: [11.33.64.98] => (item={u' dest ': u' / root / crunchify / ', u' src ': u' / Users / crunchify / Documents / ansible / crunchify_prometheus . json ' } ) = > { "changed" : true , "checksum" : "ecea3eafaf9ba3e66698e0851d2ee2513d9fcd5f" , "dest" : "//cdn.crunchify.com/root/crunchify/crunchify_prometheus.json" , "gid" : 0 , "group" : "root" , "item" : { "dest" : "/root/crunchify/" , "src" : "//cdn.crunchify.com/Users/crunchify/Documents/ansible/crunchify_prometheus.json" } , "md5sum" : "8b8f073e30b180c63341cd3fd4c47974" , "mode" : "0644" , "owner" : "root" , "size" : 122 , "src" : "/root/.ansible/tmp/ansible-tmp-1567296332.67-196855844989682/source" , "state" : "file" , "uid" : 0 } PLAY RECAP * **************************************************************************************************************************************************** 11.33.64.98 : ok = 3 changed = 2 unreachable = 0 failed = 0 localhost : ok = 8 changed = 4 unreachable = 0 failed = 0 |
C'est ça. Toutes nos félicitations. Vous avez réussi à copier le nouveau fichier mis à jour sur le nouvel hôte et Prometheus surveille désormais automatiquement vos instances Amazon EC2 nouvellement créées.

Et après?
Consultez le didacticiel sur l' install docker
sous Linux.