选择开源工具Prometheus实现系统监控、docker服务监控、API网关状态监控数据提取、保存,配合开源可视化图形Grafana展示监控数据,并且根据监控数据,通过邮箱发出告警邮件。
下面将以采集一台服务器运行数据为例,说明监控系统的运行原理及搭建流程。
一、Prometheus
Prometheus是一个开源的监控系统,可以通过job/exporter开放的API接口,定时获取监控数据,并保存。所以在说明Prometheus之前,必须要介绍下exporter。
1.1 node_exporter
需要采集一台服务器的运行参数,比如服务器CUP的负载、系统负载、内存消耗、硬盘使用量等,node_exporter工具可以收集好数据,并对外开放API查询接口。
1.1.1 node_exporter安装使用
访问https://github.com/prometheus/node_exporter/releases,可以查看node_exporter各个版本,根据需要下载对象的版本。node_exporter使用go语言实现,源码可以https://github.com/prometheus/node_exporter获取。
本文下载0.17.0版本,并运行,服务器ip为10.21.70.44。
cd /opt/
wget https://github.com/prometheus/node_exporter/releases/download/v0.17.0/node_exporter-0.17.0.linux-amd64.tar.gz
tar -zxvf node_exporter-0.17.0.linux-amd64.tar.gz
cd node_exporter-0.17.0.linux-amd64/
./node_exporter
可看到如下启动日志,对外端口为9100
可以通过访问ip+port,来查看一次采集的指标数据,直接浏览器输入10.21.70.44:9100,点击Metrics,可查看本次查询的监控指标数据。
1.1.2 Prometheus简介
通过node_exporter介绍,可以猜测到Prometheus大概的一个作用,就是定时访问node_exporter对外开放的API接口,获取当前系统的运行数据。
Prometheus官网的架构图
分析该架构图
Prometheus server: 是Prometheus工具的核心组件,存储使用时序数据库TSDB,将监控数据存储在硬盘上。
Service discovery:服务发现能力,file_sd——该功能让Prometheus自行监听配置文件的变化;kubernetes——使Prometheus动态更新配置以适应频繁的节点变更。
pushgateway:相当于中转站能力,Prometheus只会使用pull方式从节点开放的API接口拉去监听数据,但是存在特殊节点,只能push数据,所以可以先push数据到Pushgateway,Prometheus从Pushgateway拉去数据。
Jobs/exporters:exporter导出器,Prometheus最主要的数据来源。上节介绍的node_exporter属于exporter导出器的一种。
1.1.3 Prometheus 安装使用
通过https://prometheus.io/download/选择合适版本的Prometheus,本文选择2.6.0-linux版本。
cd /opt
sudo wget https://github.com/prometheus/prometheus/releases/download/v2.6.0/prometheus-2.6.0.linux-amd64.tar.gz
sudo tar -zxvf prometheus-2.6.0.linux-amd64.tar.gz
cd prometheus-2.6.0.linux-amd64/
首先配置prometheus.yml, 在scrape_configs节点下添加node_exporter的对外开放的API。
- job_name: "node"
static_configs:
- targets: ["10.21.70.44:9100"]
通过命令“./prometheus”,启动Prometheus,启动日志如下截图,可以看到“ Server is ready to receive web requests. ”,表明Prometheus启动成功。
level=info ts=2018-12-29T08:51:26.126230419Z caller=main.go:243 msg="Starting Prometheus" version="(version=2.6.0, branch=HEAD, revision=dbd1d58c894775c0788470944b818cc724f550fb)"
level=info ts=2018-12-29T08:51:26.126302838Z caller=main.go:244 build_context="(go=go1.11.3, user=root@bf5760470f13, date=20181217-15:14:46)"
level=info ts=2018-12-29T08:51:26.126419034Z caller=main.go:245 host_details="(Linux 4.4.0-132-generic #158-Ubuntu SMP Thu Aug 2 09:08:04 UTC 2018 x86_64 master1 (none))"
level=info ts=2018-12-29T08:51:26.126497022Z caller=main.go:246 fd_limits="(soft=1000000, hard=1000000)"
level=info ts=2018-12-29T08:51:26.126567171Z caller=main.go:247 vm_limits="(soft=unlimited, hard=unlimited)"
level=info ts=2018-12-29T08:51:26.127332045Z caller=main.go:561 msg="Starting TSDB ..."
level=info ts=2018-12-29T08:51:26.127414745Z caller=web.go:429 component=web msg="Start listening for connections" address=0.0.0.0:9090
level=info ts=2018-12-29T08:51:26.135164421Z caller=main.go:571 msg="TSDB started"
level=info ts=2018-12-29T08:51:26.135204665Z caller=main.go:631 msg="Loading configuration file" filename=prometheus.yml
level=info ts=2018-12-29T08:51:26.136207062Z caller=main.go:657 msg="Completed loading of configuration file" filename=prometheus.yml
level=info ts=2018-12-29T08:51:26.136232588Z caller=main.go:530 msg="Server is ready to receive web requests."
浏览器通过url: http://10.21.70.44:9090,访问Prometheus自带的UI界面。
Prometheus支持PromQL语言记性查询,支持简单的图形展示,点击Graph按钮,即可查看图形。
------需要补充截图,以及输入
二、Grafana+Prometheus
由于Prometheus的图形展示工具过于简单,而且不能长久存储数据,而Grafana是用Go语言开发的开源数据可视化工具,可以做数据监控和数据统计,支持告警功能。可直接支持Prometheus作为数据源。所以选择Grafana配合Prometheus做数据的展示和监控。
2.1 安装部署Grafana+Prometheus
本文选择docker容器方式部署Grafana和Prometheus, docker-compose编排文件docker-compost.yml内容如下:
version: '2'
networks:
monitor:
driver: bridge
services:
prometheus:
image: prom/prometheus:latest
container_name: prometheus
hostname: prometheus
restart: always
volumes:
- /opt/prometheus/config:/etc/prometheus
- /data/prometheus:/prometheus
ports:
- "9090:9090"
expose:
- "8086"
command:
- '--config.file=/etc/prometheus/prometheus.yml'
- '--log.level=info'
- '--web.listen-address=0.0.0.0:9090'
- '--storage.tsdb.path=/prometheus'
- '--storage.tsdb.retention=15d'
- '--query.max-concurrency=50'
networks:
- monitor
grafana:
image: grafana/grafana:latest
container_name: grafana
hostname: grafana
restart: always
volumes:
- /opt/grafana/data:/var/lib/grafana
ports:
- "3000:3000"
networks:
- monitor
depends_on:
- prometheus
根据docker-compose.yml文件内容,新建docker容器的映射目录,将Prometheus的配置文件、grafana的数据文件、prometheus的数据文件,都映射的磁盘上,这样不需要进容器操作,方便。
sudo su
cd /opt
mkdir -p prometheus/config/
mkdir -p grafana/data
chmod 777 grafana/data
mkdir -p /data/prometheus
chmod 777 /data/prometheus
执行docker-compose -f docker-compose.yml up -d,启动prometheus和grafana两个工具容器。启动完成后,分别查看prometheus页面:http://10.21.70.44:9090/targets,查看exporter是否正常运行。
登录Grafana页面,http://10.21.70.44:3000/, 用户名:admin,密码:admin
登录后,先添加数据源 data source,即新增Prometheus类型的数据源。
选择Prometheus,输入prometheus对外开放的获取监控数据API,点击【save and test】按钮,测试data source是否正确运行。
node_exporter是开源的项目,有对象的dashboard图表,所以直接可以去Grafana官网下载即可,访问https://grafana.com/,选择【Grafana】-【Dashboards】。
过滤条件:Data Source选择Prometheus,Collecter选择nodeExporter,如下截图,最终我们选择第一个中文版本的dashboard。
负责该dashboard模板的ID,如下图
Grafana页面,选择import导入dashboard模板
粘贴复制的dashboard模板的ID:8919,点击load,Grafana会自动下载模板
加载模板完成后,选择对应的数据源,即可。
显示监控数据如下: