规划:
192.168.1.252 --ansible
192.168.1.222 --prometheus
192.168.1.111-web1
192.168.1.112-web2 (consul)
需求:prometheus监控多台主机时,基于自动发现consul模块,主机安装采集器注册到那台consul,consul识别到。promethues获取consul地址上的监控主机列表,实现多台主机自动发现。
思路:
- web机器安装node_exporter采集器
2.注册node_exporter为系统服务
3.使用curl -x PUT ... 注册到consul机器中
4.consul监控到后,prometheus配置consul地址。
1-3步都可用ansible批量完成。
1.找一台主机(112)安装启动consul服务
docker run --name consul -d -p 8500:8500 consul
2.ansible-server(252)上传ansible需要的软件
(node_exoporter软件包 ,system服务配置文件,注册脚本,注册接口如果有密码验证还需要一个config.yml)
注册脚本(传参方式注册):
#!/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.1.112:8500/v1/agent/service/register
系统服务配置文件node_exporter.service
[Unit]
Description=node_exporter
[Service]
ExecStart=/usr/local/jiankong/node_exporter/node_exporter --collector.systemd --collector.systemd.unit-include=(docker|portal|sshd).service
ExecReload=/bin/kill -HUP $MAINPID
KillMode=process
Restart=on-failure
[Install]
WantedBy=multi-user.target
--collector.systemd --collector.systemd.unit-include=(docker|portal|sshd).service 配置的意思是只收集docker,portal,sshd服务的数据
--web.config=/usr/local/jiankong/node_exporter/config.yml 如果有密码验证接口需要指定这个config.yml,里面保存的用户名和密码。需要把这条配在启动execstart行的node_proter后。
3.编写ansible-playbook
cat hosts
[webgg]
192.168.1.111 name=web1
[dbgg]
192.168.1.112 name=db1
cat playbook.yml
---
- hosts: webgg
gather_facts: no
tasks:
- name: 推送采集器安装包
unarchive: src=node_exporter-1.1.2.linux-amd64.tar.gz dest=/usr/local/jiankong
- name: 重命名
shell: |
cd /usr/local/jiankong
if [ ! -d node_exporter ];then
mv node_exporter-1.1.2.linux-amd64 node_exporter
fi
- name: 推送system文件
copy: src=node_exporter.service dest=/usr/lib/systemd/system
- name: 启动服务
systemd: name=node_exporter state=started enabled=yes
- name: 推送注册脚本
copy: src=consul-register.sh dest=/usr/local/jiankong/node_exporter
- name: 注册当前节点
shell: /bin/sh /usr/local/jiankong/node_exporter/consul-register.sh {{ group_names[0] }} {{ name }} {{ inventory_hostname }} 9100
{{ group_names[0] }} --ansible内置变量 代表hosts中自定义组名,数组形式,[0]取第一个
{{ name }} -- hosts文件中定义主机的名字,如name=web1
{{ inventory_hostname }} 当前执行主机的ip
执行:
看一下consul中,服务已经注册进来了