prometheus实战之一:用ansible部署

news2024/11/25 10:56:16

欢迎访问我的GitHub

这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos

关于《prometheus实战》

  • 《prometheus实战》是欣宸原创的系列文章,旨在通过实战操作来熟悉和掌握prometheus常规技能

本篇概览

  • 本文是《prometheus实战》的开篇,咱们先把环境搭好,为后面的学习做好准备
  • 为了简化操作,咱们就把环境规划得简单一些,如下图,准备两台Linux电脑(或者虚拟机),一台只部署prometheus,另一台是应用服务器,运行着各种业务应用(例如web服务),再部署node_exporter服务,prometheus从node_exporter取得数据,以实现对应用服务器的监控
    在这里插入图片描述

环境信息

  • 以下是系列实战涉及的各个环境参数,可以作为参考
  1. 操作系统:ubuntu 22.04 LTS
  2. prometheus:2.37.7
  3. node_exporter:1.5.0
  4. ansible:2.10.8

使用ansible安装

  • 为了让整个部署过程简单化、标准化,接下来使用ansible完成部署工作,这样只要备好了ansible脚本就能反复多次安装,并且每次的结果都是一致的,减少手动操作,也降低了出错的可能性
  • 由于ansible是远程安装,需要在一台电脑上独立运行,于是整个环境变成了由三台电脑组成,如下图所示,ansible电脑通过ssh命令远程操作,再prometheus服务器上完成prometheus安装,在应用服务器上完成node_exporter安装

在这里插入图片描述

  • 因此今天的实战一共用到三台电脑(或者三个虚拟机),它们的信息如下所示
hostname身份IP地址
ansibleansible执行主机192.168.25.130
prometheusprometheus服务器(部署了prometheus)192.168.25.129
working001应用服务器(部署了node_exporter)192.168.25.128
  • 部署完成后,ansible电脑就不再用到了

梳理整个部署过程

  • 这里提前梳理接下来要做的事情,如下图,一共分为六步
    在这里插入图片描述

  • 接下来逐步完成上述操作

新建prometheus账号(prometheus服务器、应用服务器)

  • 在prometheus服务器和应用服务器上都新建prometheus账号,避免使用root,这样可以降低安全风险
  • ssh登录prometheus服务器,执行以下三步操作
  • 第一步,新建名为prometheus的用户和用户组,并且指定默认shell类型为bash
groupadd prometheus \
&& useradd -d /home/prometheus -g prometheus -m prometheus \
&& usermod -s /bin/bash prometheus
  • 第二步,用passwd命令给prometheus账号设置密码,我这里设置的是888888
  • 第三步,打开sudo配置文件/etc/sudoers,新增一行,如下图红色箭头所示(保存的时候要加感叹号强制写入),这样prometheus用户就能执行sudo命令,并且不需要输入密码
    在这里插入图片描述
  • ssh登录应用服务器,将上述操作同样再做一次
  • 如此,prometheus服务器和应用服务器上都有了prometheus账号,接下来的远程操作都用这个账号进行

准备ansible(ansible电脑)

  • ssh登录ansible服务器,执行以下命令即可完ansible部署
sudo apt-get install -y ansible sshpass
  • 另外,本文不会讨论太多关于ansible技术的细节,只保证够用即可,如果您对ansible感兴趣,可以参考《ansible2.4安装和体验》

编写ansible用到的配置和脚本(ansible电脑)

  • 这一章节是本篇的重点,部署哪些东西,执行哪些设置,全都体现在ansible脚本中,共有两个配置文件和三个脚本,用表格列出其具体功能
文件名类别作用
hosts配置文件prometheus服务器和应用服务器的IP地址、账号、密码等配置
ansible.cfg配置文件ansible的配置信息,如hosts文件位置、超时设置等
vars.yml配置文件脚本中用到的参数信息,例如prometheus下载地址、版本号等
common_setup.yml脚本文件通用的设置脚本,如apt更新、设置时区等
install_prometheus.yml脚本文件部署prometheus的脚本,用在prometheus服务器
install_node_exporter.yml脚本文件部署node_exporter的脚本,用在应用服务器
  • ssh登录ansible电脑,新建文件夹playbooks,上述五个文件都放在此文件夹内
  • 接下来详细介绍每个文件的内容,如果您不想写,可以按照文末的地址直接下载它们
  • 新增远程账号配置文件hosts,内容如下
[prometheus-group]
prometheus ansible_host=192.168.25.129 ansible_port=22 ansible_user=prometheus ansible_password=888888
working001 ansible_host=192.168.25.128 ansible_port=22 ansible_user=prometheus ansible_password=888888
  • 新增ansible配置文件ansible.cfg,内容如下
[defaults]
inventory = ~/playbooks/hosts
host_key_checking = False
timeout = 30
  • 所有可能修改的参数都集中到配置文件vars.yml
prometheus_user_home: /home/prometheus
prometheus_base_path: '{{prometheus_user_home}}/prometheus'
prometheus_url: https://github.com/prometheus/prometheus/releases/download
prometheus_version: 2.37.7
prometheus_deploy_path: '{{prometheus_base_path}}/prometheus-{{prometheus_version}}.linux-amd64'

node_exporter_base_path: '{{prometheus_user_home}}/node_exporter'
node_exporter_url: https://github.com/prometheus/node_exporter/releases/download
node_exporter_version: 1.5.0
node_exporter_deploy_path: '{{node_exporter_base_path}}/node_exporter-{{node_exporter_version}}.linux-amd64'
  • 然后是第一个脚本common_setup.yml,这个脚本同时在prometheus服务器和应用服务器执行,如下,可见hosts字段的值并非某个机器,而是组名prometheus-group,这样就会同时在该组下所有机器上执行此脚本
- name: 部署前的准备工作(通用)
  hosts: prometheus-group
  gather_facts: True
  vars_files:
  - vars.yml  
  tasks:
  - name: update apt
    apt:
      update_cache: yes
      cache_valid_time: 86400
    become: yes
  
  - name: get timelocal
    shell: ls -l /etc/localtime | awk '{print $11}'
    register: timelocal
 
  - name: delete loacltime
    shell: rm -f /etc/localtime
    when: timelocal.stdout != "/usr/share/zoneinfo/Asia/Shanghai"
    become: yes
 
  - name: create asia time
    shell: ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
    when: timelocal.stdout != "/usr/share/zoneinfo/Asia/Shanghai"
    become: yes

  - name: 安装时钟同步工具
    apt:
      name: ntpdate
      state: present
    become: yes

  - name: 同步时钟
    command: ntpdate ntp.aliyun.com
    become: yes
  • 接下来是最重要的部署脚本install_prometheus.yml,此脚本在prometheus上完成的工作有:下载prometheus安装包、解压部署、创建systemd的service配置文件,以service方式启动prometheus等操作
- name: 部署prometheus
  hosts: prometheus
  gather_facts: False
  vars_files:
  - vars.yml  
  tasks:
  - name: 停止残留的prometheus
    ignore_errors: yes
    systemd:
      name: prometheus
      state: stopped
    become: yes

  - name: 清理可能的prometheus service残留文件
    file:
      path: /etc/systemd/system/prometheus.service
      state: absent
    become: yes

  - name: 清理可能的prometheus残留文件夹
    file:
      path: '{{prometheus_base_path}}'
      state: absent

  - name: 新建部署文件夹
    file:
      path: '{{prometheus_base_path}}'
      state: directory
      mode: '0755'

  - name: 下载并解压文件prometheus-{{prometheus_version}}.linux-amd64.tar.gz
    ansible.builtin.unarchive:
      src: '{{prometheus_url}}/v{{prometheus_version}}/prometheus-{{prometheus_version}}.linux-amd64.tar.gz'
      dest: '{{prometheus_base_path}}'
      remote_src: yes

  - name: 生成systemd的service文件
    shell: |
      tee /etc/systemd/system/prometheus.service <<-'EOF'
      [Unit]
      Description=Prometheus Server
      Documentation=https://prometheus.io/docs/introduction/overview/
      After=network-online.target
      [Service]
      User=prometheus
      Restart=on-failure
      #Change this line if you download the
      #Prometheus on different path user
      ExecStart={{prometheus_deploy_path}}/prometheus --config.file={{prometheus_deploy_path}}/prometheus.yml --storage.tsdb.path={{prometheus_base_path}}/data
      [Install]
      WantedBy=multi-user.target
      
      EOF
    become: yes

  - name: 刷新服务配置
    systemd:
      daemon_reload: true
    become: yes

  - name: 将prometheus服务设置为自启动
    systemd:
      name: prometheus
      enabled: true
      masked: no
    become: yes      

  - name: 启动prometheus
    systemd:
      state: started
      name: prometheus
    become: yes      

  • 最后是部署node_exporter的脚本install_node_exporter.yml,用于在应用服务器部署node_exporter服务,prometheus可以通过此服务提供的web接口取得应用服务器的各项指标参数
- name: 部署node_exporter
  hosts: working001
  gather_facts: False
  vars_files:
  - vars.yml  
  tasks:
  - name: 停止残留的node_exporter
    ignore_errors: yes
    systemd:
      name: node_exporter
      state: stopped
    become: yes

  - name: 清理可能的node_exporter service残留文件
    file:
      path: /etc/systemd/system/node_exporter.service
      state: absent
    become: yes

  - name: 清理可能的node_exporter残留文件夹
    file:
      path: '{{node_exporter_base_path}}'
      state: absent

  - name: 新建部署文件夹
    file:
      path: '{{node_exporter_base_path}}'
      state: directory
      mode: '0755'

  - name: 下载并解压文件node_exporter-{{node_exporter_version}}.linux-amd64.tar.gz
    ansible.builtin.unarchive:
      src: '{{node_exporter_url}}/v{{node_exporter_version}}/node_exporter-{{node_exporter_version}}.linux-amd64.tar.gz'
      dest: '{{node_exporter_base_path}}'
      remote_src: yes

  - name: 生成systemd的service文件
    shell: |
      tee /etc/systemd/system/node_exporter.service <<-'EOF'
      [Unit]
      Description=Node exporter Server
      Documentation=https://prometheus.io/docs/introduction/overview/
      After=network-online.target
      [Service]
      User=prometheus
      Restart=on-failure
      ExecStart={{node_exporter_deploy_path}}/node_exporter --web.listen-address=:9100
      [Install]
      WantedBy=multi-user.target
      
      EOF
    become: yes

  - name: 刷新服务配置
    systemd:
      daemon_reload: true
    become: yes

  - name: 将node_exporter服务设置为自启动
    systemd:
      name: node_exporter
      enabled: true
      masked: no
    become: yes      

  - name: 启动node_exporter
    systemd:
      state: started
      name: node_exporter
    become: yes      

  • 至此,脚本已经全部写好了,接下来就是执行这些脚本,完成部署

执行ansible脚本(ansible电脑)

  • 共三个ansible脚本,执行顺序是:公共、prometheus、node_exporter,因此依次执行以下三个命令即可(SSH登录ansible,进入playbook目录)
# 公共脚本,prometheus服务器和应用服务器都会执行
ansible-playbook common_setup.yml

# 部署node_exporter脚本,prometheus服务器和应用服务器都会执行
ansible-playbook install_prometheus.yml

# 部署node_exporter脚本,prometheus服务器和应用服务器都会执行
ansible-playbook install_node_exporter.yml
  • 上述三个脚本执行完毕后,prometheus和node_exporter都被设置为systemd服务,并且已成功启动

检查服务部署情况

  • 登录prometheus服务器,执行命令systemctl status prometheus查看服务情况,如下图,服务处于正常运行状态
    在这里插入图片描述
  • 登录应用服务器,执行命令systemctl status node_exporter查看服务情况,如下图,服务处于正常运行状态
    在这里插入图片描述
  • 目前两个服务都启动成功了,不过还有个问题:prometheus用的是官方的默认配置,并没有监控应用服务器,因此要修改配置,使之从应用服务器采取监控数据

配置prometheus,添加监控任务

  • ssh登录prometheus服务器,修改配置文件/home/prometheus/prometheus/prometheus-2.37.7.linux-amd64/prometheus.yml,添加一个监控任务,在文件尾部增加以下内容(注意,抓取间隔时间必须大于抓取超时时间)
   # 新增任务,从应用服务器采集数据 
  - job_name: "node-resource-working001"
    # 抓取时间间隔
    scrape_interval: 15s
    # 抓取超时时间
    scrape_timeout: 10s
    # 抓取地址
    static_configs:
      - targets: ["192.168.25.128:9100"] 
  • 以prometheus账号的身份执行以下命令,重启服务
systemctl restart prometheus
  • 至此,所有服务都启动完毕,用浏览器打开地址http://192.168.25.129:9090/,会展示prometheus的功能页面,如下图
    在这里插入图片描述

  • 再打开http://192.168.25.129:9090/targets,查看是否监控到应用服务器,如下图,已顺利获取到
    在这里插入图片描述

  • 至此,ansible部署prometheus完成,接下来的系列文章会有更多实战一路相伴,帮组咱们一同学习和掌握prometheus

问题备忘

  • 打开网页的时候如果遇到以下错误,注意检查prometheus服务器和浏览器所在电脑的时间是否一致,确保一致后问题就会消失
Warning: Error fetching server time: Detected 72.22200012207031 seconds time difference between your browser and the server. Prometheus relies on accurate time and time drift might cause unexpected query results.
  • 如下图:
    在这里插入图片描述

脚本下载

  • 本篇涉及的所有配置文件和脚本文件都能在下面这个仓库下载:
名称链接备注
项目主页https://github.com/zq2599/blog_demos该项目在GitHub上的主页
git仓库地址(https)https://github.com/zq2599/blog_demos.git该项目源码的仓库地址,https协议
git仓库地址(ssh)git@github.com:zq2599/blog_demos.git该项目源码的仓库地址,ssh协议
  • 这个git项目中有多个文件夹,本篇的文件在tutorials/prometheus/playbooks/文件夹下,如下图红框所示:
    在这里插入图片描述

你不孤单,欣宸原创一路相伴

  1. Java系列
  2. Spring系列
  3. Docker系列
  4. kubernetes系列
  5. 数据库+中间件系列
  6. DevOps系列

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/478322.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

spring 容器结构/机制debug分析--Spring 学习的核心内容和几个重要概念--IOC 的开发模式--综合解图

目录 Spring Spring 学习的核心内容 解读上图: Spring 几个重要概念 ● 传统的开发模式 解读上图 ● IOC 的开发模式 解读上图 代码示例—入门 xml代码 注意事项和细节 1、说明 2、解释一下类加载路径 3、debug 看看 spring 容器结构/机制 综合解图 Spring Spr…

使用SPY++查看窗口信息去分析C++客户端UI软件问题

目录 1、使用SPY查看窗口的信息 2、使用SPY查看某些软件UI窗口用什么UI组件实现的 2.1、查看海康视频监控客户端安装包程序 2.2、查看华为协同办公软件WeLink 2.3、查看字节协同办公软件飞书 2.4、查看最新版本的Chrome浏览器 2.5、查看小鱼易连视频会议客户端软件 2.6…

STM32H7 DMA

CubeMX配置 发送调用&#xff1a; 发送速度确实挺快的。 接收&#xff1a; HAL_UART_Receive_DMA(&huart1,Rxbuffer,sizeof(Rxbuffer)); 这个函数开启DMA接收,将收到的数据存放到Rxbuffer数组中去,当接收到了sizeof(Rxbuffer)个数据就会回调DMA1_Stream0_IRQHandler函数…

Linux-基本指令

文章目录 Centos用户新增及删除新增删除 两个理论概念管理贯穿 ls指令文件的操作-l (列出详细信息)-a&#xff08;显示所有的文件&#xff0c;包括隐藏文件&#xff09;-F&#xff08;在每个文件名后附上一个字符以说明该文件的类型&#xff09;-d&#xff08;将目录象文件一样…

CTF权威指南 笔记 -第二章二进制文件-2.1-汇编原理

目录 编译原理 GCC编译 四个阶段 (1)预处理阶段 (2)编译阶段 (3)汇编阶段 (4)链接阶段 预处理阶段 编译阶段 汇遍阶段 链接阶段 C语言的生命是从 源文件开始 的 每条C语言都必须要给翻译成 一系列的低级语言 最后 按照可执行文件格式打包 并且作为二进制文件保存起来…

【深入浅出Spring原理及实战】「缓存Cache开发系列」带你深入分析Spring所提供的缓存Cache功能的开发实战指南

带你深入分析Spring所提供的缓存Cache功能的开发实战指南 CacheManager管理器的扩展支持缓存技术类型与CacheManger缓存依赖application配置缓存注解EnableCachingCacheableCachePutCacheEvictCacheConfig SpEL上下文数据注意 SpEL提供了多种运算符 不同Cache的实现机制Concurr…

快速入门微服务保护框架Sentinel

文章目录 一、Sentinel1.1 雪崩问题1.1.1 介绍1.1.2 解决方案 1.2 初识Sentinel1.3 sentinel下载和整合1.4 流量控制1.4.1 簇点链路1.4.2 Sentinel簇点链路设置1.4.3 流控规则1.4.4 热点参数限流1.4.5 隔离和降级1.4.6 授权规则 一、Sentinel 1.1 雪崩问题 1.1.1 介绍 雪崩问…

掌握了这些,才算真正了解C语言数组

也许你认为&#xff0c;C语言中的数组非常好理解&#xff0c;就是把一组相同类型的元素存储在同一块空间里。但是你可能并没有真正理解数组的本质&#xff0c;不信的话请回答一下下面的几个小问题&#xff0c;如果你能非常清晰的回答这些问题&#xff0c;那么你对C语言中的数组…

TF-IDF (BigData, Data Mining)

TF-IDF&#xff08;term frequency–inverse document frequency&#xff09;是一种用于信息检索与数据挖掘的常用加权技术。 TF是词频(Term Frequency)&#xff0c; IDF是逆文本频率指数(Inverse Document Frequency)。 简介 TF-IDF是一种统计方法&#xff0c;用以评估一字词…

【国际象棋】棋盘游戏-微信小程序开发流程详解

与中国象棋类似的&#xff0c;还有国际象棋&#xff0c;知道有人爱玩&#xff0c;于是凭着好奇心&#xff0c;网上研究了一下&#xff0c;跟中国象棋有相似之处&#xff0c;玩法是有些许不一样&#xff0c;不知道象棋最早出于谁之手呢&#xff0c;抽空做一做&#xff0c;最终完…

倾斜摄影超大场景的三维模型的顶层合并,提升模型在WEB三维展示效果

倾斜摄影超大场景的三维模型的顶层合并&#xff0c;提升模型在WEB三维展示效果 倾斜摄影超大场景的三维模型的顶层合并后&#xff0c;可以采取以下措施来提升模型在WEB三维展示效果&#xff1a; 1、优化模型数据&#xff1a;对于倾斜摄影超大场景的三维模型&#xff0c;需要进…

网络安全:namp扫描工具

-sP可以扫描一个网段ip以及状态和基本信息&#xff0c;10.1.1.2-3就是扫描2和3这两个ip的主机 -p可以扫描指定ip对应主机的端口号&#xff0c;可以是一个范围 nmap简单扫描&#xff1a;nmap 地址 检查地址是否在线以及open的端口号 在端口开放&#xff0c;不一定可以与对方正常…

数据库之事务隔离级别详解

事务隔离级别详解 一、事务的四大特性&#xff08;ACID&#xff09;1. 原子性(atomicity)&#xff1a;2. 一致性(consistency)&#xff1a;3. 隔离性(isolation)&#xff1a;4. 持久性(durability)&#xff1a; 二、事务的四种隔离级别1. 读未提交(Read uncommitted)&#xff1…

WSL怎么使用本机进行代理联网

文章目录 WSL怎么使用本机代理进行联网问题来源设置v2rayN设置wsl总结参考 WSL怎么使用本机代理进行联网 问题来源 使用WSL克隆github的代码网速很慢&#xff0c;无响应&#xff0c;导致项目无法下载&#xff0c;真的愁人。就想到为WSL设置xx上网&#xff0c;是否就会好很多。…

Photoshop如何使用文字之实例演示?

文章目录 0.引言1.给图像素材添加透明水印2.创建路径文字3.创建每日一签海报4.给图像添加复杂水印5.制作个人简历模板 0.引言 因科研等多场景需要进行绘图处理&#xff0c;笔者对PS进行了学习&#xff0c;本文通过《Photoshop2021入门教程》及其配套素材结合网上相关资料进行学…

React | React组件化开发

✨ 个人主页&#xff1a;CoderHing &#x1f5a5;️ React .js专栏&#xff1a;React .js React组件化开发 &#x1f64b;‍♂️ 个人简介&#xff1a;一个不甘平庸的平凡人&#x1f36c; &#x1f4ab; 系列专栏&#xff1a;吊打面试官系列 16天学会Vue 11天学会React Node…

不良条件视觉感知专栏(一)任务前言

前言 随着深度学习的流行&#xff0c;CNN的强大特征学习能力给计算机视觉领域带来了巨大的提升。2D/3D目标检测、语义分割是常见的视觉感知任务&#xff0c;本专栏我们将围绕着它们展开阐述。 本教程禁止转载。同时&#xff0c;本教程来自知识星球【CV技术指南】更多技术教程&…

Photoshop如何使用图像调色之实例演示?

文章目录 0.引言1.将一张偏冷调的图像调整成暖调2.将图像调整成不同季节色彩倾向3.变换花朵的颜色4.创建人像轮廓风景5.修饰蓝天白云6.调换花草颜色 0.引言 因科研等多场景需要进行绘图处理&#xff0c;笔者对PS进行了学习&#xff0c;本文通过《Photoshop2021入门教程》及其配…

【经典论文解读】YOLACT 实例分割(YOLOv5、YOLOv8实例分割的基础)

前言 YOLACT是经典的单阶段、实时、实例分割方法&#xff0c;在YOLOv5和YOLOv8中的实例分割&#xff0c;也是基于 YOLACT实现的&#xff0c;有必要理解一下它的模型结构和设计思路。 论文&#xff1a;YOLACT: Real-time Instance Segmentation 开源地址&#xff1a;https://gi…