Agentless监控实践中的预警指标采集
很多公司已经开发了监控解决方案,解决了指标收集、展示、预警发送等一系列问题。
本文介绍的监控解决方案由高性能时序数据库InfluxDB、时序分析监控工具Grafana及Agentless自动化工具Ansible构成:Ansible负责不间断抓取服务器硬件指标数据,并将数据存储在数据库InfluxDB中;时序分析监控工具Grafana负责从InfluxDB中读取并展示指标数据,设定阈值,配置预警。
一、开发环境
通过三台本地虚机还原监控对象:一台为监控服务器(monitor),另两台为可接入监控服务的服务器(server1和server2)。
使用Vagrant管理开发环境,执行vagrant up monitor命令,通过下方Vagrantfile开启并配置监控服务器。如果需要把server1和server2接入监控服务中,可以稍后启动这两台虚机服务器。

Ansible负责配置监控服务器,包括安装InfluxDB、Grafana及Ansible以及配置监控服务。为了保证代码整洁,结构清晰,每个工具的安装任务都保存在单独的YML文件夹中。include_tasks可动态地将分组后的任务纳入整个流程中。

二、监控服务配置
监控服务配置步骤如下方monitoring-configuration.yml文件所示。首先,创建monitor数据库,生成API,用于完成各项数据库操作。通过Ansible URI与网页服务交互。从监控对象服务器中提取的所有指标均存储在监控数据库中。
接下来创建Grafana数据源,对接数据库InfluxDB,读取全部指标数据。Grafana提供API,支持通过json格式的内容最大限度地利用配置。除数据源外,还创建了Slack通知渠道和第一个面板。
Slack通知渠道指向测试版Slack工作区。用户可创建自己的工作区,并邀请运维人员加入。同时创建传入webhook,取代json URL字段值。
初始面板会显示已使用内存百分比。用户可以添加其他指标或创建新面板。可将阈值设定为95%,这样便能直观地查看展示结果;同时配置预警:当最后五个指标值大于等于95%时,则向Slack渠道发送通知。
Ansible支持在多个服务器上同时执行任务。此外,Ansible可通过清单文件(/etc/ansible/hosts)了解目标服务器的分组情况。在监控服务配置期间,在库存文件中创建 monitored_servers分组。该组内的所有服务器会被自动监控。
服务器接入监控服务后,为防止Ansible核验SSH密钥,需禁用Ansible配置文件(/etc/ansible/ansible.cfg)中的默认功能,以便采集新增服务器的指标。
通过Ansible playbook(playbook-get-metrics.yml)连接所有监控对象,提取所有相关指标。Ansible playbook位于 /etc/ansible/playbooks目录下,通过CRON配置,每分钟执行一次:每分钟采集、存储、显示一次指标数据;如发现问题,则发送预警。


三、采集指标数据
下方playbook-get-metrics.yml文件负责从monitored_servers中提取所有重要指标,并将采集到的数据存储在monitor数据库中。初始面板仅采集内存占用比例。用户可在playbook中添加任务,采集其他指标。
InfluxDB数据存储API用于存储监控数据库中的指标数据。192.168.33.10为监控服务器的IP地址,8086为InfluxDB端口号。数据库中,已使用内存的key为used_mem_pct。用户需为每个指标配置合适的key。
Ansible默认会采集目标主机信息,用于执行任务。例如,根据主机名称(ansible_hostname)可以判断指标从哪个服务器上采集的。
此外,通过Ansible采集到的实际使用内存(ansible_memory_mb.real.used)和累计实际使用内存(ansible_memory_mb.real.total)可以计算出内存消耗百分比。掌握这些数据后,可以执行ansible monitor -m setup -uvagrant -k -i hosts命令。弹出SSH密码时,输入vagrant。前述信息均为json格式,可使用点符号访问值。

四、在监控服务中接入服务器
执行vagrant up monitor命令,启动监控服务器。
然后在浏览器中输入http://192.168.33.10:3000,访问Grafana。用户名和密码均为admin。点击used_mem_pct面板链接,查看折线图中监控服务器的数值。
接入其他服务器,查看折线图中的数值。启动接入其他服务器,查看折线图中的数值。启动server1,执行vagrant up server1命令,继续执行ansible-playbookplaybook-add-server.yml -u vagrant -k -i hosts命令。-u参数用于定义SSH用户,-k参数提示输入密码,-i用于定义监控服务器。
获取新服务器IP地址和SSH证书后,便可实现Ansible与服务器对接。在监控服务器/etc/ansible/hosts文件中插入一行代码后,便可将服务器接入监控服务中。CRON再次执行playbook-get-metrics.yml时,server1便会成为监控对象。这样就可以采集、存储、展示server1的各项指标数据。

五、结论
本文介绍的监控解决方案成本较低且易于实施,具有以下优势:
- Ansible不需要在所有监控对象中安装agent;
- 所有指标数据存储在高性能时序数据库InfluxDB中;
- 利用Grafana统一展示数据,并支持配置预警。
作者:Gustavo Carmo
编译自:How to Get Metrics for Advance Alerting to Prevent Trouble
Agentless监控实践中的预警指标采集的更多相关文章
- Kubernetes监控实践
一.Kubernetes介绍 Kubernetes(K8s)是一个开源平台,能够有效简化应用管理.应用部署和应用扩展环节的手动操作流程,让用户更加灵活地部署管理云端应用. 作为可扩展的容错平台,K8s ...
- 【译】Kubernetes监控实践(2):可行监控方案之Prometheus和Sensu
本文介绍两个可行的K8s监控方案:Prometheus和Sensu.两个方案都能全面提供系统级的监控数据,帮助开发人员跟踪K8s关键组件的性能.定位故障.接收预警. 拓展阅读:Kubernetes监控 ...
- Windows性能计数器监控实践
Windows性能计数器(Performance Counter)是Windows提供的一种系统功能,它能实时采集.分析系统内的应用程序.服务.驱动程序等的性能数据,以此来分析系统的瓶颈.监控组件的表 ...
- Sysstat性能监控工具包中20个实用命令
Sysstat性能监控工具包中20个实用命令 学习mpstat, pidstat, iostat和sar等工具,这些工具可以帮组我们找出系统中的问题.这些工具都包含了不同的选项,这意味着你可以根据不同 ...
- 第4章Zabbix监控实践
p.MsoNormal,li.MsoNormal,div.MsoNormal { margin: 0cm; margin-bottom: .0001pt; text-align: justify; t ...
- Prometheus监控学习笔记之360基于Prometheus的在线服务监控实践
0x00 初衷 最近参与的几个项目,无一例外对监控都有极强的要求,需要对项目中各组件进行详细监控,如服务端API的请求次数.响应时间.到达率.接口错误率.分布式存储中的集群IOPS.节点在线情况.偏移 ...
- 360 基于 Prometheus的在线服务监控实践
转自:https://mp.weixin.qq.com/s/lcjZzjptxrUBN1999k_rXw 主题简介: Prometheus基础介绍 Prometheus打点及查询技巧 Promethe ...
- 阿里巴巴 Kubernetes 应用管理实践中的经验与教训
作者 | 孙健波(阿里巴巴技术专家).赵钰莹 导读:云原生时代,Kubernetes 的重要性日益凸显.然而,大多数互联网公司在 Kubernetes 上的探索并非想象中顺利,Kubernetes 自 ...
- 记一次小团队Git实践(中)
对于初学者,从使用上先入手,往往学的最快,并从中汲取教训,再回头更深入的学习,效果尤佳. 安装git 安装git自不必说,mac已经内置了git,linux下一个命令就能搞定,windows下需要下载 ...
随机推荐
- Codeforces Round #479 (Div. 3) D. Divide by three, multiply by two
传送门 D. Divide by three, multiply by two •题意 给你一个数 x,有以下两种操作,x 可以任选其中一种操作得到数 y 1.如果x可以被3整除,y=x/3 2.y= ...
- 最全的Vue组件通信方式总结
1.一图认清组件关系名词 父子关系:A与B.A与C.B与D.C与E 兄弟关系:B与C 隔代关系:A与D.A与E 非直系亲属:D与E 总结为三大类: 父子组件之间通信 兄弟组件之间通信 跨级通信 2.8 ...
- web-inf与meta-inf
/WEB-INF/web.xml Web应用程序配置文件,描述了 servlet 和其他的应用组件配置及命名规则. /WEB-INF/classes/包含了站点所有用的 class 文件,包括 ser ...
- kudu集群高可用搭建
首先咱得有KUDU安装包 这里就不提供直接下载地址了(因为有5G,我 的服务器网卡只有4M,你们下的很慢) 这里使用的是CDH版本 官方下载地址http://archive.cloudera.com/ ...
- 蓝桥杯 2n皇后问题 深搜
默认大家会了n皇后问题 基础练习 2n皇后问题 时间限制:1.0s 内存限制:512.0MB 问题描述 给定一个n*n的棋盘,棋盘中有一些位置不能放皇后.现在要向棋盘中放入n个黑皇后和 ...
- 【Python-django后端开发】logging日制配置详解!!!
官方文档请查看:https://docs.djangoproject.com/en/1.11/topics/logging/ 1. 配置工程日志,在setting.py里,如下 LOGGING = { ...
- MemCached的工具类。获取cached中的所有key
package com.ibs.auth.controller; import java.io.UnsupportedEncodingException; import java.util.Date; ...
- codeforces679A_Bear and Prime 100 交互题
传送门 第一道交互题 题意: 电脑事先想好了一个数[,] 你会每次问电脑一个数是否是它想的那个数的因数 电脑会告诉你yes或no 至多询问20次 最后要输出它想的数是质数还是合数 思路: 枚举< ...
- c#小灶——常量、变量和赋值
常量 常量很好理解,和变量相对,就是不会变的量.比如,1就是常量,3.6也是常量,‘a’也是常量,“aaaaa”也是常量,只是不同类型.这些都是表面上一眼就看出来的常量,还有一种表面上看不出来的常量, ...
- 编程杂谈——Non-breaking space
近日,意外地遇上件不寻常的事情.在解析PDF文件,读取其中内容的时候,对某一文件的处理,始终无法达到预期的效果. 解析方法如下: public void Parse(string value) { i ...