غير مرغوب فيه: كيف تراقب تلقائيًا مثيلات Amazon EC2 المنشأة حديثًا باستخدام Prometheus؟
نشرت: 2021-12-19
هل لديك أي من الأسئلة أدناه؟
- استخدم اكتشاف الخدمة المستند إلى الملفات لاكتشاف أهداف الكشط
- كيف تكتشف تلقائيًا استخدام عناوين IP متعددة؟
- مراقبة مثيلات EC2 تلقائيًا
- المراقبة مع بروميثيوس
- هل تستخدم Prometheus لمراقبة مثيلات Amazon EC2 المنشأة حديثًا؟
- كيف يتم تحديث ملف Prometheus Targets IP List ديناميكيًا بعد إنشاء Amazon EC2 VMs؟
Ansible هو بلا شك أفضل أداة أتمتة العمليات الموجودة في الصناعة. في Crunchify ، قمنا بنشر أكثر من اثنتي عشرة مقالة Ansible حول العديد من الموضوعات.
في هذا البرنامج التعليمي ، سوف ننتقل إلى كيفية تحديث ملف Prometheus Targets IP List بعد إنشاء Amazon EC2 VMs بشكل ديناميكي.
ضع في اعتبارك هذا السيناريو:
- أنت تقوم بتشغيل Prometheus لمراقبة البنية التحتية للإنتاج لديك.
- اتبع البرنامج التعليمي لإعداد بروميثيوس بالتفصيل.
- استخدام 5 أجهزة افتراضية جديدة من Amazon EC2
- اتبع البرنامج التعليمي الخاص بمثيل Amazon EC2 الجديد تمامًا.
- احصل على 5 عناوين IP وقم بتحديث مجموعة [crunchify] في وقت التشغيل
- اتبع البرنامج التعليمي لمجموعة تحديث ملف hosts بشكل كامل.
- قم بتحديث ملف
crunchify_prometheus.txt
باستخدام IP المحدث - دفع الملف إلى مضيف جديد حيث يكون لديك بروميثيوس قيد التشغيل
- سيقرأ Prometheus
updated IP file
الجديد هذا ديناميكيًا - ستتم مراقبة جميع
hosts
الجدد تلقائيًا
بالنسبة للخطوات من 4 إلى 7 ، سننتقل إلى جميع الخطوات هنا.

خطوات تفصيلية:
- احصل على قائمة بجميع عناوين IP من ملف hosts غير قابل للكسر ضمن المجموعة
[Crunchify]
. - أضف جميع عناوين IP إلى ملف
crunchify.txt
لغرض الاختبار فقط. لن نستخدم هذا الملف في الخطوات التالية. - احذف ملف crunchify_prometheus.json الموجود.
- قم بإنشاء ملف
crunchify_prometheus.json
جديد مع نموذج ملف قائمة بروميثيوس IP الجديد. - استبدل
iplist
من ملفcrunchify_prometheus.json
بقائمة عناوين IP. - استبدل
u'
بـ'
- استبدل
'
بـ"
. - احذف ملف crunchify_prometheus.json الموجود من المضيف البعيد حيث تعمل عملية Prometheus.
- انسخ الملف crunchify_prometheus.json من مضيف محلي إلى مضيف بعيد حتى يتمكن بروميثيوس من استهلاكه.
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/' } |
تنفيذ Ansible Playbook:
1 |
ansible - playbook - v - i . / hosts crunchify_prometheus_file_update . yml |
نتيجة Ansible Playbook:
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 |
هذا هو. تهانينا. لقد نجحت في نسخ ملف محدث جديد إلى مضيف جديد ويقوم بروميثيوس الآن تلقائيًا بمراقبة مثيلات Amazon EC2 التي تم إنشاؤها حديثًا.

ماذا بعد؟
تحقق من البرنامج التعليمي حول كيفية install docker
على Linux.