consul服务器:

#基于consul的服务发现
#Consul是一个分布式的服务发现和键/值存储系统。
#Docker部署Consul:(任意机器部署,只要prometheus和被监控端能够和consul通信即可
docker run --name consul -d -p 8500:8500 consul

prometheus服务器:

#服务端配置
vim /opt/monitor/prometheus/prometheus.yml
scrape_configs:
- job_name: 'webservers' #job名称,一般定义一个分组的名称
basic_auth:
username: prometheus #指定被监控端接口指标的用户名
password: 123.com #指定被监控端接口指标的密码
consul_sd_configs:
- server: 192.168.0.11:8500 #consul服务发现的地址及端口
services: ['webservers'] #consul中显示服务名
------------------------------------------------------------------
#配置完成后,使用promtool工具检查配置文件是否有误
cd /opt/monitor/prometheus
./promtool check config ./prometheus.yml
#查看prometheus的进程id,上面修改配置进行热加载配置
ps -ef |grep prometheus
kill -HUP 62291

ansible服务器

#部署ansible
yum -y install epel-release
yum -y install ansible

#创建一个目录,存放ansible执行相关的文件,部署包等
mkdir ansible
cd ansible
#这个目录下有以下文件:
1.node_exporter-1.0.1.linux-amd64.tar.gz #采集器部署包
2.node_exporter.service #将node_exporter纳入system管理的系统服务
3.config.yml #用于存放用户名密码认证的文件
4.consul-register.sh #被监控端注册到consul的脚本信息
5.hosts #用户存放ansible管理的主机组信息,资产清单
6.playbook.yaml #用于存放ansible执行的相关的操作具体步骤,相当于说明书

#以上文件准备好后,开始执行部署
ansible-playbook -i hosts playbook.yaml -u root -k

下面进行对以上文件进行详细介绍

1.准备采集器部署包

2.node_exporter.service

解释:

–web.config:指定的是用户名密码配置文件

–collector.systemd:采集systemd管理的系统服务

#cat node_exporter.service 
[Unit]
Description=node_exporter

[Service]
ExecStart=/usr/local/node_exporter/node_exporter --web.config=/usr/local/node_exporter/config.yml --collector.systemd --collector.systemd.unit-whitelist=(docker|sshd|nginx).service
ExecReload=/bin/kill -HUP $MAINPID
KillMode=process
Restart=on-failure

[Install]
WantedBy=multi-user.target

3.config.yml

下面的密码是用httpd-tools工具生成的

yum install httpd-tools –y

htpasswd -nBC 12 ‘’ | tr -d ‘:\n’

#cat config.yml 
basic_auth_users:
prometheus: $2y$12$ctQIqhh5l4qcSFAenR30eubhiVg4O71KHzl5N9MkuqTua72P7KPuy

4.consul-register.sh

定义位置参数

$1 在shell中传入“位置参数”,表示传入的第一个参数,以此类推

#cat consul-register.sh 
#!/bin/bash
#service_name表示的是consul中定义的服务名
service_name=$1
#instance_id表示的是consul中定义的实例名
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.0.11:8500/v1/agent/service/register

5.hosts

#cat hosts 
[webservers]
192.168.0.12 name=web1
192.168.0.13 name=web2
########################################
#可以定义多个组,分组的形式去监控
[dbbservers]
192.168.0.12 name=db1
192.168.0.13 name=db2
[loadbalances]
192.168.0.12 name=lb1
192.168.0.13 name=lb2

6.playbook.yaml

#cat playbook.yaml 
- hosts: webservers
gather_facts: no
tasks:
- name: stop firewalld
systemd: name=firewalld state=stopped
- name: 推送二进制文件
unarchive: src=node_exporter-1.0.1.linux-amd64.tar.gz dest=/usr/local
- name: 重命名
shell: |
ntpdate ntp1.aliyun.com
cd /usr/local
if [ ! -d node_exporter ];then
mv node_exporter-1.0.1.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=restarted 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 }} 9100

web服务器--------->要监控的web服务器