天天动画片 > 八卦谈 > smokeping 监控平台略解

smokeping 监控平台略解

八卦谈 佚名 2022-12-13 13:53:55

一、相关历史

smokeping 发布于2001年, 是Tobi Oetiker的又一作品,他也就是大名鼎鼎的时序式绘图数据库引擎rrdtool的作者。smokeping由Perl语言写成,底层依赖于rrdtool和fping。rrdtool 1.0版由作者发布于1999年,rrdtool的出现是为了取代自己先前创造的另一著名工具MRTG。fping初版由Roland Schemers 发布于1992年,在2011年以前没有官方版本。目前版本维护者为David Schweikert,自3.0版本之后,好事者Tobi Oetiker 为适应smokeping,对fping做了定制性修改。

二、组成部分

smokeping整个系统正常运行需要:web服务器软件、smokeping主服务、探针,rrdtool。

1.web服务器软件

smokeping拥有直观高效且漂亮的webUI,因此需要借助第三方web服务,默认使用的是apache服务,同时需要启用cgi模块。

2.smokeping主服务

smokeping主服务即smokeping工作进程,负责在后台(也可以前台)执行监测任务。

3.探针

smokeping实际使用的监测工具即探针。默认探针是fping,常用探针例如:

  • fping   默认探针,使用icmp协议,可并发检测目标RTT(Round-Trip Time)数值

  • echoping   echo服务检测,使用tcp/udp协议,默认端口号7

  • tcpping  tcp端口检测,使用tcp协议监测端口连通性和时延

更多关于探针的介绍可以参阅官方文档。

4.rrdtool

rrdtool(Round Robin Database Tool)即轮询调度数据库工具,使用C语言写成,是一种强大的绘图引擎,兼有时序数据库和绘图两种功能。rrdtool被许多监控平台所使用,如smokeping、cacti、open-falcon等。

三、简单部署

1.安装

安装smokeping,是最简单的一部分,甚至在ubuntu 18.04 上,只需要一条命令:


安装smokeping

 期间只会遇到两次交互式对话界面,Postfix 配置和libssl的配置:

我们将postfix仅作为smokeping依赖的角色而安装,因此只需要选择local only
系统邮件域名可以随意设定
我们希望在更新libssl等软件包时,可以不再询问,自动重启相关服务,因此选择Yes

apt会自动解决所有依赖,并且smokeping会自带apache的配置文件(/etc/apache2/conf-available/smokeping.conf),安装结束后,可以直接在浏览器里通过http://IP地址/smokeping/smokeping.cgi 访问,之所以url定位到smokeping.cgi,原因在于smokeping.cgi缺省配置下不属于默认index类型,可以在/etc/apache2/mods-available/dir.conf 文件内进行添加:

添加index类型

保存完毕之后,重启apace2 服务:

重启apache2

现在,在浏览器里通过 http://IP地址/smokeping/ 即可打开smokeping web界面。  为了保证smokeping正常工作,我们通常要将smokeping和apache2 开机自启,防火墙放行服务端口: 

smokeping web 主界面如下:

smokeping web界面

smokeping产生的详细图形如下:

smokeping 监控细节图

绿色线绘出的是中间值(median)的位置,一个周期内探测返回的其它值都在中间值附近被以灰度的形式显示,灰度的范围越小说明此周期内抖动较小,灰度的颜色也有深浅,颜色越深,说明RTT值在此范围相对集中,灰色区域如烟雾般笼罩在中间值附近,很契合smokeping的名称。  

其他颜色分别以图例标注的意义表示不同的丢包率。


2.配置文件介绍

smokeping 的配置文件默认存放在/etc/smokeping/ 目录下,配置文件采用David Schweikert(没错,就是fping的开发者)开发的Config::Grammar解析器,基本语法为:

  •  '#'  表示行注释  

  •  '\'  在行尾表示行连接符,但是会在两个连接的行之间插入一个空格,在非行尾表示转义字符  

  •  '@include'  用于包含另一个配置文件,如 @include /etc/smokeping/config.d/pathnames  

  •  '@define'  用于定义文本宏,如 @define M_HOST 10.10.10.10  

  •  在配置表的区域中如果有空格可以用 " 或 ' 引起来,也可以使用转义字符 \ ,在引号内的引号必须使用转义字符   

  •  +、++、+++ 分别表示一、二、三 级子配置项  

主配置文件为 /etc/smokeping/config,我们观察打开config文件会发现其实smokeping的配置文件远比我们想象的要结构化:

config文件内容

该配置文件中用@include语句引用了其他具有特殊分工的配置文件。

(1). General

/etc/smokeping/config.d/General 包含基础信息的配置。

General文件内容

可以更改所有者(owner)、联系方式(contact)、邮件服务器(mailhost)、主站cgi地址(cgiurl,此选项对主从架构很重要)、syslog消息类型(syslogfacility)。同时,通过@include字段引用了同目录下的pathnames。 

(2). pathnames

/etc/smokeping/config.d/pathnames 定义了系统变量的路径。

pathnames文件内容

默认可以不去动,除非自己更改了相关目录。

(3). Alerts

/etc/smokeping/config.d/Alerts 定义了报警规则。

Alerts文件内容

缺省条件下,采用sendmail邮件报警的方式,to 即接收方,from 即发送方。someloss是预定义的一个默认检测器,检测器不仅仅是一个阈值,它可以定义一组RTT从旧到新的变化过程,pattern 的值以一个运算符开始,按照从旧到新的状态变化,示例中,>0% 表示有丢包,\*12\* 表示在该组中最大忽略匹配12个数值,因此这段定义的意义是:匹配一组数据是否满足丢包次数大于等于3次。

示例1

它还支持更多的其他的匹配,比如:

示例2

以上表示匹配一组数据,RTT从低于10ms突然增高到超过100ms。

示例3

以上表示匹配一组数据,从不丢包到丢包超过20%。

示例4

以上表示匹配一组数据,目标突然不可达。

更多检测器请参阅官方文档。

(4). Database

/etc/smokeping/config.d/Database 描述rrd数据库的属性。

Database文件内容

需要注意的是,更改数据库配置文件无法对现有的rrd起作用,更改数据库配置文件后,需要清理现有的rrd缓存以使程序正常工作,默认rrd目录为:/var/lib/smokeping/。step 表示基本操作间隔,即smokeping探测目标主机的间隔,默认300秒,pings表示在一次探测动作中,发出探测包的数量,step 和 pings 的值均可以被后续的探针设置所覆盖。此配置也包含数据库归档合并的规则,共4列:合并方法、允许未知数值比例、步进,存储总行数。每一行表示一条RRA(循环归档)存储规则,预定义了多条AVERAGE、MIN,MAX规则。以AVERAGE为例,第一条AVERAGE,步进1,行数1008,按照缺省step=300的条件下,表示5分钟一条,最大1008条,共存储3.5天数据,这是以此精度绘图的最大时间范围,如果超出范围,将会继续匹配合适的RRA,比如第二条AVERAGE,存储的时间范围是180天,但是精度是1小时。

(5). Presentation

/etc/smokeping/config.d/Presentation 用于定义smokeping的显示规则。

Presentation文件内容

template 即webUI使用的网页模板,默认指向/etc/smokeping/basepage.html,模板中包含各种表单关键字。charset 即文档编码,默认使用UTF-8。

Presentation文件内容

smokeping支持报表功能,允许以特定的标准对图形目标排序显示。menu 表示菜单名称,title表示显示标题。在子配置项中,可以看到sorter选项,通过此选项可以制定排序器,针对RTT的统计,内置了:标准差 StdDev(arg1=>val1,arg2=>val2),最大 Max(arg1=>val1,arg2=>val2),丢包率 Loss(arg1=>val1,arg2=>val2)等排序方法。format选项表示图例输出格式,此格式参考fprint字符串格式。 

Presentation文件内容

overview 部分,定义了概述图的外观,宽 width,高 height, 时间跨度 range,range的格式可以是s(seconds), m(minutes), h(hours), d(days), w(weeks), y(years)。

Presentation文件内容

detail部分定义了详细图的外观,宽 width,高 height,unison_tolerance 规定了统一缩放的因子,此值必须参照每轮探测RTT结果的max中间值即median max,实际是为了保证图形缩放时的可读性,默认值为2,表示任何最大值小于中间值“max”一半或两倍以上的图都将从统一缩放中删除。

detail 也包含可定义图形时间尺度的部分,包含两列:图形时间尺度的描述和时间跨度值,此值的格式与overview部分的range格式一致。

(6). Probes 

/etc/smokeping/config.d/Probes 用于配置smokeping的探针模块,smokeping支持很多探针模块,最常用的就是内联的fping。

Probes文件内容

探针的定义采用层级结构,需要注意一级探针的名称是內建而不可更改的,可以在一级探针内部定义二级探针,比如:

Probes文件内容

binary 为探针的路径,sourceaddress为探针使用的源IP地址,这个对于多出口的环境有意义,packetsize 为探测包的尺寸,默认为56字节,step 为步进值,如果在General域中,concurrentprobes值被设为yes(默认就是这样),那么,此step的值会覆盖从Database域继承下来的step值。子探针会继承上级探针的设置参数,同时也可以再次配置以覆盖继承下来的参数,注意:一旦二级探针建立,其上层的一级探针FPing就不可以单独作为一个探针对象被调用了。

(7). Slaves

/etc/smokeping/config.d/Slaves 用于定义使用到的smokeping从节点。

Slaves文件内容

在使用主从结构时,需要一个验证文件,即secrets指定的值,默认为 /etc/smokeping/smokeping_secrets,对于每一个从节点,还需要指定显示名称 display_name,显示颜色 color(此颜色指的是概述图上的线色,非细节图),颜色代码采用RRGGBB形式。 

(8). Targets

/etc/smokeping/config.d/Targets 用于定义监控目标各项参数,主机依然采用层级结构。

Targets文件内容

Targets是搭建snokeping主要配置的部分。probe定义了使用的默认探针,menu定义了条目的菜单名称,title定义了条目的标题名称,host 定义了目标主机名,alerts定义了使用的报警器,slaves定义了需要使用的从服务器列表。同样,子条目的参数会继承父条目,也可以进行覆盖。

(9). basepage 

/etc/smokeping/basepage.html 是webUI的模板页面。

basepage文件内容

在之前的Presentation 配置中提到过,smokeping的web显示界面有一个基础模板页面,此文件纯粹是一个html文档,修改此文件可以对页面默认的颜色以及其他样式做定制,html及css不在本文的讨论范围。

(10). smokeping_secrets

/etc/smokeping/smokeping_secrets 用于设定主从验证。

smokeping_secrets文件内容

我们先前在Slave配置文件中提及过,smokeping主从架构需要配置验证,所以主服务器和从服务器均要配置此文件,此文件的标准权限为600,此文件的所有者必须为smokeping的执行者(在Ubuntu中默认为用户 smokeping)。需要注意的是,此文件的内容在主从服务器上是不同的,以上示例为主服务器上的内容,拥有两个域:从机名称,密码。并以":" 为域分隔符。如果是从服务器,此文件内容只需要写一行密码即可,如slave1的/etc/smokeping/smokeping_secrets 内容为:  

smokeping_secrets文件内容

四、 主从架构的搭建

在快速安装完成以后,如果我们不需要从服务器,那么仅仅需要将待监控目标服务器写到Targets中即可,添加完毕需要重启smokeping服务生效。

然而在很多情景中,我们更希望能够从不同的地区同时监测到目标服务器,而且希望能够在一个界面显示以方便查阅,这就需要使用smokeping的主从功能。smokeping的从服务器没有webUI,配置文件也是从主服务器上获取的,它仅仅充当一个分布式探针的角色,负责将自己的探测结果传给主服务器。本文假设主服务器IP:10.10.10.199,从服务器IP:172.18.33.199,监控目标IP为:10.10.10.254。

1.主服务器配置 

(1). 角色配置

在ubuntu中,smokeping服务已经高度定制化,我们可以通过一个配置文件来设置smokeping服务的角色 /etc/default/smokeping :

/etc/default/smokeping文件内容

全新安装完的缺省状态即为主服务模式,因此只生效了一条 MODE=master,其他参数均不需要设置。

(2). 认证配置

将认证文件的权限更改为600:

更改smokeping_secrets文件权限

将slave名称和密码写入文件:

写入slave名和密码

(3). Slaves 区域配置

在Slaves 区域配置从服务器参数:

Slaves文件内容


在Targets 区域配置slave 参数:

Targets文件内容

至此主服务器已配置完毕,重启主服务: 

重启smokeping服务

2. 从服务器配置

(1). 角色配置

作为从服务器,需要一些额外的参数,在 /etc/default/smokeping 中需要设置:

/etc/default/smokeping文件内容

在slave模式下,除了要将MODE设置为slave之外,还需要指定:主服务器URL(此URL必须精确到主页的cgi文件),认证文件的路径,从节点名称(此名称必须跟主服务器上的配置一致)。  

这些配置的意义,实际上等价于执行: 

(2). 认证配置

将认证文件的权限更改为600:

更改smokeping_secrets文件权限

只需将slave的密码写入文件(密码必须与主服务器配置一致):

写入密码

至此一个从服务器配置完毕,重启服务:

重启smokeping服务

无论在主或从服务器上重启smokeping服务时都要注意有无报错,并及时检查服务状态。例如,一个正常运行的smokeping master服务的状态:

smokeping服务状态

它包含了smokeping启动过程中的 配置文件语法验证,启动主服务,启动syslog日志记录,守护进程化主服务(使其后台运行),启动探针等步骤。一个smokeping slave的启动过程也是基本一致的。  

主从均配置完成后,即可观察是否能够正常绘图,排除故障以及继续添加监控项。 

五、 报警配置

在介绍配置文件的时候,我们已经讨论了报警的检测器定义方式,下面我们来介绍一种更灵活的邮件报警方式,即通过外部程序sendemail来实现smokeping 邮件报警。ubuntu 安装sendemail的方法非常简单:

安装sendemail

在Alerts的配置文件中,有一个神奇的参数 "to" ,如果我们传给他一个管道符 "|" ,那么就意味着,我们可以使用自定义的脚本来处理smokeping输出的报警信息,例如:  

Alerts文件内容

这样会将smokeping的报警输出重定向到脚本: /usr/local/scripts/send_alert.sh  

smokeping的报警会向标准输出抛出 5 个位置变量:  报警名称(name-of-alert),目标设备(target),丢包形态(loss-pattern), RTT形态(rtt-pattern), 故障主机(hostname)。这些都将作为我们自定义脚本的标准输入。  

于是我们有了如下脚本 /usr/local/scripts/send_alert.sh:

send_alert.sh文件内容

sendemail 的使用方法,参数介绍,不在本文的讨论范围。类似的,只要通过管道的方式,可以任意使用别的方案进行报警。

六、 非常规操作

1.多出口配置

在生产环境中有可能会遇到主机有多出口的情形,比如一台smokeping三线服务器可能同时拥有电信、联通和移动三家运营商的IP地址,此时我们可以根据需要从不同的源IP监控出去。假定电信IP:10.10.10.39,联通IP:192.169.0.39,移动IP:172.18.33.39。 

(1). 探针配置

为了指定源地址,我们需要在探针配置文件/etc/smokeping/config.d/Probes 中增加参数:

Probes文件内容

以二级条目的方式增加探针可以很方便的将内联探针模块扩展成不同属性的子探针,这里我们只需要改变源地址属性。注意:一旦二级探针建立,其上层的一级探针FPing就不可以单独作为一个探针对象被调用了。

(2). Targets 配置

在Targets区域需要对目标指定特殊探针:

Targets文件内容

注意,由于FPing已被定义了二级探针,所以Targets区域的默认探针设置,probe=FPing不再有效,需要设置为二级探针名称。

更改完配置需要重启服务:  

重启smokeping服务

2. tcpping 探针

除了内联的fping探针以外,我们另外介绍一个探针 TCPPing,由名称就可看出这个探针用于tcp探测。TCPPing不是内联探针,需要安装才能使用。实际上,官方的TCPPing仅仅是一个简短的shell脚本而已,实际工作的是tcptraceroute。 

(1). 安装tcptraceroute

首先在设备上安装tcptraceroute: 

安装tcptraceroute

(2). 获取tcpping

TCPPing可以在其github上的项目主页获取,我们很容易发现,这个脚本只是包装了一下tcptraceroute:

我们需要将得到的脚本放到一个合适路径里,比如 /usr/bin/tcpping 。

(3). 探针配置

在Probe 区域,我们需要增加探针:

Probes文件内容

参数binary 指定了tcpping脚本的路径,forks 指定了最大并发数量,step 指定了步进值,此值优先于从Database区域的继承值,timeout 指定了单个探测的超时时间,pings 指定了一周期探测的次数,port 指定了 探测的目标端口。

(4). Targets 配置

在Targets区域需要对目标指定特殊探针:

Targets文件内容

更改完配置需要重启服务: 

重启smokeping服务

3. 在docker 上部署

另一种情形可能是我们不想去改变现有系统的任何大环境(包括apache2等其他依赖),也不想使用虚拟机浪费大量宿主机资源,那么容器是最好的选择,本文选择以最简单的方式从零构建smokeping容器,而对docker技术不作详细介绍。

(1). 安装docker

在ubuntu中docker软件的包名为 docker.io

安装docker

(2). 获取基础镜像

在docker的所有镜像中最受欢迎的是alpine linux ,和其他发行版动辄就超过200M体积相比,它体积超小(不到5M)而功能齐全。用alpine linux作为基础镜像,可以大大缩减容器成品的体积,获取alpine 镜像采取在线方式,默认获取latest标签:

获取alpine镜像

(3). 手工构建smokeping

我们先用alpine产生一个容器实例,并交互式进入容器的shell,来开始smokeping的安装。

产生容器

此时,一个被命名为smokeping的alpine容器已经运行,并进入到了shell界面,首先,更新下软件源数据:

更新alpine软件源

alpine 的软件仓库也是自带了smokeping和apache2,所以直接安装即可,此外alpine的镜像是没有任何字体的,所以可以随便安装一个,主要是为了保证rrdtool绘图正常:  

安装smokeping环境

为了让apache2和smokeping协同工作,需要增加apache关于smokeping的配置,首先在 /etc/apache2/conf.d/ 下增加配置文件,比如增加文件 smokeping.conf 写入以下内容 :

smokeping.conf文件内容

其次更改apache主配置文件/etc/apache2/httpd.conf,使其以smokeping用户和组运行以获取smokeping目录权限:

httpd.conf文件内容

然后启用apache的cgi模块: 

httpd.conf文件内容

smokeping的web文件根目录默认存放在 /usr/share/webapp/smokeping/下,需要在apache web根目录建立软连接: 

建立软链接

smokeping的可执行文件在/usr/bin/目录下,apache的可执行文件在 /usr/sbin/目录下,直接执行则smokeping或apache会在配置文件默认路径下寻找配置文件(但是此路径对于smokeping是不对的),并以守护进程的方式在后台运行,在docker机制中,当退出当前shell时,由于所有前台交互式进程全部结束了,即使依然存在守护进程也会被杀死,所以必须存在前台进程。在docker中,通常采用一个用于初始化的脚本来在容器启动时同时启动服务,因为docker镜像没有完整发行版所具有的服务管理功能。比如,我们可以在/bin/目录下建立一个初始化脚本,简单的写入smokeping和apache的启动命令,我们将smokeping变为前台进程:  

建立启动脚本

容器配置完毕,我们可以将容器生成镜像做阶段性保存: 

提交新镜像

我们现在可以基于刚才生成的新镜像 smokeping:a1 产生新的容器,这次我们需要绑定主机端口,以及指定初始化脚本:

启动新容器

容器启动后可查看运行状态:

容器运行状态

现在使用web浏览器即可通过 http://IP地址/  进入smokeping web界面。如果是在docker中搭建从节点,则没有必要安装apache2。

关于docker,可以查阅其他资料以理解本文中docker的用法,以及对构建完成的容器进行优化、更新、备份和转移。


本文标题:smokeping 监控平台略解 - 八卦谈
本文地址:www.ttdhp.com/article/13317.html

天天动画片声明:登载此文出于传递更多信息之目的,并不意味着赞同其观点或证实其描述。
扫码关注我们