此类监控紧张的关注点有两个:
资源的占用情形,例如负载高低、内存大小、磁盘空间等做事的状态监控,例如Nginx状态、Mysql主从状态等同时也会存在以下两个紧张问题:
短缺业务状态的监控,不能很直不雅观的知道业务当前的状态,可能做事器、做事都正常但业务确挂了监控做事器和业务做事器处于同一机房环境内,监控网络故障、入口网络拥堵等情形都可能会导致收不到监控系统的报警,且只能监控机房内的情形,用户到机房入口的情形无法监控那么如何办理这两个问题呢?
业务状态监控,便是要最直不雅观的的反响业务当前是正常还是故障,该怎么监控呢?以web项目为例,首先便是要确定详细URL的返回状态,是200正常还是404未找到等,其次要考虑页面里边的内容是不是正常,我们知道终极反馈给用户内容的是由一些静态资源和后端接口数据共同组成的HTML页面,想知道内容究竟对不对这个比较困难,退而求其次我们默认所有静态资源和后端接口都返回正常状态则表示正常,这个监控就比较随意马虎实现了。
静态资源可以直接由nginx做事器处理,nginx的并发能力很强,一样平常不会成为性能的瓶颈,针对静态资源的监控我们可以结合ELK一起来看。后端接口的处理性能就要差很多了,对业务状态的监控也紧张是对后端接口状态的监控,那我们是否须要监控所有的接口呢?这个履行起来比较麻烦,我以为没太大必要,只须要监控几个有代表性的接口就可以了,例如我们所有的项目中都让开发单独加了一个health check的接口,这个接口的浸染是连接项目所有用到的做事进行操作,如接口连接mysql进行数据查询以确定mysql能给正常供应做事,连接redis进行get、set操作以确定redis做事正常,对付这个接口的监控就能覆盖到全体链路的做事情形。
对付监控做事器和业务做事器在同一个机房内所导致的问题(上边讲到的第二点问题),我们可以通过在不同的网络环境内支配独立的状态监控来办理,例如办公区支配Nagios,不同网络监控也更靠近用户的网络情形,这套状态监控就差异于机房支配的资源占用监控了,紧张用来监控业务的状态,也便是我们上边提到的URL和接口状态。
我们能不能直接将监控支配在机房外的环境来节省一套监控呢?例如公司或者其他的机房支配监控。这样不是个好方案,跨网络的监控性能太差了,首先网络之间的延迟都比同机房内要大的多,其次大量监控项频繁的数据传输对带宽也是不小的压力
Nagios监控我们业务状态监控采取了Nagios,Nagios支配大略配置灵巧,这种场景下非常适宜。
系统环境:Debian8nginx + nagios架构支配Nagios
1.安装根本环境
# 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 fcgiwrap
2.下载并解压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接口或主机、做事状态
4.创建nagios web访问的账号密码
# vi /usr/local/bin/htpasswd.pl#!/usr/bin/perl use strict; if ( @ARGV != 2 ){ print \"大众usage: /usr/local/bin/htpasswd.pl <username> <password>\n\"大众;}else { print $ARGV[0].\"大众:\公众.crypt($ARGV[1],$ARGV[1]).\"大众\n\"大众;}# chmod +x /usr/local/bin/htpasswd.pl#利用perl脚本天生账号密码到htpasswd.users文件中# /usr/local/bin/htpasswd.pl nagiosadmin nagios@ops-coffee > /usr/local/nagios/htpasswd.usersnagios默认开启了账号认证,认证干系的配置在这个文件里/usr/local/nagios/etc/cgi.cfg如果安装了httpd做事,可以直接打仗htpasswd命令天生密码,这里我们没有httpd做事,以是写个perl脚本来天生密码
5.nginx添加server配置,让浏览器可以访问
server { listen 80; server_name ngs.domain.com; access_log /var/log/nginx/nagios.access.log; error_log /var/log/nginx/nagios.error.log; auth_basic \"大众Private\公众; auth_basic_user_file /usr/local/nagios/htpasswd.users; root /usr/local/nagios/share; index index.php index.html; location / { try_files $uri $uri/ index.php /nagios; } location /nagios { alias /usr/local/nagios/share; } location ~ \.php$ { include /etc/nginx/fastcgi_params; fastcgi_pass unix:/var/run/php5-fpm.sock; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; } location ~ ^/nagios/(.\.php)$ { alias /usr/local/nagios/share/$1; include /etc/nginx/fastcgi_params; fastcgi_pass unix:/var/run/php5-fpm.sock; } location ~ \.cgi$ { root /usr/local/nagios/sbin/; rewrite ^/nagios/cgi-bin/(.)\.cgi /$1.cgi break; fastcgi_param AUTH_USER $remote_user; fastcgi_param REMOTE_USER $remote_user; include /etc/nginx/fastcgi_params; fastcgi_pass unix:/var/run/fcgiwrap.socket; }}
6.检讨配置文件并启动
#检讨配置文件是否有语法缺点# /usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg #启动nagios做事# /usr/local/nagios/bin/nagios -d /usr/local/nagios/etc/nagios.cfg#启动fcgiwrap和php5-fpm做事# service fcgiwrap restart# service php5-fpm restart
7.浏览器访问做事器IP或域名就可以看到nagios的页面了,默认有本机的监控数据,不须要的话可以在配置文件localhost.cfg中删除
Nagios配置
Nagios的主配置文件路径为/usr/local/nagios/etc/nagios.cfg,里边默认已经配置了一些配置文件的路径,cfg_file=后边配置的都是配置文件,nagios程序会来这里读取配置,我们可以新添加一个专门用来监控HTTP API的配置文件
cfg_file=/usr/local/nagios/etc/objects/check_api.cfg
check_api.cfg里边的内容如下:
define service{ use generic-service host_name localhost service_description web_project_01 check_command check_http!ops-coffee.cn -S}define service{ use generic-service host_name localhost service_description web_project_02 check_command check_http!ops-coffee.cn -S -u / -e 200}define service{ use generic-service host_name localhost service_description web_project_03 check_command check_http!ops-coffee.cn -S -u /action/health -k \公众sign:e5dhn\公众}define service:定义一个做事,每一个页面或api属于一个做事use:定义做事利用的模板,模板配置文件在/usr/local/nagios/etc/objects/templates.cfghost_name:定义做事所属的主机,我们这里差异主机意义不大,统一都属于localhost好了service_description:定义做事描述,这个值会终极展示在web页面上的service字段,定义应大略故意义check_command:定义做事检讨利用的命令,命令的配置文件在/usr/local/nagios/etc/objects/commands.cfgcheck_http检测https接口时可以利用-S参数,如果报错SSL is not available,那么你须要先安装libssl-dev包,然后重新编译(./configure --with-openssl=/usr/bin/openssl)支配nagios-plugin插件添加对ssl的支持
check_command我们配置了check_http,须要修正commands.cfg文件中默认的check_http配置如下:
define command { command_name check_http command_line $USER1$/check_http -H $ARG1$}define command:定义一个commandcommand_name:定义command的名字,在主机或做事的配置文件中可以引用command_line:定义命令的路径和实行办法,这个check_http便是我们通过安装nagios-plugin天生的,位于/usr/local/nagios/libexec/下,check_http的详细用法可以通过check_http -h查看,支持比较广泛
use我们配置了generic-service,可以通过配置做事模板定义很多默认的配置如下:
define service { name generic-service ; The 'name' of this service template active_checks_enabled 1 ; Active service checks are enabled passive_checks_enabled 1 ; Passive service checks are enabled/accepted parallelize_check 1 ; Active service checks should be parallelized (disabling this can lead to major performance problems) obsess_over_service 1 ; We should obsess over this service (if necessary) check_freshness 0 ; Default is to NOT check service 'freshness' notifications_enabled 1 ; Service notifications are enabled event_handler_enabled 1 ; Service event handler is enabled flap_detection_enabled 1 ; Flap detection is enabled process_perf_data 1 ; Process performance data retain_status_information 1 ; Retain status information across program restarts retain_nonstatus_information 1 ; Retain non-status information across program restarts is_volatile 0 ; The service is not volatile check_period 24x7 ; The service can be checked at any time of the day max_check_attempts 2 ; Re-check the service up to 3 times in order to determine its final (hard) state check_interval 1 ; Check the service every 10 minutes under normal conditions retry_interval 1 ; Re-check the service every two minutes until a hard state can be determined contact_groups admins ; Notifications get sent out to everyone in the 'admins' group notification_options w,u,c,r ; Send notifications about warning, unknown, critical, and recovery events notification_interval 60 ; Re-notify about service problems every hour notification_period 24x7 ; Notifications can be sent out at any time register 0 ; DON'T REGISTER THIS DEFINITION - ITS NOT A REAL SERVICE, JUST A TEMPLATE!}
配置太多就不一一阐明了,合营后边的英文注释该当看得懂,说几个主要的
max_check_attempts:重试几次来终极确定做事的状态,例如我们一个做事挂了,须要重试3次才会确定这个做事确实是挂了,然后发邮件或短信关照我们check_interval:检讨频率配置,在做事正常的情形下多永劫光轮训检讨一次,这里为了更及时的反馈结果我们配置一分钟一次retry_interval:当做事状态发生变更的时候多永劫光轮序检讨一次,我们也给配置一分钟一次contact_groups:定义联系人组,当发生故障须要报警时,发送报警给哪个组,这个组的配置文件在/usr/local/nagios/etc/objects/contacts.cfgcontact_groups我们配置了admins,接下来看下contacts.cfg的配置
define contact{ contact_name sa ; Short name of user use generic-contact ; Inherit default values from generic-contact template (defined above) alias Nagios Admin ; Full name of user service_notification_period 24x7 host_notification_period 24x7 service_notification_options w,u,c,r host_notification_options d,u,r host_notification_commands notify-host-by-email,notify-host-by-sms service_notification_commands notify-service-by-email,notify-service-by-sms email ops-coffee@domain.com pager 15821212121,15822222222}define contactgroup{ contactgroup_name admins alias Nagios Administrators members sa}contactgroup便是我们定义的联系人组adminsadmins组管理了成员sa联系人sa联系人定义了主机和做事的命令,例如这里我们定义的notify-host-by-email,notify-host-by-sms发邮件和发短信的命令,这个命令的定义位置跟我们check_http的定义都在文件/usr/local/nagios/etc/objects/commands.cfg文件内
全部配置完成后重启nagios做事,会看到监控已经正常
Nagstamon插件
先容一款合营nagios用起来非常棒的插件Nagstamon,Nagstamon是一款nagios的桌面小工具(实际上现在不仅仅能合营nagios利用,还能合营zabbix等利用),启动后常驻系统托盘,当nagios监控状态发生变革时会及时的跳出来并发生发火声音警告,能够更加及时的获取业务状态。
配置如下:
Update interval能够配置多永劫光取一次nagios的状态,我们这里调度为1s当涌现报警时桌面直接飙红,给你心跳加速的觉得
写在末了业务状态监控作为Zabbix之类过程监控的补充,并不能替代过程监控系统,在我们过程监控不是很完善的情形下很有用,目前我们有相称一部分的报警都首先创造于这套业务状态监控选择Nagios紧张是她比较纯粹,专注状态监控(有插件实现过程记录),且对Nagios比较熟习了。Nagios看似配置繁芜,几个配置文件环环相扣,实际上理清楚配置文件之间的关系就会创造配置合理且大略支配的状态监控节点越多覆盖地区越多用户状态获取就越准确,但由于网络环境繁芜,我们也不可能在每个省市、节点支配监控系统来监控项目的状态,如有必要可以考虑一些商业监控方案,能够做到环球节点监控,但相应的本钱可能就会增加,要综合权衡