Ansible 自动化部署Prometheus + Alertmanager + Grafana实战(Rockylinux9.6)

安装 Ansible

略,看我博客:# Ansible 环境搭建

创建 Ansible Playbook

在控制节点(192.168.92.19)上执行:

复制代码
cd /root/ansible-playbook
mkdir -p roles/prometheus/{tasks,files}

# 将你手工部署的整个 docker-prometheus 目录复制到角色的 files 下 
scp -r root@192.168.92.11:/data/docker-prometheus /root/ansible-playbook/roles/prometheus/files/

192.168.92.11:/data/docker-prometheus看我的文章:# Docker Compose 一键部署 Prometheus + Alertmanager + Grafana 完整监控方案

这里的ansible控制节点还是192.168.92.19,但是被控制节点(192.168.92.20)已经被我用快照还原为了初始状态

提醒:Docker Compose 默认查找 docker-compose.yml,这是标准做法。

项目的树形包结构

复制代码
[root@ansible ansible-playbook]# tree
.
├── roles
│   ├── docker_install
│   │   ├── files
│   │   │   └── docker-compose-Linux-x86_64
│   │   ├── handlers
│   │   │   └── main.yml
│   │   └── tasks
│   │       └── main.yml
│   ├── mysql
│   │   ├── files
│   │   │   └── init.sql
│   │   └── tasks
│   │       └── main.yml
│   ├── nginx
│   │   ├── tasks
│   │   │   └── main.yml
│   │   └── templates
│   │       └── nginx.conf.j2
│   ├── prometheus
│   │   ├── files
│   │   │   └── docker-prometheus
│   │   │       ├── alertmanager
│   │   │       │   └── config.yml
│   │   │       ├── docker-compose.yml
│   │   │       ├── grafana
│   │   │       │   ├── config.monitoring
│   │   │       │   └── provisioning
│   │   │       └── prometheus
│   │   │           ├── alert.yml
│   │   │           ├── prometheus.yml
│   │   │           └── prometheus.yml.back
│   │   └── tasks
│   │       └── main.yml
│   ├── redis
│   │   └── tasks
│   │       └── main.yml
│   ├── springboot
│   │   ├── files
│   │   │   └── Springbootdemo-0.0.1-SNAPSHOT.jar
│   │   ├── tasks
│   │   │   └── main.yml
│   │   └── templates
│   │       └── Dockerfile.j2
│   ├── system_init
│   │   └── tasks
│   │       └── main.yml
│   └── vue
│       ├── files
│       │   └── dist
│       │       ├── assets
│       │       │   ├── 1-DxVeaUtM.jpg
│       │       │   ├── 2-U6Qjex4J.jpg
│       │       │   ├── yun-DW8jof7n.jpg
│       │       │   ├── index-CYqzScuv.js
│       │       │   └── index-Cp89o39-.css
│       │       ├── favicon.ico
│       │       └── index.html
│       └── tasks
│           └── main.yml
├── site.yml
└── site2.yml

32 directories, 29 files

编写prometheus/tasks/main.yml

目前 prometheus 角色缺少 tasks/main.yml,你需要创建它

复制代码
#vi roles/prometheus/tasks/main.yml
---
- name: 创建监控部署目录
  file:
    path: /data/docker-prometheus #指定目录路径
    state: directory #确保创建的是目录(如果已存在则不会报错)
    mode: '0755' #设置目录权限为 755(所有者可读写执行,其他用户可读执行)

- name: 复制监控配置文件 #将角色中 files/docker-prometheus/ 目录下的所有配置文件复制到远程主机的 /data/docker-prometheus/ 目录。
  copy:
    src: docker-prometheus/ #Ansible 会从角色的 files 目录查找 docker-prometheus/ 目录
    dest: /data/docker-prometheus/ #目标目录
    mode: preserve #保留源文件的权限(不会覆盖文件权限)

- name: 创建 Grafana 数据卷
  shell: docker volume create grafana_data 2>/dev/null || true
  changed_when: false #因为卷创建成功后不会改变系统状态

- name: 初始化 Grafana 数据卷权限
  shell: docker run --rm -v grafana_data:/var/lib/grafana alpine chown -R 472:472 /var/lib/grafana 2>/dev/null || true
  changed_when: false

- name: 启动监控栈
  shell: cd /data/docker-prometheus && /usr/local/bin/docker-compose up -d
  changed_when: false #因为 docker-compose up -d 在容器已启动时不会改变状态

运行 Ansible Playbook

创建主 Playbook site2.yml

site2.yml 中的 roles 列表会严格按照定义的顺序依次执行

ansible-playbook/ 目录下创建 site2.yml 文件:

复制代码
- hosts: webservers
  become: yes
  roles:
    - system_init          # 1. 系统基础配置
    - docker_install       # 2. 安装 Docker、Docker Compose、Python 依赖
    - prometheus           # 3. 部署监控平台(Prometheus + Grafana + Alertmanager)

在 Ansible 控制节点(192.168.92.19)上执行 ,由于使用了 docker_networkdocker_container 等模块,需要安装 community.docker 集合:

复制代码
ansible-galaxy collection install community.docker

cd /root/ansible-playbook
ansible-playbook site2.yml

[root@ansible ansible-playbook]# ansible-playbook site2.yml

PLAY [webservers] **************************************************************************************************************************

TASK [Gathering Facts] *********************************************************************************************************************
ok: [192.168.92.20]

TASK [system_init : 停止 firewalld 服务] ***************************************************************************************************
ok: [192.168.92.20]

TASK [system_init : 禁用 SELinux(临时)] **************************************************************************************************
ok: [192.168.92.20]

TASK [system_init : 永久禁用 SELinux(修改配置文件)] **************************************************************************************
ok: [192.168.92.20]

TASK [system_init : 备份原 yum 源并替换为阿里云源] *****************************************************************************************
changed: [192.168.92.20]

TASK [system_init : 安装基础工具包] ********************************************************************************************************
ok: [192.168.92.20]

TASK [docker_install : 移除旧版 Docker 组件] ***********************************************************************************************
changed: [192.168.92.20]

TASK [docker_install : 安装必要依赖包] *****************************************************************************************************
ok: [192.168.92.20]

TASK [docker_install : 下载 Docker CE 仓库文件] ********************************************************************************************
changed: [192.168.92.20]

TASK [docker_install : 替换仓库地址为华为云] ***********************************************************************************************
changed: [192.168.92.20]

TASK [docker_install : 安装 Docker CE] *****************************************************************************************************
changed: [192.168.92.20]

TASK [docker_install : 启动 Docker 服务并设置开机自启] *************************************************************************************
changed: [192.168.92.20]

TASK [docker_install : 创建 Docker 配置目录] ***********************************************************************************************
ok: [192.168.92.20]

TASK [docker_install : 配置镜像加速器] *****************************************************************************************************
ok: [192.168.92.20]

TASK [docker_install : 安装 pip] ***********************************************************************************************************
ok: [192.168.92.20]

TASK [docker_install : 安装 Python 依赖(requests 和 docker)] *****************************************************************************
ok: [192.168.92.20]

TASK [docker_install : 复制 Docker Compose 二进制文件] *************************************************************************************
ok: [192.168.92.20]

TASK [docker_install : 验证 Docker Compose 安装] *******************************************************************************************
ok: [192.168.92.20]

TASK [docker_install : 输出 Docker Compose 版本] *******************************************************************************************
skipping: [192.168.92.20]

TASK [docker_install : 创建 Docker 网络 app-network] ***************************************************************************************
ok: [192.168.92.20]

TASK [prometheus : 创建监控部署目录] *******************************************************************************************************
ok: [192.168.92.20]

TASK [prometheus : 复制监控配置文件] *******************************************************************************************************
ok: [192.168.92.20]

TASK [prometheus : 创建 Grafana 数据卷] ****************************************************************************************************
ok: [192.168.92.20]

TASK [prometheus : 初始化 Grafana 数据卷权限] **********************************************************************************************
ok: [192.168.92.20]

TASK [prometheus : 启动监控栈] *************************************************************************************************************
ok: [192.168.92.20]

PLAY RECAP *********************************************************************************************************************************
192.168.92.20              : ok=24   changed=6    unreachable=0    failed=0    skipped=1    rescued=0    ignored=0

验证部署

复制代码
[root@ansible ~]# ansible webservers -m shell -a 'docker ps'
192.168.92.20 | CHANGED | rc=0 >>
CONTAINER ID   IMAGE                                            COMMAND                  CREATED       STATUS                   PORTS                                         NAMES
279a9342d318   grafana/grafana:9.3.16                           "/run.sh"                7 hours ago   Up 7 minutes             0.0.0.0:3000->3000/tcp, [::]:3000->3000/tcp   grafana
98aa6a7867ec   prom/prometheus:v2.45.5                          "/bin/prometheus --c..."   7 hours ago   Up 7 minutes             0.0.0.0:9090->9090/tcp, [::]:9090->9090/tcp   prometheus
e7698ac56148   prom/alertmanager:v0.27.0                        "/bin/alertmanager -..."   7 hours ago   Up 7 minutes             0.0.0.0:9093->9093/tcp, [::]:9093->9093/tcp   alertmanager
763a31657f5b   m.daocloud.io/gcr.io/cadvisor/cadvisor:v0.47.2   "/usr/bin/cadvisor -..."   7 hours ago   Up 7 minutes (healthy)   0.0.0.0:8080->8080/tcp, [::]:8080->8080/tcp   cadvisor
b1317aba91a2   prom/node-exporter:v1.8.0                        "/bin/node_exporter ..."   7 hours ago   Up 7 minutes             0.0.0.0:9100->9100/tcp, [::]:9100->9100/tcp   node-exporter
[root@ansible ~]# ansible webservers -m shell -a 'ss -lntp | egrep "3000|9090|9100|9093"'
192.168.92.20 | CHANGED | rc=0 >>
LISTEN 0      4096         0.0.0.0:3000      0.0.0.0:*    users:(("docker-proxy",pid=2001,fd=8))                                            
LISTEN 0      4096         0.0.0.0:9093      0.0.0.0:*    users:(("docker-proxy",pid=2036,fd=8))                                            
LISTEN 0      4096         0.0.0.0:9090      0.0.0.0:*    users:(("docker-proxy",pid=2103,fd=8))                                            
LISTEN 0      4096         0.0.0.0:9100      0.0.0.0:*    users:(("docker-proxy",pid=2072,fd=8))                                            
LISTEN 0      4096            [::]:3000         [::]:*    users:(("docker-proxy",pid=2011,fd=8))                                            
LISTEN 0      4096            [::]:9093         [::]:*    users:(("docker-proxy",pid=2041,fd=8))                                            
LISTEN 0      4096            [::]:9090         [::]:*    users:(("docker-proxy",pid=2109,fd=8))                                            
LISTEN 0      4096            [::]:9100         [::]:*    users:(("docker-proxy",pid=2078,fd=8))                                            

实验完毕!

相关推荐
七度黑光11 小时前
用 openclaw 给故障复盘打分:质量审核自动化实践
运维·服务器·前端·数据库·自动化
我爱学习好爱好爱17 小时前
Ansible 常用模块详解:cron、archive、unarchive实战
linux·服务器·ansible
IT界的老黄牛17 小时前
Prometheus + Grafana + AlertManager 监控体系搭建:Docker 一把梭
运维·grafana·prometheus
厦门辰迈智慧科技有限公司18 小时前
高边坡自动化监测解决方案
自动化·高边坡监测·边坡自动化监测
机器人零零壹19 小时前
物料单元设计入门篇:如何利用iRobotCAM实现机器人物料生产单元的编程与自动化
机器人·自动化·工业软件·虚拟调试·离线编程·中望3d·irobotcam
机器人零零壹19 小时前
非标自动化设计入门篇:iRobotCAM通用多轴建模能力,实现非标机器人自动化装配应用
机器人·自动化·机器人仿真·虚拟调试·非标自动化
机器人零零壹19 小时前
机器人自动化检测入门篇:如何利用iRobotCAM与工业机器人实现产品质量自动化检测
机器人·自动化·机器人仿真·离线编程·irobotcam·机器人检测
默默前行的虫虫21 小时前
声音触发器。用于自动化场景检测器
运维·自动化
李子焱21 小时前
第一节:初识n8n与下一代工作流自动化
运维·自动化