1、为什么要监控?要监控什么?
监控的意义:
(1) 对系统不间断实时监控
(2) 实时反馈系统当前状态
(3) 保证业务持续运行
监控内容:
监控项 | 监控内容 |
---|---|
硬件监控 | 温度、硬件故障等 |
系统监控 | CPU、内存、硬盘、网卡流量、TCP状态、进程数 |
日志监控 | 系统日志、服务日志、访问日志、错误日志 |
安全监控 | WAF、敏感文件监控 |
API监控 | 可用性、接口请求、响应时间 |
业务监控 | 例如电商网站,每分钟产生订单量、注册用户数、活跃用户数、推广活动效果 |
流量分析 | 根据流量获取用户相关信息,例如用户地理位置、某页访问状况、页面停留时间等 |
2、Prometheus概述
Prometheus(普罗米修斯) 是一套开源的系统监控报警框架。它启发于 Google 的 borgmon 监控系统,由工作在 SoundCloud 的 google 前员工在 2012 年创建,作为社区开源项目进行开发,并于 2015 年正式发布。2016 年,Prometheus 正式加入 Cloud Native Computing Foundation(云原生计算基金会CNCF),成为受欢迎度仅次于 Kubernetes 的项目。
https://prometheus.io/
https://github.com/prometheus
(1) Prometheus特点
① 多维数据模型: 由度量名称和键值对标识的时间序列数据
② PromSQL: 一种灵活的查询语言,可以利用多维数据完成复杂的查询
③ 不依赖分布式存储,单个服务器节点可直接工作
④ 基于HTTP的pull方式采集时间序列数据
⑥ 推送时间序列数据通过PushGateway组件支持
⑦ 通过服务发现或静态配置发现目标
⑧ 多种图形模式及仪表盘支持(grafana)
Prometheus Server: 收集指标和存储时间序列数据,并提供查询接口
ClientLibrary: 客户端库
Push Gateway: 短期存储指标数据,主要用于临时的任务
Exporters: 采集已有的第三方服务监控指标并暴露metrics
Aletmanager: 告警
Web UI: 简单的Web 控制台
实例: 可以抓取的目标称为实例(Instance),比如被监控的某台服务器10.40.6.165就是一个实例
作业: 具体相同目标的实例集合称为作业(Job),就是实例的分类:60台服务器有30台web, 30台DB
相关配置:
scrape_config:
- job_name: 'prometheus' ## job 的分类,比如按项目,或者web,DB 业务等分类
static_config:
- targets: ['localhost: 9090'] ## 这就是目标实例
- job_name: 'node1'
static_configs:
- targets:['10.40.6.165:9090']
3、Prometheus部署
https://prometheus.io/docs/prometheus/latest/installation/
### 先启动一个容器获取配置
# docker pull prom/prometheus
# docker run --name prometheus -d -p 9090:9090 prom/prometheus
# docker ps -l
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
7bedc1ee208c prom/prometheus "/bin/prometheus --c…" 4 seconds ago Up 2 seconds 0.0.0.0:9090->9090/tcp prometheus
###将容器的配置copy出来
# docker cp 7bedc1ee208c:/etc/prometheus/prometheus.yml ./
# cat dockerfile-prometheus ###编写dockerfile
FROM prom/prometheus
MAINTAINER liuzhousheng
COPY prometheus.yml /prometheus_data/
###创建一个镜像并提交到自己的barbor镜像仓库
# docker build -t 10.40.6.165/library/prometheus:v1 -f dockerfile-prometheus .
# docker push 10.40.6.165/library/prometheus:v1
# docker rm -f 7bedc1ee208c ### 将容器清理掉
# docker volume create prometheus_data
# docker run -d --name prometheus -p 9090:9090 -v prometheus_data:/prometheus_data 10.40.6.165/library/prometheus:v1 --config.file=/prometheus_data/prometheus.yml
4、Prometheus配置文件
配置文件:prometheus.yml
# my global config
global:
scrape_interval: 15s # Set the scrape interval to every 15 seconds. Default is every 1 minute.
evaluation_interval: 15s # Evaluate rules every 15 seconds. The default is every 1 minute.
# scrape_timeout is set to the global default (10s).
# Alertmanager configuration
alerting:
alertmanagers:
- static_configs:
- targets:
# - alertmanager:9093
# Load rules once and periodically evaluate them according to the global 'evaluation_interval'.
rule_files:
# - "first_rules.yml"
# - "second_rules.yml"
# A scrape configuration containing exactly one endpoint to scrape:
# Here it's Prometheus itself.
scrape_configs:
# The job name is added as a label `job=` to any timeseries scraped from this config.
- job_name: 'prometheus'
# metrics_path defaults to '/metrics'
# scheme defaults to 'http'.
static_configs:
- targets: ['localhost:9090']
5、Prometheus+Grafana监控Docker主机
cadvisor(Container Advisor)用于收集正在运行的容器资源使用和性能信息(在每一台docker宿主机安装,用于收集)。
Grafana 是一个开源的度量分析和可视化系统。
https://github.com/google/cadvisor
https://grafana.com/grafana/download
https://grafana.com/dashboards/193
###启动cadvisor:
# sudo docker run \
--volume=/:/rootfs:ro \
--volume=/var/run:/var/run:ro \
--volume=/sys:/sys:ro \
--volume=/var/lib/docker/:/var/lib/docker:ro \
--volume=/dev/disk/:/dev/disk:ro \
--publish=8080:8080 \
--detach=true \
--name=cadvisor \
google/cadvisor:latest
## 浏览器访问:http://10.40.6.165:8080
## 浏览器访问它的数据接口:http://10.40.6.165:8080/metrics
##启动grafana:
# docker run -d --name=grafana -p 3000:3000 grafana/grafana
## 浏览器访问:http://10.40.6.165:3000
## 默认账号密码都为admin,首次登录得修改admin用户默认密码
接下来给grafana添加数据源:
add data source ---> Prometheus ----> URL
查看Configuration ,可以看到刚刚配置的数据源
配置prometheus.yml
- job_name: 'docker'
static_configs:
- targets: ['10.40.6.165:8080']
重启prometheus容器: docker restart prometheus
浏览器访问 prometheus 可以看到容器的数据:http://10.40.6.165:9090
确认prometheus 有数据后,到grafana创建仪表盘:
- ----> Dashboard---->Choose Visualization ----> 选择合适的仪表盘 或者导入别人分享的模板
- ------> Import ---->输入模板ID,自动跳到这个模板ID的页面
模板ID可以到Grafana.com网站的Dashboards查找 ,Search within this list,输入你想要监控组件的名称,找DownLoads较多的,点击进入,Get this dashboard值就是模板的ID值
查看图表的相关 PromSQL语句:
可以用相应的PromSQL语句到prometheus查询数据
如果图表没数据有两个可能:
① 你的数据库里没有这个数据
② 你的PromSQL语句写的有问题,或导入的模板不兼容