[系统集成] 部署 mesos-exporter 和 prometheus 监控 mesos task
前几天我在mesos平台上基于 cadvisor部署了 influxdb 和 grafana,用于监控 mesos 以及 docker app 运行信息,发现这套监控系统不太适合 mesos + docker 的架构,原因是:
1)mesos task id 和 docker container name 不一致
cadvisor 的设计基于 docker host,没有考虑到mesos 数据中心;
cadvisor 用 docker name(docker ps能看到)来标记抓取的数据,而 mesos 用 task id(在mesos ui 或者metrics里能看到) 来标记正在运行的任务。mesos task 的类型可以是 docker 容器,也可以是非容器。mesos task id 与docker container name 的命名也是完全不一样的。
上述问题导致 cadvisor 抓取到数据后,用户难以识别属于哪个 mesos task
2)cadvisor 和 grafana 不支持报警
经过查询资料,发现 mesos-exporter + prometheus + alert-manager 是个很好的组合,可以解决上述问题:
mesos-exporter 是 mesosphere 开发的工具,用于导出 mesos 集群包括 task 的监控数据并传递给prometheus;prometheus是个集 db、graph、statistic 于一体的监控工具;alert-manager 是 prometheus 的报警工具
搭建方法:
1. build mesos-exporter
git clone https://github.com/mesosphere/mesos_exporter.git
cd mesos_exporter
docker build -f Dockerfile -t mesosphere/mesos-exporter .
2. docker pull prometheus, alert-manager
3. 部署 mesos-exporter, alert-manager, prometheus
mesos-exporter:
{
"id": "mesos-exporter-slave",
"instances": 6,
"cpus": 0.2,
"mem": 128,
"args": [
"-slave=http://127.0.0.1:5051",
"-timeout=5s"
],
"constraints": [
["hostname","UNIQUE"],
["hostname", "LIKE", "slave[1-6]"]
],
"container": {
"type": "DOCKER",
"docker": {
"image": "172.31.17.36:5000/mesos-exporter:latest",
"network": "HOST"
},
"volumes": [
{
"containerPath": "/etc/localtime",
"hostPath": "/etc/localtime",
"mode": "RO"
}
]
}
}
请打开slave 防火墙的9110/tcp 端口
alert-manager:
{
"id": "alertmanager",
"instances": 1,
"cpus": 0.5,
"mem": 128,
"constraints": [
["hostname","UNIQUE"],
["hostname", "LIKE", "slave[1-6]"]
],
"labels": {
"HAPROXY_GROUP":"external",
"HAPROXY_0_VHOST":"alertmanager.test.com"
},
"container": {
"type": "DOCKER",
"docker": {
"image": "172.31.17.36:5000/alertmanager:latest",
"network": "BRIDGE",
"portMappings": [
{ "containerPort": 9093, "hostPort": 0, "servicePort": 0, "protocol": "tcp" }
]
},
"volumes": [
{
"containerPath": "/etc/localtime",
"hostPath": "/etc/localtime",
"mode": "RO"
},
{
"containerPath": "/etc/alertmanager/config.yml",
"hostPath": "/var/nfsshare/alertmanager/config.yml",
"mode": "RO"
},
{
"containerPath": "/alertmanager",
"hostPath": "/var/nfsshare/alertmanager/data",
"mode": "RW"
}
]
}
}
prometheus:
{
"id": "prometheus",
"instances": 1,
"cpus": 0.5,
"mem": 128,
"args": [
"-config.file=/etc/prometheus/prometheus.yml",
"-storage.local.path=/prometheus",
"-web.console.libraries=/etc/prometheus/console_libraries",
"-web.console.templates=/etc/prometheus/consoles",
"-alertmanager.url=http://alertmanager.test.com"
],
"constraints": [
["hostname","UNIQUE"],
["hostname", "LIKE", "slave[1-6]"]
],
"labels": {
"HAPROXY_GROUP":"external",
"HAPROXY_0_VHOST":"prometheus.test.com"
},
"container": {
"type": "DOCKER",
"docker": {
"image": "172.31.17.36:5000/prometheus:latest",
"network": "BRIDGE",
"portMappings": [
{ "containerPort": 9090, "hostPort": 0, "servicePort": 0, "protocol": "tcp" }
]
},
"volumes": [
{
"containerPath": "/etc/localtime",
"hostPath": "/etc/localtime",
"mode": "RO"
},
{
"containerPath": "/etc/prometheus",
"hostPath": "/var/nfsshare/prometheus/conf",
"mode": "RO"
},
{
"containerPath": "/prometheus",
"hostPath": "/var/nfsshare/prometheus/data",
"mode": "RW"
}
]
}
}
4. prometheus 配置
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: 'codelab-monitor' # Load and evaluate rules in this file every 'evaluation_interval' seconds.
rule_files:
# - "first.rules"
# - "second.rules" scrape_configs:
- job_name: 'mesos-slaves'
scrape_interval: 5s
metrics_path: '/metrics'
scheme: 'http'
target_groups:
- targets: ['172.31.17.31:9110', '172.31.17.32:9110', '172.31.17.33:9110', '172.31.17.34:9110', '172.31.17.35:9110', '172.31.17.36:9110']
- labels:
group: 'office'
待补充 ...

5. 报警设置
待补充 ...
6. 与 grafana 集成
prometheus的 graph 功能不太完善,可以与 grafana 集成,让 grafana 承担 graph 功能。

data source 设置:

7. 附:mesos metrics 和 statics 地址
http://master1:5050/metrics/snapshot
http://slave4:5051/metrics/snapshot
http://master1:5050/master/state.json
http://slave4:5051/monitor/statistics.json
用户可以基于上述页面的数据,编写自己的监控程序。
[系统集成] 部署 mesos-exporter 和 prometheus 监控 mesos task的更多相关文章
- 部署prometheus监控kubernetes集群并存储到ceph
简介 Prometheus 最初是 SoundCloud 构建的开源系统监控和报警工具,是一个独立的开源项目,于2016年加入了 CNCF 基金会,作为继 Kubernetes 之后的第二个托管项目. ...
- Prometheus监控软件部署方法
背景:负责基于区块链的某公正项目的状态上报模块设计编码,基于Prometheus进行二次开发 1.说明Prometheus 是一个开源的服务监控软件,它通过 HTTP 协议从远程机器收集数据并存储在本 ...
- Kubernetes集群部署史上最详细(二)Prometheus监控Kubernetes集群
使用Prometheus监控Kubernetes集群 监控方面Grafana采用YUM安装通过服务形式运行,部署在Master上,而Prometheus则通过POD运行,Grafana通过使用Prom ...
- 使用 Docker 部署 Grafana + Prometheus 监控 MySQL 数据库
一.背景 在平时开发过程当中需要针对 MySQL 数据库进行监控,这里我们可以使用 Grafana 和 Prometheus 来实现监控功能.Grafana 是一款功能强大的仪表盘面板,支持多种数据源 ...
- 基于k8s集群部署prometheus监控ingress nginx
目录 基于k8s集群部署prometheus监控ingress nginx 1.背景和环境概述 2.修改prometheus配置 3.检查是否生效 4.配置grafana图形 基于k8s集群部署pro ...
- 基于k8s集群部署prometheus监控etcd
目录 基于k8s集群部署prometheus监控etcd 1.背景和环境概述 2.修改prometheus配置 3.检查是否生效 4.配置grafana图形 基于k8s集群部署prometheus监控 ...
- 容器编排系统K8s之Prometheus监控系统+Grafana部署
前文我们聊到了k8s的apiservice资源结合自定义apiserver扩展原生apiserver功能的相关话题,回顾请参考:https://www.cnblogs.com/qiuhom-1874/ ...
- 如何利用Prometheus监控你的应用
Prometheus作为一套完整的开源监控接近方案,因为其诸多强大的特性以及生态的开放性,俨然已经成为了监控领域的事实标准并在全球范围内得到了广泛的部署应用.那么应该如何利用Prometheus对我们 ...
- 如何利用Prometheus监控你的应用(此列子是对于golang sdk进行运用)
Prometheus作为一套完整的开源监控接近方案,因为其诸多强大的特性以及生态的开放性,俨然已经成为了监控领域的事实标准并在全球范围内得到了广泛的部署应用.那么应该如何利用Prometheus对我们 ...
随机推荐
- PHP开发调试环境配置(基于wampserver+Eclipse for PHP Developers )
1 软件准 WampServer 下载地址:http://www.wampserver.com/en/#download-wrapper 我下的是 里面包含了搭建PHP必须的4个软件: 1. ...
- PID算法学习记录
最近做项目需要用到PID算法,这个本来是我的专业(控制理论与控制工程),可是我好像是把这个东西全部还给老师了. 没办法,只好抽时间来学习了. 先占个座,后续将持续更新!
- NSFileManager计算文件/文件夹大小
在一些软件中,一般都会给用户展现当前APP的内存,同时用户可以根据自己的需要来清除缓存的内容.一般而言,文件夹是没有大小这个属性的,所以需要遍历文件夹的内容来计算文件夹的大小,下面用NSFileMan ...
- 将对象序列化,反序列化到XML
using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Tex ...
- Linux覆盖率一点研究:获取覆盖率数据
首先,当然哥不介意你鄙视我在网上找的资料研究! 白盒覆盖率是啥东东这个问题大家自己查百度啦!我也不太懂,就知道它不是个东西,就这样开始吧(MT一般是先摸四蹄呢还是先黑金币呢?这是个问题)! 首先:l ...
- Android手机刷机失败的自救方法
刷机对于一些android手机的高级用户来说已经是家常便饭了,很多新手也都跟着教程轻松了学会刷机.升级系统,也都开始经常在网上搜罗一些自制的系统进行刷机,体验新系统带来的新感觉.但是有句古话叫常在河边 ...
- day05 java JDBC案例—Android小白的学习笔记
1.要从键盘录入用户名与密码我们需要使用Scanner类完成操作 2.接收到用户名与密码后,我们需要调用jdbc程序根据用户名与密码查询数据库 User.java package com.superg ...
- Sep19_html/css_imooc学习笔记_1
1. <h1></h1>标题,h1-h6从大到小 2. <p></p> 段落 3. <img src=“1.jpg”> 加入图片 4.基本结 ...
- 1.4 云计算的SPI服务模型
云计算是通过共享资源池的方式来提高资源利用率的.在云计算中,根据其资源池中资源的类别,可以把云计算的服务模型分为三种,即所谓的SPI 模型 应用程序 Software as a Service ( ...
- some simple recursive lisp programs
1. Write a procedure count-list to count the number of elements in a list (defun count-list (numbers ...