想必各个公司都有部署zabbix之类的监控系统来监控服务器的资源使用情况、各服务的运行状态,是否这种监控就足够了呢?有没有遇到监控系统一切正常确发现项目无法正常对外提供服务的情况呢?本篇文章聊聊我们如何简单的使用Nagios监控业务的状态
文中的业务指用户访问的网站页面,对外提供的API接口,移动端的APP等产品
监控的思考通常我们会在项目所在的机房部署一套监控系统来监控我们服务器和MySQL之类的公共服务,制定报警策略,在出现异常情况的时候邮件或短信提醒我们及时处理。
此类监控主要的关注点有两个:
资源的占用情况,例如负载高低、内存大小、磁盘空间等
服务的状态监控,例如Nginx状态、Mysql主从状态等
同时也会存在以下两个主要问题:
缺少业务状态的监控,不能很直观的知道业务当前的状态,可能服务器、服务都正常但业务确挂了
监控服务器和业务服务器处于同一机房环境内,监控网络故障、入口网络拥堵等情况都可能会导致收不到监控系统的报警,且只能监控机房内的情况,用户到机房入口的情况无法监控
那么如何解决这两个问题呢?
业务状态监控,就是要最直观的的反映业务当前是正常还是故障,该怎么监控呢?以web项目为例,首先就是要确定具体URL的返回状态,是200正常还是404未找到等,其次要考虑页面里边的内容是不是正常,我们知道最终反馈给用户内容的是由一些静态资源和后端接口数据共同组成的HTML页面,想知道内容究竟对不对这个比较困难,退而求其次我们默认所有静态资源和后端接口都返回正常状态则表示正常,这个监控就比较容易实现了。
静态资源可以直接由nginx服务器处理,nginx的并发能力很强,一般不会成为性能的瓶颈,针对静态资源的监控我们可以结合ELK一起来看。后端接口的处理性能就要差很多了,对业务状态的监控也主要是对后端接口状态的监控,那我们是否需要监控所有的接口呢?这个实施起来比较麻烦,我觉得没太大必要,只需要监控几个有代表性的接口就可以了,例如我们所有的项目中都让开发单独加了一个health check的接口,这个接口的作用是连接项目所有用到的服务进行操作,如接口连接mysql进行数据查询以确定mysql能给正常提供服务,连接redis进行get、set操作以确定redis服务正常,对于这个接口的监控就能覆盖到整个链路的服务情况。
对于监控服务器和业务服务器在同一个机房内所导致的问题(上边讲到的第二点问题),我们可以通过在不同的网络环境内部署独立的状态监控来解决,例如办公区部署Nagios,不同网络监控也更接近用户的网络情况,这套状态监控就区别于机房部署的资源占用监控了,主要用来监控业务的状态,也就是我们上边提到的URL和接口状态。
我们能不能直接将监控部署在机房外的环境来节省一套监控呢?例如公司或者其他的机房部署监控。这样不是个好方案,跨网络的监控性能太差了,首先网络之间的延迟都比同机房内要大的多,其次大量监控项频繁的数据传输对带宽也是不小的压力
Nagios监控我们业务状态监控采用了Nagios,Nagios部署简单配置灵活,这种场景下非常适合。
系统环境:Debian8
nginx + nagios架构
部署Nagios1.安装基础环境
# apt-get update # apt-get install -y build-essential libgd2-xpm-dev autoconf gcc libc6 make wget # apt-get install -y nginx php5-fpm spawn-fcgi fcgiwrap2.下载并解压nagios
# wget https://assets.nagios.com/downloads/nagioscore/releases/nagios-4.0.8.tar.gz # tar -zxvf nagios-4.0.8.tar.gz # cd nagios-4.0.8 # ./configure && make all # make install-groups-users # usermod -a -G nagios www-data # make install # make install-init # make install-config # make install-commandmode # cd ..nagios安装完成后就可以启动了,但是web页面是无法访问的,查看日志会报错(No output on stdout) stderr: execvp(/usr/local/nagios/libexec/check_ping, ...) failed. errno is 2: No such file or directory,这是因为我们只安装了nagios的core,没有安装nagios的插件,需要安装插件来支持core工作
3.安装nagios-plugins
# wget https://nagios-plugins.org/download/nagios-plugins-2.2.1.tar.gz # tar -zxvf nagios-plugins-2.2.1.tar.gz # cd nagios-plugins-2.2.1 # ./configure # make # make install # cd ..nagios的插件主要是添加了check_ping、checkhttp之类的辅助检查的脚本,默认位于/usr/local/nagios/libexec/下,可以借助这些插件来监控我们的HTTP接口或主机、服务状态