【Linux】prometheus批量添加监控

转自:https://blog.csdn.net/qq_39595769/article/details/119248666

如何自动化监控几百台服务器思路
老办法:
1.要在这100台服务器安装node_exporter。
2.在prometheus配置增加这100台机器配置。

自动化运维:
1.ansible批量部署node_exporter
2.基于consul的服务发现
3.将node_exporter所在及其的IP和端口注册到consul里。
4.prometheus从consul里获取所有IP和端口自动加入监控。

这几百台服务器中有:

Web服务器、DB服务器、负载均衡服务器、消息队列服务器。

实际运维过程中也是按照分组管理

"id": "web1","name": "webserver组","address": "xxxx"
"id": "web2","name": "webserver组","address": "xxxx"
"id": "web3","name": "webserver组","address": "xxxx"

"id": "db1","name": "dbserver组","address": "xxxx"
"id": "db2","name": "dbserver组","address": "xxxx"
"id": "db3","name": "dbserver组","address": "xxxx"

实现自动化监控几百台服务器
prometheus服务上安装Ansible

安装epel源

yum install epel-release -y

安装Ansible

yum install ansible -y

把安装了exporter的服务器的node_exporter文件夹都清空:
在这里插入图片描述
在这里插入图片描述

删掉之后可以看到prometheus中的target中的Endpoint都挂掉了
在这里插入图片描述

删掉prometheus配置文件中的配置,只保留consul的配置
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
Ansible + playbook完成任务
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
有了这四个文件后,就可以编写playbook了

consul-register.sh
hosts
node_exporter-1.2.0.linux-amd64.tar.gz
node_exporter.service
playbook.yaml

各文件的内容

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://'"$ip"':'"$port"'","interval": "5s"}]}' http://192.168.220.103:8500/v1/agent/service/register

hosts

[webservers]
192.168.220.102 name=web1

[dbservers]
192.168.220.103 name=db1

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

playbook.yaml

- hosts: webservers
  gather_facts: no
  vars:
    port: 9100
  tasks:
  - name: 推送二进制文件
    unarchive: src=node_exporter-1.2.0.linux-amd64.tar.gz dest=/usr/local
  - name: 重命名
    shell: |
         cd /usr/local
         if [ ! -d node_exporter ];then
             mv node_exporter-1.2.0.linux-amd64 node_exporter
         fi
 #- name: 推送配置文件
 #  copy: src=config.yml dest=/usr/local/node_exporter
  - name: 拷贝systemd文件
    copy: src=node_exporter.service dest=/usr/lib/systemd/system
  - name: 启动服务
    systemd: name=node_exporter state=started enabled=yes daemon_reload=yes
  - name: 推送注册脚本
    copy: src=consul-register.sh dest=/usr/local/bin/
  - name: 注册当前节点   
    # 服务名 实例名 IP 端口 
    shell: /bin/bash /usr/local/bin/consul-register.sh {
   
   { group_names[0] }} {
   
   { name }} {
   
   { inventory_hostname }} {
   
   { port }}

准备齐全,ansible部署exporter到其他服务器

ansible-playbook -i hosts playbook.yaml -uroot -k 

失败是因为需要输入用户名和密码
在这里插入图片描述
在这里插入图片描述

成功的标志:
在这里插入图片描述
在这里插入图片描述

存在警告的原因是因为名字错误:port改名成exporter_port就不会有这种警告了
在这里插入图片描述

修改port成exporter_port

在这里插入图片描述
不存在警告了
在这里插入图片描述
监控好了webservers组后,可以监控dbservers组了

修改playbook.yaml文件
在这里插入图片描述

失败了,是因为第一次需要指纹验证,
在这里插入图片描述
然后再次执行
在这里插入图片描述
执行成功。
在这里插入图片描述
执行状态为Down,查看原因
在这里插入图片描述
在这里插入图片描述

状态为启动,但是web页面显示错误
在这里插入图片描述
最后定位到配置文件没有拷贝过来
在这里插入图片描述
kill 掉进程后重来就可以了:
在这里插入图片描述
因此需要重新修改以下文件:
在这里插入图片描述

重新来一下就可以了。

grafana也有对应的组了。
在这里插入图片描述

以后添加机器时只要修改hosts文件就行
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/imliuqun123/article/details/129416433