[系统集成] 基于 elasticsearch 的企业监控方案
注:
2017年10月16日:
使用中发现 es 查询时序数据的性能较差,且 watch 脚本的编写比较麻烦,因此已将监控系统切换到了 influxdb+grafana平台。新监控系统各方面情况比较满意。
---------------
在企业监控领域,nagios 和 zabbix 一直是使用率比较高的工具。最近几年,业界又出现了新的工具和架构,比如:telegraf(数据抓取工具,还有 collectd, logstash,heapster) + influxdb(数据存储和搜索工具,还有 elasticsearch、opentsd) + kapacitor(数据处理和报警工具,还有 elastAlert,watch) + grafana(数据展示工具)。新的监控工具和架构具有分布式架构、组件独立、松耦合、易于扩展、插件丰富、适用范围广等优点,从容器监控到传统的服务器、虚拟机监控都适用。
在数据存储和搜索方面,influxdb 正在快速发展中,目前免费版没有集群功能;而elasticsearch 是一种健壮、高效、使用广泛的大数据全文搜索引擎,将监控数据存储在 es里,能与大数据平台结合,发挥更大作用。
(转载请注明出处:http://www.cnblogs.com/hahp)
1. 系统结构图
注:我的测试环境数据不多,因此源数据由 heapster 和 telegraf 抓取后直接存到 elasticsearch。如果数据量很大、elasticsearch 的写操作出现瓶颈,可以在 elasticsearch前加 kafka 和 logstash。
2. 数据抓取
heapster:用于抓取 kubernetes 容器监控数据,直接存到elasticsearch(也支持存到kafka等其它地方);
telegraf:用于抓取非容器的其它监控数据,它的插件很多,几乎涵盖了各种数据源。
3. 数据存储和搜索
elasticsearch 集群,我采用的是两台虚拟机;
4. 告警
我采用的是 elastic x-pack中的 watch:
https://www.elastic.co/guide/en/x-pack/current/how-watcher-works.html
目前 watch的action只支持 email、webhook、index、loggin、hipchat、slack、pagerduty、jira。如果想执行一个外部脚本,比如:shell、python、perl脚本,可以将这些脚本集成到一台 restful web service服务器中,watch 便能够通过 webhook 方式调用。
watch 的搜索、状态判断、数据转换部分都支持一种 plainless script 语言,比 一般的方式更灵活、功能更强:
https://www.elastic.co/guide/en/elasticsearch/painless/master/painless-specification.html
5. 展示
grafana 的效果非常好,支持 elasticsearch。
附:x-pack watch 例子
下面的 watch 用于监控 k8s nodes 的可用磁盘容量,如果任意一台node的可用磁盘容量低于5G,或者2分钟内获取不到监控数据,watch就会发送短信和邮件报警。
我是把上述功能写到两个watch里,你也可以研究更好的方法精简这两个watch。
PUT _xpack/watcher/watch/k8s_node_filesystem_available_evaluate
{
"trigger" : { "schedule" : { "interval" : "10s" }},
"input" : {
"search" : {
"request" : {
"indices" : [
"<heapster-{now}>",
"<heapster-{now-1h}>"
],
"body" : {
"query" : {
"bool" : {
"must" : [
{ "term": { "_type": "filesystem" }},
{ "term": { "MetricsTags.resource_id": "/" }},
{ "term": { "MetricsTags.type": "node" }}
],
"filter" : [
{ "range": { "Metrics.filesystem/available.value": {"lt": }} },
{ "range": {"FilesystemMetricsTimestamp": {"gte": "now-70s"}} }
]
}
},
"aggs": {
"group_by_host_id": {
"terms": { "size": , "field": "MetricsTags.host_id" },
"aggs" : {
"group_by_available_value" : {
"terms": { "script": "params['_source']['Metrics']['filesystem/available']['value']>0?params['_source']['Metrics']['filesystem/available']['value']/(1024*1024*1024):params['_source']['Metrics']['filesystem/available']['value']" }
}
}
}
}
}
}
}
},
"condition" : {
"compare" : { "ctx.payload.hits.total" : { "gt": }}
},
"throttle_period" : "60m",
"actions" : {
"send_sms" : {
"webhook" : {
"method" : "POST",
"host" : "sms.xxx.com",
"port" : ,
"path" : "/actions/sendsms",
"params" : {
"phone": "",
"message": "【XXX】报警:k8s nodes filesytem available:{{#ctx.payload.aggregations.group_by_host_id.buckets}}{{key}} {{group_by_available_value.buckets.0.key}}GB, {{/ctx.payload.aggregations.group_by_host_id.buckets}}"
}
}
},
"send_email" : {
"email" : {
"to" : "AAAAAAA@xxx.com",
"subject" : "【XXX】报警:k8s nodes filesytem available",
"body" : "{{#ctx.payload.aggregations.group_by_host_id.buckets}}{{key}} {{group_by_available_value.buckets.0.key}}GB, {{/ctx.payload.aggregations.group_by_host_id.buckets}}"
}
}
}
}
PUT _xpack/watcher/watch/k8s_node_filesystem_hava_data
{
"trigger" : { "schedule" : { "interval" : "10s" }},
"input" : {
"search" : {
"request" : {
"indices" : [
"<heapster-{now}>",
"<heapster-{now-1h}>"
],
"body" : {
"query" : {
"bool" : {
"must" : [
{ "term": { "_type": "filesystem" }},
{ "term": { "MetricsTags.resource_id": "/" }},
{ "term": { "MetricsTags.type": "node" }},
{ "exists": { "field": "Metrics.filesystem/available.value" }}
],
"filter" : [
{ "range": {"FilesystemMetricsTimestamp": {"gte": "now-130s"}} }
]
}
},
"aggs": {
"group_by_host_id": {
"terms": { "size": , "field": "MetricsTags.host_id" }
}
}
}
}
}
},
"condition" : {
"script" : "if(ctx.payload.aggregations.group_by_host_id.buckets.length<12){ return true; } else{ return false;}"
},
"transform" : {
"script" : "List host_all = ['172.31.17.31','172.31.17.32','172.31.17.33','172.31.17.34','172.31.17.35','172.31.17.36','172.31.17.37','172.31.17.38','172.31.17.39','172.31.17.71','172.31.17.72','172.31.17.73']; List host_ids = []; for (int i = 0; i < ctx.payload.aggregations.group_by_host_id.buckets.length; ++i ){ host_ids.add(ctx.payload.aggregations.group_by_host_id.buckets[i].key); } List host_no_data = []; for(item in host_all){ if(!host_ids.contains(item)){ host_no_data.add(['key':item]); } } return ['host_no_data':host_no_data];"
},
"throttle_period" : "60m",
"actions" : {
"send_sms" : {
"webhook" : {
"method" : "POST",
"host" : "sms.xxx.com",
"port" : ,
"path" : "/actions/sendsms",
"params" : {
"phone": "",
"message": "【XXX】报警:k8s nodes filesytem no data:{{#ctx.payload.host_no_data}}{{key}},{{/ctx.payload.host_no_data}}"
}
}
},
"send_email" : {
"email" : {
"to" : "AAAAAAA@xxx.com",
"subject" : "【XXX】报警:k8s nodes filesytem no data",
"body" : "{{#ctx.payload.host_no_data}}{{key}},{{/ctx.payload.host_no_data}}"
}
}
}
}
[系统集成] 基于 elasticsearch 的企业监控方案的更多相关文章
- Kubernetes 监控方案之 Prometheus Operator(十九)
目录 一.Prometheus 介绍 1.1.Prometheus 架构 1.2.Prometheus Operator 架构 二.Helm 安装部署 2.1.Helm 客户端安装 2.2.Tille ...
- 基于AgileEAS.NET企业应用平台实现基于SOA架构的应用整合方案-开篇
开篇 系统架构的文章,准备在这段时间好好的梳理和整理一下,然后发布基于AgileEAS.NET平台之上的企业级应用架构实践,结合具体的案例来说明AgileEAS.NET平 台之上如何进行系统的逻辑架构 ...
- Prometheus+Grafana企业监控系统
Prometheus+Grafana企业监控系统 作者 刘畅 实验配置: 主机名称 Ip地址 controlnode 172.16.1.70/24 slavenode1 172.16.1.71/24 ...
- 基于AngularJS的企业软件前端架构[转载]
这篇是我参加QCon北京2014的演讲内容: 提纲: 企业应用在软件行业中占有很大的比重,而这类软件多数现在也都采用B/S的模式开发,在这个日新月异的时代,它们的前端开发技术找到了什么改进点呢? B/ ...
- 基于SaaS的企业数据隐私保护平台
导读 WireWheel成立于2016年,总部位于华盛顿,该公司致力于降低数据隐私保护合规能力建设的难度,帮助企业来应对复杂.严厉的法案.条例规定.2018年10月,公司获得了PSP Growth领投 ...
- Linux云主机 监控方案浅析
1.为何需要监控 监控是运维工程师的眼睛,它可帮助运维工程师第一时间发现系统的问题. 对于服务器的整个生命周期,都要和监控打交道: 当有服务器上架,都需要加入比如CPU负载.内存.网络.磁盘等基础监控 ...
- NET 的 ELK 监控方案
NET 的 ELK 监控方案 https://www.jianshu.com/p/3c26695cfc38 背景就不多说了,谁家没有个几个十系统在跑啊.如何监控这几十个系统的运行状况,对于非运营人员来 ...
- docker监控方案实践(cadvisor+influxdb+grafana)
一.概要 1.1 背景 虚拟化技术如今已经非常热门,如果你不知道什么是虚拟化,那你应该了解虚拟机.虚拟化技术如同虚拟机一样,用于将某些硬件通过软件方式实现"复制",虚拟出" ...
- 字节跳动 iOS Heimdallr 卡死卡顿监控方案与优化之路
点这里申请 本文主要介绍Heimdallr对卡死.卡顿异常的监控原理,并结合长时间的业务沉淀发现的问题进行不断迭代和优化,逐步实现全面.稳定.可靠的历程. 作者:字节跳动终端技术--白昆仑 前言 卡死 ...
随机推荐
- C# .NET 0配置使用Wcf(半成品)
设计原则:万物皆对象 背景:微软提供了一套强大的通信框架Wcf,了解请看百度百科:ttps://baike.baidu.com/item/Wcf/7374854?fr=aladdin 虽然这套通信框架 ...
- 自定义class类的简单使用
晚上闲着无事, 然后看了阮老师的es6 的类用法,包括继承. 然后, 想着在vue中怎么使用class . 1. 定义一个 classmodel.js 文件. 里面包含如下代码: 2.接着, 在vue ...
- Neutron vxlan network--L2 Population
L2 Population 是用来提高 VXLAN 网络 Scalability 的. 通常我们说某个系统的 Scalability 好,其意思是: 当系统的规模变大时,仍然能够高效地工作. L2 ...
- LODOP打印当前日期时间的方法
JS方法直接获取.之前有个详细介绍的博文:LODOP打印用JS获取的当前日期本文也再演示一下,详细介绍见上面链接的博文,该方法此文不做详细介绍. 本文有三段:1.JS获取日期,2,.LODOP的FOR ...
- C++中typedef enum 和 enum
在C++中,这两种定义枚举类型的关键字用法和效果相同,推荐使用前者.typedef enum多用在C语言中. 在C语言中,如果使用typedef enum定义一个枚举类型,比如: typedef en ...
- cmd 常用命令
注:绿色的为比较常用的命令 命令 名称 ASSOC 显示或修改文件扩展名关联. ATTRIB 显示或更改文件属性. BREAK 设置或清除扩展式 CTRL+C 检查. CACLS 显示或修改文件的 ...
- Codeforces 1108F MST Unification(最小生成树性质)
题目链接:MST Unification 题意:给定一张连通的无向带权图.存在给边权加一的操作,求最少操作数,使得最小生成树唯一. 题解:最小生成树在算法导论中有这个性质: 把一个连通无向图的生成树边 ...
- Gym - 101982B Coprime Integers (莫比乌斯反演)
题目链接:http://codeforces.com/gym/101982/attachments 题目大意:有区间[a,b]和区间[c,d],求gcd(x,y)=1,其中x属于[a,b],y属于[c ...
- 简单记录一次getshell到进服务器的过程
通过st2命令执行上次木马进行getshell 查看whoami,发现权限是administrator,直接net user xxx xxx123.. /add,发现拒绝访问 通过命令tasklist ...
- Elasticsearch.Net 多层嵌套的逻辑实现
{ "query": { "bool": { "must": [ { "match_phrase": { "t ...