Docker数据收集器与Prometheus

Docker数据收集器与Prometheus

    • 数据收集器 cadvisor
        • 运行cadvisor
        • 监控容器
    • Prometheus
        • Prometheus 架构:
            • Prometheus Server
            • Exporter
            • 可视化组件
            • Alertmanager
        • 搭建Prometheus
        • 运行 Node Export
        • 运行 cadvisor
        • 运行 Prometheus Server
        • 运行Grafana
        • 配置Grafana

数据收集器 cadvisor

cadvisor是Google开发的容器监控工具:

运行cadvisor

[root@host1 ~]# docker pull google/cadvisor
[root@host1 ~]# docker run -v /:/rootfs:ro \
> -v /var/run:/var/run:rw \
> -v /sys:/sys:ro \
> -v /var/lib/docker/:/var/lib/docker:ro \
> -p 8080:8080 --detach=true  --name=cadvisor  google/cadvisor
0b8167eeb03f12688a3cd269aca4237a286f4f7e365c82fba4a4067cd624efb5
[root@host1 ~]# firewall-cmd --add-port=8080/tcp

通过 http://IP:8080/访问 cadvisor

监控容器

cadvisor会显示当前host 的资源使用情况,包括CPU,内存,网络,文件系统等。
Docker数据收集器与Prometheus_第1张图片

点击 Docker Containers 显示容器列表。

主要功能:
1:展示Host和容器两个层次的监控数据。
2:展示历史变化数据。

Prometheus

Prometheus是一个非常优秀的监控工具,提供了监控数据搜集,存储,处理,可视化和告警一套完整的解决方案。

Prometheus 架构:

Docker数据收集器与Prometheus_第2张图片

Prometheus Server

Prometheus Server负责从Exporter拉取和存储监控数据,并提供套灵活的通询语言(PromQL) 供用户使用。

Exporter

Exporter负责收集目标对象(host, contaier…的性能数据,并通过HTTP接口供Prometheus Server获取。

可视化组件

监控数据的可视化展现对于监控方案至关重要。以前Prometheus自己开发了-套工具,不过后来废弃了,因为开源社区出现了更为优秀的产品Grafana. Grafana 能够与Prometheus无缝集成,提供完美的数据展示能力。

Alertmanager

用户可以定义基于监控数据的告警规则,规则会触发告警。一旦Alermanager收到告警,会通过预定义的方式发出告警通知。支持的方式包括Email、PagerDuty. Webhook 等。
也许一些熟悉其他监控方案的同学看了 Prometheus的架构会不以为然,"这些功能 Zabbix、Graphite、 Nagios 这类监控系统也都有,没什么特别的啊! ". Prometheus 最大的亮点和先进性是它的多维数据模型。

搭建Prometheus

环境:

192.168.0.100   Prometheus Server ,Export , Grafana
192.168.0.110   Export  

Export

1.Node Export:负责收集 host 硬件和操作系统数据
2.cadvisor: 负责收集容器数据

Grafana

显示多维数据

运行 Node Export

在两台host 上执行:

[root@host1 ~]# docker pull prom/node-exporter
[root@host1 ~]# docker run -d -p 9100:9100 -v "/proc:/host/proc" -v "/sys:/host/sys" -v "/:/rootfs" --net=host prom/node-exporter --path.procfs /host/proc --path.sysfs /host/sys --collector.filesystem.ignored-mount-points "^/(sys|proc|dev|host|etc|rootfs/var/lib/docker/containers|rootfs/var/lib/docker/overlay2|rootfs/run/docker/netns|rootfs/var/lib/docker/devicemapper|rootfs/var/lib/docker/aufs)($$|/)"
[root@host1 ~]# firewall-cmd --add-port=9100/tcp

这里我们使用了 - -net=host,这样 Prometheus 可以直接与 Node Export 通信。Node Export 启动后,通过 9100 提供 host 的监控数据。在浏览器通过 http://192.168.0.100:9100/metrics 测试一下。

运行 cadvisor

在两台host 上执行:

[root@host1 ~]# docker pull google/cadvisor
[root@host1 ~]# docker run -v /:/rootfs:ro -v /var/run:/var/run:rw -v /sys:/sys:ro -v /var/lib/docker/:/var/lib/docker:ro -p 8080:8080 --detach=true  --name=cadvisor --net=host  google/cadvisor
[root@host1 ~]# firewall-cmd --add-port=8080/tcp

这里我们使用了 - -net=host,这样 Prometheus 可以直接与 cadvisor 通信,cadvisor启动后,将通过 8080 提供 host的监控数据,在浏览器通过 http://192.168.0.100:8080/metrics 测试一下。

运行 Prometheus Server

在 host 192.168.0.100 执行:

编写Prometheus Server 的配置文件:

[root@host1 ~]# vi  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','localhost:8080','localhost:9100','192.168.0.110:8080','192.168.0.110:9100']

运行Prometheus Server

[root@host1 ~]# docker pull prom/prometheus
[root@host1 ~]# docker run -d -p 9090:9090  -v /root/prometheus.yml:/etc/prometheus/prometheus.yml  --name prometheus  --net=host prom/prometheus

这里我们使用了 - -net=host,这样 Prometheus 可以直接与Exporter和Grafana通信。

指定从哪些exporter抓取数据。这里指定了两台host上的Node Exporter和cAdvisor.另外localhost:9090就是Prometheus Server自己,可见Prometheus本身也会收集自己的监控数据。同样地,我们也可以通过
http://192.168.0.100:9090/metrics测试下。
在浏览器中打开http://192.168.0.100:9090,点击菜单Status -> Targets.
所有Target的State都是UP,说明Prometheus Server能够正常获取监控数据。
Docker数据收集器与Prometheus_第3张图片

运行Grafana

在 host 192.168.0.100 执行:

[root@host1 ~]# docker pull grafana/grafana
[root@host1 ~]# docker run -di -p 3000:3000 -e "GF_SERVER_ROOT_URL=http://grafana.server.name" -e "GF_SECURITY_ADMIN_PASSWORD=123.com"  --net=host  grafana/grafana
[root@host1 ~]# firewall-cmd --add-port=3000/tcp

注意,这里我们使用了- -net=host,这样Grafana可以直接与Prometheus Server通信。-e “GF_ SECURITY ADMIN PASSWORD=123.com” 指定了Grafana admin用户密码123.com, Grafana启动后。在浏览器中打开
http://192.168.0.100:3000/

配置Grafana

登录后,Grafana将引导我们配置Data Source.
Name为Data Source命名,例如prometheus,Type 选择Prometheus。
URL输入Prometheus Server的地址ht://192.168.0.100:9090其他保持默认值,点击Add.如果-切顺利,Grafana 应该已经能够访问Prometheus中存放的监控数据了

Docker数据收集器与Prometheus_第4张图片

在这里插入图片描述
Docker数据收集器与Prometheus_第5张图片
Docker数据收集器与Prometheus_第6张图片
Docker数据收集器与Prometheus_第7张图片
Docker数据收集器与Prometheus_第8张图片
Docker数据收集器与Prometheus_第9张图片

那么如何展示呢? Grafana 是通过Dashboard展示数据的,在Dashboard中需要定义:
1.展示Prometheus的哪些多维数据?需要给出具体的询语言表达式。
2.用什么形式展示,比如维线性图, 仪表网,各种坐标的含义等。
可见,要做出一个Dashboard也不是件容易的事情。幸运的是,
我们可以借助开源社区的力量,直接使用现成的Dashboard.访问,
https://grafana.com/dashboardsdataSource=prometheus&search=docker
将会看到很多用于监控Docker的Dashboard

点击下载
Docker数据收集器与Prometheus_第10张图片
导入:
Docker数据收集器与Prometheus_第11张图片

Docker数据收集器与Prometheus_第12张图片

Dashboard 将立刻展示出图表

在这个Dashboard中,上部分是host的数据,我们可以通过Node切换不同的host.
Dashboard的下半部分展示的是所有的容器监控数据。Grafana 的Dashboard是可交互的,我们可以在图表上只显示指定的容器、选取指定的时间区间、重新组织和排列图表、调整刷新频率,功能非常强大。

你可能感兴趣的:(docker,运维,虚拟化,docker,运维,linux)