一、prometheus基本架构

Prometheus 是一套开源的系统监控报警框架。它启发于 Google 的 borgmon 监控系统,由工作在 SoundCloud 的 google 前员工在 2012 年创建,作为社区开源项目进行开发,并于 2015 年正式发布。2016 年,Prometheus 正式加入 Cloud Native Computing Foundation,成为受欢迎度仅次于 Kubernetes 的项目。作为新一代的监控框架,Prometheus 具有以下特点:

  • 多维数据模型(时序列数据由metric名和一组key/value组成)
  • 在多维度上灵活的查询语言(PromQl)
  • 不依赖分布式存储,单主节点工作.
  • 通过基于HTTP的pull方式采集时序数据
  • 可以通过push gateway进行时序列数据推送(pushing)
  • 可以通过服务发现或者静态配置去获取要采集的目标服务器
  • 多种可视化图表及仪表盘支持

  • Prometheus server 主要负责数据采集和存储,定期从静态配置的 targets 或者服务发现(主要是DNS、consul、k8s、mesos等)的 targets 拉取数据,提供PromQL查询语言的支持
  • 客户端sdk 官方提供的客户端类库有go、java、scala、python、ruby,其他还有很多第三方开发的类库,支持nodejs、php、erlang等
  • Push Gateway 支持临时性Job主动推送指标的中间网关
  • exporters 支持其他数据源的指标导入到Prometheus,支持数据库、硬件、消息中间件、存储系统、http服务器、jmx等

  • alertmanager 实验性组件、用来进行报警

  • 主要通过grafana来实现webui展示

二、手动实验

环境准备:172.16.101.250、172.16.101.251 都已安装了docker和docker-compose服务,需要机器连网,要不然docker镜像不能自动下载。

部署规划:

机器 部署服务
172.16.101.250

prometheus

cAdvisor

Node Exporter

grafana

172.16.101.251

cAdvisor

Node Exporter

1、在2台机器上部署Node Exporter和cAdvisor

  • Node Exporter,负责收集 host 硬件和操作系统数据。它将以容器方式运行在所有 host 上。

  • cAdvisor,负责收集容器数据。它将以容器方式运行在所有 host 上。

 1)新建  /opt/container-monitor/nodeexporter-cadvisor/docker-compose.yml

version: '2.1'
services:
node-exporter:
image: prom/node-exporter
container_name: prometheus_node-exporter
restart: always
logging:
driver: "json-file"
options:
max-size: "10m"
max-file: ""
ports:
- :
volumes:
- /proc:/host/proc:ro
- /sys:/host/sys:ro
- /:/rootfs:ro
command:
- '--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)($$|/)'
cadvisor:
image: google/cadvisor
container_name: prometheus_cadvisor
restart: always
logging:
driver: "json-file"
options:
max-size: "10m"
max-file: ""
ports:
- :
volumes:
- /:/rootfs:ro
- /var/run:/var/run:rw
- /sys:/sys:ro
- /var/lib/docker/:/var/lib/docker:ro

   2) 运行容器

cd /opt/container-monitor/nodeexporter-cadvisor
docker-compose up -d

浏览器输入:http://172.16.101.250:9100/metrics  可以看到node exporter采集的host的数据

浏览器输入:http://172.16.101.250:9101/metrics  可以看到cAdvisor采集的container的数据

2、只在172.16.101.250机器上部署alertmanager

Alertmanager处理由类似Prometheus服务器等客户端发来的警报,之后需要删除重复、分组,并将它们通过路由发送到正确的接收器,比如电子邮件、Slack等。Alertmanager还支持沉默和警报抑制的机制。

  1)新建  /opt/container-monitor/alertmanager/config.yml 

# 全局配置项
global:
resolve_timeout: 5m #处理超时时间,默认为5min
smtp_smarthost: 'smtp.163.com:25' # 邮箱smtp服务器代理
smtp_from: 'xxx@163.com' # 发送邮箱名称
smtp_auth_username: 'xxx@163.com' # 邮箱名称
smtp_auth_password: 'xxx' #邮箱密码 # 定义模板信心
templates:
- '/etc/alertmanager/templates/*.html' # 定义路由树信息
route:
group_by: ['alertname'] # 报警分组依据
group_wait: 10s # 最初即第一次等待多久时间发送一组警报的通知
group_interval: 10s # 在发送新警报前的等待时间
repeat_interval: 1m # 发送重复警报的周期 对于email配置中,此项不可以设置过低,否则将会由于邮件发送太多频繁,被smtp服务器拒绝
receiver: 'email' # 发送警报的接收者的名称,以下receivers name的名称 # 定义警报接收者信息
receivers:
- name: 'email' # 警报
email_configs: # 邮箱配置
- to: 'xxxx@qq.com' # 接收警报的email配置
html: '{{ template "test.html" . }}' # 设定邮箱的内容模板
headers: { Subject: "[WARN] 报警邮件"} # 接收邮件的标题
webhook_configs: # webhook配置
- url: 'http://127.0.0.1:5001'

  2)新建  /opt/container-monitor/alertmanager/docker-compose.yml 

version: '2.1'
services:
alertmanager:
image: prom/alertmanager
container_name: alertmanager
restart: always
network_mode: "host"
ports:
- :
logging:
driver: "json-file"
options:
max-size: "10m"
max-file: ""
volumes:
- ./config.yml:/etc/alertmanager/config.yml
- ./test.html:/etc/alertmanager/templates/test.html
command:
- '--config.file=/etc/alertmanager/config.yml'
- '--storage.path=/alertmanager'
- '--log.level=debug'

  3)新建  /opt/container-monitor/alertmanager/test.html

{{ define "test.html" }}
<table border="">
<tr>
<td>报警项</td>
<td>实例</td>
<td>报警内容</td>
<td>开始时间</td>
</tr>
{{ range $i, $alert := .Alerts }}
<tr>
<td>{{ index $alert.Labels "alertname" }}</td>
<td>{{ index $alert.Labels "instance" }}</td>
<td>{{ index $alert.Annotations "description" }}</td>
<td>{{ $alert.StartsAt }}</td>
</tr>
{{ end }}
</table>
{{ end }}

test.html是用来展示,告警消息的界面,展示在接收的邮箱上。

  4)运行alertmanager容器

cd /opt/container-monitor/alertmanager
docker-compose up -d

3、只在172.16.101.250机器上部署prometheus

  1)新建  /opt/container-monitor/prometheus/running-rule.yml  ,该配置文件是prometheus中触发告警的配置文件

groups:
- name: test-rule
rules:
- alert: "服务运行"
expr: container_tasks_state{name="mysql",state="running"} ==
for: 1m
labels:
severity: warning
annotations:
summary: "服务名:{{$labels.alertname}}"
description: "容器: {{ $labels.name }} 处于运行中"

 2)新建  /opt/container-monitor/prometheus/prometheus.yml,prometheus的主配置文件

# my global config
global:
scrape_interval: 15s # Set the scrape interval to every seconds. Default is every minute.
evaluation_interval: 15s # Evaluate rules every seconds. The default is every minute.
external_labels:
monitor: 'codelab-monitor'
# Alertmanager configuration
alerting:
alertmanagers:
- static_configs:
- targets:
- 172.16.101.250:9093
# Load rules once and periodically evaluate them according to the global 'evaluation_interval'.
rule_files:
- running-rule.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=<job_name>` to any timeseries scraped from this config.
- job_name: 'prometheus' # metrics_path defaults to '/metrics'
# scheme defaults to 'http'. static_configs:
- targets: ['172.16.101.250:9090','172.16.101.250:9100','172.16.101.250:9101','172.16.101.251:9100','172.16.101.251:9101']

上面红色的部分:指定从哪些 exporter 抓取数据。这里指定了两台 host 上的 Node Exporter 和 cAdvisor。开头的  172.16.101.251:9090 表示会收集自己的监控数据

更多的配置可以看:  https://prometheus.io/docs/prometheus/latest/configuration/configuration/

3)新建  /opt/container-monitor/prometheus/docker-compose.yml

version: '2.1'
services:
prometheus:
image: prom/prometheus
container_name: prometheus
restart: always
network_mode: "host"
logging:
driver: "json-file"
options:
max-size: "10m"
max-file: ""
volumes:
- ./running-rule.yml:/etc/prometheus/running-rule.yml:z
- ./prometheus.yml:/etc/prometheus/prometheus.yml:z

4)运行prometheus容器

cd /opt/container-monitor/prometheus
docker-compose up -d

浏览输入: http://172.16.101.250:9090,可以看到promethues的数据

  打开"Alerts",告警触发前:

   打开"Alerts",告警触发后:

   查看接收告警消息的qq邮箱:

4、只在172.16.101.250机器上部署grafana

Grafana是一个开源的度量分析与可视化套件。经常被用作基础设施的时间序列数据和应用程序分析的可视化,它在其他领域也被广泛的使用包括工业传感器、家庭自动化、天气和过程控制等。

Grafana支持许多不同的数据源。每个数据源都有一个特定的查询编辑器,该编辑器定制的特性和功能是公开的特定数据来源。

官方支持以下数据源:Graphite,InfluxDB,OpenTSDB,Prometheus,Elasticsearch,CloudWatch和KairosDB。

每个数据源的查询语言和能力都是不同的。你可以把来自多个数据源的数据组合到一个仪表板,但每一个面板被绑定到一个特定的数据源,它就属于一个特定的组织。
 

 1)新建  /opt/container-monitor/grafana/docker-compose.yml

version: '2.1'
services:
grafana:
image: grafana/grafana
container_name: grafana
restart: always
logging:
driver: "json-file"
options:
max-size: "10m"
max-file: ""
ports:
- :
environment:
- GF_SERVER_ROOT_URL=http://grafana.server.name
- GF_SECURITY_ADMIN_PASSWORD=123456

其中:GF_SECURITY_ADMIN_PASSWORD=secret 指定了admin用户的密码为123456

 2)运行grafana容器

cd /opt/container-monitor/grafana
docker-compose up -d

浏览输入: http://172.16.101.250:3000,可以看到grafana登录界面,输入admin/123456

 3) 在grafana中添加prometheus数据源

( 注意:经过多次测试发现,name如果写成其他的好像不行,必须写Prometheus才能显示,不知道是不是一个BUG)

 4) 定制用于显示prometheus监控数据的dashboard,Grafana 是通过 Dashboard 展示数据的,在 Dashboard 中需要定义:

  1. 展示 Prometheus 的哪些多维数据?需要给出具体的查询语言表达式。

  2. 用什么形式展示,比如二维线性图,仪表图,各种坐标的含义等。

可以从:https://grafana.com/dashboards?dataSource=prometheus&search=docker     下载官网定制好的一些dashboard

点击:Download JSON 可以下载到一个   docker-prometheus-monitoring_rev7.json 文件。下面将该json导入dashboard

最终效果如下图所示,分为Host Info 和Container Performance

容器监控告警方案(cAdvisor + nodeExporter + alertmanager + prometheus +grafana)的更多相关文章

  1. 【云计算】mesos+marathon 服务发现、负载均衡、监控告警方案

    Mesos-dns 和 Marathon-lb 是mesosphere 官网提供的两种服务发现和负载均衡工具.官方的文档主要针对DCOS,针对其它系统的相关中文文档不多,下面是我在Centos7上的安 ...

  2. Prometheus+Grafana+Alertmanager实现告警推送教程 ----- 图文详解

    前言 本文主要介绍的是Prometheus采集数据,通过Grafana加上PromQL语句实现数据可视化以及通过Alertmanage实现告警推送功能.温馨提示,本篇文章特长,2w多的文字加上几十张图 ...

  3. 【Springboot】用Prometheus+Grafana监控Springboot应用

    1 简介 项目越做越发觉得,任何一个系统上线,运维监控都太重要了.关于Springboot微服务的监控,之前写过[Springboot]用Springboot Admin监控你的微服务应用,这个方案可 ...

  4. prometheus+grafana监控mysql最佳实践

    导航 前言 环境准备 安装Docker 安装prometheus 安装mysqld_exporter prometheus采集数据 安装grafana grafana配置数据源 感谢您的阅读,预计阅读 ...

  5. Prometheus+Grafana+kafka_exporter监控kafka

    Prometheus+Grafana+kafka_exporter搭建监控系统监控kafka 一.Prometheus+Grafana+kafka_exporter搭建监控系统监控kafka 1.1K ...

  6. cadvisor+prometheus+alertmanager+grafana完成容器化监控告警(一)

    一.概况 1.拓扑图 2.名词解释 Grafana 可视化监控容器运行情况 Prometheus: 开源系统监视和警报工具包 Alertmanager 一个独立的组件,负责接收并处理来自Prometh ...

  7. docker stack 部署容器监控方案(cAdvisor、Prometheus、Grafana)

    =============================================== 2018/7/8_第1次修改                       ccb_warlock === ...

  8. jmx_prometheus_javaagent+prometheus+alertmanager+grafana完成容器化java监控告警(二)

    一.拓扑图 二.收集数据 2.1前期准备 创建共享目录,即为了各节点都创建该目录,有两个文件,做数据共享 /home/target/prom-jvm-demo 1.下载文件 jmx_prometheu ...

  9. 你必须知道的容器监控 (3) Prometheus

    本篇已加入<.NET Core on K8S学习实践系列文章索引>,可以点击查看更多容器化技术相关系列文章.上一篇介绍了Google开发的容器监控工具cAdvisor,但是其提供的操作界面 ...

随机推荐

  1. ssh免密登陆权限问题

    问题: 添加了authorized_keys还是不能免密登陆. 思路: 检查端口是否开放,是否允许root用户登录,尝试重启ssh服务... 最有可能的还是权限问题,出现Permission deni ...

  2. java实现rabbitMQ延时队列详解以及spring-rabbit整合教程

    在实际的业务中我们会遇见生产者产生的消息,不立即消费,而是延时一段时间在消费.RabbitMQ本身没有直接支持延迟队列功能,但是我们可以根据其特性Per-Queue Message TTL和 Dead ...

  3. <context:annotation-config/>,<mvc:annotation-driven/>和<context:component-scan>之间的关系

    首先看一下三个注解各自定义: ① <context:annotation-config/> 1.如果你想使用@Autowired注解,那么就必须事先在 spring 容器中声明 Autow ...

  4. 安装doxygen(一个自动文档生成工具)+Graphviz图形可视化软件

    参考文章: http://www.fmddlmyy.cn/text21.html http://www.cnblogs.com/duguguiyu/archive/2008/06/29/1231852 ...

  5. linux操作系统-设置静态ip

    在使用linux虚拟机的时候因为经常有关机的需求,然后重新开机后可能面临这上一次获取的ip被改变,在这里我分享一下在linux 下设置静态ip的经验 1.查看路由状态 [root@localhost ...

  6. android 线性布局

    activity_main.xml线性布局 <?xml version="1.0" encoding="utf-8"?> <LinearLay ...

  7. HDU_2112(最短路)

    经过锦囊相助,海东集团终于度过了危机,从此,HDU的发展就一直顺风顺水,到了2050年,集团已经相当规模了,据说进入了钱江肉丝经济开发区500强.这时候,XHD夫妇也退居了二线,并在风景秀美的诸暨市浬 ...

  8. Xstream将XML转换为javabean的问题

    1.问题:Xstream is not security 解决方法:加上 2.问题:如果没有第二行代码,会出现xstream forbiddenclassexception 解决方法:加上第二行,其中 ...

  9. 洛谷2860 [USACO06JAN]冗余路径Redundant Paths

    原题链接 题意实际上就是让你添加尽量少的边,使得每个点都在至少一个环上. 显然对于在一个边双连通分量里的点已经满足要求,所以可以用\(tarjan\)找边双并缩点. 对于缩点后的树,先讲下我自己的弱鸡 ...

  10. Node.js v7.4.0 Documentation Addons

    https://nodejs.org/docs/latest/api/addons.html Node.js Addons are dynamically-linked shared objects, ...