这章,咱们主要讲一下 Prometheus 的扩展 Cortex 的安装过程,以及Cortex的水平扩展。这些内容官网均可以找到。docker
咱们进入到 Cortex 的文件目录,执行指令:shell
go build ./cmd/cortex
开始执行:api
./cortex -config.file=./docs/configuration/single-process-config.yaml
通常状况下不会出问题,有问题应该是 Linux 缺乏了相关程序,自行下载便可。执行完就行了浏览器
这个咱们直接解压 .tar.gz 文件包,进入 prometheus 目录,修改 prometheus.yml , 增长配置:网络
remote_write: - url: http://localhost:9009/api/prom/push
配置文件是 yml 格式的,请遵照相关规则。测试
./prometheus
如今咱们须要经过 Grafana 来进行数据的读取。ui
docker run --rm -d --name=grafana -p 3000:3000 grafana/grafana
如今咱们就在 Grafana 里面去作GUI 就行了。url
水平扩展的实现,咱们也是依赖于 Dockerspa
# 构建镜像,这一步基本成不了 make ./cmd/cortex/.uptodate
上面的景象咱们构建不出来,咱们就下载镜像:code
docker pull cortexproject/cortex
# 建立 cortex 的网络 docker network create cortex # 单个节点Consul实例,用于协调Cortex集群 docker run -d --name=consul --network=cortex -e CONSUL_BIND_INTERFACE=eth0 consul
docker run -d --name=cortex1 --network=cortex \ -v $(pwd)/docs/configuration/single-process-config.yaml:/etc/single-process-config.yaml \ -p 9001:9009 \ cortexproject/cortex:master-1f600cb1 \ -config.file=/etc/single-process-config.yaml \ -ring.store=consul \ -consul.hostname=consul:8500
docker run -d --name=cortex2 --network=cortex \ -v $(pwd)/docs/configuration/single-process-config.yaml:/etc/single-process-config.yaml \ -p 9002:9009 \ cortexproject/cortex:master-1f600cb1 \ -config.file=/etc/single-process-config.yaml \ -ring.store=consul \ -consul.hostname=consul:8500
咱们的验证方式是:
在浏览器中输入: http://{ip}:9001/ring , 或者是 9002 端口
正常状况下看到的会是这两个:
而后,咱们如今将 Prometheus 接入到其中的一个实例: 好比 9001
remote_write - url: http://localhost:9001/api/prom/push
再用到 Grafana 验证的时候,这时候的 Cortex 地址就是Docker 的容器地址: http://172.18.0.3:9009/api/prom
清理,后续须要在从新设置
docker rm -f cortex1 cortex2 consul grafana docker network remove cortex
这里主要针对的是 当 Integers 出现单个的宕机状态时,当前宕机的 integer 须要将本身的 sample 复制到其余的 integer .
docker network create cortex docker run -d --name=consul --network=cortex -e CONSUL_BIND_INTERFACE=eth0 consul docker run -d --name=grafana --network=cortex -p 3000:3000 grafana/grafana
咱们开始建立咱们的实例:
docker run -d --name=cortex1 --network=cortex \ -v $(pwd)/docs/configuration/single-process-config.yaml:/etc/single-process-config.yaml \ -p 9001:9009 \ cortexproject/cortex:master-1f600cb1 \ -config.file=/etc/single-process-config.yaml \ -ring.store=consul \ -consul.hostname=consul:8500 \ -distributor.replication-factor=3 docker run -d --name=cortex2 --network=cortex \ -v $(pwd)/docs/configuration/single-process-config.yaml:/etc/single-process-config.yaml \ -p 9002:9009 \ cortexproject/cortex:master-1f600cb1 \ -config.file=/etc/single-process-config.yaml \ -ring.store=consul \ -consul.hostname=consul:8500 \ -distributor.replication-factor=3 docker run -d --name=cortex3 --network=cortex \ -v $(pwd)/docs/configuration/single-process-config.yaml:/etc/single-process-config.yaml \ -p 9003:9009 \ cortexproject/cortex:master-1f600cb1 \ -config.file=/etc/single-process-config.yaml \ -ring.store=consul \ -consul.hostname=consul:8500 \ -distributor.replication-factor=3
如今咱们写入到 cortex1 中,测试 cortex3 是否会存在数据:
咱们能够看到,每一个 cortex 节点都写入了数据,可是咱们的数据只写入了 cortex1 , 这就是 cortex 之间的复制。
如今咱们要 cortex2 挂掉,看看什么效果:
能够看到的是,cortex2 挂了,可是 其余两个都仍是正常的状态,这就是 Cortex 里面的高可用。