Prometheus: ansible+consul自动发现,监控服务器

简介: Prometheus: ansible+consul自动发现,监控服务器

一,安装部署ansible和准备hosts文件

yum -y install ansible

注: 我把Prometheus和grafana的目录都放在新建目录/opt/monitor中,为方便管理,在其目录下创建ansible目录,所需要的文件,脚本都放在ansible下

cd /opt/monitor/
mikdir ansible

注,ansible后面的操作,都在/opt/monitor/ansible/目录下完成

vim /opt/monitor/ansible/hosts

[webservers]
192.168.123.171  name=web1
[dbservers]
192.168.123.172  name=db1
192.168.123.176  name=db2

“name=” 是后面需要用到的定义的变量,在这里放一百台服务器ip也行,看自己需求,分组

二, docker里面运行consul

单独下载consul太麻烦,我直接是拉去容器方式(容器安装步骤,在我另一篇博客的过程中 请点击查看

docker run --name consul -d -p 8500:8500 consul

注: consul可以部署在任何一台服务器上,只要能注册服务即可,我部署在Prometheus服务器上

检测是否部署成功 local hosts:8500

三, 准备ansible所需要的脚本,软件等

3.1 在ansible目录下准备node_exporter的tar包

可以去官网下载,也可以到我的百度网盘提取,百度网盘分享 提取码cjcj 请点击这里

3.2 用systemd来管理node_exporter

vim /opt/monitor/ansible/node_exporter.service

[Unit]
Description=node_exporter
[Service]
ExecStart=/usr/local/node_exporter/node_exporter
ExecReload=/bin/kill -HUP $MAINPID
KillMode=process
Restart=on-failure
[Install]
WantedBy=multi-user.target

3.3 准备consul服务注册脚本

vim /opt/monitor/ansible/consul_register.sh

#!/bin/bash
service_name=$1
instance_id=$2
ip=$3
port=$4
curl -X PUT -d '{"id": "'"$instance_id"'","name": "'"$service_name"'","address": "'"$ip"'","port": "'"$port"'","tags": ["'"$service_name"'"],"checks": [{"http": "http://192.168.123.152:9100","interval": 
"5s"}]}' http://192.168.123.170:8500/v1/agent/service/register

解释:service_name 相当于Prometheus当中的job_name,相当于分组,然后脚本中tags:service_name便是consul的标签,附上图片解释一下变量

f26482ad8a8f4695b3b3e45cb4b9b522.png

01a806b0074d4560a1792a23268a3c07.png

a483cafe438944adbc21d1338baa5949.png

3.4 准备playbook.yml

vim /opt/monitor/ansible/playbook.yml

- hosts: webservers
  gather_facts: no
  tasks:
  - name: push node_exporter
    unarchive:
      src: node_exporter-1.4.0-rc.0.linux-amd64.tar.gz
      dest: /usr/local
  - name: rename
    shell: |
      cd /usr/local
      if [ ! -d node_exporter ]
        then mv node_exporter-1.4.0-rc.0.linux-amd64 node_exporter
      fi
  - name: copy systemd content
    copy:
      src: node_exporter.service
      dest: /usr/lib/systemd/system
  - name: start node_exporter
    systemd:
      name: node_exporter
      state: started
      enabled: yes
      daemon-reload: yes
  - name: push consul_register.sh
    copy:
      src: consul_register.sh
      dest: /usr/local/bin
  - name: register nodes into consul
    shell: /bin/bash /usr/local/bin/consul_register.sh {{ group_names[0] }} {{ name }} {{ inventory_hostname }} {{ 9100 }}
- hosts: dbservers
  gather_facts: no
  tasks:
  - name: push node_exporter
    unarchive:
      src: node_exporter-1.4.0-rc.0.linux-amd64.tar.gz
      dest: /usr/local
  - name: rename
    shell: |
      cd /usr/local
      if [ ! -d node_exporter ]
        then mv node_exporter-1.4.0-rc.0.linux-amd64 node_exporter
      fi
  - name: copy systemd content
    copy:
      src: node_exporter.service
      dest: /usr/lib/systemd/system
  - name: start node_exporter
    systemd:
      name: node_exporter
      state: started
      enabled: yes
      daemon-reload: yes
  - name: push consul_register.sh
    copy:
      src: consul_register.sh
      dest: /usr/local/bin
  - name: register nodes into consul
    shell: /bin/bash /usr/local/bin/consul_register.sh {{ group_names[0] }} {{ name }} {{ inventory_hostname }} {{ 9100 }}

四, 准备Prometheus.yml的配置文件

vim /opt/monitor/prometheus/prometheus.yml

  - job_name: 'webservers'
    consul_sd_configs:
    - server: 192.168.123.170:8500
      services: ['webservers']
  - job_name: 'dbservers'
    consul_sd_configs:
    - server: 192.168.123.170:8500
      services: ['dbservers']

注意,更改配置之后 检查Prometheus的pid,然后 kill -HUP pid 来进行reload

如果担心语法有误,可以进入到Prometheus目录下,执行:

./promtool check config prometheus.yml

五, 执行playbook.yml

执行之前做免密(博客ansible部署zabbix-agent有过详细步骤,故省略,可以点击此处),或者用ansible-playbook -i hosts -uroot -k 然后输入密码来执行。不过这种输入密码可能出现以下报错

ad72861f6b544860b0c6e2d06d9546bf.png

解决思路 : vim /etc/ansible/ansible.cfg

b3dd117e13e54494b43184cddac5893b.png

我用的免密,然后执行:

ansible-playbook -i hosts playbook.yml

faaec2c1bf774695a7f331a43821215b.png

然后去检查ip:8500 和 ip:9090 去检查即可

完结撒花

a1c5355ac7b54fe0bd1b75718b21344f.png

目录
相关文章
|
1月前
|
弹性计算 监控 数据可视化
ecs自定义监控
ecs自定义监控
24 1
|
1月前
|
Arthas 弹性计算 运维
阿里云ECS监控服务
阿里云ECS监控服务
404 2
|
1月前
|
弹性计算 监控 数据可视化
ECS网络流量监控
ECS网络流量监控
63 2
|
1月前
|
弹性计算 运维 监控
ECS资源监控
ECS资源监控涉及CPU、内存、磁盘I/O、网络流量、系统负载和进程的关键指标,通过云服务商控制台、监控服务、API与SDK、运维工具进行实时监控和告警设置。支持历史数据查询、事件监控,以及使用Windows资源监视器和Linux系统工具进行操作系统层面监控。全面监控确保ECS实例稳定运行、资源有效利用和问题及时处理。如需特定云服务商的指导,请询问。
36 3
|
1月前
|
弹性计算 运维 监控
ecs监控与评估
阿里云ECS提供全面的监控与评估解决方案,包括云监控服务(实时资源指标、告警)、ECS实例详情页(运行状态查看)、资源负载评估(综合性能得分)、ECS Insight(多维度分析)、报警配置、流量管理优化(负载均衡、CDN)。这些工具帮助用户有效管理资源、识别潜在风险、优化性能,确保云服务稳定高效。
17 1
|
1月前
|
监控 JavaScript 安全
监控内网电脑软件设计与实现:基于Node.js的服务器端架构分析
在当今信息技术高度发达的时代,监控内网电脑的需求日益增长。企业需要确保网络安全,个人用户也需要监控家庭网络以保护隐私和安全。本文将介绍一种基于Node.js的服务器端架构,用于设计和实现监控内网电脑软件。
102 0
|
1月前
|
弹性计算 监控 网络协议
ECS操作系统监控
ECS操作系统监控
16 2
|
6月前
|
运维 Shell Linux
Ansible自动化运维工具之常用模块使用实战(5)
Ansible自动化运维工具之常用模块使用实战(5)
|
8月前
|
网络协议 网络安全
Ansible模块介绍——防火墙模块
Ansible模块介绍——防火墙模块
144 0
|
6月前
|
运维 Linux
Ansible自动化运维工具之常用模块使用实战(6)
Ansible自动化运维工具之常用模块使用实战(6)