网站运维技术与实践之数据分析与报警

对于日益积累的监控数据,显然需要有规划地进行存储和分析,做到“故障没来时有预防,故障来临时有提示,故障到来时有解决方案”。

一、时间序列存储

对于大多数监控数据,都有一个天然的类似数据库主键的属性,那就是时间。所以,通常情况下,各类监控系统的后台数据库都可以认为是时间序列的数据存储,并由此诞生了一批针对监控数据存储开发的数据库,其中最有代表性是RRDtool和Graphite。

1.RRDtool(Round-Robin DataBase Tool)

Round-Robin(循环)在运维人员眼里是一个很熟悉的词汇。负载均衡中最基础的算法就是Round-Robin,意即逐一循环。这个词很形象地描绘了RRD数据库的内部结构。

RRD数据库是一个固定空间大小的文件,其内部可以看做一个固定刻度的圆形表盘,每个刻度存储一个时间点的数据。表上有一个指针,永远指向最新写入数据的位置。指针随着数据写入转动,转完一圈后,就覆盖掉之前的数据从头继续。

上面这段描述中,有一点需要单独拿出来支出,即"指针岁随数据写入转动"。这个数据写入,并不等同于运维人员调用rrdtool命令插入数据。这也是RRD数据库和普通数据库一个明显的不同-在指定的时间间隔后,如果RRD每个收到明确的数据插入请求,它依然会自行发起一次“空”数据写入,占据这个刻度空间。这也是我们一般用钟表比喻RRD的原因,指针实际是定时转动的。

2.Graphite

相对1999年诞生的RRD,2006年才出生的Graphite通过与Statsd实时监控系统的结合,在最近几年大数据的浪潮中得到迅速普及和发展。

Graphite项目包括三部分:展示图形的graphite-web,接收和写入数据的carbon,数据存储引擎whisper。这里我们先不谈论graphite-web而专注于数据部分。

Graphite与RRD一脉相承,事实上,最开始的Graphite就是打算通过额外的Python脚本存取分布式的RRD文件(看起来更类似于Cacti的角色)。

但最终Graphite没有选择RRD而是自己用Python实现存储引擎whisper,主要原因如下:

(1)Graphite的设计更倾向于展示数据而不是各种算法

在实际运用中,类似"网站访问500错误数统计"是Graphite常见的典型需求之一。而在网站一切正常的情况下,500错误肯定是具有偶发性质的。这与RRD数据结构设想的“有规律的定时记录数据”是相互冲突的。

(2)性能问题

在Graphite项目开始的时候,RRD在同一时刻,只允许往一个数据库里写入一个数值,而whisper可以合并多个数值批量写入。这样在高负载情况下,同时操作大量文件时,Graphite就不会被“磁盘IOPS“的瓶颈限制住。不过RRDtool现在已经解决了性能问题。但是在在第一点没有解决之前,虽然Python写的whisper性能比C写的rrdtool慢2~5倍,Graphite也会继续使用自己的whisper引擎。

3.OpenTSDB

时间序列数据库家族里还有一个新加入的成员:HBase社区的OpenTSDB。OpenTSDB只存储最基本的<timestamp,value>键值对,其余功能都依赖于HBase集群完成。有兴趣的读者可以参阅其官网,地址:http://opentsdb.net。

总的来说,从RRDtool到Graphite再到OpenTSDB,数据库中内置的数据类型和聚合算法越来越少,数据存储的可靠性和可扩展性越来越强。具体如何选择,就取决于数据量大小和运维团队二次开发能力。

二、全文搜索引擎ElasticSearch

前面说到的RRD、Graphite、OpenTSDB等,都只能存储数值型数据,这需要我们提前先整理好数据,因此不足以应对突发性的需求。比如,网站新出现的热门话题,我们需要关注这个话题的相关监控数据,这时候再动手创建数据库,然后写脚本过滤日志,最后导入库中绘图,不过等到这个过程完了,恐怕就晚了。

或许大家在应对这个问题的时候,都通过搜索引擎知道了Spluck这个工具,可惜的是这不是一个开源软件,它只提供每天索引500MB的免费试用版本。有些运维人员只好先行裁剪数据,只导入所需的部分来进行查询,倒可以算是一种临时抱佛脚的解决办法。

1.简介

ElasticSearch是一个分布式的Lucene全文搜索引擎,提供RestFul的API接口,也是最近相当流行的日志存储分析平台。它提供更加强大的搜索和统计功能。

关于全文搜索的基础原理,不了解的读者可以参考《大规模Web服务开发技术》中的》第九章挑战全文搜索技术 电子书的下载地址为:http://vdisk.weibo.com/s/zmzzSciGaVonL(感恩互联网时代为我们学习提供很多渠道)

目前ElasticSearch几个著名的客户如下:

(1)Mozilla,自动构建和测试集群,通过Flume发送ES。

(2)Sony,采用ES进行娱乐项目的使用数、用户评分、标题和说明等的存储和搜索。

(3)StumbleUpon,著名社交内容推荐引擎公司,用ES索引HBase数据方便不熟悉Hadoop编程的开发人员完成搜索功能,称上手快,1小时内搞定。

(4)Infochimps,著名大数据分析服务公司,通过ES索引超过2.5亿个对象,4TB以上的Hadoop数据。

(5)Ataxo Social Inside,捷克斯洛伐克的一家社交舆情监控分析公司,从网页数据库到后台分析都用ES。

(6)MetaCPAN和Github,都是代码托管网站,用ES做开源项目代码搜索。

ElasticSearch中文社区:https://elasticsearch.cn/

ElasticSearch权威指南下载:http://www.java1234.com/a/javaziliao/shuji/2016/0104/5478.html

2.安装

ElaticSearch官网提供了各个版本的deb安装包。因为ES是一个Java项目,没有什么动态库依赖,所以我们可以很容易地根据deb生成rpm安装包。

ES源代码托管:https://github.com/elastic/elasticsearch/

也可以选择直接下载代码后运行./bin/elasticsearch即可

Linux安装教程:https://blog.csdn.net/sinat_28224453/article/details/51134978

Windows安装教程:https://www.cnblogs.com/zhangchenliang/p/4214408.html

3.集群

ES集群的部署可谓是“傻瓜式”的,唯一需要自定义的地方就是/etc/elasticsearch/elasticsearch.yml里的cluster.name。然后,在Discovery可达的范围内,所有的elasticsearch node会自动寻找和自己有相同cluster.name的兄弟,然后按照最朴素的先来后到的规则确定master。到此,集群就完成了。

在ES集群中,存在多种角色,如下:

(1)master node:有资格被选举成为master的node。但是和MySQL的master-slave结构不同,ES中master的作用只是负责维护整个cluster的state,也就是nodes和shards的列表,然后通知其他所有的API,也就是常说的CRUD,都是可以直接发给集群里任何一个master node的,这个node会自动根据请求来操作整个集群。

(2)data node:存储数据的node。ES中,data node上有index和shard两级实际存在的目录。但逻辑上,index一旦创建,其shards数就不能再变更,因为ES的shard方法就是简单的取余;而replica数是可以随时通过API调整的。

(3)client node:如果一个node 不存储数据,那么它在接收到请求的时候,只能从master上获取shards列表,然后把请求转发给相应的data node,最后再把结果转发回去。但本质上,client node也是cluster的一部分。在这种配置时,通常是cluster内部采用9300端口的transport通信,只留几个client node开放9200端口的HTTP接口对外接收RestFul请求。

关于ES的基础操作在此就不列举了,感兴趣的可以参照前面的ES权威指南下载地址,下载下来仔细研究,毕竟我这里只是普及和稍微讲讲理论知识和对应的应用场景罢了。

另外关于数据可视化分析工具,在此说两个,一个是Gnuplot,另外一个是AmCharts。另外声明一下,可视化工具绝非这两个,还有很多,大家可以根据自己的需求百度或Google搜索找找。

三、报警

对于运维工作来说,还剩下一个更需要实时性的功能-报警。报警的方式有很多种,最常见的就是电子邮件、短信等。随着通信的发达,很多工具支持像微信告警等手段,比如我上家公司就通过Zabbix加微信联合报警。

1.SendMail

邮件发送是产品运维乃至运营工作中的很重要部分。sendEmail和postFix的配置部署也是Linux运维人员的必备技能之一。不过在监控系统中,我们可以用更简洁易用的命令来快速完成工作。

sendEmail就是这样一个工具。下载地址:http://caspian.dotconf.net

2.WebSocket

在工作时间段,运维人员更经常停留在浏览器界面而不是邮件客户端界面,至于手机等设备,离视线更加遥远,所以在这种情况下,我们可以通过浏览器的帮助,使用成本极低的网页报警,同样可以获得很好的效果。

网页实时刷新,是近年来最流行的技术话题之一。从运维的实际需求出发,我们不用考虑太多并发的性能问题,更需要考虑的是快捷开发,简单上手。就此,这里推荐开发社区的小软件:Juggernaut。下载地址:https://github.com/maccman/juggernaut

3.手机推送

运维人员下班之后,尤其是在下班路上,除了传统的短信报警,在移动互联网时代,也有了更加“时髦”的处理方式,那就是:用手机APP来收报警。

手机推送消息,是很多APP都有的基础功能。我们不需要自己从头研究推送原理,然后实现全套系统,直接使用JPush极光推送,可以极简单地实现这个报警功能。极光推送APP的示例:

注册账户->新建应用(纯页面操作,填写应用名称,获取对应的Key和master secret)->下载Example包->用adt eclipse打开eclipse项目并生成APK文件

4.分级和归并

前面三种工具,以及其他还没有提到的各种信息传送渠道,都只解决了一个问题:把信息传递到运维人员身边。但这个信息是否能有效让运维人员对故障作出判断并解决问题呢?

实际的工作中,并不缺乏这样的情况:半夜被报警叫醒,只是一个磁盘85%的小问题,支持到明早上上班再解决肯定没问题,于是继续睡觉。结果早上一看,在昨晚半小时重复一次磁盘报警,还夹着一条宕机。

这就是告警设计的另一个重要方向:如何提高信息的有效传递。归纳起来,就是要”有多又少"-不同意义的信息要多,一点不能遗漏;相同的信息要少,每条都可以引起运维人员的快速响应。

一般来说,做到这点有两个办法:分级和归并。

其实分级告警和归并过滤在Nagios报警设计中都有所体现,比如WARNING、CRITICAL和RECOVERY状态的区别,主机和服务的dependency关系,报警的escalations变更等。只要用好Nagios的细节控制,就可以减少很多无谓的报警。

对于非Nagios体系的监测告警,我们则需要自己动手完成。设计思路上,完全可以参考Nagios项目。实现办法上则可以完全从告警出口处控制。一般我们使用的短信网关,都会采用MySQL作为短信存储。我们可以限制MySQL数据库的权限,自己编写一个简单的HTTP服务作为短信告警的统一接收入口。这样,在HTTP服务接收到信息之后,可以先对MySQL中的近期数据进行查询统计,一旦经过逻辑计算认为应该被归并过滤掉,那么在最后信息入库的时候,直接将SQL中是否发生的列标记为已发送,或者自定义代表被过滤的其他数字-请注意,虽然信息最后被过滤,但千万不能直接丢弃掉。“被过滤”也是一种记录,也有价值。

原文地址:https://www.cnblogs.com/youcong/p/9940778.html

时间: 2024-10-05 09:14:20

网站运维技术与实践之数据分析与报警的相关文章

网站运维技术与实践之集群架构规划

集群架构规划和设计只要是涉及到高并发高流量的项目,基本上都需要. 本文主要围绕两个方面,一个是IDC的规划和选择,另一个是CDN. 一.IDC的规划和选择 IDC的选择是网站上线前要做的最重要的事情之一.哪怕发展初期只有一台服务器,选择一个位置不错的机房托管,都会助益良多. 也许有人会问IDC是什么? 我引用百度百科来回答: IDC为互联网内容提供商(ICP).企业.媒体和各类网站提供大规模.高质量.安全可靠的专业化服务器托管.空间租用.网络批发带宽以及ASP.EC等业务.IDC是对入驻(Hos

网站运维技术与实践之服务器监测常用命令

一.监测的意义 不论是网站运维还是系统管理,服务器本身的运行状况都是我们需要掌控的基础资料.在<打造FaceBook>一书中,王淮介绍FaceBook的工程师文化中有一句"Move Fast and Monitor Closely".这个"Closely"有两层意义,其一是"即时"的,要从系统开发初期,就有意识地设计好配套的监测,并逐步改善:其二是"深入",监控不能仅仅停留在监测主机负载.网卡流量的表面层次,而要尽

零基础学习云计算及大数据DBA集群架构师【企业级运维技术及实践项目2015年1月27日周三】

Nginx 基于 ip 的虚拟主机配置 { #serverb (1)/etc/nginx/conf.d/* [[email protected] conf.d]# vim ip.conf server { listen 192.168.1.88:80; root 88.com; index index.html; } server { listen 192.168.1.87:80; root 87.com; index index.html; } [[email protected] ~]# i

运维技术规划

运维中关键技术点解剖:1 大量高并发网站的设计方案 :2 高可靠.高可伸缩性网络架构设计:3 网站安全问题,如何避免被黑?4 南北互联问题,动态CDN解决方案:5 海量数据存储架构 一.什么是大型网站运维? 首先明确一下,全文所讲的”运维“是指:大型网站运维,与其它运维的区别还是蛮大的:然后我们再对大型网站与小型网站进行范围定义,此定义主要从运维复杂性角度考虑,如网站规范.知名度.服务器 量级.pv量等考虑,其它因素不是重点:因此,我们先定义服务器规模大于1000台,pv每天至少上亿(至少国内排

运维生存时间呕血之作:网站运维黑锅如何甩

常见经历 讲几个工作中经常遇到的一些时间,或许你也遇到过,高高兴兴上班来,刚打开电脑,出现如下情况: 领导跑过来问昨天网站访问很慢,服务器又出问题了 客服跑来说福建地区XX市有用户说网站打开很慢,服务器又出问题了 老板说昨天他在家里打不开网站,服务器又出问题了 技术总监说昨天刚上CDN,你看看效果如何 销售部问能不能看看全国各地区访问咱们网站的速度如何,以及如何改进 还有更多关于网站运维的黑锅,欢迎大家列举... 为什么出了问题总认为是运维的原因? 说个题外话,在一家公司竟然遇到以前的同事,见面

要成为linux网站运维工程师必须要掌握的技能

我是一名linux运维工程师,确切的说是网站运维工程师,从事linux工作有2年多了,对这方面有一些体会,给新手一点借鉴: 首先说下运维种类:有办公网系统运维(就是网管),有IDC外网运维,外网运维里又分网站运维.游戏运维.IDC运维(装系统排障),监控运维(盯着监控).我强烈建议大家选择linux网站运维路线,这个路线绝对是最好的,会了网站运维了去做别的运维岗位绝对也是信手拈来的,网站运维需要的技术点更多,因此,我以我工作的网站运维岗位说说运维都需要啥. 1.选择linux系统选择linux系

心情笔记——从一次黑客攻击事件浅谈运维技术学习

昨天分享了一篇文章,是关于如何搭建Openvpn服务器实现免流上网,由于文章中的内容使用的是自己真实的服务器环境,文章分享出去以后得到了很多的浏览与搭建细节的咨询,但同时IP地址也遭到了泄露.随后就迎来了一轮又一轮的DDOS攻击,还好使用的并不是特大流量攻击,而且每次的攻击都是很短的时间,直到DDOS封堵后还继续有DDOS的攻击. 以前只接触过网络安全类问题,但并没有真正遇到过.这次的攻击事故给我提了个醒.如今的网络安全环境形式很复杂.身在学校的我们还没有真正接触到真实的生产环境,平时自己搭建的

RedHat / Centos &nbsp; Linux 系统运维与管理实践技巧荟萃,持续更新

RedHat / Centos   Linux  系统运维与管理实践技巧荟萃

IIS日志-网站运维的好帮手

原文:IIS日志-网站运维的好帮手 对于一个需要长期维护的网站来说,如何让网站长久稳定运行是件很有意义的事情. 有些在开发阶段没有暴露的问题很有可能就在运维阶段出现了,这也是很正常的. 还有些时候,我们希望不断地优化网站,让网站更快速的响应用户请求, 这些事情都发生在开发之后的运维阶段. 与开发阶段不同的,运维阶段不可能让你去调试程序,发现各类问题, 我们只能通过各种系统日志来分析网站的运行状况, 对于部署在IIS上的网站来说,IIS日志提供了最有价值的信息,我们可以通过它来分析网站的响应情况,