环境:
主机名 IP 系统 说明
ubunt-1 192.168.1.144 ubuntu20.0.4 docker安装的Prometheus
docker 192.168.1.140 centos7 已完成MySQL mongodb 等基于配置文件的监控
说明:
Consul 是由 HashiCorp 开发的一个支持多数据中心的分布式服务发现和键值对存储服务的开源软件,是一个通用的服务发现和注册中心工具,被大量应用于基于微服务的软件架构当中。
我们通过api将exporter服务注册到 Consul 然后配置 Prometheus 从Consul 中发现实例。
关于Consul 本身使用可以查看官方文档https://learn.hashicorp.com/consul了解更多。
1、安装配置Consul的两种方式(二选一即可)
注意:在Prometheus服务器端安装Consul
1、二进制安装配置Consul:
在页面https://www.consul.io/downloads下载符合自己系统的安装文件,比如我这里是Linux系统使用下面命令下载安装即可:
wget https://releases.hashicorp.com/consul/1.14.5/consul_1.14.5_linux_amd64.zip
yum -y install unzip
unzip consul_1.14.5_linux_amd64.zip
mv consul /usr/local/bin
consul version
启动consul
为了查看更多的日志信息,我们可以在dev模式下运行consul 如下所示:
consul agent -dev -client 0.0.0.0
启动命令后面使用的client 参数指定了客户端绑定的IP地址 默认为127.0.0.1
2、docker安装Consul
docker运行:
docker run -d --name consul -p 8500:8500 consul
检查:
docker ps
2、访问consul的http访问地址
访问你Prometheus服务器的IP加8500端口和/ui/dc1/services后缀
http://192.168.1.144:8500/ui/dc1/services
3、注册到consul的两种方式(二选一即可)
1、使用命令行注册
curl -X PUT -d '{"id": "node1","name": "node_exporter","address": "node_exporter","port": 9100,"tags": ["exporter"],"meta": {"job": "node_exporter","instance": "Prometheus服务器"},"checks": [{"http": "http://192.168.1.144:9100/metrics", "interval": "5s"}]}' http://localhost:8500/v1/agent/service/register
命令解释:
- -X PUT:使用 PUT 方法发送请求。在这个命令中,PUT 方法用于注册服务到 Consul。
- -d '{"id": "node1","name": "node_exporter","address": "node_exporter","port": 9100,"tags": ["exporter"],"meta": {"job": "node_exporter","instance": "Prometheus服务器"},"checks": [{"http": "http://192.168.1.144:9100/metrics", "interval": "5s"}]}':指定要发送的数据体,即要注册的服务的信息。这里使用 JSON 格式进行定义。
- "id": "node1":服务的唯一标识符。
- "name": "node_exporter":服务的名称。
- "address": "node_exporter":服务的地址。
- "port": 9100:服务的端口号。
- "tags": ["exporter"]:服务的标签,可以是任意字符串数组。
- "meta": {"job": "node_exporter","instance": "Prometheus服务器"}:附加的元数据信息,可以是任意键值对。
- "checks": [{"http": "http://192.168.1.144:9100/metrics", "interval": "5s"}]:与服务相关的健康检查配置。这里定义了一个 HTTP 类型的检查,检查地址为 http://192.168.1.144:9100/metrics,每 5 秒执行一次。
- http://localhost:8500/v1/agent/service/register:Consul Agent 的注册服务 API 端点。
2、将json数据放在文件中使用文件注册
把json数据放在文件中,使用这个json文件注册
mkdir /data/consul
cd /data/consul
vim node_exporter.json
{
"id": "node2",
"name": "node_exporter",
"address": "192.168.1.140",
"port": 9100,
"tags": ["exporter"],
"meta": {
"job": "node_exporter",
"instance": "test服务器"
},
"checks": [{
"http": "http://192.168.1.140:9100/metrics",
"interval": "10s"
}]
}
使用json文件注册
curl --request PUT --data @node_exporter.json http://localhost:8500/v1/agent/service/register
4、注册完成后在consul页面刷新查看
可以看到多了一个node_exporter实例注册成功
5、配置Prometheus
上面我们通过consul注册了node_exporter服务,接下来我们将配置Prometheus通过consul来自动发现node_porter服务,在Prometheus的配置文件prometheus.yml文件中的scrape_configs 部分添加如下所示的抓取配置。
备份源文件:
cd /data/docker-prometheus
cp -a prometheus/prometheus.yml prometheus/prometheus.yml.bak
ls -l prometheus/prometheus.yml.bak
使用cat去掉之前的配置,使用下面的配置
cat > prometheus/prometheus.yml<<"EOF"
# 全局配置
global:
scrape_interval: 15s # 将搜刮间隔设置为每15秒一次。默认是每1分钟一次
evaluation_interval: 15s # 每15秒评估一次规则,默认是每1分钟一次# Alertmanager 配置
alerting:
alertmanagers:
- static_configs:
- targets: ['alertmanager:9093']# 报警(触发器)配置
rule_files:
- "alert.yml"
- "rules/*.yml"# 搜刮配置
scrape_configs:
- job_name: 'prometheus'
# 覆盖全局默认值,每15秒从该作业中刮取一次目标
scrape_interval: 15s
static_configs:
- targets: ['localhost:9090']- job_name: 'alertmanager'
# 覆盖全局默认值,每15秒从该作业中刮取一次目标
scrape_interval: 15s
static_configs:
- targets: ['alertmanager:9093']- job_name: 'consul_exporter'
consul_sd_configs:
- server: '192.168.1.144:8500'
services: []
relabel_configs:
- source_labels: [__meta_consul_tags]
regex: .*exporter.*
action: keep
- regex: __meta_consul_service_metadata_(.+)
action: labelmapEOF
重新加载配置
curl -X POST http://localhost:9090/-/reload
6、访问Prometheus端的IP加9090端口选择Status在选择Targets查看
http://192.168.1.144:9090/
7、创建添加脚本(在Prometheus端操作)
添加一个脚本
mkdir /data/consul
cd /data/consul
vim api.sh
#nginx
curl -X PUT -d '{
"id": "nginx1",
"name": "nginx_exporter",
"address": "192.168.1.139",
"port": 9113,
"tags": ["exporter"],
"meta": {
"job": "nginx_exporter",
"instance": "harbor服务器",
"env": "test"
},
"checks": [{
"http": "http://192.168.1.139:9113/metrics",
"interval": "5s"
}]
}' http://localhost:8500/v1/agent/service/register#rabbitmq
curl -X PUT -d '{
"id": "rabbitmq1",
"name": "rabbitmq_exporter",
"address": "192.168.1.139",
"port": 9419,
"tags": ["exporter"],
"meta": {
"job": "rabbitmq_exporter",
"instance": "harbor服务器",
"env": "test"
},
"checks": [{
"http": "http://192.168.1.139:9419/metrics",
"interval": "5s"
}]
}' http://localhost:8500/v1/agent/service/register
#redis
curl -X PUT -d '{
"id": "redis1",
"name": "redis_exporter",
"address": "192.168.1.139",
"port": 9121,
"tags": ["exporter"],
"meta": {
"job": "redis_exporter",
"instance": "harbor服务器",
"env": "test"
},
"checks": [{
"http": "http://192.168.1.139:9121/metrics",
"interval": "5s"
}]
}' http://localhost:8500/v1/agent/service/register#mongodb
curl -X PUT -d '{
"id": "mongodb1",
"name": "mongodb_exporter",
"address": "192.168.1.140",
"port": 9216,
"tags": ["exporter"],
"meta": {
"job": "mongodb_exporter",
"instance": "docker服务器",
"env": "test"
},
"checks": [{
"http": "http://192.168.1.140:9216/metrics",
"interval": "5s"
}]
}' http://localhost:8500/v1/agent/service/register#mysql
curl -X PUT -d '{
"id": "mysql1",
"name": "mysqld_exporter",
"address": "192.168.1.140",
"port": 9104,
"tags": ["exporter"],
"meta": {
"job": "mysqld_exporter",
"instance": "docker服务器",
"env": "test"
},
"checks": [{
"http": "http://192.168.1.140:9104/metrics",
"interval": "5s"
}]
}' http://localhost:8500/v1/agent/service/register
#cadvisor
curl -X PUT -d '{
"id": "cadvisor1",
"name": "cadvisor",
"address": "192.168.1.144",
"port": 8080,
"tags": ["exporter"],
"meta": {
"job": "cadvisor",
"instance": "Prometheus服务器",
"env": "test"
},
"checks": [{
"http": "http://192.168.1.144:8080/metrics",
"interval": "5s"
}]
}' http://localhost:8500/v1/agent/service/registercurl -X PUT -d '{
"id": "cadvisor2",
"name": "cadvisor",
"address": "192.168.1.140",
"port": 8080,
"tags": ["exporter"],
"meta": {
"job": "cadvisor",
"instance": "docker服务器",
"env": "test"
},
"checks": [{
"http": "http://192.168.1.140:8080/metrics",
"interval": "5s"
}]
}' http://localhost:8500/v1/agent/service/register
#process_exporter
curl -X PUT -d '{
"id": "process1",
"name": "process_exporter",
"address": "192.168.1.140",
"port": 9256,
"tags": ["exporter"],
"meta": {
"job": "process_exporter",
"instance": "docker服务器",
"env": "test"
},
"checks": [{
"http": "http://192.168.1.140:9256/metrics",
"interval": "5s"
}]
}' http://localhost:8500/v1/agent/service/register#domin
curl -X PUT -d '{
"id": "domain1",
"name": "domain_exporter",
"address": "baidu.com",
"tags": ["domain"],
"checks": [{
"http": "http://192.168.1.140:9222",
"interval": "5s"
}]
}' http://localhost:8500/v1/agent/service/register
执行脚本:
sh api.sh
8、脚本执行完成后在Consul 页面刷新查看
注:如果页面报错稍等一会再次刷新一下查看,
9、再次访问Prometheus端的IP加9090端口选择Status在选择Targets查看
http://192.168.1.144:9090/
10、安装consul manager
注:consul manager 需要依赖 consul 请先完成 consul 的部署。
使用docker-compose来部署consul manager
下载(在Prometheus端操作):
wget https://starsl.cn/static/img/docker-compose.yml
编辑:
vim docker-compose.yml
11、启动docker-compose
docker-compose up -d #启动
docker ps #查看
12、访问consul manager的web页面
注:我consul manager是安装在Prometheus端的所以输入Prometheus端的IP加1026端口访问
注:密码我们在前面(第 10 )都已经写入了 我的密码是sy123456
可以在上面更简单化的进行新增 删除