当前位置: 首页 > news >正文

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

创建主 Playbooksite2.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))

实验完毕!

http://www.jsqmd.com/news/568404/

相关文章:

  • Next AI Draw.io 技术集成指南:从问题解决到功能验证
  • EasyAnimateV5图生视频模型商业应用:快速制作产品演示视频
  • LimeReport:终极跨平台Qt报表生成解决方案
  • Spring Boot 实现网络限速:让流量“收放自如”
  • MATLAB/Simulink 2024A实战:手把手搭建永磁同步电机无速度控制仿真(附模型下载)
  • 快速生成mobaxterm中文配置脚本,一键搞定远程终端汉化
  • 保姆级教程:用Dify和BochaWebSearch,5分钟给本地Ollama模型装上联网搜索大脑
  • Sketch Measure插件:设计师与开发者的高效协作终极指南
  • GyverPWM库详解:ATmega328高精度PWM频率与分辨率控制
  • 开源游戏工具:Steam Achievement Manager实现跨平台成就管理的全攻略
  • 基于Python的汽车租赁管理系统毕设
  • 从配置文件入手:手把手教你调优ODAS的声源定位精度(以4麦克风阵列为例)
  • HMC5843磁力计驱动开发:三轴磁场数据读取与校准实战
  • 赋能软件测试:10款VSCode神级插件深度解析与实战指南
  • 图腾柱与互补推挽电路的区别及应用场景
  • 嵌入式轻量级任务调度框架cola_os解析与实践
  • 大模型推理实战:用Python+LangChain实现思维链(CoT)的5个关键步骤
  • AD5144A数字电位器I²C驱动库深度解析与工程实践
  • TC397多核开发踩坑实录:AUTOSAR OS任务分配与GPIO控制的那些‘坑’
  • AI视频革命与音乐新生:短剧、动画、影视全链路重构,生成式AI重塑内容产业
  • MCP插件生态正式开放!但官方未公开的install.sh隐藏参数、.mcpignore规范与离线安装包提取方法(内部培训材料节选):
  • Layerdivider完全教程:智能图像分层工具的快速上手指南
  • 告别MathType!用Python+LaTeX在Word中高效排版数学公式(附完整代码)
  • 【LangGraph从小白到精通手把手实战教程】012、集成大语言模型:把OpenAI、文心一言塞进工作流里
  • 2026年《【数字车钥匙】深度测评:优质服务商全景解析》
  • 别再死磕Prompt了,AI需要的是「对话流程」
  • 拆解Proc-GS:如何用3D高斯‘乐高’积木,搭建可无限扩展的虚拟城市?
  • 【限时解密】Python 3.12新GC机制深度拆解:分代回收增强+自动内存池收缩,实测提升长周期服务稳定性达3.8倍
  • 今天咱们来点硬核的,手把手用Matlab整几个时频分析骚操作。这玩意儿在信号处理里就跟瑞士军刀似的,不同的工具对应不同的场景。我直接上代码,边跑边说人话
  • 站内优化和站外优化在 SEO 中分别应该怎么做