五、部署Prometheus服务发现
5.1 基于文件的服务发现
基于文件的服务发现是仅仅略优于静态配置的服务发现方式,它不依赖于任何平台或第三方服务,因而也是最为简单和通用的实现方式。
Prometheus Server 会定期从文件中加载 Target 信息,文件可使用 YAML 和 JSON 格式,它含有定义的 Target 列表,以及可选的标签信息。
(1)创建用于服务发现的文件,在文件中配置所需的 target
cd /usr/local/prometheus mkdir targets vim targets/node-exporter.yaml - targets: - 192.168.109.131:9100 - 192.168.109.132:9100 - 192.168.109.133:9100 labels: app: node-exporter job: node #修改 prometheus 配置文件,发现 target 的配置,定义在配置文件的 job 之中 vim /usr/local/prometheus/prometheus.yml ...... scrape_configs: - job_name: nodes file_sd_configs: #指定使用文件服务发现 - files: #指定要加载的文件列表 - targets/node*.yaml #文件加载支持通配符 refresh_interval: 2m #每隔 2 分钟重新加载一次文件中定义的 Targets,默认为 5m systemctl reload prometheus 浏览器查看 Prometheus 页面的 Status -> Targets
前提是该node节点装好node-exporter组件,这个步骤在前面就不展示了,可以使用scp命令从普罗米修斯机子传过去
5.2 基于 Consul 的服务发现
Consul 是一款基于 golang 开发的开源工具,主要面向分布式,服务化的系统提供服务注册、服务发现和配置管理的功能。
提供服务注册/发现、健康检查、Key/Value存储、多数据中心和分布式一致性保证等功能。
下载地址:https://www.consul.io/downloads/
(1)部署 Consul 服务
cd /opt/ unzip consul_1.9.2_linux_amd64.zip mv consul /usr/local/bin/ #创建 Consul 服务的数据目录和配置目录 mkdir /var/lib/consul-data mkdir /etc/consul/ #使用 server 模式启动 Consul 服务 consul agent \ -server \ -bootstrap \ -ui \ -data-dir=/var/lib/consul-data \ -config-dir=/etc/consul/ \ -bind=192.168.109.138 \ -client=0.0.0.0 \ -node=consul-server01 &> /var/log/consul.log & #查看 consul 集群成员 consul members
(2)在 Consul 上注册 Services
#在配置目录中添加文件 vim /etc/consul/nodes.json { "services": [ { "id": "node_exporter-node01", "name": "node01", "address": "192.168.109.138", "port": 9100, "tags": ["nodes"], "checks": [{ "http": "http://192.168.109.138:9100/metrics", "interval": "5s" }] }, { "id": "node_exporter-node02", "name": "node02", "address": "192.168.109.134", "port": 9100, "tags": ["nodes"], "checks": [{ "http": "http://192.168.109.134:9100/metrics", "interval": "5s" }] } ] } #让 consul 重新加载配置信息 consul reload 浏览器访问:http://192.168.109.138:8500
同样134机子需要配置node-exporter,这边不展示
(3)修改 prometheus 配置文件
vim /usr/local/prometheus/prometheus.yml ...... - job_name: nodes consul_sd_configs: #指定使用 consul 服务发现 - server: 192.168.109.138:8500 #指定 consul 服务的端点列表 tags: #指定 consul 服务发现的 services 中哪些 service 能够加入到 prometheus 监控的标签 - nodes refresh_interval: 2m systemctl reload prometheus 浏览器查看 Prometheus 页面的 Status -> Targets #让 consul 注销 Service consul services deregister -id="node_exporter-node02" #重新注册 consul services register /etc/consul/nodes.json
5.3 基于 Kubernetes API 的服务发现
内容较多后期详细写一篇
总结
prometheus定义: 监控系统、时间序列数据库
prometheus生态组件:
prometheus server(http PULL方式的数据采集,TSDB数据库存储,alter告警生成)
client libray(客户端库,使应用服务原生支持prometheus监控数据采集)
exporter(指标暴露器,用于收集原生不支持prometheus监控的系统和应用的数据暴露给 prometheus)
altermanger(接收prometheus server推送的告警信息,负责发告警路由发送给接收人)
pushgateway(接收一些短期任务推送的监控数据,并临时存储,再由prometheus server统一拉取)
grafana(外置的监控数据展示平台,使用promQL查询 prometheus 数据源)
service discovery(动态服务发现机制,支持文件、consul、K8S、DNS等方式)
exporter
Node-exporter、Nginx/Mysql/Redis-exporter、Kube-State-Metrics、cADvisor、blackbox-exporter
prometheus远程存储: InfluxDB、openTSDB