第十一课:容器监控和Prometheus介绍
为什么要监控
- 对系统不间断实时监控
- 实时反馈系统当前状态
- 抱枕该业务持续性运行
监控什么
监控分类 | 监控内容 |
---|---|
硬件监控 | 温度,硬件故障等 |
系统监控 | CPU,内存,硬盘,网卡流量,TCP状态,进程数 |
应用监控 | nginx,tomcat,php,mysql,redis等 |
日志监控 | 系统日志,服务日志,访问日志,错误日志 |
安全监控 | WAF,敏感文件监控 |
API监控 | 可用性,接口请求,响应时间 |
业务监控 | 例如电商网站,每分钟产生多少订单,注册多少用户,多少活跃用户,推广活动效果等 |
流量分析 | 根据流量获取用户相关型芯,例如用户地理位置,某页面访问状态,页面停留时间等 |
Prometheus概述
prometheus 是一个最初在soundcloud上构建的监控系统。自2012年成为社区开源项目,拥有非常活跃的开发人员和用户社区。为强调开源及独立维护,prometheus于2016年加入云原生云计算基金会(CNCF),成为继kubernetes之后的第二个托管项目。
prometheus特点:
- 多维度数据模型,由度量名称和键值对标识的时间序列数据。
- PromSQL:一种灵活的查询语言,可以利用多维数据完成复杂的查询。
- 不依赖分布式存储,单个服务器节点可直接工作。
- 基于HTTP的pull方式采集时间序列数据。
- 推送时间序列数据通过PushGateway组件支持。
- 通过服务发现或静态配置发现目标。
- 多种图形模式及仪表盘支持(grafana)
prometheus server: 收集指标和存储时间序列数据,并提供查询接口。
clientlibrary: 客户端库。
push gateway: 短期存储指标数据。主要用于临时性的任务。
exporters: 采集已有的第三方服务监控指标并暴露metrics。
alertmanager: 告警。
web UI: 简单的web UI。
实例: 可以抓取的目标称之为实例(instances)。
作业: 具有相同䯮的实例集合称为作业(job)。
运行prometheus容器
docker run \
-p 9090:9090 \
-v /root/prom/prometheus.yml:/etc/prometheus/prometheus.yml \
prom/prometheus
prometheus+grafana监控docker主机
cadvisor(container advisor)用于收集正在运行的容器资源使用和性能信息。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
运行grafana容器
docker run -d --name=grafana -p 3000:3000 grafana/grafana
prometheus,cadvisor,grafana三个容器均正常运行后,在grafana web页面(192.168.1.88:3000)登录(初始用户名和密码:admin/admin)后添加prometheus地址(192.168.1.88:9090),还需要修改prometheus.yml文件添加cadvisor的地址及监控job。
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: 'docker'
static_configs:
- targets: ['192.168.1.88:8080']
以上监控添加完成后,需要在grafana的dashboards添加监控仪表盘,通过仪表盘显示监控内容
仪表盘可以从grafana官方获取