devops_bootcamp

Untitled

Sep 4th, 2025
108
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.21 KB | None | 0 0
  1. - name: Deploy monitoring stack with hidden bugs
  2. hosts: monitoring_servers
  3. become: true
  4. vars:
  5. prometheus_version: "2.37.0"
  6. node_exporter_version: "1.5.0"
  7. prometheus_dir: "/opt/prometheus"
  8. node_exporter_dir: "/opt/node_exporter"
  9.  
  10. tasks:
  11. - name: Create system users for services
  12. user:
  13. name: "{{ item.name }}"
  14. comment: "{{ item.comment }}"
  15. system: yes
  16. create_home: no
  17. shell: /bin/false
  18. loop:
  19. - { name: prometheus, comment: "Prometheus Monitoring" }
  20. - { name: node_exporter, comment: "Node Exporter" }
  21.  
  22. - name: Install required packages
  23. apt:
  24. name: "{{ item }}"
  25. state: present
  26. loop:
  27. - wget
  28. - tar
  29. - slurm
  30. - curl
  31.  
  32. - name: Download and install Prometheus
  33. unarchive:
  34. src: "https://github.com/prometheus/prometheus/releases/download/v{{ prometheus_version }}/prometheus-{{ prometheus_version }}.linux-amd64.tar.gz"
  35. dest: "/tmp"
  36. remote_src: yes
  37. register: prometheus_download
  38.  
  39. - name: Move Prometheus to installation directory
  40. command: "mv /tmp/prometheus-{{ prometheus_version }}.linux-amd64 {{ prometheus_dir }}"
  41. creates: "{{ prometheus_dir }}"
  42.  
  43. - name: Download and install Node Exporter
  44. unarchive:
  45. src: "https://github.com/prometheus/node_exporter/releases/download/v{{ node_exporter_version }}/node_exporter-{{ node_exporter_version }}.linux-amd64.tar.gz"
  46. dest: "/tmp"
  47. remote_src: yes
  48.  
  49. - name: Move Node Exporter to installation directory
  50. command: "mv /tmp/node_exporter-{{ node_exporter_version }}.linux-amd64 {{ node_exporter_dir }}"
  51. creates: "{{ node_exporter_dir }}"
  52.  
  53. - name: Create Prometheus configuration
  54. copy:
  55. content: |
  56. global:
  57. scrape_interval: 15s
  58.  
  59. scrape_configs:
  60. - job_name: 'node'
  61. static_configs:
  62. - targets: ['localhost:9100']
  63. dest: "{{ prometheus_dir }}/prometheus.yml"
  64. mode: 0644
  65.  
  66. - name: Change ownership of installation directories
  67. file:
  68. path: "{{ item }}"
  69. owner: "{{ item.split('/')[-1] }}"
  70. group: "{{ item.split('/')[-1] }}"
  71. recurse: yes
  72. loop:
  73. - "{{ prometheus_dir }}"
  74. - "{{ node_exporter_dir }}"
  75.  
  76. - name: Create systemd service for Node Exporter
  77. copy:
  78. content: |
  79. [Unit]
  80. Description=Node Exporter
  81. After=network.target
  82.  
  83. [Service]
  84. User=node_exporter
  85. Group=node_exporter
  86. ExecStart={{ node_exporter_dir }}/node_exporter
  87.  
  88. [Install]
  89. WantedBy=multi-user.target
  90. dest: /etc/systemd/system/node-exporter.service
  91. mode: 0644
  92.  
  93. - name: Create systemd service for Prometheus
  94. copy:
  95. content: |
  96. [Unit]
  97. Description=Prometheus
  98. After=network.target
  99.  
  100. [Service]
  101. User=prometheus
  102. Group=prometheus
  103. ExecStart={{ prometheus_dir }}/prometheus --config.file={{ prometheus_dir }}/prometheus.yml --storage.tsdb.path={{ prometheus_dir }}/data
  104.  
  105. [Install]
  106. WantedBy=multi-user.target
  107. dest: /etc/systemd/system/prometheus.service
  108. mode: 0644
  109.  
  110. - name: Enable and start services
  111. systemd:
  112. name: "{{ item }}"
  113. enabled: yes
  114. state: started
  115. loop:
  116. - node-exporter
  117. - prometheus
  118.  
  119. - name: Open firewall ports
  120. ufw:
  121. port: "{{ item }}"
  122. state: enabled
  123. proto: tcp
  124. loop:
  125. - 9090 # Prometheus
  126. - 9100 # Node Exporter
  127.  
  128. - name: Deploy Node Exporter on target servers
  129. hosts: target_servers
  130. become: true
  131. vars:
  132. node_exporter_version: "1.5.0"
  133. node_exporter_dir: "/opt/node_exporter"
  134. tasks:
  135. - name: Create node_exporter user
  136. user:
  137. name: node_exporter
  138. comment: "Node Exporter"
  139. system: yes
  140. create_home: no
  141. shell: /bin/false
  142. - name: Download and install Node Exporter
  143. unarchive:
  144. src: "https://github.com/prometheus/node_exporter/releases/download/v{{ node_exporter_version }}/node_exporter-{{ node_exporter_version }}.linux-amd64.tar.gz"
  145. dest: "/tmp"
  146. remote_src: yes
  147.  
  148. - name: Move Node Exporter to installation directory
  149. command: "mv /tmp/node_exporter-{{ node_exporter_version }}.linux-amd64 {{ node_exporter_dir }}"
  150. creates: "{{ node_exporter_dir }}"
  151.  
  152. - name: Change ownership of Node Exporter directory
  153. file:
  154. path: "{{ node_exporter_dir }}"
  155. owner: node_exporter
  156. group: node_exporter
  157. recurse: yes
  158.  
  159. - name: Create systemd service for Node Exporter
  160. copy:
  161. content: |
  162. [Unit]
  163. Description=Node Exporter
  164. After=network.target
  165.  
  166. [Service]
  167. User=node_exporter
  168. Group=node_exporter
  169. ExecStart={{ node_exporter_dir }}/node_exporter
  170.  
  171. [Install]
  172. WantedBy=multi-user.target
  173. dest: /etc/systemd/system/node-exporter.service
  174. mode: 0644
  175.  
  176. - name: Enable and start Node Exporter service
  177. systemd:
  178. name: node-exporter
  179. enabled: yes
  180. state: started
  181.  
  182. - name: Open firewall for Node Exporter
  183. ufw:
  184. port: 9100
  185. state: enabled
  186. proto: tcp
Advertisement
Add Comment
Please, Sign In to add comment