Prometheus普罗米修斯,是一个开源的监控解决方案。而Grafana则是一个开源的跨平台的度量分析、可视化工具。两者组合使用即可快速搭建出一个漂亮的监控系统
配置Prometheus普罗米修斯
通过下述命令拉取Prometheus镜像
# 拉取镜像
docker pull prom/prometheus
可通过下述链接下载prometheus的配置文件,并将其存放在/Users/zgh/Docker/Prometheus/Config路径下
https://github.com/prometheus/prometheus/blob/master/documentation/examples/prometheus.yml
然后,启动一个该镜像的容器
# 启动容器
docker run --name myPrometheus \
-d -p 9090:9090 \
-v /Users/zgh/Docker/Prometheus/Config/prometheus.yml:/etc/prometheus/prometheus.yml \
prom/prometheus
现在访问其Web管理页面( http://localhost:9090 ),即可看到Prometheus服务被正确启动了
事实上,对于Prometheus服务而言,其是负责收集、存储、查看监控数据。而真正直接进行监控则是通过Exporter完成的。可以看到,Exporter相当于是Prometheus服务的客户端,负责向其提供监控数据。具体地,针对不同的被监控目标,我们需要使用不同的Exporter。这里,我们期望能够监控本机的运行状态(CPU、内存、磁盘等参数)。故这里我们需要下载一个Node Exporter用来采集主机(MacBook Pro)的监控数据。由于这里我们需要监控的是主机,所以一般不推荐使用Docker来部署Node Exporter
# 下载 node exporter(MacOS 64bit)
wget https://github.com/prometheus/node_exporter/releases/download/v1.0.1/node_exporter-1.0.1.darwin-amd64.tar.gz
# 解压
tar xvfz node_exporter-1.0.1.darwin-amd64.tar.gz
# 启动 Node Exporter
cd node_exporter-1.0.1.darwin-amd64
./node_exporter
至此我们的Node Exporter就已经启动成功了,且运行在9100端口
故通过 http://localhost:9100/metrics 即可直接访问看到其采集的监控数据
现在只需在Prometheus服务的配置文件prometheus.yml中添加相应的配置,即可收集Node Exporter的监控数据。具体地,我们在scrape_configs下添加一个新的名为MacBook Pro的job即可。这里本机IP为192.168.0.108
...
scrape_configs:
# The job name is added as a label `job=<job_name>` to any timeseries scraped from this config.
- job_name: 'prometheus'
# metrics_path defaults to '/metrics'
# scheme defaults to 'http'.
static_configs:
- targets: ['localhost:9090']
# 收集主机的监控数据
- job_name: 'MacBook Pro'
static_configs:
- targets: ['192.168.0.108:9100']
重启prometheus服务后进入其Web管理页面( http://localhost:9090 ),输入up后点击Execute按钮后,即可看到一个我们刚刚添加的job。其中,1表示正常,0表示异常
配置Grafana
事实上,Prometheus中也提供了一个可视化方案——Prometheus UI,但其功能较为简单、无法实时关注相关监控指标的变化趋势,故这里我们选择Grafana作为可视化的解决方案。其作为一个通用的可视化工具,自然也支持Prometheus。这里我们直接拉取镜像并启动一个Grafana的容器
# 拉取镜像
docker pull grafana/grafana
# 启动容器
docker run --name myGrafana \
-d -p 3000:3000 \
grafana/grafana
然后通过 http://localhost:3000 可访问Grafana的Web页面,账号、缺省密码均为admin。首先,我们需要添加一个Prometheus类型的数据源,依次选择Configuration → Data Sources → Add data source
选择Time series databases时序数据库中的Prometheus即可
依次填写数据源名称、URL地址,最后保存即可
在Grafana中我们可以自定义各种监控所需的仪表盘,但是如果完全自己搭建较为麻烦。为此我们可在现有模板的基础上根据需要进行微调。进入Grafana官网( https://grafana.com )选择仪表盘
过滤出适用Node Exporter类型的相关模板,这里我们选择支持中文的模板
然后复制该模板的ID——8919即可
现在回到Grafana的Web管理页面,导入我们所需的模板
选择数据源,继续导入
至此,一个仪表盘就创建完成了,效果如下所示
监控MySQL
如果需要利用Prometheus来监控MySQL同样也很方便,只需选择相应的Exporter即可。具体地,选择MySQLD Exporter来采集MySQL的监控数据。命令如下,其中通过DATA_SOURCE_NAME环境变量设置MySQL服务的账号、密码、URL信息
# 拉取镜像
docker pull prom/mysqld-exporter
# 启动容器
docker run -d --name mysqldExporter \
-p 9104:9104 \
-e DATA_SOURCE_NAME="root:123456@(192.168.0.108:3306)/" \
prom/mysqld-exporter
通过 http://localhost:9104/metrics 即可查看MySQLD Exporter采集的MySQL监控数据
类似地,我们可以在Prometheus服务的配置文件prometheus.yml中添加相应的配置,用于收集MySQLD Exporter的监控数据
...
scrape_configs:
# The job name is added as a label `job=<job_name>` to any timeseries scraped from this config.
- job_name: 'prometheus'
# metrics_path defaults to '/metrics'
# scheme defaults to 'http'.
static_configs:
- targets: ['localhost:9090']
# 收集主机的监控数据
- job_name: 'MacBook Pro'
static_configs:
- targets: ['192.168.0.108:9100']
# 收集MySQL的监控数据
- job_name: 'MySQL'
static_configs:
- targets: ['192.168.0.108:9104']
重启Prometheus服务后,即可看到该job已经生效
类似地对于可视化配置而言,在Grafana官网选择适用于监控MySQL的模板(过滤条件:name/description=mysql and data source=Prometheus),复制其ID——12826
导入后,效果如下所示
容器监控cAdvisor
现如今Docker部署已经愈来愈流行,为了更好监控Dcoker整体的运行情况。Google开源的一款用于分析、展示容器运行状态的可视化工具——cAdvisor。这里我们依然选择Docker来部署实践
# 拉取镜像
docker pull google/cadvisor
# 启动容器
docker run --name=mycAdvisor \
-p 8080:8080 -d \
-v /:/rootfs:ro \
-v /var/run:/var/run:ro \
-v /sys:/sys:ro \
-v /var/lib/docker/:/var/lib/docker:ro \
-v /dev/disk/:/dev/disk:ro \
--privileged \
--device=/dev/kmsg \
google/cadvisor
具体地,我们可通过 http://localhost:8080 来访问其监控页面,查看Dcoker中整体及各容器的监控指标。值得一提的是,cAdvisor原生支持Prometheu,通过 http://localhost:8080/metrics 即可看到其采集的监控数据
故在prometheus.yml配置文件继续添加一个名为cAdvisor的job,并重启Prometheus服务
...
scrape_configs:
# The job name is added as a label `job=<job_name>` to any timeseries scraped from this config.
- job_name: 'prometheus'
# metrics_path defaults to '/metrics'
# scheme defaults to 'http'.
static_configs:
- targets: ['localhost:9090']
# 收集主机的监控数据
- job_name: 'MacBook Pro'
static_configs:
- targets: ['192.168.0.108:9100']
# 收集MySQL的监控数据
- job_name: 'MySQL'
static_configs:
- targets: ['192.168.0.108:9104']
# 收集Docker容器的监控数据
- job_name: 'cAdvisor'
static_configs:
- targets: ['192.168.0.108:8080']
类似地对于可视化配置而言,在Grafana官网选择适用于cAdvisor的模板(过滤条件:name/description=cAdvisor and data source=Prometheus),复制其ID——893。导入后,效果如下所示
欢迎关注我的公众号(个人简介处有微信公众号名称),一起去寻找文明的痕迹~