背景
所谓规模大,就意味着尽量少手动,需要有分网段vpc,分prod和dev环境,能自动发现、自动注册的功能。
意味在Node_exporter安装上的那一刻,就开始自动添加到监控节点里面。或者也可以在主机第一次启动的时候,跟随主机镜像模版的去启动,如果你把node_exporter做到镜像里面的话。
Zabbix有Proxy,有自动注册,Prometheus也可以,可以联邦,可以主动注册,需要用到服务注册组件consul,可单点,可集群,采用Raft算法来做分布式一致性,和ETCD一样。
当然,这里得排除zabbix上手动添加的一个个脚本监控指标和站点检测指标,这些完全可以用一些简单的web框架来完成,下次再谈。
环境
Sys:Ubuntu 18.04 & Centos 7.6 (不重要)
Software:每台Supervisor 、每台Node_exporter、Consul 集群、Prometheus server、Grafana
install node_exporter
略,个人建议应该把一些基础性质的app直接装在镜像模版里面自启动,尤其是这种启动后不需要单独配置的
附上一个ansible roles,批量安装node_exporter,需要有supervisor环境,且配置文件需要include /opt/supervisord/etc
,可以二改,很简单的几行
https://github.com/lijinghuatongxue/Blog_Example/tree/master/ansible/init_node_exporter
install consul
consul_cluster 安装笔记 简单粗暴型
验证集群状态
$ ./consul catalog nodes -service=consul
Node ID Address DC
agent-1 9a736866 192.168.0.204 dc1
agent-2 eea84047 192.168.0.206 dc1
agent-3 65a43d5e 192.168.0.253 dc1
批量去注册
上一个粗糙的脚本,并发执行去嗅探9100端口是否打开,打开便开始批量注册,会在很短的几秒钟内完成对255个ip完成嗅探和注册,当然ip的获取可以有多种方式,也可以通过api从云平台获取最新的ip列表
代码位置:https://github.com/lijinghuatongxue/Blog_Example/tree/master/consul_prometheus
$ /Blog_Example/consul_prometheus# tree -l
.
├── auto_register.sh
├── dev_consul.json
├── dev_consul.json.tem
├── ip_list
├── prod_consul.json
└── prod_consul.json.tem
灵活使用,也可以把白名单拆出来,可以做成定时任务。
手动通过json+api导入和删除
json
root@paa5-test:~# cat prod_consul.json
{
"ID": "node-exporter-127.0.0.1",
"Name": "node-exporter-127.0.0.1",
"Tags": [
"prom",
"prod",
"node-exporter"
],
"Address": "127.0.0.1",
"Port": 9100,
"Meta": {
"app": "spring-boot",
"team": "appgroup",
"project": "bigdata"
},
"EnableTagOverride": false,
"Check": {
"HTTP": "http://127.0.0.1:9100/metrics",
"Interval": "10s"
},
"Weights": {
"Passing": 10,
"Warning": 1
}
}
curl --request PUT --data @prod_consul.json http://192.168.0.204:8500/v1/agent/service/register?replace-existing-checks=1
命令行导入
$ curl -X PUT -d '{"id": "node_exporter-192.168.0.204","name": "node_exporter-192.168.0.204","address": "192.168.0.204","port": 9100,"tags": ["prom","prod","node"],"checks": [{"http": "http://192.168.0.204:9100/metrics","interval": "35s"}]}' http://192.168.0.204:8500/v1/agent/service/register
命令行删除
curl -X PUT http://192.168.0.204:8500/v1/agent/service/deregister/node_exporter-192.168.0.204
prometheus 配置consul模块
我这里分为 prod 环境 和 dev环境,方便后期根据不同的环境去绑定模版
192.168.0.253是我的conusl ip之一,regex 抓取关键的tag去绑定不同的job,和前面的json对应。
···
- job_name: 'consul-prod'
consul_sd_configs:
- server: '192.168.0.253:8500'
services: []
relabel_configs:
- source_labels: [__meta_consul_service]
regex: "consul"
action: drop
- source_labels: [__meta_consul_tags]
regex: .*prom,prod,.*
action: keep
- source_labels: [__meta_consul_service]
target_label: job
- job_name: 'consul-dev'
consul_sd_configs:
- server: '192.168.0.253:8500'
relabel_configs:
- source_labels: [__meta_consul_service]
regex: "consul"
action: drop
- source_labels: [__meta_consul_tags]
regex: .*prom,dev,.*
action: keep
- source_labels: [__meta_consul_service]
target_label: job
···
重启prometheus便可以获取node_exporter节点了
consul 可以使用的元标签:
__meta_consul_address:目标的地址
__meta_consul_dc:目标的数据中心名称
__meta_consul_tagged_address_<key>:每个节点标记目标的地址键值
__meta_consul_metadata_<key>:目标的每个节点元数据键值
__meta_consul_node:为目标定义的节点名称
__meta_consul_service_address:目标的服务地址
__meta_consul_service_id:目标的服务ID
__meta_consul_service_metadata_<key>:目标的每个服务元数据键值
__meta_consul_service_port:目标的服务端口
__meta_consul_service:目标所属服务的名称
__meta_consul_tags:标记分隔符连接的目标的标记列表
收获了。谷歌了半天 consul prometheus 自动注册
牛逼 大佬