北京网站建设开发专业公司,温州做网站整站优化,wordpress生成静态网页,wordpress 评论 评分一、简介 1、Consul简介 Consul 是基于 GO 语言开发的开源工具#xff0c;主要面向分布式#xff0c;服务化的系统提供服务注册、服务发现和配置管理的功能。Consul 提供服务注册/发现、健康检查、Key/Value存储、多数据中心和分布式一致性保证等功能。 在没有使用 consul 服…一、简介 1、Consul简介 Consul 是基于 GO 语言开发的开源工具主要面向分布式服务化的系统提供服务注册、服务发现和配置管理的功能。Consul 提供服务注册/发现、健康检查、Key/Value存储、多数据中心和分布式一致性保证等功能。 在没有使用 consul 服务自动发现的时候我们需要频繁对 Prometheus 配置文件进行修改无疑给运维人员带来很大的负担。引入consul之后只需要在consul中维护监控组件配置prometheus就能够动态发现配置
2、实验环境
IP操作系统安装服务172.18.200.52ubuntu 22.04.1Docker、Prometheus、Grafana、Consul172.18.200.53ubuntu 22.04.1node-exporter
二、安装Consul 1、配置docker-compose.yml
# cat docker-compose.yml
version : 3
services:consul:image: consul:1.15restart: alwayscontainer_name: consulhostname: consulenvironment:TZ: Asia/Shanghaiports:- 8500:8500volumes:- /etc/localtime:/etc/localtime:ro- ./consul/config:/consul/config- ./consul/data:/consul/data/command: [consul,agent,-config-dir,/consul/config]2、配置consul.hcl server: 将其设置为 true 将使我们的 consul 服务作为服务器运行而不是作为客户端或代理运行。 data_dir: consul 的默认数据目录它存储一些持久服务器值。 log_level: 在运行 consul 的命令时我们将如何处理日志。 client_addr: 我们的客户地址如果我们想要更多地保护它我们可以使用 - 子网划分或只允许来自确定的 ip 的连接。 bind_addr: 我们的服务器ip地址如果只使用一个网卡则不需要 connect: 允许网状连接。 ui_config: 基于Web的用户界面。 # cat consul/config/consul.hcl
client_addr 0.0.0.0
bind_addr 127.0.0.1
data_dir /consul/data
log_level INFO
server true
bootstrap true
connect{enabled true
}
ui_config{enabled true
}
acl {enabled truedefault_policy denyenable_token_persistence true
}3、启动consul
# docker-compose up -d
# docker exec -it consul /bin/sh
/ # consul acl bootstrap
AccessorID: 738dba6d-xxxx-6f8e-xxxx-8b10d9b06a6f
SecretID: c32db00c-xxxx-37be-xxxx-8b674d033ce3
Description: Bootstrap Token (Global Management)
Local: false
Create Time: 2023-11-14 06:16:01.812609522 0000 UTC
Policies:00000000-0000-0000-0000-000000000001 - global-management4、浏览器访问 通过SecretID进行登录 http://172.18.200.52:8500三、配置Ansible 1、安装
# apt-get install ansible2、修改配置
# cat /etc/ansible/ansible.cfg
[defaults]
#host_key_checking False
#error_on_undefined_vars True
#timeout 60
#inventory inventory.tmp
#roles_path /conjurinc
#remote_tmp /tmp
host_key_checking False
log_path /var/log/ansible.log四、ansible-playbook编写 1、查看目录结构
# tree ./
# tree ./
./
├── inventory
│ └── hosts
├── node_exporter_roles.yml
└── roles├── node-exporter│ ├── defaults│ │ └── main.yml│ ├── files│ │ └── node_exporter-1.6.1.linux-amd64.tar.gz│ ├── handlers│ │ └── main.yml│ ├── tasks│ │ └── main.yml│ └── templates│ └── node_exporter.service.j2└── register├── files│ └── consul_register.sh└── tasks├── main.yml└── register.yml2、配置hosts service_name可以不配置 # cat inventory/hosts
[linux]
172.18.200.53 service_namelinux-172.18.200.53[linux:vars]
consul_ip172.18.200.52
consul_port8500
node_exporter_port9100
consul_tokenc32db00c-xxxx-37be-xxxx-8b674d033ce33、配置node_exporter_roles.yml
# cat node_exporter_roles.yml
- hosts: linuxgather_facts: noroles:- role: node-exporter4、配置roles/node-exporter
1下载exporter 下载地址https://github.com/prometheus/node_exporter/releases/tag/v1.6.1 2配置defaults 设置service_name默认值 # cat roles/node-exporter/defaults/main.yml
service_name: {{ group_names[0] }}-{{ inventory_hostname }}3配置handlers
# cat roles/node-exporter/handlers/main.yml
- name: restart node exporter servicesystemd:name: node_exporterstate: restarteddaemon-reload: yes- include: roles/register/tasks/register.yml4配置tasks
# cat roles/node-exporter/tasks/main.yml
- name: push node_exporterunarchive:src: node_exporter-1.6.1.linux-amd64.tar.gzdest: /usr/local- name: renameshell: |cd /usr/localif [ ! -d node_exporter ]then mv node_exporter-1.6.1.linux-amd64 node_exporterfi- name: copy node_exporter systemdtemplate:src: node_exporter.service.j2dest: /usr/lib/systemd/system/node_exporter.servicenotify: restart node exporter service- name: start node_exportersystemd:name: node_exporterstate: startedenabled: yesdaemon-reload: yes- include: roles/register/tasks/main.yml5配置templates node_exporter_port端口可以进行配置 # cat roles/node-exporter/templates/node_exporter.service.j2
[Unit]
Descriptionnode_exporter[Service]
ExecStart/usr/local/node_exporter/node_exporter --web.listen-address:{{ node_exporter_port }}
ExecReload/bin/kill -HUP $MAINPID
KillModeprocess
Restarton-failure[Install]
WantedBymulti-user.target5、配置roles/register
1配置files nameansible hosts的name group_names[0]组名如果属于children那么就是group_names[1] inventory_hostnameansible hosts的ip node_exporter_portnode_exporter的端口默认9100 consul_ipconsul服务的ip consul_portconsul服务的端口 consul_tokenconsul服务的SecretID # cat roles/register/files/consul_register.sh
#!/bin/bashinstance_id$1
service_name$2
ip$3
port$4
consul_ip$5
consul_port$6
consul_token$7curl -X PUT --header X-CONSUL-TOKEN: $consul_token -d {id: $instance_id,name: $service_name,address: $ip,port: $port,tags: [$service_name],checks: [{http: http://$ip:$port,interval: 5s}]} http://$consul_ip:$consul_port/v1/agent/service/register2配置tasks
# cat roles/register/tasks/main.yml
- name: push consul_register.shcopy:src: roles/register/files/consul_register.shdest: /usr/local/bin- include: roles/register/tasks/register.yml# cat roles/register/tasks/register.yml
- name: register nodes into consulshell: /bin/bash /usr/local/bin/consul_register.sh {{ service_name }} {{ group_names[0] }} {{ inventory_hostname }} {{ node_exporter_port }} {{ consul_ip }} {{ consul_port }} {{ consul_token }}五、修改Prometheus配置 1、配置prometheus.yml services中的linuxansible hosts文件中的group名字 这里的services为列表所有可以添加多个不同组的服务器进来也实现了分组 # cat prometheus/conf/prometheus.yml
...
scrape_configs:# The job name is added as a label jobjob_name to any timeseries scraped from this config.- job_name: linuxconsul_sd_configs:- server: 172.18.200.52:8500token: c32db00c-xxxx-37be-xxxx-8b674d033ce3services: [linux]2、重启
# docker restart prometheus六、执行并添加Grafana 1、执行ansible-playbook命令
# ansible-playbook -i inventory/hosts node_exporter_roles.yml2、查看Consul 3、添加Grafana 模板id9276