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

实验完毕!

相关推荐
薛定谔的猫3693 小时前
探索 MCP 协议:构建跨平台的 Agent 自动化生态
ai·自动化·agent·技术趋势·mcp
热爱Liunx的丘丘人6 小时前
Ansible-doc及常用模块
linux·运维·服务器·ansible
qq_452396237 小时前
【工程实战】第十篇:性能监控集成 —— 自动化脚本的“副产品”:不仅仅是功能测试
python·功能测试·自动化
星座5288 小时前
科研效率革命:基于Hermes Agent的Meta分析自动化工作流——涵盖随机效应模型、亚组分析与Egger检验
自动化·meta分析·hermes agent
星谐9 小时前
AutoUploadLL:自动化上传工具开发实践
运维·自动化
Dragon水魅11 小时前
爬虫技术详解:从传统爬虫到浏览器自动化——以豆瓣读书笔记为例
运维·爬虫·自动化
willhuo11 小时前
# 自动化数据采集技术研究与实现:基于Playwright的抖音网页自动化方案
运维·selenium·c#·自动化·chrome devtools·webview
CHENKONG_CK11 小时前
智流链驱动 RFID 混流装配,赋能汽车精益生产
网络·人工智能·tcp/ip·自动化·射频工程·rfid
薛定谔的猫36912 小时前
深入浅出 MCP:如何利用 Model Context Protocol 构建强大的 AI Agent
ai·自动化·llm·agent·mcp
GitCode官方12 小时前
G-Star 精选开源项目推荐|第十四期
数据库·人工智能·自动化