基于Prometheus做多维度的容器监控

什么是prometheus?

prometheus从官方介绍来说,他是一个开源的系统监控和报警工具,最初由SoundCloud推出。自2012成立以来,许多公司和组织都采用了prometheus,项目有一个非常活跃的开发者和用户社区。它现在是一个独立的开源项目,并独立于任何公司。 

它具有以下特性:

1. 多维度数据模型(由键/值对确定的时间序列数据模型)
2. 具有一个灵活的查询语言来利用这些维度
3. 不依赖分布式存储;单个服务器节点工作。
4. 时间序列的采集是通过HTTP pull的形式,解决很多push架构的问题。
5. 通过中介网关支持短时间序列数据的收集
6. 监控目标是通过服务发现或静态配置
7. 多种数据展示面板支持,例如grafana

怎么使用prometheus监控容器

prometheus监控不同的目标服务需要实现不同的exporter插件,早期的时候,官方出了container-exporter项目,但是现在项目已经停止。推荐使用谷歌的cAdvisor项目作为prometheus的exporter。cAdvisor作为一个监控单机容器的项目,数据较为全面,但是也有很大的问题,例如io等数据没有等等。结合prometheus后就能在整个集群监控查询容器。举个例子,你有一个项目有3个容器分布在三台机器,你怎么监控整个项目的流量,内存量,负载量的实时数据。这就是prometheus的多维度查询解决的问题,数据从3台机器的cadvisor得到每个容器的数据,它的多维度查询语法就能让你得到你想要的数据。

这里假设你有10台机器部署了容器需要监控,你在10台机器上分别部署cAdvisor容器
sudo docker run \
  --volume=/:/rootfs:ro \
  --volume=/var/run:/var/run:rw \
  --volume=/sys:/sys:ro \
  --volume=/var/lib/docker/:/var/lib/docker:ro \
  --publish=8080:8080 \
  --detach=true \
  --name=cadvisor \
  google/cadvisor:latest

找一台机器部署prometheus服务,这里依然使用容器部署:

docker run \
-p 9090:9090 \
--log-driver none \
-v /hdd1/prometheus/etc/:/etc/prometheus/ \
-v /hdd1/prometheus/data/:/prometheus/ \
-v /etc/localtime:/etc/localtime \
--name prometheus \
prom/prometheus

创建/hdd1/prometheus/etc/prometheus.yml配置文件

 my global config
global:
  scrape_interval:     15s # By default, scrape targets every 15 seconds.
  evaluation_interval: 15s # By default, scrape targets every 15 seconds.
  # scrape_timeout is set to the global default (10s).
  # Attach these labels to any time series or alerts when communicating with
  # external systems (federation, remote storage, Alertmanager).
  external_labels:
      monitor: 'container-monitor'
# Load and evaluate rules in this file every 'evaluation_interval' seconds.
rule_files:
   - "/etc/prometheus/rules/common.rules"
# 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: 'container'
    static_configs:
    - targets: ['10.12.1.129:9090','10.12.1.130:9090','10.50.1.92:9090','10.50.1.93:9090','10.50.1.119:9090']
配置文件中 -targets中的端点填写你的实际cadvisor所在的ip和暴露的端口.正确启动后访问ip:9090就能查询数据了哦。

prometheus缺点

1. 单机缺点,单机下存储量有限,根据你的监控量局限你的存储时间。
2. 内存占用率大,prometheus集成了leveldb,一个能高效插入数据的数据库,在ssd盘下io占用比较高。同时可能会有大量数据堆积内存。但是这是可以配置的。

prometheus适用于监控所有时间序列的项目

目前其生态中已经有很多exporter实现,例如:
Node/system metrics exporter
AWS CloudWatch exporter
Blackbox exporter
Collectd exporter
Consul exporter
Graphite exporter
HAProxy exporter
InfluxDB exporter
JMX exporter
Memcached exporter
Mesos task exporter
MySQL server exporter
SNMP exporter
StatsD exporter
你也可以根据你的需要自己实现exporter,完成你需要的监控任务。

本文来自:http://blog.yiyun.pro

你可能感兴趣的:(docker)