本文主要是介绍Prometheus自动化监控-自动监控上百台服务器,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
如何自动化监控几百台服务器思路
老办法:1.要在这100台服务器安装node_exporter。2.在prometheus配置增加这100台机器配置。自动化运维:1.ansible批量部署node_exporter2.基于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完成任务
[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了
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=$4curl -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: webserversgather_facts: novars:port: 9100tasks:- name: 推送二进制文件unarchive: src=node_exporter-1.2.0.linux-amd64.tar.gz dest=/usr/local- name: 重命名shell: |cd /usr/localif [ ! -d node_exporter ];thenmv node_exporter-1.2.0.linux-amd64 node_exporterfi#- 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
失败是因为需要输入用户名和密码
成功的标志:
1.Prometheus中的Target有webservers服务。
2.consul中的Services多了webservers服务。
存在警告的原因是因为名字错误:port改名成exporter_port就不会有这种警告了
修改port成exporter_port
不存在警告了
监控好了webservers组后,可以监控dbservers组了
修改playbook.yaml文件
失败了,是因为第一次需要指纹验证,
然后再次执行
执行成功。
执行状态为Down,查看原因
状态为启动,但是web页面显示错误
最后定位到配置文件没有拷贝过来
kill 掉进程后重来就可以了:
因此需要重新修改以下文件:
重新来一下就可以了。
grafana也有对应的组了。
以后添加机器时只要修改hosts文件就行
这篇关于Prometheus自动化监控-自动监控上百台服务器的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!