Prometheus 是一套开源的系统监控和报警系统。支持多种exporter采集数据,尤其是我们常见的MySQL、Redis、MongoDB,等等都有相关的exporter,对于DBA来说,可以非常方便的监控我们的数据库。
这里我们就部署问题,做一些简单的整理。
服务器及部署组件:
10.2.17.137 Prometheus,redis,redis_exporter
10.2.34.31 consul
部署 Prometheus
Prometheus部署也比较简单,官网有二进制包,下载后,直接解压就可以使用。
Prometheus下载:
https://prometheus.io/download/
redis_exporter下载:
https://github.com/oliver006/redis_exporter/releases
选择对应的系统,我们使用的是Linux,amd64的二进制包。
tar -zxf prometheus-2.44.0-rc.2.linux-amd64.tar.gz
mv prometheus-2.44.0-rc.2.linux-amd64 /usr/local/prometheus
#启动
/usr/local/prometheus/prometheus --config.file=/usr/local/prometheus/prometheus.yml --storage.tsdb.path=/data/prometheus --web.listen-address=:9090 &
启动成功,可以通过浏览器打开,进行数据查询
http://10.2.17.137:9090/
如:
image.png
到这里,简单的 prometheus server 就安装完成了,是不是灰常灰常的简单。
监控
监控具体的实例
服务部署好了,下面就是监控数据了。
打开配置文件 /usr/local/prometheus/prometheus.yml
增加一个最简单的job:
- job_name: "redis"
static_configs:
- targets: ["10.2.17.137:11210"]
上面这个示例,就是监控10.2.17.137上11210的metrics,这个并不是redis 的实例地址,
还需要启动 redis_exporter,11210 是exporter的监听端口
redis_exporter -web.listen-address :11210 -redis.addr 10.2.17.137:6380 -redis.password xxx &
#可以通过这个命令查看redis的监控指标
curl http://10.2.17.137:11210/metrics
自动发现式监控
上面只是一个redis实例,如果我们的生产有上百上千套redis,总不能一个一个地址配置吧?
这时候,我们就需要有自动发现式的监控。
这里采用注册consul的方式。
首先,我们在10.2.34.31上,部署consul
wget https://releases.hashicorp.com/consul/1.6.1/consul_1.6.1_linux_amd64.zip
unzip consul_1.6.1_linux_amd64.zip
#测试情况,我们只启动一个单点consul
./consul agent -dev -client 10.2.34.31 -ui >/tmp/consul.log 2>&1
#浏览器打开consul,查看是否正常
http://10.2.34.31:8500/
重新配置prometheus.yml,再增加一个job
- job_name: "consul"
consul_sd_configs:
- server: '10.2.34.31:8500'
services: []
#使用 consul_sd_configs 来配置使用Consul服务发现类型,server 为 Consul 的服务地址
prometheus会更加consul中的redis地址来进行抓取数据,所以接下来,就是我们需要想办法,自动化的,把所有的redis实例,来启动对应的exporter(该部署省略了),同时注册到consul中。
#注册consul
curl -s -X PUT -d '{"id":"10.2.17.137:6381","name": "redis","address": "10.2.17.137","tags":["人民银行redis"],"port": 4444,"Meta": {"app": "redis","group": "北京分行", "project": "借贷","clusterid": "借贷redis"}}' http://10.2.34.31:8500/v1/agent/service/register
image.png
image.png
# 此时我们从 http://10.2.17.137:9090/,查询 "redis_up",只能查到如下信息
redis_up{instance="10.2.17.137:4444", job="redis"}
默认情况下,只显示instance,job两个标签,我们自己打的很多标签都没有显示。而且看到的instance 不是redis端口,而是exporter的监听端口,怎么办?
- job_name: "consul"
consul_sd_configs:
- server: '10.2.34.31:8500'
services: []
relabel_configs:
- regex: __meta_consul_service_metadata_(.+)
action: labelmap
#通过正则,把匹配到的__meta_consul_service_metadata标签显示出来
- source_labels: [__meta_consul_service_id]
target_label: instance
action: replace
# 我们希望在监控中看到的redis 实例标签 instance 是实例的ip:port,这里对标签 __meta_consul_service_id进行重写
Prometheus允许用户在采集任务设置中通过relabel_configs来添加自定义的Relabeling过程。
replace/labelmap/labelkeep/labeldrop对标签进行管理
image.png重启 prometheus后,再次查看
redis_up{app="redis", clusterid="借贷redis", group="北京分行", instance="10.2.17.137:6381", job="consul", project="借贷"}
到这里,就是prometheus如何部署及监控redis的过程。
图标展示
那监控到的数据,如何展示?
还需要配合grafana图标进行展示,这里不再赘述,上一章,我们主要讲了grafana李如何设置同比、环比的图标,数据源使用的是MySQL数据。
原理是一样的,只需要把数据源 MySQL改为prometheus即可。
网友评论