环境说明:

主机名 Docker版本 Prometheus版本 Node exporter版本 cAdvisor版本 Grafana版本 ip地址
docker01 18.09.2 2.9.2 0.18.0 v0.32.0 v6.1.6 172.27.9.71
docker02 18.09.2 / 0.18.0 v0.32.0 / 172.27.9.75

ubuntu安装详见:Ubuntu16.04.5以lvm方式安装全记录
docker安装详见:Ubuntu16.04安装Docker
docker-compose安装详见:Docker Compose实践

一、Prometheus简介

? ? Prometheus是一套开源的系统监控报警框架,提供了监控数据搜集、存储、处理、可视化和告警一套完整的解决方案,该项目于2012年在SoundCloud上创建,拥有非常活跃的开发人员和用户社区,许多公司和组织都采用了Prometheus。作为一个独立的开源项目,Prometheus于2016年正式加入Cloud Native Computing Foundation,成为受欢迎度仅次于Kubernetes的项目。

Prometheus特点:

  • 多维数据模型,其中时间序列数据通过metric名和键值对来区分。
  • 灵活而强大的查询语句(PromQL)
  • 不依赖分布式存储,可直接在本地工作
  • 通过HTTP使用pull模式采集时间序列数据
  • 可以采用push gateway的方式把时间序列数据推送至 Prometheus server 端
  • 可以通过服务发现或者静态配置去获取监控的 targets
  • 支持多种图形和仪表盘模式

二、Prometheus架构

组件:
Prometheus生态圈由多个组件组成,其中许多是可选的:

  • Prometheus Server: 用于抓取和存储时间序列数据。
  • Client Library:为需要监控的服务生成相应的 metrics 并暴露给 Prometheus server。
  • Push Gateway:主要用于短期的jobs。
  • Exporters: 用于暴露已有的第三方服务的metrics给Prometheus。
  • Alertmanager: 用于处理告警。
  • 其他的支持工具。

大多数普罗米修斯组件都是用go编写的,这使得它们很容易作为静态二进制文件进行构建和部署。

工作流程:

1. Prometheus server 定期从配置好的 jobs 或者 exporters 中拉 metrics,或者接收来自 Pushgateway 发过来的 metrics,或者从其他的 Prometheus server 中拉 metrics。
2. Prometheus server 在本地存储收集到的 metrics,并运行已定义好的 alert.rules,记录新的时间序列或者向 Alertmanager 推送警报。
3. Alertmanager 根据配置文件,对接收到的警报进行处理,发出告警。
4. 在图形界面中,可视化采集数据。

三、Prometheus搭建

菲律宾申博太阳城娱乐城手机客户端下载网上娱乐场:1. 环境说明

主机名 Prometheus Server Node Exporter cAdvisor Grafana
docker01
docker02 × ×

通过Prometheus监控docker01和docker02,其中Node Exporter用于监控host,cAdvisor用于监控容器,这两个监控软件两个节点都部署。Prometheus Server和Grafana只在docker01上部署,充当监控监控服务器。

2. 监控主机部署

2.1 docker-compose.yml配置

root@docker02:~# more docker-compose.yml 
version: '3.7'

services:
  node-exporter:
    image: prom/node-exporter:latest
    network_mode: 'host'
    container_name: node-exporter
    restart: unless-stopped
    ports:
      - '9100:9100'
    command:
      - '--path.procfs=/host/proc'
      - '--path.sysfs=/host/sys'
      - '--collector.filesystem.ignored-mount-points=^/(sys|proc|dev|host|etc)($$|/)'
    volumes:
      - /proc:/host/proc
      - /sys:/host/sys
      - /:/rootfs

  cadvisor:
    image: google/cadvisor:latest
    network_mode: 'host'
    container_name: cadvisor
    restart: unless-stopped
    ports:
      - '8080:8080'
    volumes:
      - /:/rootfs:ro
      - /var/run:/var/run:rw
      - /sys:/sys:ro
      - /var/lib/docker/:/var/lib/docker:ro

2.2 运行docker-compose

root@docker02:~# docker-compose up -d 

2.3 查看Node Exporter监控数据

http://www.538.969ib.com:8080/metrics

2.4 查看cAdvisor监控数据

http://www.ib911.com/861:8080/metrics

3. 监控服务器部署

3.1 prometheus.yml配置

root@docker01:~# more prometheus.yml 
global:             # 全局设置,可以被覆盖
  scrape_interval: 15s              # 抓取采样数据的时间间隔,每15秒去被监控机上采样,即数据采集频率
  evaluation_interval: 15s          # 监控数据规则的评估频率,比如设置文件系统使用率>75%发出告警则每15秒执行一次该规则,进行文件系统检查
  external_labels:              # 与外部通信时用的外部标签
    monitor: 'nodecontainer-monitor'

scrape_configs:             # 抓取配置
  - job_name: 'prometheus'              # 任务名,全局唯一
    scrape_interval: 5s             # 本任务的抓取间隔,覆盖全局配置
    static_configs:             # 静态目标配置
      # 抓取地址,路径为默认的/metrics
      - targets: ['localhost:9090','localhost:8080','localhost:9100','172.27.9.75:8080','172.27.9.75:9100']

3.2 docker-compose.yml配置

root@docker01:~# more docker-compose.yml 
version: '3.7'

services:
  prometheus:
    image: prom/prometheus:latest
    network_mode: 'host'
    container_name: prometheus
    restart: unless-stopped
    ports:
      - '9090:9090'
    volumes:
      - /root/prometheus.yml:/etc/prometheus/prometheus.yml
    depends_on:
      - cadvisor

  node-exporter:
    image: prom/node-exporter:latest
    network_mode: 'host'
    container_name: node-exporter
    restart: unless-stopped
    ports:
      - '9100:9100'
    command:
      - '--path.procfs=/host/proc'
      - '--path.sysfs=/host/sys'
      - '--collector.filesystem.ignored-mount-points=^/(sys|proc|dev|host|etc)($$|/)'
    volumes:
      - /proc:/host/proc
      - /sys:/host/sys
      - /:/rootfs

  cadvisor:
    image: google/cadvisor:latest
    network_mode: 'host'
    container_name: cadvisor
    restart: unless-stopped
    ports:
      - '8080:8080'
    volumes:
      - /:/rootfs:ro
      - /var/run:/var/run:rw
      - /sys:/sys:ro
      - /var/lib/docker/:/var/lib/docker:ro

  grafana:
    image: grafana/grafana:latest
    network_mode: 'host'
    container_name: grafana
    restart: unless-stopped
    ports:
      - '3000:3000'
    user: '0'
    volumes:
      - ./data/grafana:/var/lib/grafana
    environment:
      - GF_SECURITY_ADMIN_PASSWORD=admin
      - GF_SERVER_ROOT_URL=http://www.468.ib711.com:3000

grafana登陆地址为http://www.ib911.com/180:3000 ,密码为admin,容器grafana要以root用户执行,否则会报权限错误。

3.3 运行docker-compose

root@docker01:~# docker-compose up -d

3.4 查看Prometheus监控数据

3.4.1 配置文件查看

http://www.955.568ib.com:9090/config

3.4.2 监控信息查看

http://www.ib911.com/888:9090/metrics

3.4.3 查看指定监控项

http://www.677.8449922.com:9090
比如查看cpu五分钟负载

四、Grafana配置

1. 登陆grafana

http://www.587.4414455.com:3000

2. 添加DataSource


配置DataSource

3. Dashboards配置

3.1 下载Dashboards

下载链接:http://www.ib911.com/918/dashboards?dataSource=prometheus&category=docker

3.2 导入 Dashboards

4. Grafana监控展示

4.1 容器监控展示

4.2 host监控展示

五、钉钉告警配置

1. 钉钉添加机器人

钉钉通过机器人来接收告警信息

添加

复制webhook,菲律宾申博太阳城娱乐城手机客户端下载网上娱乐场:完成机器人添加

2. Grafana新增告警项

新增告警通道DingDing

3. 新增告警项

本文以监控容器内存使用率为例介绍grafana如何通过钉钉机器人发送告警信息

3.1 编辑Memory Usage

3.2 创建Alert

3.3 Alert配置


当容器内存使用率大于150M时发送告警信息

3.4 验证告警配置

3.5 保存告警配置

3.6 告警信息查看

手机端也会同步收到告警信息

至此完成钉钉告警信息的发送,当然,也可以新增dashboard,选择Graph方式自定义展示和告警项

目前Grafana只支持Graph添加报警规则,有一定局限性。
?
?
?
docker-compose和prometheus配置文件已上传github:http://www.646.223ib.com/loong576/prometheus.git
?
?
本文参考:
1.http://www.214.ds822.com/docs/features/datasources/prometheus/
2.http://www.391.3348844.com/docs/introduction/overview/
3.http://www.934.311ib.com/microapp/serverapi2/qf2nxq
4.http://www.ib911.com/429/compose/reference/overview/