Prometheus自动化监控-自动监控上百台服务器
目录
Prometheus自动化监控-自动监控上百台服务器
如何自动化监控几百台服务器思路
老办法:
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完成任务
[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=$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
失败是因为需要输入用户名和密码
成功的标志:
1.Prometheus中的Target有webservers服务。
2.consul中的Services多了webservers服务。
存在警告的原因是因为名字错误:port改名成exporter_port就不会有这种警告了
修改port成exporter_port
不存在警告了
监控好了webservers组后,可以监控dbservers组了
修改playbook.yaml文件
失败了,是因为第一次需要指纹验证,
然后再次执行
执行成功。
执行状态为Down,查看原因
状态为启动,但是web页面显示错误
最后定位到配置文件没有拷贝过来
kill 掉进程后重来就可以了:
因此需要重新修改以下文件:
重新来一下就可以了。
grafana也有对应的组了。
以后添加机器时只要修改hosts文件就行