Prometheus监控Docker容器和主机

1. 简介

Prometheus是SoundCloud开源的一款开源软件。它的实现参考了Google内部的监控实现,与源自Google的Kubernetes结合起来非常合适。另外相比influxdb的方案,性能更加突出,而且还内置了报警功能。它针对大规模的集群环境设计了拉取式的数据采集方式,你只需要在你的应用里面实现一个metrics接口,然后把这个接口告诉Prometheus就可以完成数据采集了。

区别:

Zabbix

  • 图形页面友好
  • 成熟,资料较多
  • 告警,分级,完善
  • 架构成熟

Prometheus

  • 不是很友好,各种配置都需要手写
  • 对docker、k8s监控有成熟解决方案

特点:

  • 多为数据模型:由度量名称和键值对标识的时间序列数据
  • PromQL :一种灵活的查询语言,可以利用多维数据完成复杂的查询
  • 不依赖分布式存储,单个服务器节点可直接工作
  • 基于HTTP的pull方式采集时间序列数据
  • 推送时间序列数据通过PushGateway组件支持
  • 通过服务发现或静态配置发现目标
  • 多种图形模式及仪表盘支持模式(grafana)

架构图

Prometheus Server:收集指标和存储时间序列数据,并提供查询接口
ClientLibrary:客户端库
Push Gateway:短期存储指标数据。主要用于临时性的任务
Exporters:采集已有的第三方服务监控指标并暴露metrics
Alertmanager:告警
Web UI:简单的Web控制台

Prometheus监控Docker容器和主机_第1张图片
image

2. 安装

Docker部署方式:https://prometheus.io/docs/prometheus/latest/installation/

prometheus配置文件解读:https://prometheus.io/docs/prometheus/latest/getting_started/

[root@k8s-master tmp]# cat /tmp/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']

启动容器

docker run  -d \
      --name prometheus \
    -p 9090:9090 \
    -v /tmp/prometheus.yml:/etc/prometheus/prometheus.yml \
    prom/prometheus
Prometheus监控Docker容器和主机_第2张图片
image
Prometheus监控Docker容器和主机_第3张图片
image

3. cadvisor + prometheus + grafana

  1. docker cadvisor监控 + influxdb + grafana

  2. docker cadvisor监控 + prometheus + grafana

#添加cadvisor容器
docker run -d \
--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监控Docker容器和主机_第4张图片
image
Prometheus监控Docker容器和主机_第5张图片
在这里插入图片描述
#在/tmp目录下的prometheus.yml文件添加job
 static_configs:
    - targets: ['localhost:9090']

  - job_name: "Linux_cadvisor"
    static_configs:
    - targets: ['192.168.0.10:8080']

  - job_name: "Docker_grafana"
    static_configs:
    - targets: ['192.168.0.10:3000']


#重启下容器
docker restart prometheus
Prometheus监控Docker容器和主机_第6张图片
image

识别到cadvisor后即可查看数据

可以看出 prometheus 自身带的查询格式非常的难看

Prometheus监控Docker容器和主机_第7张图片
image

我们使用grafana来做展示数据;使用创建好的grafana容器

访问地址 192.168.0.10:3000

第一步 添加数据源

Prometheus监控Docker容器和主机_第8张图片
image

第二步 选择prometheus数据源

Prometheus监控Docker容器和主机_第9张图片
image

第三步 配置prometheus的访问地址

Prometheus监控Docker容器和主机_第10张图片
image

Prometheus监控Docker容器和主机_第11张图片
image

第四步 添加仪表盘

docker主机监控模板 193

linux主机监控模板 9276


Prometheus监控Docker容器和主机_第12张图片
image

Prometheus监控Docker容器和主机_第13张图片
image

第五步 监测Docker容器成功

Prometheus监控Docker容器和主机_第14张图片
image

第六步 监测linux主机

下载一个exporter

[root@k8s-master prometheus]# cat node_exporter.sh 
#!/bin/bash

wget https://github.com/prometheus/node_exporter/releases/download/v0.17.0/node_exporter-0.17.0.linux-amd64.tar.gz

tar zxf node_exporter-0.17.0.linux-amd64.tar.gz
mv node_exporter-0.17.0.linux-amd64 /usr/local/node_exporter

cat </usr/lib/systemd/system/node_exporter.service
[Unit]
Description=https://prometheus.io

[Service]
Restart=on-failure
ExecStart=/usr/local/node_exporter/node_exporter

[Install]
WantedBy=multi-user.target
EOF

systemctl daemon-reload
systemctl enable node_exporter
systemctl restart node_exporter

#默认启动9100端口
[root@k8s-master prometheus]# netstat -lntup|grep exporter
tcp6    0   0 :::9100           :::*            LISTEN      61202/node_exporter

去prometheus的容器配置文件中添加上linux的exporter

 [root@k8s-master tmp]# vim /tmp/prometheus.yml
 ...
 - job_name: "Linux"
    static_configs:
    - targets: ['192.168.0.10:9100']

docker restart prometheus
Prometheus监控Docker容器和主机_第15张图片
image

然后就可以导入grafana模板 9276

Prometheus监控Docker容器和主机_第16张图片
image

Prometheus监控Docker容器和主机_第17张图片
image

你可能感兴趣的